第49回PHP勉強会で「Lithiumラボ #1」を発表した
1月 31, 2010 by yandod · 2 Comments
第49回PHP勉強会にリモートから参加しました。
ニューヨークからは時差があるので金曜日の深夜1時頃からの発表になりました。
Skypeでの発表をケアしてくれたgusagiさん、cakephperさんのお陰でひとまず無事に終える事ができました。ありがとうございました。
発表の内容
このブログでもたびたび、紹介しているLithiumの特徴をデモを交えて紹介しました。
CakePHPに良く似た記述量の少ないプログラミングとPHP5.3の機能を活用している部分を感じてもらえればと思います。
おそらく今後はPHP5.3に合わせたプログラミングが一般的になっていくと思いますが、習得には実際に触れるのが一番でしょう。LithiumにはPHP5.3を実際に活用した生きたコードがあり、その優れた拡張性はきっと癖になってしまうでしょう。
ぜひぜひお試しください!
追記
思わぬ反応が得られたのでDig A Ponyのリンクも埋めておきますw
歌詞はググれば出てきます。
資料
参考: Dig A Pony
勉強会の内容
休日開催という事もあり、盛りだくさんな内容でした。ちょっと眠かったので記憶に残っていない部分もあったりします。CakePHPユーザーの割合が8割程度という事で利用の幅広さを感じました。またcakephperさんのMongoDBの発表はとても刺激的で、CouchDBのセットアップに挫折した自分としてはとても魅力的でした。IRCにはLithiumのJonも来ていて翻訳ソフトを使ってコミュニケーションを取っていました。
PHP勉強会もNoSQLや国際化などの新しい波が来ているのかな、と思うところがありとても楽しかったです。
最後になりましたが、ustreamの配信をしてくださったNEKOGETさん、運営のgusagiさん、発表者、参加者のみなさんおつかれさまでした!
今年もいい年になるといいですね。
NYPHPでNate Abeleの「On the origin of Lithium」を聞いてきた
1月 27, 2010 by yandod · Leave a Comment

