PHPをC++に変換して高速化する「HipHop for PHP」をFacebookが公開
2月 3, 2010 by yandod · 4 Comments
アメリカ時間の昼ごろに僕のTwitter上が一つのニュースで埋め尽くされました。
PHPをC++に変換して高速化する技術をFacebookが公開したというものです。世界中のPHPハッカーが注目する興味深いリリースという事でちょっと長いですが、リリースノートの和訳を行いました。
原文
http://developers.facebook.com/news.php?blog=1&story=358
Facebookにおいて重要なことのひとつが開発スピードが早いことです。過去6年間にわたって、PHPが提供する高速な開発ペースによって多くを成し遂げてきました。プログラミング言語としてみると、PHPはシンプルです。簡単に習得し、簡単に書き、簡単に読み、簡単にデバッグする事ができます。我々は他の言語よりも早くエンジニアを獲得し、それによってより早いイノベーションをすることができます。
今日、私は2年に渡って作業してきた素晴らし小さなチームのプロジェクトを共有することに興奮しています。
HipHop for PHP。HipHopにより私たちはページによっては、Webサーバー上で約50パーセントのCPU使用量を削減できました。CPUの使用量の少なさは、サーバー台数の削減につながり、それはより少ないオーバーヘッドを意味します。このプロジェクトは、Facebook上で多大な影響を及ぼしました。私たちはHipHopがウェブに大きな利益をもたらすと感じ、今晩オープンソースとしてリリースしPHPによる大規模WEBサイトのスケーリングに新たな方向性が提示されると期待します。いまだ完全ではないHipHopでも信じれれないような結果を残しており、ベータ版であっても心地よいものであるでしょう。
HipHop for PHPは技術的にはコンパイラではありません。むしろ、ソースコードの変換機です。HipHopはあなたのPHPのソースコードをC++に最適化された形に機械的に変換します。そしてg++でコンパイルされます。HipHopは意味的に同等の方法でソースコードを実行しますが、いくつかのまれに使われる機能(eval など)を犠牲としてパフォーマンスを向上させます。HipHopコード変換機は、PHPランタイムの再実装であり、また多くのパフォーマンス向上の為のPHPエクステンションを書き直したものです。
スクリプト言語としてのスケーリングPHP
PHPのルーツは、PerlやPython、Rubyのようなスクリプト言語で、すべてのプログラマの生産性の面で大きな利点があり、迅速かつ継続的な開発を可能にします。これはC++やような伝統的なコンパイル言語やJavaのような中間言語と比較した場合です 。一方、スクリプト言語は一般的にCPUおよびメモリの使用に関して効率的でないことが知られています。このため、月間4000億以上のページビューでPHPをベースにしたFacebookをスケールするという事は挑戦的な事でした。
これらの非効率性に対処する1つの一般的な解決法はPHPアプリケーションの複雑な部分をPHPエクステンションとしてC++で書き直す事です。これによりPHPはフロントエンドのHTMLとC++のロジックをつなぎ合わせる糊のような言語に大きく変化します。技術的な観点はうまくいきますが、アプリケーションに携わる事ができるエンジニアの数を劇的に減らしてしまう事になります。C++を学ぶ事はPHPエクステンションを書くための最初の一歩にすぎません。次にZend APIを理解しなければいけません。我々のエンジニアリングチームは100万ユーザ当たり1人と比較的小さいものですが、私たちのコードベースの一部を他のものよりアクセシブルにするわけにはいかないと考えました。
ほとんどのページがログインしたユーザによってカスタマイズされるFacebookのスケーリングはとりわけ挑戦的です。あなたのホームページを表示する際はすべてのあなたの友人のルックアップする必要があり、関連する更新を検索し、(マルチフィードと呼ばれているカスタムサービス)、お客様のプライバシー設定に基づいてフィルタリングし、コメントや写真などの豊富なデータを補います。そのような豊富なデータが、人々がFacebookの愛している部分です。これらすべてが1秒以下で行われます。HipHopによって最終的にPHPとして組み立てられるロジックを、迅速かつ継続的に書く事ができます。またこのロジックはC++やErlangやJava、Pythonで書かれたバックエンドサービス、ニュースフィード、検索、チャットサービスおよび他のコア部分などと連携しています。
2007年には、これらの問題を解決するための、いくつかの異なる方法を考案しそのうちいくつかの実装を試みました。共通の改善案はFacebookを別の言語で書き換える事でした。ですが、サイト開発の複雑さと速度を達成するためにいくらかの時間がかかると思われました。我々はPHP内部のZendエンジンも書き換えそれらのパッチを寄付しましたが、最終的に必要としてパフォーマンス向上には至りませんでした。HipHopの利益は我々の開発スピードがほとんど変わらない事です
HipHopの誕生
数年前のhackathonでの一夜に(プライムタイムのハック)、PHPをC++に変換するコードを書き始めました。かなりの構文の似ているC++は、CPUとメモリ使用量に関してはPHPを大きく凌いでいます。PHP自体もCで書かれています。我々はこれほどの量のコードを書き直すのが不可能な事はわかっていましたが、もしプログラム的にこれを行うシステムを構築したらどうなるだろうと思いました。
PHPのパフォーマンスを改善するための新しい方法を見つける事は新しいコンセプトではありません。実行時には、Zend EngineはあなたのPHPソースをオペコードに変換し、その後、Zendの仮想マシンを介して実行されます。APCとeAcceleratorのは、この出力をキャッシュしPHPで提供される大多数のウェブサイトで使用されます。またZend Serverは、オペコードの最適化とキャッシュを介してPHPを高速化する商用製品です。その代わりに、我々はPHPのソースコードを直接C++に変換した後にネイティブのマシンコードに変換することを考えました。PHPをコンパイルする事も新しいアイデアではありません。RoadsendとphcはPHPをCにコンパイルし、 QuercusはPHPをJavaにコンパイルし、 Phalanger はPHPを.Netにコンパイルします。
言うまでもなく、一度のhackathonだけでは終わりませんでした。8ヵ月後、私は速くコンパイルされたコードを実行することが可能であることを示すのに十分なコードを得ました。我々はプロジェクトのスピードアップにイアン・プロクターとミンハイ・ヤンをプロジェクトのスピードアップの為にメンバーに加えました。我々は、続く10カ月をすべてのコーディングに、次の6ヶ月を本番サーバー上でのテストに費やしました。我々はリリースから6か月の時点で、Webトラフィックの90%以上のHipHopを使用して提供していると事を誇りに思っています。
HipHopの動作
プロジェクトの主な課題は、PHPとC++の間のギャップを埋めることでした。PHPは動的な弱い型付けを持つスクリプト言語です。C++は静的型付けのコンパイルされた言語です。一方、PHPは魔法のように動的な機能を記述することができ、ほとんどのPHPは比較的簡単です。if(…){…} else {..}はfunction foo($x) { include $x; } よりも好ましいです。これは、我々がパフォーマンスを稼いでいるところです。私たちの生成したコードは変数や関数の静的バインディングをいつでも使用可能です。また、変数のほとんどに型推定を用いてメモリを節約します。
変換プロセスは3つの主な手順が含まれます:
- 収集した情報から何が宣言され、何に依存しているかの静的分析
- C++の特定のタイプを、スカラー、文字列、配列、クラス、オブジェクト、およびバリアント型から選ぶ型推定
- ほとんどの部分のPHPのステートメントと式をC++のステートメントと式に直接対応されたコード生成
また我々はHPHPi も実験的なインタプリタとして設計し開発しました。HPHPiを使用すれば、PHPのソースコードを実行前にコンパイルする必要はありません。これは私達がヒップホップ自体のバグをキャッチする事と、技術者がコードを書く方法を変更せずにPHPコードを書けるようにします。
全体的にはHipHopはC++のパフォーマンス上のメリットを活用しつつ、PHPの良い面を維持することができます。合計では我々30万行のコードとと5000以上のユニットテストを書きました。今夜GitHub上で、全てがPHPライセンスの下でリリースされます。
今夜のお楽しみ
今夜、我々はHipHopの深部へ飛び込む開発者の小さな集まりをストリーミングします。ご覧になりたい場合は太平洋時間19:30に再度こちらのページをご覧ください。
今夜、多くの質問があると思いますが、HipHop wikiを見てください。(リンクを後ほど公開するつもりです)あるいは、 HipHopの開発者メーリングリストに参加してください。また今後数ヶ月、FOSDEM 、 SCALE 、PHP UK、 ConFoo、TEX X、OSCONなどのイベントで、でHipHop for PHPについて講演をします。我々は非常に盛んなオープンソースプロジェクトに皆さんと一緒にHip Hopが進化することに興奮しています。
海平趙、シニアエンジニア、Facebookがプログラマの楽園と悟っています。
—訳ここまで
長文という事と、タッチが慣れないという事があって誤訳があるかもしれません。自分なりに咀嚼して書いてみたつもりですがご意見などあればTwitterなどで頂ければと思います。次はだれが最初に試すか、本番に投入するかという勝負ですね。とはいえFacebookでは90%のトラフィックで利用しているとの事ですからコードの書き方に気をつければ安定しているのでしょう。ということでみなさん、お試しあれ!
Lithium0.5がリリースされました!(和訳)
2月 1, 2010 by yandod · Leave a Comment
最も軽量で拡張性に優れたフレームワーク、Lithiumのバージョン0.5がリリースされました。1.0リリースに向けて折り返し地点と言った所ですね。リリースの速度が速すぎて翻訳する方もちょっと大変ですが、喜ばしいニュースですのでお伝えしたいと思います。
原文
http://rad-dev.org/lithium/wiki/blog/Lithium_0_5_half_way_there
Lithium 0.5, half way there.
Lithiumチームはバージョン0.5のリリースを喜んでお知らせします
バージョン番号から見ると、我々はLithiumの最初の安定版に向けた折り返し地点にいます。Lithiumチームは着実な3週間毎のリリースを続けます。またイテレーション・フライデーが助けになるでしょう。
このリリースにはいくつかの新機能が含まれます:
- apps/plugins/extensions を管理するライブラリコマンド
- モデル、コントローラー、テストをコード生成する為のコマンド
- 一般的な利用の為の国際化されたバリデータ
- 柔軟性とメンテナンス性向上の為のブートストラップの整理
- アダプタ化可能な認証API
- ビューエレメントのレンダリング
- 更なるドキュメント
- 更なるテスト
Lithiumは実際のところかなり安定していていくつかのエキサイティングな機能を含んでいます。MongoDBかCouchDBを使ってアプリケーションを開発する準備は出来ています。しかしあなたがORマッパを必要としているなら、Doctrine用のプラグインがあります。あるいはLithium上で実装されるリリースまで待たなければいけません。エクステンションやヘルパーの作成は本当にシンプルで他のフレームワークからの移植すらも簡単にできます。createコマンドを使ってコード生成をすれば開発を素早く立ち上げられるでしょう。
Lithiumチームは0.5と合わせてその他の更新をお知らせします
- 私たちは新居を見つけました: http://lithify.me
- lab.lithify.meのプレリリース。LaboratoryとLibraryコマンドはLithiumをプラグインを通じて拡張するという目的の一部です。 li3_lab プラグインによってサーバーから提供されるプラグイン・エクステンションを統合し、アプリケーション間でのコードの再利用と共有を容易にします。Libraryコマンドはアプリケーションやプラグインを圧縮・展開出来ます。またプロジェクトを始める為の基本となるアーカイブも添付しました。詳細は li3 help Library でご覧ください。
Lithiumワールドの動きは速く、さらに力強くなっていきます。お見逃しなく!
~gwoo
—訳ここまで
Lithiumのリリースが3週間毎であることが明言されました。これは前回紹介したイテレーション・フライデーで開発が着実に進んでいるとみてよいでしょう。RDBを利用するのであればDoctrineを利用するのが良いですが、MongoDBやCouchDBを使ってアプリケーションを開発するのであれば問題はないようです。実際に開発チームが運用しているアプリケーションはMongoDBやCouchDBばかりなので安定度が高まるのも当然と言えます。コードの圧縮展開などを実現するコマンドラインの進歩も目覚ましいですね。
次回のリリースは2/15ということで、試すのであればお早目に!
第49回PHP勉強会で「Lithiumラボ #1」を発表した
1月 31, 2010 by yandod · Leave a Comment
第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を試してみるとこのライブ感を感じられて楽しいかと。
CakePHPの変化と新しいプラグイン(和訳)
12月 11, 2009 by yandod · Leave a Comment
CakePHPの開発体制の変更がbakeryでアナウンスされました。Tracで開発されていた頃が懐かしく思えてきます。これまではツール自体をフレームワークで開発する事で完成度を高めていくアプローチでしたが、今後は外部のサービスなどを積極的に採用していくのでしょうか。
という事で詳細は現リードデベロッパのMark Storyさんのポストをどうぞ。
原文
Changes in CakePHP and new plugins
http://bakery.cakephp.org/articles/view/changes-in-cakephp-and-new-plugins
CakePHPの変化と新しいプラグイン by Mark Story
1.3と2.0の開発が本格化する中でCakePHPチームはチームとコミュニティが使うツールについて再評価と検討を行っていました。近年、CakePHPはSubversionからGitへ移行や、問題の管理をTracからcode.cakephp.orgへの移行などの変化がありました。それらの変化はコミュニティとプロジェクトの成長に良い影響をもたらしてきました。
現在、我々は thechaw.comのソフトウェアを使ったcode.cakephp.orgへの移行は全てにおいて有益な変更ではなかったと感じています。code.cakephp.orgのコードベースはいくつかの問題を抱えており、現在のコアチームはこのコードを改良して我々のニーズにあう、幾多のソリューションのようにする事に興味を欠いています。さまざまな選択肢と道について何時間もの議論と検討を重ね、多くのオープンソースプロジェクトを管理するWEBアプリケーションのうちの一つを活用することが最良の手段であると決断しました。私たちはソースコードの管理にgithub[1]を使います。加えて、問題の管理と一時的なドキュメントをWiki上で管理する為にlighthouse[2][3]も使っていきます。
これまでもCakePHP1.xとCakePHP2.xが別のリポジトリに分かれていました。同様にlighthouse上のプロジェクトも分かれます。この変化によりコミュニティにから求められていた必要なツールとリソースを提供する事が出来ると我々は感じています。さらにこれによってコアチームの負担は少なくなり、我々がベストなフレームワークと関連するツールを創る事に全力を尽くす事に集中できるようになります。あなた -コミュニティ- が私たちの移行への思いとご不便をおかけすることを誠に申し訳なく思っている事を理解してもらえる事を望みます。
移行が終わった際は、tracとcode.cakephp.orgは停止し、CakePHPに関する全ての活動はgithubとlighthouse上に移ります。この移行には数日かかる予定です。github上のリポジトリのいくつかの履歴は過去に起きたエラーや不規則さを書き直しています。もしあなたがローカルにクローンを作って変更を加えているならrebaseによってこれらの変更を移行するようにしてください。
また今回、2つの新しいプロジェクトをアナウンスしたいと思います。その名は localized と datasources です。Localizedは全ての国々固有の1.3用のバリデータを包括するように設計されています。この記事の執筆時点で13の国が部分的、または完全に実装されています。もしあなたの国がリポジトリに無ければプロジェクトをフォークして、あなたの国を追加した後にプルリクエストを送ってください。
Datasourcesはコミュニティによるデータソースクラスを包括するように設計されています。当初はこのリポジトリは1.3で非推奨または取り除かれたデータソースが含まれています。時間とともにこのデータソースのリポジトリが成長し洗練されていく事を期待しています。またこれらの2つのプロジェクトはCakePHPからは分離した状態のままにします。これによりCakePHP自身に左右されない自由なリリーススケジュールを提供できます。
datasourcesとlocalizedの双方は問題の管理の為にlighthouseのプロジェクトを持っています。[8][9]これらのプラグインに何か問題があればlighthouseに登録してください。またこれらのプロジェクトに関わることに興味があればgithub上でプロジェクトをフォークして、プルリクエストを送ってください。
–翻訳ここまで
これまでCakePHPの本体に貢献する為にはチケットを書いたり、コアチームに入るなどの障壁がありましたがgithubに移行した事でforkしてプルリクエストを送るという簡便な方法で貢献できるようになります。また日本にとってはlocalizedは全力を尽くすべきところでしょうし、まだgithubのアカウントをお持ちでない方は登録して強力に日本からのコードで貢献していけるとハッピーなのではないでしょうか。
Twitterを見ると大量のプルリクエストにさっそくmarkが驚いているようですよ!
第48回PHP勉強会でWordCampのレポートをした
12月 9, 2009 by yandod · Leave a Comment
今月のPHP勉強会にもリモートから発表をしました。
これで通算3回目ですが、まぁ慣れてきたような気がします。時差がある海外からでも発表できるくらいなので、東京以外からの発表とかもやればできそうですね。
今回は25分予定のところを40分も喋ってしまいました。動画とかをスキップすれば納まったかもという事でちょっと反省です。また日本時間夜の勉強会はこちらは朝になるのでテンション的にボソボソした感じになってしまったのがつらいところ。。。
発表資料もあげておきます。
slideshare
ustream
聞いてくださった皆さん、USTをして頂いたNEKOGETさん、Skypeを受けてくださったgusagiさん、ありがとうございました。
「モダンPHPプログラミング」の資料が大変素晴らしい件
12月 9, 2009 by yandod · Leave a Comment
プリンとOpenPearで有名と思われるsotarokさんが公開した「Modern PHP Programming」の資料がとても良いです。PHPは敷居が低い為、非常に多くのユーザーがいます。
しかしユーザーが多い一方でレベル差が大きくなっている面もあります。
たとえば・・・
「コピペで動かすのが精一杯」
「とりあえずすいすい書ける人」
「ライブラリとかを使える人」
「ライブラリを作れる人」
「PHP自体をいじれる人」
のような感じです。PHPユーザ会が運営しているPHP勉強会なども毎月開催されていますがこのステップをどうやって登るかというのは難しい問題です。その意味でこの資料はとても役立つ内容になっていると思います。「とりあえずPHPは書けるけど、今のトレンドに合っているかわからない」なんていう方は是非ともこちらの資料を見てみるといいでしょう。なお同様のコンセプトでモダンPHP勉強会が開催されるようです。
まだ勉強会開催を控えていますが、sotarokさんお疲れ様です。



