非Web屋の俺がOpen Flash Chartを使ってみた

いろいろと詰まったけど慣れてる人なら簡単に導入できると思われ。

Open Flash Chartとは

公式:http://teethgrinder.co.uk/open-flash-chart-2/
参考:http://fujitaiju.com/blog/php/open-flash-chartver2-x%E3%81%A8php%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B0%E3%83%A9%E3%83%95%E3%82%92%E6%9B%B8%E3%81%8F%EF%BC%88%E5%B0%8E%E5%85%A5%E7%B7%A8%EF%BC%89/

Open Clash Chartとは、ウェブ上にFlashでグラフを描画するためのオープンソフトです。PHP, Ruby, Perl, Js< Pythonなどなどで使えるようです。DotNetもあるみたい。
仕事でwebUIをつくらんといけんくなった(デモ用)のでちょいちょいと使ってみた。
俺はWeb屋さんじゃないのでアパッチ起動するだけで一苦労です。
基本的にコンパイラのある言語しか使ったことないので、デバッグの仕方がわからNEEEE!!!

環境としてはRHEL 6.0 Enterprise 64bit, Apache2.2.18, PHP5.2.17を用意しました。エディタはしょうがない(?)のでEclipseプラグインを導入。Windows環境だったらxamppを導入すればオールインワンのはず。CentOSだと最新版がダウンロードされないかもしれないのでyumの設定を書き換えましょう。ここでは割愛。

Apache+PHPを最新版にしよう

古いのが入っていたので最新版へ。まぁいろいろなところにいろいろなことが書いてあるので今さら俺が書いてもしょうがないかもしれんが、一応。

Apacheの最新版をダウンロードして展開、インストー

さくっとな。
ひとつ気をつけないといけないのは、たぶんRedHatに最初から入っているApacheはconfigureのオプションでlibファイルを生成するオプションが有効になっていないっぽい。なので、単に./configureとするとその後でPHPのlibphp5.soができないらしい。これで一日死んだ。
参考:http://oss.poyo.jp/pipermail/php-study/2006-October/000309.html

$ tar zxvf httpd-x.x.x.tar.gz
$ cd httpd-x.x.x
$ ./configure --enable-so {ほかオプション}
$ make
$ make install

なお、Apache2.0は/usr/local/apache2以下にファイルが展開されます(特に指定しなかった場合)。ほんでもって実行ファイルは/usr/local/apache2/bin/httpdなんだけど、それを実行するスクリプトは/usr/local/apache2/bin/apachectlらしい。
展開したフォルダ/build/httpd.initを/etc/rc.d/init.d/httpdに移動して設定を書き換えるてサービス化すると、apachectlと/etc/rc.d/init.d/httpdスクリプトが両方叩かれて二重起動→80番ポート空いてないんですけど?って怒られる。
詳しい設定方法は詳しく書いているところがあると思うのでそちらを参照してください。
これがわからなくて一日死んだ。

PHPの最新版をダウンロードして展開、インストー

rpmがありゃ楽なんだけどなぁ。ま、さくっとな。libphp5.soファイルを作成するためにapacheのapxsが必要なようだ。
参考:http://www.oklab.org/language_c/php5_0_2_install_bug.htm
特定環境って書いてるけど、多分RedHatapacheのオプションの設定のせいだと思われ。

$ tar zxvf php-x.x.x.tar.gz
$ cd php-x.x.x
$ ./configure --with-apxs2=/usr/local/apache2/bin/apxs {その他オプション}
$ make
$ make install
$ su root find / -name libphp*

これでlibphp5.soがあればOK
libファイルを適当(適切という意味)なところへコピーして、あとはapacheを起動する。

cp /usr/local/apache2/modules/libphp5.so /usr/lib64/httpd/modules/libphp5.so
service httpd start

phpinfoを実行してhttpdphpのバージョンを調べよう。php知らない人のために書いておくと

<?php 
	phpinfo(INFO_MODULES);
?>