ニューヨークのPHPコミュニティが毎月開催しているNYPHPに参加してきました。
NYPHPは毎回、一人のスピーカーが1時間半ほど喋り、その後はTGI FRYDAYに行くという形式で開催されている勉強会です。
今回のスピーカーはCakePHPの元リードデベロッパーのNateによるLithiumのお話という事で、疲れ気味の体に鞭を打って参加してきました!
講演の内容のポイントを紹介します。
PHPとフレームワークの歴史
プレゼンテーションは最初にLithiumはもうCakePHPではないという事、枝分かれした存在である事について触れてからLithiumが誕生するまでのPHPの歴史を振り返ります。最初はPHP/FIから始まり、マークアップ的に処理が記述できる例などを示し、そこからPHP3、PHP4、PEAR、PHP5、CakePHP、symfony、CodeIgniter、Zend,,,という風にPHPにさまざまな技術的な進歩がもたらされた事をコメント付きで紹介していきます。ただのスクリプトでしかなかったPHPがだんだんと整理された機能になっていく事がわかります。また特にCakeやsymfonyについてNateがコメントする部分では質問が出る事もありこれだけでかなりの時間が。
これらの進歩により、機能をオブジェクトとしてデザインされたライブラリとして実装するという統一性は達成されましたが、引き換えにフレームワーク内の密結合や、拡張性が失われるといった事が起きています。また機能そのものについての論争のような事は極めて表面的なトピックに過ぎず、答えは人の数だけあり各自の判断でより生産的だと思うものを選択すればよいという事も述べていました。(例としてソースのインデントをタブにするかスペースにするかといった話など)
PHP5.3
そしてPHPに訪れた大きな変化として、Late Static Binding, Namespace, Clousureの話へと進みます。Late Static Bindingによりstaticなメソッドやプロパティを持ったクラスの派生クラスをようやく書くことができるようになりました。(正確には書くことはできるが、継承元のクラスから派生クラスのメソッドをコールバックするような形にできない)またNamespaceによりこれまでは各ライブラリやフレームワークが独自の工夫で解決していたクラスとファイル名をマッピングする為のルールのベースが言語としてようやくサポートされました。そしてClousureはメソッドの呼出しなどのバリエーションをさらに柔軟にする事ができるようにしてくれます。
このあたりからちょっとしたコードを書いて説明したりするようになりめちゃくちゃ面白くなってきます!
Lithiumのデモ
PHP5.3の機能の紹介からLithiumのデモへとセッションは進みます。CakeFestの時にも言っていましたが、Lithiumはブートストラップが非常に薄くなっており、処理は2行しかありません。その後の初期化処理としてはLibrariesクラスを利用してライブラリを登録する処理が行われます。ここでポイントとなるのはLithium内でつかわれるクラス群もこのLibrariesを介して操作するという事です。つまり、このLibrariesクラスを介してZendのライブラリなどを登録した場合、フレームワーク内では特に区別されず、コアクラス自体を差し替える事もできるのです。
通常、多くのフレームワークは内部で特定のクラスをハードコードして呼び合う部分がかなりの部分あり、そこが拡張しづらいポイントとなり制約となります。(symfonyもfactories.ymlである程度制御できますが、ハードコードされている部分もかなりありますね)それをPHP5.3の機能を生かして拡張可能な形を実現したのが大きなアイデアです。
またクロージャを生かして、オブジェクトへの設定などをより柔軟に与える事ができるようになった例をいくつか。たとえばRouterに対するルーティングの設定としてModelからFindした結果をマッピングして渡す、など。PHP5.3以前でやるとすれば、データを取得したのちに配列へ格納し、ループしながら設定するなどの工夫が必要になるところですが、クロージャを利用することで一行で記述できました。
そして最後にLithiumのフィルタ機能についてのデモに入ります。フィルタ機能は任意のクラスの任意の処理の前後に処理を設定する事が出来る機能です。たとえばデータベースのログを取得したければ、Databaseクラスのexecuteにフィルタを設定するといった形です。通常ならこのように処理の前後に介入するならばコールバックを設けるか、派生クラスを作りラッパーメソッドを書くところでしょう。これをシンプルな記述だけで実現する事ができます。
応用の例としてLithiumのコードカバレッジの取得がこのフィルタ機能を使っている事が明かされました。(xDebugのダンプだとデータが大きすぎる)
まとめ
Lithiumの思想についてはこれまでのたびたび、和訳で紹介してきました。しかしながら実際のデモやその他のフレームワークなどに言及しつつNateの話を聞くことでよりはっきりとその思想を理解する事ができました。通常、フレームワークというとどんな機能があるとか何が出来るといったポイントで評価しがちですがこれはNateの言葉を借りるなら「表面的で、人の数だけ答えがある」という話なのだと思います。
LithiumがCakePHPだけでなくさらに多くのフレームワークや技術の反省点を生かした上で「拡張性・軽量性」を追求しているという事がよくわかりました。
Lithiumの拡張性は高く、ORマッパにDoctrineを組み込む実装などが簡単に行えます。機能に気に入らない部分があれば作りかえるなり、他から借りてくればよい。ただしその設定や拡張に複雑な実装が必要ないように。ということですね。
一見難しいフレームワークという印象だったのですが、CakePHPの機能は引き継がれており拡張などをする場合はCakePHPよりもシンプルに記述する事ができます。
いやー、これは面白かったです。
おまけ

