CandyCaneの発表で感じた発信と恩返しの大切さ
9月 6, 2011 by yandod · 3 Comments
前回のポストで書いたようにイギリスのマンチェスターで開催されたCakePHPの公式イベント、CakeFestに参加してきました。今回はスピーカーとしてこれまで開発を続けて来たCakePHP版Redmine、CandyCaneについての発表を行い感じた事をまとめます。
発表までの経緯と内容
CandyCaneはRedmineをCakePHPに移植すればもっと使いやすい課題管理システムになるのではというアイデアからスタートしたオープンソースプロジェクトです。2009年の4月に行った開発合宿での成果を元に地道に開発を続け、現在は140ほどのページが動作しバグの管理ができる状態になっています。日本のCakePHPでは少しは知られているソフトウェアですが、日本のCakePHP以外のコミュニティや海外のコミュニティではあまり知られていない状態でした。
昨年のCakeFestにも応募したのですが、再挑戦した今年に公式カンファレンスでの機会を得る事ができました。
今回の発表では特に日本で人気が高いと思われるRedmineの紹介とCandyCaneの開発の経緯と実際にインストールして使用するデモという構成でした。
自分の考えを発信する事の大切さ

(会場内のバーでの交流の様子)
拙い英語による発表でしたが、発表後にはさまざまな反応を会場にいた人やオンラインで見ていた人達から貰う事ができました。またRedmineを実際に使っている人が参加者の3割くらいに達していたことも驚きでした。(すでにTracからは離れた人が予想よりも多かった)実際にもらった反応は下記のような感じです。
来場者のイングランドのWill Wilsonさん
「Redmineからの移行はどうすればいいのか?」という質問を貰い、その後レストランで話した所「Redmineいいなと思ったけれど、PHPで運用したい」というまさにCandyCaneを開発する前に僕が思った事と同じ反応。またプロジェクト作成からメンバーの追加などのステップが分かりにくい点を改善したい等、発表で重視して説明した内容について熱く語ってくれました。
CakePHPのコア開発者の1人でもあるGraham Weldonさん
「今後の開発予定は?」という質問と10月に大阪で行われるハッカソンでは「CandyCaneのCake2移行をやるよ」「CakeDCの内部で使っているRedmineをCandyCaneに変えたい」というこれもまた熱い反応を貰いました。
オンラインで発表を見ていたマレーシアの@sumarudiさん
最初は来場者の誰かなのかと思っていましたが、オンラインで見ていたという事でした。是非使ってみたいという反応を貰いました。
貰った反応はどれも自分がこれまでに感じた内容そのものだったり、「使ってみたい」という前向きな反応で本当に嬉しく感じました。日々の生活の中で感じた事や自分の為に手を動かした内容を発表したからこそこういった反応を得る事が出来たのだと思います。また特に反応をしなかった人からも「CandyCaneをやっている日本のyando」というキャラ認識を受け、コミュニケーションがしやすくなりました。ブログだったりプレゼンテーションだったり、プログラムだったり文章だったりと手段はさまざまですが自分自身が何かを発信したからこそこういった貴重な体験をする事が出来たのだと思います。日々の生活の中で継続的にアウトプットを行う事は簡単ではないですが、自分がどんな人間なのか、どんな事を考えているのかを発信する事の大切さをあらためて実感しました。
またインターネットというツールを使う事でプログラムそのものや英語のコンテンツは世界中に伝わります。今回もマレーシアやイングランドの人から反応が貰えるとは全く予想していませんでしたし、バングラディシュのFahadさんと2年越しくらいで初対面をした際にも「初めて会ったのに、そんな気がしない」なんて話していました。インターネットはやはりすごい。
恩返しの大切さ
(CakeFestのパーティの様子)
読み手やオープンソースの利用者として見た場合、自分が見たものや使ったものへ反響を返すという事も大きな意味があると思います。facebookが広まった事でついつい「イイネ」をクリックしたりリツイートする事で賛同の意思を伝える事が増えてきました。たしかにそういった反響もうれしいですが、それ以上に文章や直接の言葉で貰う反応はうれしいものです。そういった反響をくれた人の事は強く記憶に残りますし、がんばってアウトプットを続けようという大きなモチベーションになります。またオープンソースソフトウェアであれば実際にバグを修正したり、ドキュメントや記事を書くなどの方法もあります。
CakePHPも海兵隊から除隊された後にOSCommerceのカスタマイズなどをしていたphpnutがポーランド人のマイケルの作った”Cake”に対してすごくいいねと反応を返し、面倒なプロジェクト運営やサーバー管理は全部、俺がやるから一緒にやろうと誘ったのがきっかけだったそうです。自分が良いなと思ったものに対してポジティブなフィードバックをしたり、ちょっとした協力をする事で何か大きな事が生まれていくと思うと、そういった日々の恩返しも大切だと感じました。
自分自身から発信する事の大切さ、恩返しの大切さはオープンソースを知っている者としてはけして目新しい事ではなく、元々分かっていた事でした。不思議ですがその知っていた事をとても新鮮かつ染み入るように実感する事が出来ました。今後も開発をがんばろうというやる気が湧きましたし、日頃目にしているサービスや記事、ソフトウェアに対してきちんと恩返しをしていこうと思います。
長文になりましたが、読んで頂いてありがとうございました。
検索機能を実装しました – candycane v0.8.0
7月 5, 2011 by yandod · Leave a Comment
v0.8.0ダウンロードページ
CakePHPで作られた第3のRedmine、candycaneのバージョンをv0.8.0に更新しました。今回はインストーラーの国際化やチケットの関連付け機能の有効化、検索機能の最初の実装といった機能を盛り込みより実用性が向上しています。機能の実装に伴って判明した問題点などもありますが、まずは日常の利用をカバーする事を優先しています。特にインストーラーについては3分程度でインストール可能で、気に入らなければフォルダごと捨てられます。この点についてはRedmineと比較してもかなりスムーズな所かなと思っています。
なお先日のCakePHP2.0勉強会で発表した際にカウントしてみたところ現状で130を超えるアクションが実装されている事がわかりました。マニュアルの執筆をするのであれば当然この130のアクションに対してスクリーンショットの撮影や執筆が発生するとわかってしまい、戦慄しています。
View more presentations from yandod
延べ作業時間は52.50時間、4のバグ修正と5つの機能追加というのが作業の概要です。なんというか、1週間は僕はcandycaneの為に働いているようですね。正直に申しましてこれだけの作業時間を確保するのは健康に支障があるレベルですので、細かなバグ修正から機能の実装まで参加してもらえる方をお待ちしております。。。。
また検索の実装にはSearch Pluginを使っており、k1Lowさんの記事が大変参考になりました。ありとあらゆる検索機能を実装する方にこのプラグインをお勧めしますよ。
- 機能 #107: パスワードリマインダーが動かない
- 機能 #119: インストーラーが翻訳されていない
- 機能 #124: CI環境の構築
- バグ #139: 優先度による色分けができてない
- 機能 #140: チケットの関連付けができない
- 機能 #146: チケット検索ができない
- バグ #148: Xampp上でインストール実行後のWelcome画面がErrrorとなり表示されない。
- バグ #149: 添付ファイルが添付できない?
- バグ #150: 言語リストに余分なdefault.potが表示される
メールが送れるようになりました – CandyCane v0.7.1
5月 31, 2011 by yandod · 4 Comments
草葉の陰で粛々と開発中のcandycaneの更新情報です。
5月分の作業の目処がついたのでバージョンを打ちました。バグフィックス中心ですが、更新情報をメールで通知する機能を新規に実装しました。これは実際にイベントの運営管理でチームメンバーと課題を共有する必要があり、必要性に応じて実装を行いました。
元のRedmineの実装ではActionMailerを使っていたのでCakePHP用のActionMailerのコード例(by @felixge)を微妙に修正したものを取込んでいます。
メールが送信されるさまざまなイベントに送信のトリガーを仕込む必要がありますが、現在はチケットの新規登録と更新時のみメールが送信されるようになっています。
延べ作業時間は23.75時間、12のバグ修正と1つの機能追加というのが作業の概要です。
- バグ #99: ロードマップの件数をクリック後に検索条件が適用されていない
- バグ #106: ロールの編集ができない
- バグ #110: カスタムフィールドの登録が出来ない
- バグ #116: ロードマップに表示されるタイムトラッキングの情報が絞り込まれていない
- バグ #117: バージョン情報を更新後にリダイレクトしない
- バグ #118: 全ての活動からニュースをクリックするとエラー
- バグ #120: チケットのフィルタに対象バージョンがない
- バグ #121: Wikiに権限制限がかかっていない
- バグ #122: 変更履歴ページのバージョンがソートされていない
- バグ #123: 非公開のカスタムクエリが表示されない
- バグ #126: 活動のRSSが壊れている
- バグ #128: ユーザーのステータス変更ができない
- 機能 #127: 更新のメール通知
正直なところ1人で空いた時間に進めるにはこのくらいの作業量が限界かなと思います。(他にもブログを書いたりしているので)リファクタリングやバグつぶし、単体テストなどやりたい事はたくさんあるんですが、、、さてどうなりますか。コードをいじってみたい方はまずインストールしてみて、バグ探しや既知のバグの修正などをやってみてもらえるととても助かります。
マニュアルの作成なんかもやりたいんですが、orz。
あとメールの受信者を割り出す処理にバグがあって、テストサイトにアドレスを登録している方々にSPAMが送信されました。ご迷惑をおかけして申し訳ありません。
candycaneのユニットテストを復旧中
5月 14, 2011 by yandod · Leave a Comment
ユニットテストをそろそろ復旧させてCI環境に載せるべく作業。
テスト実行時に app配下ではなく、 cake配下の app_model.phpを読んでしまいエラーになっていた部分を対応。またfixtureの設定の漏れがあったのでそのあたりも修正。
さらにテーブル名がべた書きされていたケースがあったので設定に追随するように修正といった所。
テスト実行用の環境の作り方が何パターンかあるのでその全てをカバーするにはまだ調整が必要そう。ちなみにテスト環境の組み合わせは
- 動作用とは別のDB名+通常と同じテーブル名
- 動作用と同じDB名+プリフィクス付きのテーブル名
- 動作用と別のDB名+プリフィクス付きのテーブル名
いずれにせよ正しい方法でテーブル名を取得していれば問題ないのですが、ひとまず独自のメソッドがあるので底に寄せて行く予定です。なお開発合宿時は各自バラバラの設定で、PostgreSQLも使っていたくらいなのでわりかしどの環境でも動いていました。
candycaneバグ修正 #110
5月 12, 2011 by yandod · Leave a Comment
バグ #110 カスタムフィールドの登録が出来ない
カスタムフィールドが登録できないバグを治しました。修正は1行ですが原因の特定に2時間近く掛かりました。カスタムフィールドは表示順をpostionという項目で制御しており、管理画面の矢印をクリックすることでソートすることができます。この機能を実装しているのがlistビヘイビアで、このビヘイビアを実装すればどんなテーブルでもたちまち並び替えが出来るようになるというものです。このビヘイビアのbeforeSaveに問題がありました。(答えはコードの後にあるので、じっくり見てから読み進めても良いですよ)
1 2 3 4 5 6 7 8 9 10 11 12 | function beforeSave(&$Model) { $result = true; if(empty($Model->id)) { $position_column = $this->settings[$Model->alias]['column']; $conditions = $this->settings[$Model->alias]['scope']; $result = $Model->find('first', array('conditions'=>$conditions, 'order'=>"$position_column DESC")); if($result) { $Model->data[$Model->alias][$position_column] = $result[$Model->alias][$position_column] + 1; } } return $result; } |
さて、わかりましたか?
問題があったのは11行目。挿入しようとしたデータと同じpostionの行があった場合は番号をインクリメントするのですが、テーブルが空の場合などデータが無いと$resultがfalseになりbeforeSaveが異常終了してしまいます。なので修正はこれをtrueに変えただけです。モデルのコールバックやバリデーションを自作した場合は最後の戻り値に注意深くなければならないという事を再確認しました。
でもこれでチケットやプロジェクト、ユーザーに好きな項目を拡張する事ができるようになりましたね!
candycaneバグ修正 #99
5月 11, 2011 by yandod · Leave a Comment
バグ #99 ロードマップの件数をクリック後に検索条件が適用されていない
比較的やっかいな修正。
チケットの一覧ページへ絞り込み条件がクエリストリングで与えられるとうまく動いていなかった。問題は2つ。まず1つがクエリストリング付きのURL生成の方法が間違っていること。routesの設定をカスタマイズしていることもあり、パスパラメータとクエリストリングをきちんと分ける必要がある。routesが何も設定されていなかった頃は動いていたのかもしれないが。クエリストリングに渡したいパラメータは?の下にハッシュでぶら下げればよい。[diff]
2つめの問題はクエリストリングを解釈してくれる処理が存在していない事による。フォームで送信された場合は受け取れるのだが、フォームの場合は比較を「等しい」「等しくない」のように選べるがクエリストリングの場合は取り扱いが異なる。なのでそのまま代入するわけにもいかず分岐を作った。これはもうすこしスマートにマージできる気もする。[diff]
またこれだけでは適用できるフィルターのリストに「バージョン」が表示されないので、Queryモデルのフィルタ一覧を取得する処理内を他のフィルタを見習って設定する。おそらくakiyanが書いた処理なのだが空気を読んで書くだけで動いた。助かる。
これでロードマップから貼られているリンクをクリックした際に絞り込みが動くようになった。解決。
candycaneバグ修正 #118
5月 10, 2011 by yandod · Leave a Comment
バグ #118: 全ての活動からニュースをクリックするとエラー
一つ一つのコミットにはCakePHPとcandycaneの実装を理解するエッセンスがあると思ったのでこまめにブログにしていく試み。活動(アクティビティ)のページに表示される対象のデータにはActivityProviderビヘイビアを設定する必要があるが、設定が間違っていた。
岸田さん実装のこのあたりはかなりの神実装。つまりどんなモデルでもこのビヘイビアが設定してあれば、指定された条件で検索を行ってこの一覧ページに登場するのだから。ただビヘイビアは原理上、どんなモデルに設定しても動くようになっているので抽象度が高い。よってユニットテストを行いながらの実装が欠かせない。
修正した内容
普通に操作していて動かない場所は本当に少なくなって来た。あと少し。
candycaneバグ修正 #106
5月 9, 2011 by yandod · Leave a Comment
バグ #106 ロールの編集ができない
ロールの編集機能が壊れていたので修正。しかしこの権限レポートからのロールの編集は見やすいけれど、データの変更範囲が大きすぎるしロールが大量にあったらユーザビリティ的にはいまいちだと思うな。機能の一覧を作るためにスクリーンショットを撮らないとだけど、画面数が多すぎて大変だ。
CandyCane v0.7
5月 2, 2011 by yandod · 3 Comments
Rubyで作られたバグトラッキングシステム、RedmineをPHPに移植したcandycaneの公開されているソースコードをバージョン0.7としました。Redmineの構造が複雑で規模が大きかった事もあり移植の範囲をかなり限定していますが、candycaneのバグ管理をしてみてひとまず使えている範囲になったのでバージョンを打つ事にしました。またバグ管理を始めて以降、33のバグが修正され、延べ作業時間は24.75時間でした。
今回が初めてのリリースバージョンですが、延べ9人の開発者のコードが刻み込まれた内容になっています。個人や小規模にバグトラッキングをしてみたい方やRedmineを試してみたいけれどRubyの環境が無いような方に遊んで頂けると幸いです。(パフォーマンスチューニングやリファクタリング前かつ、PHP4にもまだ対応していて処理が重いです)
現在のcandycaneでできること
- ブラウザベースでのインストール
- ユーザー登録、管理
- プロジェクトの登録、管理
- チケットの登録、管理
- カスタムクエリの登録、管理
- 添付ファイルの登録、管理
- バージョンの登録、管理
- Wikiの記述(履歴の管理は未実装)
- ニュースの登録、管理
- タイムトラッキングとレポート
現在のcandycaneでできないこと
- 検索
- フォーラム機能(プラグインで対応)
- リポジトリビューアー(プラグインで対応)
- カスタムフィールド
- 文書機能(プラグインで対応)
- メール通知
今後の予定
今後も継続して開発を行い未完成機能の実装やパフォーマンスチューニング、プラグイン対応などを行いながら1.0を目指します。特にフォーラムや文書といった周辺機能についてはプラグインで追加できるような構造にできるようにリファクタリングを行いたいと思っています。
興味を持って頂ける方にはぜひともバグの報告や開発やドキュメントの執筆などへの参加などをお願いします。(というか全然手が足りません)
よろしくお願いします。
おまけ 開発の歴史とか
PHPをDisってアクセス増は3日間&WPのアクセス解析はJetpack
4月 25, 2011 by yandod · Leave a Comment
前々回のエントリはお陰様でホットエントリに入る事ができました。PHPをdisるともれなくアクセスが伸びるという現象が過去にもさまざまなブログで観測されていますが、その現象を再確認する事が出来ました。なお上記の画像を見ると分かりますがこのアクセス数増加の効果は3日で無くなりました。アクセス数を伸ばしたいブロガーの方は3日おきにPHPをdisってみるといいのかもしれません。
そんなネタエントリの何倍も頑張っているcandycaneのエントリは全くアクセスが伸びていないのが残念です。
それはさておき今回はWordPress用のJetpackプラグインが提供するアクセス解析の機能がとても便利に感じました。スクリーンショットにもあるようなわかりやすいアクセス解析グラフがほぼリアルタイムでダッシュボードに表示されます。似たようなアクセス解析ではGoogleAnalyticsがありますが、結果の反映が素早かったのでもうこれからはGoogle Analyticsを見る頻度が少なくなっていきそうです。

最近のアップデートで自分のブログにログインする表示されるツールバーの中にもアクセス数のグラフが分かりやすく表示されます。(これで何事かが起きているのに気づいたらダッシュボードで詳細が見れるという事ですね)
ダッシュボード内ではリファラ解析や、エントリ中のリンクの何処がクリックされたのかというった情報がこれもほぼリアルタイムで閲覧できます。

Jetpackには他にもURLをツイッターやFacebookで共有するボタンを表示する機能とか色々な機能が入っていますが、WordPressを使っている方はインストールしてみて損は無いプラグインではないかと。っていうかアクセス数がリアルタイムで見れるのは気持ちが盛り上がるので楽しかったです。ありがとうJetpack。










