8時間耐久CakePHP2勉強会を大阪で開催します!
先日下北沢で開催した8時間耐久CakePHP2勉強会を今週末(2/5)に大阪で開催します。
参加登録はATND上で受け付けています。
http://atnd.org/events/24800
フレームワーク初心者でもCakePHPを動かせるような内容になっていますが、すでにCakePHPを使っている人でまだCakePHP2を使っていない人にとってはポイントの確認もできるかと思います。(プラス始めての方のヘルプもお願いすると思いますが)
時間も長いこともあって前回もざっくばらんに質問をしたり雑談したりと和気あいあいとした会でしたので今回もそんな雰囲気になればよいなと思います。
また2/12には福岡で同様の勉強会を開催する予定です。その他の都市も要望があれば行ってみたいと思っていますので希望があればお知らせ下さい。
初心者向け 8時間耐久CakePHP2勉強会を開催しました
追記)大阪でも2/5(日)に開催します!
http://atnd.org/events/24800
CakePHPを勉強したいという@shinichiNさんの要望に応えて8時間耐久でCakePHP2を学ぶという勉強会を1/25に下北沢OSSCafeで開催しました。当日はUStreamも常時30人前後の人が視聴しており、現地の参加者も含めて50人弱が耐久形式で最新のCakePHP2の利用方法を学びました。
なお今回のターゲットの@shinichiNさんはフレームワークなどは未経験とのことでしたので、WordPressを使ったり簡単なPHPスクリプトを自分で書けるくらいの人がCakePHPの基本を理解するというのが今回の主旨です。
MVCモデルとは牛皿定食である

フレームワークを使ったことが無い人にとって、とっつきにくいのがMVCモデルの考え方です。ModelがデータベースでViewがHTMLでという説明を聞いているとまるでこれまで作っていたプログラムとまったく違うものを作らないと行けない気がしてきます。しかし実際のところMVCモデルは大きくなったプログラムを分割する為の経験則です。牛丼を牛皿定食にしても内容物として肉、玉ねぎ、お米があることに変わりはないようにMVCモデルもこれまで作っていたプログラムを一定のルールに従って分割しただけです。
普通のPHPスクリプトの例で考えてみましょう。(クリックで拡大)