懇親会はTGI FRIDAYS。最初にハイネケンを頼んだ後に、バーガーを頼んだら「セットにできるよ」と言われてそれに。最初のビールに付け足してくれるのかと思いきやビールももう一杯きてちょっと大変でした・・・。
イテレーション・フライデーのススメ(和訳)
1月 25, 2010 by yandod · 2 Comments
開発が進んでいる、「PHP5.3以降の最も軽量で柔軟なフレームワーク Lithium」ですが、マネージャのGwooから面白い試みが提唱されています。その名も「イテレーション・フライデー」。オープンソースでソフトウェアを開発している人にとっては興味深い運動だと思います。
詳細は下記の和訳をどうぞ。
原文
http://rad-dev.org/lithium/wiki/blog/iteration-friday
Iteration Friday
ここLithiumプロジェクトではJames Martinによって提唱されたRAD(Rapid Application Development)という手法を用いています。Rapid Developmentから発生し、進化した実践としてアジャイル、スクラム、XPがあります。
Union of RADが用いている手法も進化しています。我々は強力なコラボレーション、コミュニケーションの動機、活発なユニットテストと短いイテレーションを重視しています。最後に上げた「短いイテレーション」がこの記事の目的です。
明日、(2010/1/8)は最初のイテレーション・フライデーになります。しかし、これまでやってこなかったということではなく、初めてこの名前で呼ばれる明日という事です。ジーンズを履きハワイアンシャツやファンキーな帽子でも身に着けて、このイテレーションでマージし、利用可能になった変更をアナウンスしてください。
イテレーション・フライデーの目的継続的なリリースの為の自然なスケジュールを推進です。我々は短いイテレーションこそがコードの品質と開発速度を押し上げると信じています。イテレーションの内容は重要ではありません。たった1つの機能であれ、1000の機能であろうがそれは重要ではありません。規則的なスケジュールで変更がマージされる事がチームとコミュニティの為になり、またRapid Developmentの成功の鍵なのです。
我々はイテレーション・フライデーへの皆さんの参加を待っています。あなたのプロジェクトを同じスケジュールで進め、一緒に楽しんでしまいましょう! iteration-friday.net のウェブサイトを見て、あなたのプロジェクトのイテレーションの準備が出来たらツイートしてください。
~ gwoo ~
–訳ここまで
オープンソースのソフトウェアを開発する際に開発の速度が安定しないというのは誰もが悩んだ事のある問題でしょう。それを解決する一つの実践がこのイテレーション・フライデーです。この記事ではよく知られているアジャイルやスクラムといったものを包括する概念としてRAD開発に言及しています。アジャイルの定義とはイテレーションであると最近、僕は考えています。頻繁なリリースを実行し、イテレーションを自然に実践する事が出来るイテレーション・フライデーに参加してみませんか?
どんな開発速度であってもかまいません、毎週金曜日に変更をマージし、リリースし #iFrydayのハッシュタグをつけてアナウンスをすればOKです!
大事なのは頻繁に規則的にサイクルが回る事です。
新年早々、Lithium0.4がリリースされました!(和訳)
1月 7, 2010 by yandod · Leave a Comment
あけましておめでとうございます。
まだ正月ボケが冷めやらずといった時期ですが、Lithium0.4のリリースの知らせがnateから飛び込んできました。前回のリリースが12/9なので1か月たたずのリリースということで開発の活発さが伝わってきます。Lithiumの特徴である究極の拡張性を推し進める為の変更が行われているようです。という事で内容の方を見てみましょう。
原文
http://rad-dev.org/lithium/wiki/blog/Happy_New_Release_of_Lithium_0_4
Happy New Release (of Lithium 0.4):
ホリデーシーズン中は少し静かでしたが、Lithium0.4が利用可能になった事をご案内します。前回のリリースから100以上の変更が行われ、バージョン1.0に向けた執拗な前進は全速力で続いています。リリースのハイライトは以下の通りです。
- キャッシュレイヤーの著しい改善:
さらにXCacheとRadis用の新しいアダプタの追加。アトミックなインクリメントとデクリメントのサポートと複数キーの読み書きの基礎の追加。 - アダプタ設定を扱うベースクラスのリファクタリング:
合理的で一貫性のあるAPIを提供する為の努力によりいくつかのフレームワークの設定を扱う core/Adaptable クラスがリファクタリングされました。また data/Connections がこれを継承して書き直され、LithiumのコアAPIがより統一されています。 - コンソールコマンド:
li3 build コンソールでアプリケーションとライブラリの配布に便利な .phar アーカイブのビルドと展開ができるように。また li3 build test を起動することでモックを生成できます。有効なオプションについてはAPIドキュメントをご覧ください。 - さらなる拡張性の為のリファクタリング:
僕らは開発者がカスタムクラスで殆どの依存要素を置き換えられる極めて拡張性の高い柔軟なコアを自負してきました。先週、このコアがどれだけ拡張性に富んでいるかをテストする事を決めました。そのためにフレームワーク内の静的結合を計測する為の小さなツールを書きました。このツールにより僕らはより動的にする事が可能な静的な結合を認識できるようになりました。
この変更の後の分析結果はcoreとutilの二つのパッケージ(フレームワークの基礎を構成するパッケージ)を除いてとても満足いくものでした。たった2つのパッケージだけが内部のパッケージに静的に依存しているのです。これが意味するのはフレームワークのほぼすべてのパッケージを展開し、自分自身のクラスを使う事が出来ると言う事です。それだけではなく、coreとutilのパッケージ小さなアプリケーションやミニフレームワークの基礎やユーティリティとして利用できるフレームワークのマイクロカーネルとして振舞う事に気が付きました。
別のニュースとして、Joëlがli3_queueプラグインの作業を開始しBeanstalkをサポートしようとしています。またMariano IglesiasがDoctrineORマッパをLithiumと共に使うチュートリアルを執筆しました。
という事で、リリースが冷めないうちに試してみる事をお忘れなく。0.5でもこれ以上の変更を予定していますので。
最後にLithiumプロジェクトに集まってくれたり、コードや助言、激励などを頂いた皆さんに感謝を述べたいと思います。これがLithiumコミュニティの始まりならば、僕はとてもとても大きな希望をこのプロジェクトに抱いています。
2010年を大きな年に
~ Nate ~
–翻訳ここまで
Nate達、開発チームが究極の拡張性を追求しているライブ感が伝わってきますね。またその拡張性の高さ故に一部分を他のプロダクトで差し替えたり、また逆にLithiumの一部分だけを再利用する事も容易になっています。そろそろフィルター機能などを実例を交えて説明できればと思っています。また日本でもおなじみのJoelが作業をしているBeanstalkも興味深いですね。(初めて聞く名前でした)
とはいえ、まずはフレームワークが発展していくこのライブ感を楽しみたいところですね。
Lithium0.3がリリースされました(和訳)
12月 12, 2009 by yandod · Leave a Comment
最も先鋭的なフレームワーク、Lithiumのバージョン0.3が2009年12月9日にリリースされました。プロジェクトマネージャのgwooからリリースノートがアップされていますので今回はこちらの記事の和訳を紹介したいと思います。
Lithiumの開発状況はどのようになっているんでしょうか?
原文
http://rad-dev.org/lithium/wiki/blog/Lithium_0_3_Now_Available
Lithium0.3 Now Available
前回のリリースから260以上のコミットを経て、Lithium 0.3が世界にお目見えしました。
ただ世界の準備は出来ていますか?何度か言及したように我々は頻繁にLithiumの安定性について質問を受けています。 実際のアプリケーションで使えるのかどうか?と。Lithium Binは0.3にアップデートされました。Lithiumの構造を見ることでこの質問にお答えします。
構造(Structure)
Lithiumフレームワークは10のパッケージに分類されます。それぞれは個別の機能を中心とした形になっており、フレームワーク内のいくつかのパッケージに対して依存関係があります。この依存関係の基本はcoreパッケージとutilパッケージの部分です。(つまりここが)フレームワークの中核部分です。
これらのパッケージは基本的なブートストラップとその他のほぼ全てのパッケージの為の便利な機能を提供しています。とても小さなアプリケーションや、自作のマイクロフレームワークの為であればこの2つのパッケージを使う事ができます。多くの高度な機能が出来たばかりのころから、これらの基礎的なパッケージは約1年半ほど開発され、テストが進み安定しています。
storageやconsole、dataといった多くのパッケージはとてもしっかりとしています。これには機能を検証する為の広範囲のテストスイートも含まれています。ですが我々が安定版であると太鼓判を押す前にいくつかやることが残っています。
幸いにも、Lithiumは疎結合で高い拡張性を持つように設計されていて簡単に自作のクラスと入れ替える事が出来ます。フレームワークの大部分が依存しているコア機能を入れ替えたり、またコア機能を革新的なフィルター機能を使って拡張したり置き換える事が出来ます。
フレームワークのコアの動きをみて、我々と同じように興奮を持ってあなたのアプリケーションに使ってもらえる事を期待しています。それがここからさらに良い状態に進むための唯一の方法です。
更新情報
この3週間の間に多くの更新がありました。特に顕著なものは下記の通り。
- データベースとの接続クラスの安定性の改善:
dataレイヤーは大きな進歩がありました。MongoDBとCouchDB向けのバグフィクスと機能追加やMySQLとSQLiteのアダプタに進歩がありました。 - Windowsサポート:
David Persson, Joël Perras, Neil Archerに感謝します。ディスパッチャとコンソールがWindowsに完全対応しました。また更なる支援がMicrosoftから直接ありました。詳細は後で触れます。 - セッションとクッキーのサポートと統合されたインターフェース:
セッションとクッキーのサポートが完全に実装されました。また一つの一貫性のあるインターフェースでアクセスできます。詳細はドキュメントを見てください。 - 改良された国際化対応のサポート:
メッセージ翻訳システムが更新されさまざまな使い方が出来るようになりました。この機能がこのシステムそのものを補っています。- Message::translate() はフィルターする事が出来るようになりました。たとえば翻訳出来なかったメッセージを未翻訳とマークして記録できます。
- extractコマンドのさらなる改良。ソースコード内のメッセージを展開する為のさらに直感的なインターフェースを持ち、さらにカスタムアダプタをサポートしました。(docs translation extensionを見てください)
- テンプレート内での翻訳方法が変わりました。 $tn() がすでにある $t() に追加されました。双方のメソッドの書式が更新されています。
- メッセージを展開する為のパーサを $tn() をパースできるように更新しました。
- 次のリリースでは日付と数値の標準化と現在のロケール情報を透過的に取得する方法をサポートする事を予定しています。
ニュース
現在、多くのLithiumプラグインが開発中です。OAuthプラグインは大きく前進し、あなたのアプリケーションをOAuthクライアントとしてOAuthプロバイダと接続できます。(あなたがTwitterクライアントを作る時など)プロバイダとのインターフェースはさらに改善中です。
我々の前任のフレームワークではプラグインの配布と更新は常に頭の痛い点でした。Lithiumではそのあたりを改良しています。いくつかの驚きの計画もあります。ご期待ください。
最後に全てのLithium開発者に対するハイレベルなサポートの申し出がありました。Uniod of RADチームはフル機能のWindows Server 2008 VPSとIIS、FastCGI PHP5.3をセットアップしました。このサーバーは先週、2009年11月に開催され、コアメンバーの一人がLithiumを発表したMS Web Debeloper Summitで私たちに気前よく寄付されたものです。これによりwindowsはLithiumの第一級のデプロイプラットフォームの選択肢になり、開発者の選択肢を最大化します。
–翻訳ここまで
Lithiumの大まかな構造や、コア部分がかなり安定しているであろう事が見て取れたのではないでしょうか。またCakePHPはWindows上での動作が顕著に遅いといった問題がありましたが、これも解消されそうです。MongoDBやCouchDBをMySQLと同格の扱いで扱っている点も見逃せません。
CakeFestの際にNateに聞いたのですが、cake3(Lithium)はこれまでのCakePHPの歴史や機能、反省点を念頭において開発をされていますので、驚異的なスピードで機能が備わっていきます。おそらく安定版がリリースされた際にはCakePHP1.2ないし1.3と同等以上の機能を備えていると思ってよいのではないでしょうか。ただコミュニティやドキュメントについてはまだ表には出てきていません。(いくつか聞いている事はありますけど、まだ秘密)
ということでお手元にPHP5.3環境を用意してLithiumを試してみるとこのライブ感を感じられて楽しいかと。
Lithiumによる高速アプリケーション開発のケーススタディ(和訳)
12月 4, 2009 by yandod · 3 Comments
PHP5.3以降専用の軽量フレームワークLithiumの誕生の経緯について以前、紹介しました。Lithiumは軽量さ、拡張性を追及するという事でCakePHPとはまた違った理想の元に開発されているフレームワークです。実際にLithiumを使った開発の流れをベルリンであった事のあるジョン(写真左)がエントリを書いていたので今回はこの記事を紹介しようと思います。ケーススタディはOSSのチャットサービスAnalogueとして実装されていてバックエンドはCouchDBを採用しています。
ジョンはベルリンで会った中でも最高に親切で英語のおぼつかない僕やcakephperさんに「荷物を置きにホテルに戻るけど来る?」とか「パーティの場所はわかる?」とかいろいろと気にかけてくれました。そんなジョンが書いた記事という事でちょっと気合が入るところです。気さくなジョンがフレンドリーに語りかけてくるイメージでお読みください。
なお本文の各セクションは実際のコードを見ながら読むと分かりやすいのでセクションごとにリンクが設けてあります。
原文 “Rapidly developing an application with Lithium: a case study”
http://rad-dev.org/lithium/wiki/blog/rad-dev-a-case-study
Lithiumによる高速アプリケーション開発のケーススタディ
この記事はPHPフレームワークの中でもっとも先鋭的なLithiumを使って開発を行った際の流れを振り返ってまとめよう。この記事を書いている時点でLithiumはまだ初期の開発段階で、本番利用は推奨されない。だが、そのシンプルさの働きでアプリケーションとフレームワークを効率的かつ簡単に繋げる事ができた。この実験の中で僕はオープンソースアプリケーション「Anologue」をすばやく開発し、サービスを立ち上げ、仲間の開発者と協力する事ができた。
書く前の考え
何かを書き始める前にそのアプリケーションの目的について考えるのは大事なことだ。達成の為に絶対に必要な事にフォーカスした明確なゴールを定義する必要があった。すばやく動くためには全ての側面でシンプルである事が重要だ。そこで僕はリファクタリングと実験にフォーカスする事にした。
僕の初期のゴール: どんな人数の人にもチャットルームのようなWEBページを見せられるようにする。リンクを生成し誰にでも参加した会話をシェアする。名前とテキストを入力して会話に追加する。
データベース
この段階で僕のアプリケーションのデータをどうやって集めて取り出すか、どのデータベースを使うのかを考えた。PastiumはうれしいことにCouchDBで動いているが僕の経験は限定的だ。ここはひとつ最初からやってみるいい機会に思えた。
なぜなら僕はユーザーやカテゴリなどのリレーショナルな要素を実装する予定は無かったし、ドキュメント志向のCouchDBは正に僕が求めていたものだった。さらにコレクション(またはテーブル)の中のドキュメントはスキーマを共有する必要が無いので、モデルを通じてデータの保存や呼び出しをすれば、簡単にドキュメントを追加したり、削除したり修正できる。基本的にCouchDBに対して僕がやったのはコレクションを作っただけで、それからは何も見直していない。残りは全てPHPだ。歓喜の涙でモニタが見えず、プログラミングを続けられないくらいだった。
モデル
実際のコード
僕はモデルのデータをベーシックな配列で統一する事にした。(訳注:Lithiumはモデルのデータ構造を配列とオブジェクトで任意に選択可能)それぞれ自身の内容を含み、さらに便利な幾つかの他の情報も含む。(これは僕がやっておいた)機能的には新しいドキュメントの作成、IDで指定されたドキュメントの読み取り、配列に含まれるメッセージでのドキュメントの更新が必要だった。またCouchDBはHTTPプロトコル上で動作するのでメッセージを保存する前にURLエンコードする必要があった。またメッセージを読み取る際にはURLでコードも必要になる。以上が基本の内容です。(編者注:これらのほとんどの処理は公式のCouchDBアダプタが自動で行うよう現在ではなっている)
コントローラー
実際のコード
モデルのようにコントローラーにも3つのシンプルなアクションが必要になる。新しいモデルの作成、モデルの読み取り、存在するモデルへのメッセージの追加だ。どれも非常に素直に進める事ができる。
僕のLithiumの好きな面の一つにコントローラーから直接JSONのデータをダンプできる事がある。これはとてもシンプルなアイデアでコードもシンプルになる。
$this->render(array(‘json’ => $data));
またスタティックなオブジェクトを使ってコントローラー内でモデルを動かすのも論理的だ。そうなのかどうかは実際に見ておいてほしい。
コードを見ると$statusという変数があちこちにばら撒かれているのに気がつくと思う。これはAJAXを使ってJSONのデータを受け取る時にJSend仕様を確認する為に入れている。仕様はかなりシンプルで色々な方法があるのかはわからないけれど、無難なレスポンスのフォーマットを統一する方法としては理にかなっているだろう。もしこの仕様を見つけられないのであれば、この方法を見てほしい。
ビュー
実際のコード
次にビューについて述べよう。このアプリケーションではビューは一つしか必要ではない。(このアプリケーション内の他のビューはただのページで、これは1つのコントローラに貼りつけてしまおう)
このViewビューはメッセージを送信する為の入力フォームを表示する。また存在するメッセージをループしてHTMLのフォーマットにする。またそのあとにanologueのidを共有する為のURLををショートカットする処理を追加した。
javascript
実際のコード
残りの部分はLithiumには関係がない。ただ他の部分とどのように合わせるかやあなたのアプリケーションの開発の為にインスピレーションを与える事はできるだろう。まとめていく中でrad-devのサイトに載せる時にひっかかった所がある。cli-naviの部分だ。僕らは基本的にページが読み込まれた時にオブジェジェクトを作り、いくつかの要素にイベントがアタッチされた時にアプリケーション固有のメソッドを提供していた。この場合だと新しいメッセージの送信、新着メッセージのポーリング、新しいメッセージの生成とHTMLの追加だ。
ボーナスラウンド
Showdownを使ってMarkdownをサポートしたらいいのではないか?思うにテクニカルなユーザがコードの共有をしたり、マニアなブロガーがテキストをスタイリングするのに有用だ。またちょっとした自己主張をしたい時にgravatarを使えるようにEメールのフィールドを追加した。最後にHTML5のaudio elementとブラウザの互換に対応する為の少しのJSもどうだろう?あなたの名前を含むメッセージが登録された時はサウンドエフェクトが鳴る。うん、何?
あきれたことにこんな小さいアプリケーションなのに僕はテストをまだ書いていない。またサードパーティによるさまざまな画像やメディアのサポートのアイデアもある。(imgur, drop.io)MongoDBへの移行や「閲覧中のユーザ」のような実験もだ。もし君がLithiumでアプリケーションを作るのにどこからスタートすればいいかわからないなら、Anologueへのコントリビュートを待ってるよ。
じゃあ、またラボでね!
~ Jon ~
- 翻訳ここまで
コードの雰囲気はCakePHPに似ていますが過激なくらい先鋭的なLithiumの雰囲気がわかる記事ではないでしょうか。また彼らは自分たちを科学者めいて呼ぶのが気に入っているようです。イベントをやる際は白衣か放射線防御服でも着るんですかねー。
変化の時(Nate AbeleがCakePHPプロジェクトから離脱してLithiumを立ち上げた理由)