というファイルを作ってデフォルトだと/var/www/html/の下に置く。なおブラウザで閲覧する場合は
http://localhost/ファイル名
としてみよう(←それすら知らないのだった
http://localhost/ = /var/www/htmlです。これはhttpd.confのDocumentRootで変更可。
Forbiddenが出てしまう場合は
参考:http://www.cyberciti.biz/faq/apache-server-status/
とりあえずDeny from allをコメントアウトしとけばよいのかしら。

ようやくOpen flash chartへ

導入はとても簡単。/var/www/html以下にファイルをダウンロードしてきて展開すれば使えます。
なおOpen flash chartはv2.xになっているにもかかわらずググるとv1.xの方が上位に表示されるので注意。
公式(こっちね):http://teethgrinder.co.uk/open-flash-chart-2/
v1.x:http://teethgrinder.co.uk/open-flash-chart/
メソッド名やプロパティなどが変わっているので互換はない模様。

基本的にはチュートリアルのとおりやっていけばOKです。open-flash-chart.swfのパスの設定を忘れそうなら、同じフォルダに配置するのが吉。

とにかくやってみる。
<html><head>
<!-- グラフ表示のためのJsとフラッシュファイルを指定する -->
<script type="text/javascript" src="../../ofc/js/swfobject.js"></script>
<script type="text/javascript">
	swfobject.embedSWF("open-flash-chart.swf", "data", "550", "200", "8.0.0", "expressInstall.swf", {"data-file":"chart_data.php"});
	swfobject.embedSWF("open-flash-chart.swf", "data1", "550", "200", "8.0.0", "expressInstall.swf", {"data-file":"chart_data1.php"});
</script>
</head>
<body>
<!-- グラフを挿入する -->
<div id = "data"></div>
<div id = "data1"></div>
</body>
</html>

いきなり二つ表示させる場合をかいてしまいましたが。
swfobject.embedSWFの引数に

  • フラッシュのファイル
  • グラフのnameに当たる名前
  • グラフのwidth
  • グラフのheight
  • フラッシュのバージョン? 8.0.0または9.0.0とかいておけばよいぽい。10.0.0でもいいのかな
  • 複数のファイルを表示する場合は後ろの二つの引数が必要。expressInstall.swfはようわからんがおまじない
  • 最後の引数は{"data-file":"グラフに描画するデータ・グラフ設定について書いたphpファイル"}とする


ちなみに一個しか表示しないよという場合は後ろの二つの引数は省略できます。そのかわりブラウザに表示するときは
http://localhost/disp.php?ofc=chart_data.php
などとしないといけない模様。"?ofc="とかいてデータファイルを食わせるんだね。

さて、肝心のデータファイル

これもとりあえずTutorialに書いてある通りに書けばできるが一応。

<?php
	include 'php-ofc-library/open-flash-chart.php';//php5-ofc-libraryとしたほうがよいのかもしれない
	
	//create dammy data
	$data = array();
	for($i = 0; $i < 10; $i++){
		$data[] = $i;
	}
	
	//set title
	$title = new title("TITLE");
	
	//set line
	$dot = new dot();
	$dot->colour('#cd5e3c');
	$line = new line();
	$line->set_defaultdot_style($dot);	//hoverするとドットが表示される
	$line->set_values($data);	//データを与えてやる
	$line->set_width(3);
	$line->set_colour('#68bd8d');
	
	//set y axis
	$y = new y_axis();
	$y->set_range(0, 15, 3);
	
	//set chart chartを出力するとブラウザ上に表示できるようになる
	$chart = new open_flash_chart();
	$chart->set_title($title);
	$chart->add_element($line);
	$chart->set_y_axis($y);
	
	echo $chart->toString();
?>

chartに作った設定をくっつけてやると表示されます。結構C#ぽい実装なのでわかりやすい。

データベースからデータを取ってきて描画してみよう。

データベースはMySQLでもいいんだけど情報がないのでPostgresについて書いてみる。
表示用のPHPは大して変わらんのでそのままにしておくとして、チャートデータの方。

<?php
	include 'php5-ofc-library/open-flash-chart.php';
	//データベースを開く postgresというユーザーでpostgresという名前のデータベースにログイン
	//失敗した場合はその場で死ぬ
	$db = pg_connect("host=localhost port=5432 dbname=postgres user=postgres password=postgres") or die("failed to connect");
	//データを取ってくる 
	$tableName = 'testdb';
	$result = pg_query($db, "SELECT * from {$tableName};") or die ("faield to query\n");
	//fetchで実際にデータの値が取れる
	$data_all = pg_fetch_all($result);
	pg_close($db);
	
	//連想配列のままでは描画できないので項目ごとにarrayに分ける
	$data1 = array();
	$data2 = array();
	
	foreach($data_all as $key=>$tmp){
		$data1[] = intval($tmp['data1']);	//文字列で入ってくるらしいので数字に直してやる
		$data2[] = intval($tmp['data2']);
	}
	
	if(count($data1) == 0) die('An error occurred\n');
	
	$title = new title("TEST");
	
	$dot = new dot();
	$line = new line();
	$line->set_default_dot_style($dot);
	$line->set_values($data1);
	
	$bar = new bar_filled('#999', '#aaa');
	$bar->set_values($data2);
	
	$chart = new open_flash_chart();
	$chart->set_title($title)+
	$chart->add_element($bar);
	$chart->add_element($line);
	
	echo $chart->toPrettyString();
?>

文字列ってところがわからなくてかなり死んだ。
ただま、出来ちゃうとすごく簡単かな。日本語ドキュメントは少ないけど公式にもソースコードが乗っているのでそんなに困らないはず。

HudsonからJenkinsにアップデートしてみたら見事に嵌まった件

オラクル嫌いの上司からJenkinsに変えろと脅迫されたのでぽちっと(ぽちっとじゃないな)Jenkinsに変えてみました。や、まぁ楽だったんだけどね。本体は。

マスターがRedHat, スレーブがCentOSのマシンにインストールしました。

If you've previously imported the key from Hudson, the "rpm --import" will fail because you already have a key. Please ignore that and move on.

とのことなので、そうするしかなかったんだよ。

Jenkinsのインストー

yumが使えなくなっている(これだからRHELはいやなんだ)のでさっくりrpmをダウンロードしてインストール。あと俺はいつもこういうときめんどくさいのでroot権限で作業しております。

# ちゃんと止めてからやりましょう
$ /etc/init.d/hudson stop
# rpmパッケージのインストール
$ rpm -ivh [パッケージ名]

でOK。/var/lib/jenkinsができているかどうかを確認する
hudsonはそのまま残ってたけど、設定などは全部コピーされた模様。簡単だしすごく楽。ありがたいねー。ユーザーも全部作成してくれてるし。

フォルダの権限を確認

たぶんよほどのことがない限り大丈夫だと思うけれど一応。

$ ls -la /var/lib/jenkins

でフォルダの権限がjenkinsになっていることを確認。なっていない場合は

$ chown -R jenkins:jenkins /var/lib/jenkins

で変更しておくこと。

起動

$ /etc/init.d/jenkins start

たまに忘れるんだよねーあるよねー(俺だけだよ

マスターはここまで。
次はスレーブの設定。

スレーブを設定している場合

サニティチェックを別のサーバーでやらせている(時間がかかるので)ので、こちらにも設定が必要だった。自動ではやってくれないそうです。まぁそうか。
スレーブの起動とコマンドの実行はマスターがトリガをかける設定。設定自体はいいんだけどね…SSHの設定し直したのにPermission deniedになっちゃって起動しないので困った。
答えはjenkinsアカウントがスレーブに存在していなかったためだった。そりゃ拒否されるわ。

アカウントを作成する

まずjenkinsというアカウントがないので作る。設定は元々のHudsonのにあわせるために使うシェルはbashで、ホームディレクトリは/var/lib/hudsonで。パスワードはユーザー名と同じ。

$ useradd -d /var/lib/hudson -s /bin/bash jenkins
$ usermod -p jenkins jenkins

一応確認のため

$ id -a jenkins
$ grep jenkins /etc/passwd

でuidが100番台、パスワードがjenkinsに設定されていればおそらくOK。

おもむろにディレクトリの権限を変更する

$ chown -R jenkins:jenkins /var/lib/hudson

ディレクトリ名はめんどいので変えてません。

SSHの設定(パスワードを入力しなくてもログインできるようにする)

公開鍵RSAの設定に関してはいろんなところに描いてあるけど、まぁ一応書いておくか。
http://www.geocities.jp/turtle_wide/tools/sshpass.html

# jenkinsになる。(パスワードはjenkins)
$ su jenkins
$ ssh-keygen
# このあといろいろ聞かれるけど全部なにも入力しないこと!
# Your public key has been saved in /home/foo/.ssh/id_rsa.pub.
# と表示される場所にRSA認証の公開鍵ができるのでこれをリモートの/var/lib/hudsonにコピーする
$ scp /home/foo/.ssh/id_rsa.pub jenkins@hostname(もしくはIP):/var/lib/hudson/.ssh/

# ここからはスレーブサーバーでの作業
$ ssh jenkins@hostname
$ cd /var/lib/hudson/.ssh
$ touch authorized_key2

# 必ず600に設定すること!
$ chmod 600 authorized_keys2

$ cat id_rsa.pub >> authorized_key2

たまにやると忘れてるんだよなーとか思いつつさくさくと。


なんか執事みたいなマークが出てくるからうける。


追記:

javaが入ってないサーバにインストールする場合

jdkORACLEからインストールする。/usr/bin/javaがないと起動時に怒られるのでシンボリックリンクをはっておけばおK。
とりあえず特に何も考えずにjdkをいれると/usr/local/jdkほにゃらら/bin/以下にjava, javacができるので

ln -s /usr/local/jdkほにゃらら/bin/java /usr/bin/java
ln -s /usr/local/jdkほにゃらら/bin/javac /usr/bin/javac

として

java -version
javac -version

でバージョン情報が表示されれば問題なし。

ファイアーウォールの設定

/etc/sysconfig/iptablesを編集して

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT

と追加する。Rejectよりは前に書いとかないといけないらしいけどtcp acceptグループのところに書いとけばまぁ間違いないでしょう

ふと思いついたので特定コアに処理を割り当ててみた

スレッド(C#の場合はデリゲート)を使うと、「プログラムは上から順番に実行される」原則が覆され、う ち ゅ う の ほ う そ く が み だ れ る!
と思ってしまう。それが初心者クオリティ。

参考:

やってみた。以下サンプル。

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <sched.h>
#include <pthread.h>

using namespace std;

pthread_mutex_t mutex;


int set_cpu_id(int cpu_id)
{
	cpu_set_t mask;
	__CPU_ZERO(&mask);
	__CPU_SET(cpu_id, &mask);
	
	if (sched_setaffinity(0, sizeof(mask), &mask) == -1) {
		std::cout << "Failed to set CPU affinity. " << endl;
	}
	else 
		std::cout << "Succeed to set CPU " << cpu_id << "affinity. " << endl;
	
	return 0;
}

uint32_t waste_time(uint32_t n){
	uint32_t i = 0;
	while (i < n*200000) {
		i++;
	}
	
	return i;
}

void* thread_main(void* pData){
	int* cpuID = (int*)pData;
	set_cpu_id(*cpuID);
	uint32_t num = waste_time((uint32_t)cpuID);
	
	std::cout << "count " << num << endl;
	pthread_exit(NULL);
}

int main(){
	pthread_t tid1, tid2;
	int num1 = 5, num2 = 6;
	int* cpuID1 = &num1;
	int* cpuID2 = &num2;
	
	pthread_mutex_init(&mutex, NULL);
	
	pthread_create(&tid1, NULL, thread_main, cpuID1);
	pthread_create(&tid2, NULL, thread_main, cpuID2);
	
	pthread_join(tid1, NULL);
	pthread_join(tid2, NULL);
	
	pthread_mutex_destroy(&mutex);
	
	return 0;
}

たまにガイドラインを読むと非常に面白いのである

"An error occurred while creating an error report" この例では、問題を示す文が非常に風刺的で、解決策も提示されていません

http://msdn.microsoft.com/ja-jp/library/aa511267.aspx

これはクソ笑った。
MSは実は要所要所に面白いものを挟んでくるのがうまい。iOSガイドラインは笑えるところなかったなぁ。



ちなみにGUI設計のポリシーはMicrosoftiOSでは微妙に異なっている。Microsoftは「できるだけユーザーに取って有用な情報をできるだけ与えろ、でも一気には見せるな。階層構造を作りグルーピングしろ」だけど、iOSはそれを載せるマシンの性質上の問題もあるのか、「できるだけなにも見せず選択をしなければならない場合にだけ見せろ、見せるときは階層を作るな。人目で全てに目が通せるようにしろ」というポリシーの様子。んーまー一長一短すな。そしておいらはほとんどCUIアプリケーションばっかり作ってるのであまり関係ないのだった。

僕がテストについて思うこと

単体テスト好きというよりはモックの素晴らしさを喧伝したくてしょうがない僕ですが、モックいいよ!(それだけか(大好きなんだけどまだうまく伝えられるまでになっていない俺

Twitterで#devsumiおっててちょろりとTDDの話を見かけたときに深く感銘を受けました。そのとおりだ。


僕は全くスキルのないへなちょこプログラマの卵(まだへなちょこにすらなれていない)ですが、そういうひとほどテスト、特に単体テストを書くべきだと思う。理由はとっても簡単で、勉強になるから。副次的な理由でちょう簡単な間違いやバグをいれこまなくて良くなるというのもあるけど、メインは勉強になるからだなぁ。
いまJSTQB(JSQTB?)の資格取るために適当な勉強をしているところなんだけど、テスト(レビュー含む)って教育の意味合いを含んでいるものが少なからずあって、まぁなんでかっつーと人の書いたコードや設計を理解しないとできないからなんだよね。特にレビューはね。レビューをされることで勉強になるだけではなく、することでもわかるようになることはとてもたくさんある。ましてや単体テストは第三者の書いたコードを読み、仕様を読み解き、設計の意図を理解し(隠蔽されててテストできねーとか言いながら)、というのが一気にできるのだ。こりゃなかなかない機会っすよ。僕も別にもう若くはない(職歴は短いが)けど未だに卵な訳で、これから先すーぱーはかーやすーぱーぷろぐらまーになれる予定はないと思うけれども、自分自身を成長させることはできるんだよね。

テストは、一人でも始められる。全く賛同されなくても始められる。いつからでも始められる。ひどいレガシーコードが目の前にあっても修正することはできないかもしれないけれど、テストを書くことはできる。最初から全てを書くことはないのだ。出来るところから手をつけていき、一つ一つ成功するテストケースを書き上げていけば、最後には必ず整然とした動きの理解できるプログラムが出来上がる。それをたった一人で始めることができる。どんなにスキルがなくても、言語に対する知識がなくても、アルゴリズムや設計がわからなくても、レガシーコードはたくさんのことを僕に教えてくれる。こんがらがった醜いコードには数えきれない教訓と学ぶべき事柄が眠っている。
テストを書こう。テストを保守し、プログラムを守ろう。

google信者です、こんにちは。皆さんお元気ですか。英語の勉強を兼ねてちょろちょろと自分の合間にへったくそな英文を挟んでいくようにしようかと考え中です。それか同じ内容の別のブログにするか?まぁまだ考え中ですけど。

Developers Summit 2011 行ってきた!

ある日突然上司から「デブサミ行く気ない?」と言われたときはデブですいませんと思ったものでしたが締切直前に滑り込みで登録、満席のセッションを目にさらしてアジャイル開発だけに的を絞って登録――というプロセスを経て本日行ってきました。スーツが多かった(感想はそれか)。明日は行く予定がありません……ははは。明日はTDD関連があるからちょっと興味はあるんだけどあえて今日にしたんですよ。ははは。
興奮覚めやらぬうちにとりあえず書いとく。しかしTwitter実況があるから入れなくてもかぶって入れなかったとしても結構普通に内容がわかるのなー。ありがたい時代だ。
http://twitter.com/#!/search?q=%23devsumi
続々と資料うpられ中。録画動画なども。これ会場行かなくてもいいんじゃね?(んなーこたない

  • 17-B-2:アジャイル開発実戦 →かんそう:うちの上司もその上司もアジャイルに乗り気だからなー品証ていうかISOだけじゃね、問題は
  • Jum Session: G* →かんそう:うおお空気読めてなかったかもでも面白かったし冊子ありがとうございます!これから読みます(マテ
  • 17-B-5:今そこにあるScrum →かんそう:やっべえredmineとScrumはすごく相性がよさげなうえにおれTDD大好きだからちょいちょいとできそうなきがするけどScrumよくわかってNEEEEEEE そしてドヤ顔に吹いた

ほか会場には入れんかったけどTwitter実況(#devsumi)&TogetterまとめでRedmine チケット駆動開発なんかもざざっと要点は。
http://togetter.com/li/102077

個人的にはScrum面白かったー。あと昼にJum SessionでやってたTDDの聞けばよかったなぁ。なんか面白かったっぽいし。どうせ店混んでるんだからそこだけ聞いて遅れてから行けばよかったとすごく後悔。

Grooveyとか

おれは基本的にJavaを全然書かないひとなので(基本的なのは一応かけるしC#は書くので読めるは読める)あんま使う機会はなさそうだけどちょろちょろとObjective-Cぽいなーとか思ったりした。あの簡潔さ素晴らしい。C++は何かとめんどっちいんだよなー。ガベレージコレクションもねーし。あとJavaってHudsonJenkinsとの連携が良かったりEclipseプラグインいっぱいあったりとかしてほんとに環境がいいよなー。あとテストの記述量少ないのはいいなぁ(またテストか)。関係ないけどMacbook Airの所持率高杉。

Scrum

まず俺あんまりScrumについて知らないんだけど要点を調べてみると

  • プロダクトオーナー:プロダクト責任者
  • 開発チーム
  • すくらむマスター:開発の支援者(管理者とは微妙に意味合いが違うぽい?PMに近いらしい。関係ないけどひらがなでかくとぽけもんマスターぽい


開発チームのやること:実装とテスト&みんなで協力して問題を解決する

特色:

  • プロダクトオーナーが持ってきた要求から作業を細分化する
  • 2〜4週間で動くものができる(テストが完了する)ように計画をたてる
  • 短いスパンでの進捗確認&効率を重視して各人が積極的に仕事をすすめる。進捗確認が終わって問題が特にないならあとは開発に集中。
  • 動くものができたら反省会をして次のスプリント(実装&テスト)にフィードバックする(←ここ重要

XPとの違いがいまいちわからない……まぁ本質的には同じだという話だったからいいのかな。比較的プロセス側の観点から話してるだけでやること事態は同じなのかも。ちなみにひとつのスプリントに入る前に仕様ドキュメントは完成している必要があるらしい(Wikipediaより)

これはうけた。
「良くない朝会。ボソボソ喋る。チームに対して話さない。多分今日終わるはず・・・。自分でタスクを取れない。メンバーが助けを求めていても知らんぷり。」あるあるww


うちでやってる中で(Scrumではないけど割と近いことはやってる)できてないことだと、

  • チケットの細分化→これ細分化するのはいいけどちゃんと管理しないとだめだからそこら辺の話はRedmineまとめ参照。
  • タスクを取らない(もしくは自分で取る人が限られている)
  • 朝ミーティングが長い!

あたりだなーとか思いながら聞いた。あとウォーターフォールなのでやっぱり期間が長いですね。実装期間自体はフェーズ分けたりver0.xxとかにしたりして短めにするようになってるから長くても一ヶ月程度だけど、検証含めると二ヶ月はかかる計算だし、基本設計ができるまでは次に行けないしなー。まぁ基本設計と言って曖昧にごまかしている部分はあるんだけども……。

今日の話を聞く限りは作業は一日から二日で終わる粒度にまで細分化されている必要があるような気がする。「多分今日中には…」と朝ミーティングでいっているときはなんで多分…って思うのかということに関して注意が必要?なにか気になることがある、うまくいかないことがある、ボトルネックがある場合は口にしようね、って言ってた。そして周りの人は目を逸らしたりせずに一緒に解決案について考えましょう、とのこと。
朝ミーティングででた懸念事項で短い時間内で解決できない場合は、朝MT後すぐに関係者で話し合う場を設けるってのはやってないなー。ちょいちょいと先延ばしにしたり午後一で…とかになっちゃうけどまぁでもそこら辺は運用の範囲か。

あーRedmine聞けなかったのマジで残念だった……。くそー。

Redmine チケット駆動開発(俺的メモ)

要点まとめ(まとめから見る限りだけど)。後ろの記号はすでにやってるか否かです。
参考はこちら:http://togetter.com/li/102077

  • チケットは作業の漏れをなくすだけでなく,ものづくりをもうちょっと楽しくするもの ?
  • TiDD開発プロセスの即時性・効率化に寄与する
  • チケット無しに構成管理上の変更をしない ×
  • 変更の議論をチケットとして残しておく △(啓蒙中)
  • 完全チケット方式 1. チケットがすべての作業を管理する 2. プロセスを変更するので社内調整が必要 ×
  • 補完チケット方式 1. 既存の管理は変更しない 2. こっそり始められる ○(グループ内でだけど)
  • チケット駆動による従来課題の解決: コミュニケーションのオンライン化 → 情報はRSSなどで即時に展開 △(プラグインとか必要、でもやっぱりアジャイルなら叩頭コミュニケーションも必要じゃない?)
  • 問題解決支援- チケットによるトレーサビリテイ向上,作業スコープ(今日やること・優先度とか)の明確化.XPのタスクカードのイメージ △(人に寄るなぁ。ここら辺を意識してる人と単なる工数管理ツールだと思ってる人と)
  • フィーチャーフリーズ、リリーススプリント (これよくわからない。フィーチャーフリーズはテストが一定値以下だったらソースコードの開発を止めることらしい。リリーススプリントはスクラムのはなし?)
  • 親チケット=ストーリー、子チケット=タスク ○
  • チケットの取捨選択が本来のマネジメント △(キャンセルとか保留とかをちゃんと使わないとですね)

見ていく限り作業の細分化をして適切な粒度のチケットをつくる必要性は感じる。多分感覚的に一日か二日でできる程度の粒度までは下げる必要があるだろうなぁ。でも三時間とかにしちゃうとものによるけど苦しい。
あと、TLで見かけた気がするんだけど、「チケットの定期的な棚卸」が必要とのこと。あるあるwwww

僕が基本的に個人で気をつけていることとしては

  • まず先にチケットをつくってから作業する。突発的な作業が発生したらチケットを作成してから作業する。
  • チケット進捗状況は割とこまめに変える(今どうなっているかを他の人からも分かるようにする)
  • レビュー前に一つの親のレビュー以外のチケットをすべて閉じる→レビュー反映はレビュー作業の一環なのでレビューのチケットにつける
  • ドキュメントはプロセス管理対象なのでいいんだけどコードレビューは口頭でやって指摘がなかった場合はエビデンスが残らないので、レビュー依頼チケットを出す(←New!)

テストに関しては他の人がいろいろと枠組みつくってやっているのでまだ俺はよくわかってないけど、チケット見れば全部わかるようになってるな。実はテストって結構チケット駆動と相性がいいと思うんだよなー。とかとか。