上記のスクリプトはなるべくシンプルにデータベースのデータを画面に表示するという普通のPHPスクリプトですが、このうちデータベースに関連する処理とHTMLに関連する処理を別の場所に移すというふうに考えます。(このスクリプトはDB処理とHTMLが一箇所にまとまるように書いてありますが、分散していた場合はそれぞれを抜き出して移動します)
DB処理をモデルにHTMLをビューに移してみました。そしてそれでも残った元々の部分がコントローラーになり、モデルとビューを呼び出しています。スクリプトの内容は分割してincludeで呼び出すようにしただけで全く同一です。こういったものが独自フレームワークと呼ばれCakePHPが一般的になる前からも大きなシステムでは活用されていました。また自分流でスクリプトを書いているとなんだかんだでこういった形を使うようになってきます。
フレームワークを使う場合は各フレームワークごとに決められた場所にMVCのそれぞれの部分を配置することになります。CakePHPの場合であれば下記のような形です。
CakePHP2インストールの肝はPDOとmod_rewriteの確認
CakePHP2はCakePHP1やWordPressなどと違ってPDOというPHPの機能を使っています。インストールの際にはPDOが利用できることをphpinfo()で確認します。またXAMPPやMAMPPでは初期状態ではmod_rewriteが有効になっていません。mod_rewriteを有効にするか、core.phpのAPP.BaseUrlの設定を有効にしてください。
またYukio SaitohさんがWindowsの場合の設定のポイントをまとめて下さいました!
Controller:: ディスパッチャを理解せよ
多くのフレームワークは指定されたURLに応じた所定のコントローラーを呼び出すという機構を採用しています。これをCakePHPではディスパッチャーが行なっており、指定されたURLに応じたコントローラーのメソッドを呼び出します。作ったコントローラーを呼び出す為のURLを考えたり、とあるURLに対応するコントローラーをどうすれば作れるのかを理解すれば自分で作った処理を自由に呼び出せるようになります。
この際に命名規則に従う必要もありません。$usesやアクションの設定を省略した場合は命名規則に従ったデフォルトが呼び出されるだけですので。きちんと指定をすれば自由に名前をつけられます。
Model:: find()を極めろ
CakePHPはモデルの機能が中心といってもよいフレームワークです特にfind()メソッドを使えばほとんど全てのケースのデータベース処理を自動化できます。このfind()に慣れれば慣れるほどにCakePHPでの開発がスムーズになります。
またこのfind()が返却する結果と要求するオプションは大きな配列変数になっています。
配列に依存しすぎという批判もありますが、とにかくえいやと配列を渡すとうりゃっと配列が返ってくるのがCakePHP流なのでそれに慣れるのが早道です。(そもそもPHP自体が配列中心なところがあるので僕はこの設計は成功していると思っています。)
View:: URLやフォームはヘルパーで自動生成せよ
ビューに関しては app/View/Layouts/default.ctpを変更してヘッダ、フッタなどを変更する事と、ヘルパーを利用したタグの自動生成くらいしか覚えることはありません。とりあえずはヘッダなどを任意のデザインに差し替えて、テンプレート内にURLを書くようなタグでヘルパーを使うところから始めればよいでしょう。
お疲れ様でした
実際にはいろいろとデモンストレーションや質疑応答をしながらの8時間の勉強会でしたが、多くの方がCakePHPを好きなように動かせました。(ソースコードを一字一句書き写すのではなく、好きな名前をつけたりしながら各自が確認をしていました)細かいことを詳細に確認するのも大事ですが、まずは全体像を掴んでいじり回せるようになる事が第一歩かと思います。
今回は下北沢OSSCafeという素晴らしい環境で、なおかつ@cognitomさんのハイクオリティUStreamの録画が残っています。動画を全画面表示するとソースコードすら確認できる脅威のクオリティをご堪能ください。(残念ながら午前中のところは録画がありません)
8時間耐久CakePHP(1/4) – Controller編
8時間耐久CakePHP(2/4) – Model編
8時間耐久CakePHP(3/4) – Model編の続き
8時間耐久CakePHP(4/4) – View編
デモで使っていたプロジェクトはとりあえずgithubに置きました。
https://github.com/yandod/shimokita8
同様の勉強会を大阪と福岡でやろうかなと思っています。他にも開催の要望があれば場所さえあればなんとかなりますのでご相談ください。
ダッシュボードからプラグインのインストールが可能に – CandyCane v0.8.5リリース
CandyCaneダウンロード
(ページ下部にZipとtar.gzの圧縮ファイルへのリンクがあります)
RedmineをPHPに移植したタスク管理システム、CandyCaneのバージョンが0.8.5になりました。一部で話題になったにゃーんダウンチャートを生んだプラグイン機構を改良し、プラグインのインストールとアンインストールがダッシュボードから出来るようになりました。またプラグインのひな形を生成するシェルコマンドも同梱され、プラグインの開発をすぐに始める事ができます。
今回は作例としてチケットに「イイね」の機能を付けるLike Itプラグインを作成してみました。CakePHPベースでの開発はやはり効率がよくかなり少ないコードの分量で機能を実装する事ができたと思います。このプラグインのデモ動画はこちらです。
プラグインのカタログはgist上で管理しています。みなさんが作成したプラグインもgithubで公開されていればカタログに追加する事でダッシュボードからの配布が可能になります。ガントチャートのような独立性の高い機能については是非ともプラグインとして実装された事例が出てくればと思います。また僕自身が公開しているプラグインもそうですが、ネタっぽいものでも作ってみると勉強になるのでCakePHPの学習題材としても良いのではと思います。
開発にかかった時間は25時間。また今回から@okonomiさんが送ってくださったプルリクエストも含まれています。
- Bug #207: Supporting plugin architecture. Part3
- Bug #208: Kindly notice mod_rewrite availability.
- Bug #209: list is broken on render if it has more than 3items.
- Bug #211: Plugin generation by console.
- Bug #214: 「トラッカー」画面でワークフロー未設定のエラーメッセージが表示されない
- Enhancement #185: “Like” feature for issue.
- Enhancement #210: Get plugin catalog from remote.
まだバグつぶしや実現できていない構想もありますが、プラグイン機構で自由に機能を追加しやすい土壌が整ってきました。機能だけでなくデザインなどについても自由に組み替えて利用できるようなシステムにしていければよいなと思います。インストールも簡単ですので、お時間のある方はインストールの上でいじってみたり、プラグインを作ってみて貰えれば大変嬉しいです。
最近の反響
にゃーんダウンチャートが使えます – CandyCane v0.8.4
RedmineをPHPに移植したCandyCaneのv0.8.4をリリースしました。 このリリースによりさまざまなプラグインを開発できるようになりました。完全なプロダクトを作るというのはかなり難しい目標です。そこでプラグインシステムを用意して必要な人が自分の好きな機能を追加できるというのが望ましいと考えていました。CandyCaneのプラグインはCakePHPの流儀で作成する事ができ、これによりプラグインを作ってみる方が増えてくればよいなと思っています。ではプラグインの概要を見てみましょう。
CandyCaneのプラグインの基礎
CandyCaneのプラグインはCakePHPのプラグインです。. CakePHPのMVCをベースにしたコードを書く事でCandyCaneにプラグインとして追加できます。また追加のコードからCandyCaneのモデルやヘルパー、コンポーネントなどを呼び出す事が出来ます。例えばチケットのデータやプロジェクトのデータをモデルから取得できます。作成したページがCandyCaneとやり取りをする為のAPIも用意されています。これらのAPIはプラグインの内部のinit.phpから呼び出します。
画面上部のメニューへのページ追加
アプリケーション全体のレベルのページを追加したい場合は画面左上のメニューにリンクを追加する事になるでしょう。リンクを追加するにはMenuContainerオブジェクトをプラグインの中のinit.phpから使います。
$menuContainer = ClassRegistry::getObject('MenuContainer'); $menuContainer->addTopMenu( array( 'url' => '/cc_nyancat/nyan/index', 'class' => 'nyan-cat', 'caption' => 'Nyan Cat', 'logged' => false, 'admin' => false ) );
プロジェクトタブへのページ追加
CandyCaneの多くのページはプロジェクト以下の要素として動作します。このようなページを作成する場合はページをプロジェクトタブに追加することになります。その場合はMenuContainerクラスを使います。また現在のプロジェクトをURLから推定する為のルーティングの設定が必要です。
$menuContainer->addProjectMenu( 'nyancat', array( 'plugin' => 'cc_nyancat', 'controller' => 'cc_nyancat_chart', 'action' => 'index', 'class' => '', 'caption' => 'Nyan Down Chart', 'params' => 'project_id', '_allowed' => true // for bypassing permmission system. ) ); // make sure put new route setting which includes project_id App::import('Core','Router'); Router::connect('/projects/:project_id/nyanchart/:action', array( 'plugin' => 'cc_nyancat', 'controller' => 'cc_nyancat_chart' ));
ページ内の特定の場所へのHTML挿入
CandyCaneの既存のページに変更を加えたい場合、テンプレートの構造を元に変更を加えられます。HookContainerクラスのオブジェクトを使って任意のテンプレートをフックできます。テンプレートが分離されているポイントに対しては好きなテンプレートを追加できます。例えばこの場合はNyan Catがissues/relationsテンプレートの後に表示されます。
$hookContainer = ClassRegistry::getObject('HookContainer'); $hookContainer->registerElementHook( 'issues/relations', // target element name. '../../plugins/cc_nyancat/views/elements/nyancat', // additional template you want to inject. false // it should be true when you want to inject before the target template. );
プラグインのインストール
プラグインのインストールには手動の作業が必要ですが、近いうちに自動化する予定です。とはいえ手順はapp/pluginsの下にプラグインを展開するだけです。CandyCaneのプラグインは”cc_”で始まるディレクトリで作成され、CandyCaneは”app/plugins/cc_*”配下のinit.phpを探してプラグインをロードしています。
実際の例を見るにはcc_nyancat plugin のgithub上のコードを動かしてみてください。みなさんが実際にプラグインを作成して面白い使い方ができるようになることを楽しみしています。
おまけ:各界の反応
CakePHPの大きなリリースの歴史を振り返る
12月 16, 2011 by yandod · Leave a Comment
ちょっと気になったのでCakePHPのメジャーなリリースのタイミングを振り返ってみます。
- 2005 プロジェクト開始
- CakePHP1.0 欠番?
- 2006/5 ? CakePHP1.1.3
- 2008/12/26 CakePHP1.2
- 2010/4/25 CakePHP1.3
- 2011/10/17 CakePHP2.0
CakePHP1.0って欠番?
CakePHPのコーディング規約違反をPHP_CodeSnifferでチェックする #CakephpAdvent2011
12月 2, 2011 by yandod · 3 Comments
この記事はCakePHP Advent Calendar 2011に参加しています。
記述したコードの表記ゆれを防ぐ為の手法としてコーディング規約があります。見通しが良く一貫性のあるスタイルで記述されたコードはメンテナンス性を維持する助けになり、コードレビューの際の不毛な論争を少し減らす手助けになります。今回はCakePHPでアプリケーションを開発する際にコーディング規約を適用する方法を検討してみます。
どのコーディング規約を適用するか
PHPではPEARのコーディング規約が一般的に知られていますが、PEARはライブラリという事もありこの規約をそのままアプリケーションの実装に適用するのは冗長かもしれません。また同様にZendフレームワークやSymfonyもコーディング規約を持っています。
CakePHPでアプリケーションを実装する場合を考えてみても、PEARのスタイルはCakePHPが採用しているスタイルを使うよりはフレームワークに合わせてCakePHPのスタイルを採用するのはそれなりに妥当なのではないでしょうか。
CakePHPのコーディング規約
CakePHPのコーディング規約については公式のドキュメント内に記述があります。
CakePHP1.3のドキュメント
http://book.cakephp.org/view/509/Coding-Standards
CakePHP2.0のドキュメント
http://book.cakephp.org/2.0/en/contributing/cakephp-coding-conventions.html
二つのドキュメントは体裁が異なっていますが内容は現時点で同一です。CakePHPのコーディング規約が定めている内容を下記の通りです。
- タブによるインデント
- 制御構文(if for foreach while switch)の記述
- 参考演算子
- 関数呼び出し
- メソッド定義
- コメント
- ファイルのインクルード
- PHPタグ
- 命名規約(関数 クラス メソッド 変数)
- アクセス修飾子
- メソッドチェーン
- サンプルのアドレス
- ファイル名
- 変数の型
- 定数
PHP_CodeSnifferの導入
コードが規約に沿って記述されているかをチェックするツールとしてはPHP_CodeSnifferが知られています。PEARで配布されているライブラリなのでインストールはPEARコマンドを使う事になります。標準のチャンネルからインストールできるパッケージなので1つのコマンドだけでインストールできます。
pear install PHP_CodeSniffer
インストールが完了すれば下記のコマンドでPHP_CodeSnifferが起動します。またインストール済みのコーディング規約のリストを確認もできます。
$ phpcs --version
PHP_CodeSniffer version 1.3.1 (stable) by Squiz Pty Ltd. (http://www.squiz.net)
$ phpcs -i
The installed coding standards are MySource, PEAR, PHPCS, Squiz and Zend
ご覧の通りPEARの規約などはインストールされていますが、CakePHP用の規約はインストールされていません。CakePHP用の規約は無いのかなとツイートしてみたところCakeのコアな開発者であるsavantさんがgithub上にでjrbassoさんが開発しているものを教えてくれました。他にもAD7sixさんがメンテナンスしているものもあるのですが、今回は最初のものを使ってみます。phpcsコマンドは任意のディレクトリに存在する規約を読み込む事もできますが、簡単に使うにはPEARのインストールディレクトリ配下の下記のパスにgithubから落としてきたコードを配置します。
PHP/CodeSniffer/Standards/
正常にインストールされていればphpcsコマンドから表示される規約の一覧にCakePHPが追加されているはずです。
$ phpcs -i
The installed coding standards are CakePHP, MySource, PEAR, PHPCS, Squiz and Zend
これで任意のディレクトリのソースをチェックできるようになりました。カレントディレクトリ以下のphpファイルを検査する場合は下記のようなコマンドでOKです。
phpcs --report=summary --report-checkstyle=CakePHP --standard=CakePHP --extensions=php ./
Jenkinsとの統合
CodeSnifferのチェックが出来るようになっても任意で実行するというのはいかにも忘れそうです。ここはモダンにJenkinsからコードを検査するようにすればコミット毎に規約をチェックしてさらにグラフなどを生成してみましょう。Jenkinsから実行する場合は下記のようなコマンドを設定してcheckstyle形式のレポートを生成します。これによりJeninsのcheckstyleプラグインからレポートを読み込んでグラフを生成できます。ただ標準のままですと1つでもエラーがあるとビルドが失敗にマークされてしまうので最後にidコマンドを実行して常にビルドは成功するようにしています。
phpcs --report=checkstyle --report-checkstyle=checkstyle.xml --standard=CakePHP --extensions=php ./ || id
生成されたグラフは下記のような感じです。いい感じですね。
-300x121.png)
githubなどでコードを公開する事が増えて来た昨今、コーディング規約に準拠した奇麗なソースを書きたいですね。PHP_CodeSnifferとJenkinsの統合を行えば自然とコードを奇麗に書く習慣がつきますので、まだ設定していない方は設定してみる事を強くお勧めします。
candycane v0.8.3 をリリースしました
12月 1, 2011 by yandod · Leave a Comment
RedmineをPHPに移植したチケット管理システム、CandyCaneのv0.8.3をリリースしました。今回のリリースではphpmatsuriでの成果とバグフィックスを含んでおり、これによりプラグインを用いてCandyCaneを拡張できるようになりました。
サンプルとしてNyan Catを表示するcc_nyancatプラグインを開発しました。このプラグインを導入するデモ動画があります。こちらの動画ではプラグインがサブディレクトリに配置するだけで有効になる様子をご覧になれます。
延べ作業時間は10時間、6のバグ修正と2つの機能追加です。
- Bug #65: チケットの移動時に関連削除処理でエラーがでる
- Bug #67: チケットを移動させると起票者が変わる
- Bug #75: ログインしていないのにニュースが編集できてしまう
- Bug #158: News module was spamed.
- Enhancement #159: Sending email on updating news.
- Bug #178: Users can’t Update issues
- Enhancement #186: Supporting plugin architecture. Part1
- Bug #190: Fix denial of permissions for users with permissions moving issues
イベントの開催などが一段落したので今後は開発に多くの時間を割けるようになりそうです。githubでのプルリクエストや実際に使ってみたなどのご報告も歓迎です。宜しくお願い致します。
PHPMatsuriの楽しさは参加者自身です
10月 19, 2011 by yandod · Leave a Comment
参加者の写真やブログも公開されてきてまだまだ熱気が醒めやらない感じですが今年のPHP Matsuriが無事に終りました。あまりにも多くの事が頭を巡っているのですが、特に大きいものをいくつかまとめて書こうと思います。
Epic Sax Guy

参加された方で来日したGarrettの人柄とEpic Sax Guyが印象に残っていない人は皆無なのではないでしょうか。強烈に明るくオープンでひょうきんな彼のキャラクターはハッカソンの空気を支配していましたね。前回はLithiumの機能についての評判を多く耳にしましたが、今回は逆にLithiumをGarrettの人柄の話題が食っていた気がします。最新のフレームワークの機能やツールは確かに魅力的ですがそれ以上に魅力的なのはその人自身なのではと彼に会ってから感じています。そして毎日数時間はEpic Sax Guyを聞いてしまうわけです。
言葉では伝わらない体験

今年は昨年よりもさらに増えて総勢で90名を越える規模でのハッカソンになりました。初めての参加者の方も居ましたが多くの方から聞いたのが「どういうイベントなのかよくわからなかった」というものです。2年連続の参加となるSioさんも誤解していたようにハッカソンとはどういう雰囲気なのかを言葉で伝えるのは難しい所があります。
朝のあいさつでも話しましたがPHPMatsuriはヤフーが開催しているOpen Hack Day(現在は Hack Uに改名された模様)をコピーしたイベントです。画像やビデオ、文章などのさまざまな手段では伝わらない楽しさを伝える為に自分たちで開催してしまおうと思ったのがきっかけです。
実際にスタッフの1人である@shin1x1さんも「2日目のデモ発表の時間になってみてこういうイベントだったのかとわかった」と言っていました。参加者のレポートから漂う謎の熱気を理解したい方は実際に参加する事が唯一の方法なのだと思います。
参加者の力

豪華ゲストによる講演や忍者軍団、スイーツ、ワークショップと企画が目白押しですが、PHPMatsuriの本当の目玉コンテンツは参加者の皆さん自身です。参加した方それぞれが感じた楽しさは参加者が実際に開発した発表した体験そのものが中心になっていると思います。参加したけれど発表をしなかった方が「次回は発表する」と強く思う人が多いのも周囲を見ていてそれを感じているからではないでしょうか。
今年も@sizuhikoさんをはじめとしたスタッフの献身的な努力で無事にイベントを終える事ができました。まだ余韻に浸っている段階ですが今後も参加者自身の活動が中心となるハッカソン形式のイベントをさらに幅を広げて行って行きたいと思います。
参加者の皆さん、スタッフの皆さんお疲れさまでした!
※写真は@koyhogeさんと@suzukiさんのFlickrから引用しています。素晴らしい写真をありがとうございます!
CandyCane v0.8.1 をリリースしました
9月 19, 2011 by yandod · Leave a Comment
v0.8.1ダウンロードページ
CakePHPで作られた第3のRedmine、CandyCaneのバージョンをv0.8.1のバージョンを打ちました。
ご存知の方もいると思いますが、github上でウォッチされたPHPのプロジェクトのランキングで4位にCandyCaneが入りました!(※ただし、1日限り)。前回のエントリで一連の流れについて書きましたが、CakeFestでの発表で認知度が高まった事が数字に現れたようです。またCakePHPのコアデベロッパのグラハムが開発に協力してくれているのでかなり開発速度が上がっています。
今回は世界中でインストールしてみた人が増えた事から得られたフィードバックを中心に修正しています。やはりインストーラーでWordPressのようにインストールできる点についてはうまくいっているようです。
また既存のRedmineのスキーマを流用する場合はRedmineのV0.8以降に行われたスキーマ変更に追従していない部分があることが分かっています。この部分のキャッチアップについてはスキーマを更新するMigrateをインストーラーに統合してからの対応になるでしょう。
延べ作業時間は16時間、11のバグ修正と1つの機能追加です。また次回のリリースからはPHP5向けにコードを記述していきます。困る人も殆どいないと思いますが、PHP4向けの修正が継続できるようにブランチだけは作っています。
- Bug #97: チケットの複数編集時に選択内容が保持されない
- Bug #103: チケットの状態を終了にした際に進捗率が100%になっていない
- Bug #114: 最近のプロジェクトにアーカイブされたプロジェクトが表示されている
- Bug #138: 複数のチケットを編集した際に履歴が1つしか作られていない
- Bug #153: 送信元メールアドレスとフッタの設定が機能していない
- Bug #154: 活動のアイテムの並び順が日付の降順になっていない
- Bug #160: 非公開プロジェクトのwikiがメンバー外から見える
- Bug #164: Search hits against wiki of pravate project for unlogged in user.
- Bug #166: (user/edit) don’t load user’s language
- Enhancement #167: (user/edit) Option without password
- Bug #168: Issue priority changes when adding update/comment to issue
- Bug #170: Emain wont be sent on bulk edit of issue.
日本のCakePHP使いが死力を尽くしたCandyCaneにブレイクの兆し
前回のエントリを書いてからまだ一週間も経っていませんが、CakePHP版RedmineのCandyCaneへの反響に驚いています。CakeFestでの発表の後に下記の反応を貰った事は前回触れましたが、その後も色々な反応がありました。
CakePHPのコアメンバーの1人である@predominantさんからの反応や、会場に来ていた@theMojoWillさん、配信を見ていた@sumardiさんからの反応は発表のあとすぐに届きました。
Really enjoying @yando‘s talk at #CakeFest on CandyCane. http://t.co/vT775re
@yando cool. thanks. watched ur presentation from Kuala Lumpur. great.
その後、数日たってNYにお住まいでCakeFestにもいつも来ている@savantさんが他にもRedmineを移植しようとしているフランスのユーザーがが居るのを発見したと教えてくれました。この@kwikyさんは勇敢にもフルスクラッチでRedmineを移植しようとしており、最初の画面が表示された所までで協力者を探しているようでした。
@yando Just saw this: http://t.co/TRkDOWi
このまま2つのPHP版Redmineが開発されていくのはあまりにも悲しいという事でさらに@phpMagpieさんが会話に参加。この方もイギリスの方でCakeFestの参加者です。
@yando would be much better for the guy to help out with CandyCane rather than going it alone … I’m sure he will when he realises
メッセージをkwikyさんに送ったところ、自分のプロジェクトを速攻で閉鎖し、すぐにCandyCaneにフランス語のロケールとフッターのコードの修正やスキーマのミスの修正を送って来てくれました。

会話に参加していた@phpMagpieさんもCandyCaneをインストールしてCSSのリンク切れを教えてくれました。
@yando I’m installing candycane, seems there are missing css files at first install page? admin.css 960.css reset.css
このあたりの状況を見ていた@itemanさんが「ブレイク」という言葉で祝福してくれました。ちなみに何ヶ月か前に徹夜のネットラジオでCandyCaneの今後の展開について語ったりもしたので、状況を分かって頂けたのかもしれません。
candycaneブレイクしていますね。おめでとうございます。
時を同じくしてバグ管理のプロジェクトにもインストール時に不具合に遭遇したという報告や、いくつかの挙動の報告をIgorさんがしてくれています。またインストール方法について案内した後にすばらしい一言をくれました。
“good job about porting Redmine to PHP. I was really looking for something like this.”
(Redmineの移植すごいですね。こういうのを探していたんです)
そしてその後、CakeDCでのCandyCane導入を考えているといっていた@predominantさんが本気を出して怒濤のリファクタリングを開始。一晩に33ものコミットを行って不具合の修正などをしてくれています。結果的にネットワークチャートがすごいことに。

また気づいていないうちにドイツの@meinnerdさんがRedmineを移植した上に結構できてるみたいで、こいつらおかしい!というお褒めの言葉をくれていました。
I think I’m losing it. Somebody actually ported Redmine to PHP. And even included all of the warts. This is insane! http://t.co/4XGJnPr
地道にインストーラーの国際化などをしておいたおかげか、ひとまず各所でインストールしてみる事は成功しているようです。最新のRedmineから移行するとスキーマーの違いでエラーになる部分があることも分かってきましたが、この辺りの対応はバグが落ち着いて来た所ですることになるでしょう。
また日本からもリアル案件でCandyCaneを使っている!という熱い情報がすでに寄せられています。
元々CandyCaneは当時東京に居たCakePHPユーザーが中心になって行った開発合宿の成果物ということで多くの人の手が入っているのですが、ここに来てコントリビューターのリストが一気に国際色を帯びました。日本でも有数のCakePHP使いの皆さんが死力を振り絞って作ったコードがこういう形で陽の目を見るのはとてもうれしいです。またその事を忘れない為にもフッターにはコントリビューター一覧へのリンクを付ける事にしました。
思えば2泊3日で睡眠時間が1日数時間という地獄のような合宿があってこそ。gitもそこで覚えた人もいたし。
すでに立ち上げからは2年が経過し、こんなに多くの人の手が入ったコードを扱っている事には我ながら驚いています。またフィードバックを受けながらソフトウェアが進化するというオープンソースの基本原理を実際に体験する事が出来てなんとも不思議な気持ちです。
日本に居なかったので日本の勉強会での発表やハッカソンなどは全くできていなかったのですが、協力して頂いた皆さんのコードや声を無駄にしないように気長に続けて行ければと思います。
さしあたってはバグの修正とプラグイン開発の土台作りまではこのまま走って行ければと思います。アジャイルの対応やSCMなどの連携はプラグインとして実装できるようにしておいて、各地のCake使いが作れるのが理想かなと思っていますので。
今後も宜しくお願いします。



















-300x104.png)