photo by gregchiasson
cakephp.jpのフォーラムや一部のユーザの間でも話題になっていますが、4年間にわたってCakeの発展に貢献してきたプロジェクトマネージャのGarrett Woodworth氏とリードデベロッパのNate Abele氏が10/23頃にCakePHPのプロジェクトを去りました。
そして新たに立ち上げられたのがLithiumというそれまでCake3と呼ばれていたフレームワークのプロジェクトです。
色々と憶測を呼んでいましたが、Nate本人がこのあたりの経緯をLithiumのプロジェクトブログで語っています。
またNateの開発に対する姿勢は一般の開発者にとっても刺さる内容と言えると思いますのでCakeに関心がない方にもおすすめできます。
本人の了解の元に日本語訳を作ったのでここに掲載します。
原文
http://rad-dev.org/lithium/wiki/blog/on-transition
On Transition
変化の時
Lithiumの立ち上げから色々と進めたり整えたりしてほぼ2週間が過ぎた。まず最も大事なのは我々はこの大きな成功を助けてくれたみんなに感謝している。我々はわずか10日の間にすさまじい進歩をいくつかのサブプロジェクトとフレームワークを拡張する為のプラグインと素晴らしい小さなアプリケーションの為に成し遂げることが出来た。
二番目にこの混乱に対する説明を述べたい。主要なメンバーはCakePHPのコミュニティから来ているので何か争いが起きたように見えただろう。がっかりさせてすまないが、そんな事は起きていない。年齢に相応しく振る舞い、意見の相違について合意し、別々の道を進む事にした。残念な事に皆はあれこれと言うのが好きなようだ。大きな問題についての事もあれば、小さなこと、たとえば僕らのプロジェクトのサイトの下には”Powered by CakePHP”のバッジがあるじゃないかと。このサイトはCakePHPで作られた”The Chaw”をベースに出来ていて、しっかりと動いている。どうしてこの事を隠さないのかって?Lithiumの起源はCakePHPにあるし、僕らはそれを誇りに思っているからだ。
さらに少数派の声としては、僕らがCakePHPを憎んでいるという的外れの意見を自分自身の為に言うものがいる。しかしGarrettと僕はこの4年間のCakeに対する大きな仕事をとても誇りに思っているし、その経験があるから僕らは今このすばらしい処にいる。僕らのCakePHPへの貢献は明らかで疑いようがない。それならなぜこうなったのかって?すこし尊大な言い方になるが、僕らがCakePHPから去るのは彼らを見限ったという事なのか。
「レボリューショナリー・ロード」という1950年代のコネチカット州の郊外を舞台にした映画が今の状況をうまく説明している。この映画はアメリカからパリに移り住む事を決めた夫婦の物語だ。彼らはコネチカットの郊外にいる今の状況に満足しておらず、なにか別の何かを更に求めようとした。その結果、彼らの隣人たちも同じ疑問にさいなまれる。しかし隣人たちは何かを探したくはなく、夫婦とは違いネガティブな反応を取る。何故彼らは違う何かを求めないのか?
人は変化を嫌う事が多い。そう、先に進む事よりも恐れる事を選ぶ。なぜなら恐れるのは簡単だからだ。特に意志も努力も必要はない。目新しい事ではないが、我々は簡単にそれを忘れてしまう。僕はこんな話を聞いた事がある。もし君が2年前に書いたコードや1年前に書いたコード、あるいは数カ月前に書いたコードを見て少しでもそれを放り出したいと思わなければ君は全く進歩していない。ソフトウェア開発が職人芸だと思う僕らにとってはこれはとても意味深い。
これが僕らがLithiumへ進んだ理由だ。Lithiumは好奇心から出来た小さなスクリプトのつぎはぎとして生まれた。面白い事にこれはPHP5.3だからこそ出来た事だ。これらのスクリプトは小さなスクリプトの集まりとして設計され、実用的な問題を想定している。これはCakePHPの最も良いところでうまくいった点でもある。しかしいくつかまずいところもあり、これを教訓に解決策を探していた。
いくつかの実験の中で我々はいくつかの前提条件に疑問を持った。その時我々はPHP5への移行は簡単だと思っていた。各部分をPHP5のStrictモードに合うようにしていけばうまい具合にいくと。残念だが人生はそう単純ではないのだ。この4年間、我々はPHP4向けにフレームワークを開発しており5.3は対象になっていなかった。これはかなり時代遅れの技術だ。控えめに言っても、PHP4とPHP5.3の変更点はかなり多い。PHP5.3はPHPの開発に新しいパラダイムを呼ぼうとしている。この大きな溝を渡っていくというのは、控えめに言っても挑戦であり、うまくいったとしてもその過程で何かを失う事になる。
時代遅れの技術に対するコーディングの結果としてこの4年間技術的な負債が大きくなってしまった。これを乗り越えるのはかなり大変だ。幸運な事に僕らはコードをとても熟練してエネルギッシュなカナダ人と友人たちに託す事が出来た。一番大事な点は僕らはCakeDCのチームがうまくいくことを願っているし、CakePHPは無くなったりはしない。
僕らにとっては良いけれど、現時点ではLithiumを使ってメジャーなアプリケーションを書くことはお勧めしない。だが僕らはLithiumを皆さんにお見せ出来る事に興奮しているし、あなたにも楽しんでもらいたい。
~ Nate ~
-訳ここまで-
強調は訳者。
Nateの持っているストイックな意志の強さとCakePHPのコミュニティが死んだわけでも感情対立でもない事がわかる文章ではないいでしょうか。
実際にircチャンネルでもそれぞれのデベロッパが相互にログインしている様子を見ますし、LithiumがPHP5.3専用として0から最適化する事に意義を見出している事がよくわかります。
ちなみにLithiumの意味は色々あるそうですが、「最も軽い金属」「cake3 -> 元素番号3 -> li3 -> lithium」などの意味があるそうです。(まだまだある)


