Nette の歴史
Nette の始まりは 2004 年にさかのぼります。作者の David Grudl は、素の PHP ではもう足りなくなり、アプリケーションを書くのにふさわしいフレームワークを探しはじめました。当時あった解のどれも彼の求めるものに合わなかったので、少しずつ新しいフレームワークの姿を描きはじめ、それがのちに Nette という名を得たのです。
そのころ、Symfony や Laravel、Ruby on Rails のような今どきのフレームワークはまだありませんでした。Java の世界では JSF(JavaServer Faces)が標準で、競う立場の .NET の領域では ASP.NET WebForms が幅をきかせていました。どちらも再利用できる UI のコンポーネントからページを組み立てられました。しかし David は、その抽象化のやり方と、状態を持たない HTTP プロトコルの上でセッションやいわゆるポストバックを使って状態を持つように見せかける試みが、筋の悪い、根本から壊れたものだと考えました。それは利用者にも検索エンジンにも多くの厄介ごとをもたらしました。たとえばリンクを保存しておくと、あとでそこに違う内容が現れて驚くことになります。
再利用できる UI のコンポーネントからページを組み立てるという考えそのものは、David を強く惹きつけました。当時デスクトップのアプリケーションを作る人気の道具だった Delphi でそれを知っていたからです。Delphi 向けのオープンソースのコンポーネントを扱う市場も気に入っていました。そこで彼はこう問いました。状態を持たない HTTP と完全に調和して働く、コンポーネントを土台にしたフレームワークはどう作ればよいのか。利用者にも SEO にも開発者にもやさしい考え方を探し求めました。こうして Nette は形を取りはじめました。
Nette という名前は、風呂場で偶然に生まれました。作者が Gillette のシェービングジェルの缶が、llette だけが見えるように向いているのに気づいたのです。
そのあと、調べもの、考え、書き直しに何千時間も費やされました。ブルノの郊外のどこかの村の、ほこりっぽいガレージで、のちのフレームワークの最初の輪郭が現れました。設計の土台になったのは MVC(Model-View-Controller)のパターンで、当時は今では忘れられた PHP のフレームワーク Mojavi が使っていて、のちに Ruby on Rails の話題で広まったものです。着想のもとのひとつは、ついに世に出なかった Honza Tichý の phpBase というフレームワークでもありました。
これから出てくる Nette についての記事が、作者のブログに載りはじめました。あれは幻の製品だという冗談も飛び交いました。しかしそのあと、2007 年 10 月にプラハの PHP Seminar という会議で、David は Nette を公に披露しました。ちなみにこの会議は 1 年後に WebExpo へと育ち、ヨーロッパでも指折りの大きな IT の会議になりました。当時すでに Nette は、先ほどのコンポーネントのしくみ、双方向のルーター、プレゼンターどうしを結ぶ独特のやり方など、いくつもの独創的な考えを備えていました。フォームがあり、認証やキャッシュなども片付けていました。これらの中心となる考えはどれも、今も Nette でもとの形のまま使われています。
Nette では controller の代わりに presenter という語が使われます。コードの中に con で始まる語が多すぎたから、ということのようです(controller、front controller、control、config、container、……)。
2007 年の終わりに David Grudl はコードを公開し、Nette 0.7 が世に出ました。このフレームワークはすぐさま大きな注目を集めました。まわりには熱心なプログラマーの集まりができ、Posobota と呼ばれる毎月の集まりが始まりました。この集まりには、優れた道具 PHPStan の作者 Ondřej Mirtes をはじめ、今日よく知られる人々が大勢いました。Nette の開発は勢いよく進み、続く 2 年でバージョン 0.8 と 0.9 が出て、今のフレームワークのほとんどすべての部分の土台ができました。その中には AJAX のスニペットもあり、これは Ruby on Rails の Hotwire や Symfony UX Turbo のような技術より 14 年も早いものでした。
とはいえ、初期の Nette には大事なものがひとつ欠けていました。Dependency Injection コンテナ(DIC)です。Nette は service locator を使っていて、dependency injection へ移る計画がありました。しかしそれをどう設計すればよいのでしょうか。当時 DI の経験がなかった David Grudl は、半年ほど DI を使っていた Václav Purchart と昼食をともにしました。話し合ったあと、David は Nette DI に取りかかりました。これはアプリケーションの設計への向き合い方をすっかり変えたライブラリです。DI コンテナはフレームワークのもっとも成功した部分のひとつになり、のちに 2 つの派生を生みました。NEON 形式と Schema ライブラリです。
dependency injection への移行にはかなりの時間がかかり、集まりの人々は新しいバージョンの Nette を数年待ちました。ですからようやく出たとき、そのバージョンはいきなり 2.0 と番号を付けられました。つまり Nette のバージョン 1 は存在しません。
Nette は 2012 年、バージョン 2.0 とともに今の時代を始めました。このとき Nette Database も現れ、そこにはデータベースを扱うとりわけ便利な道具、今 Explorer と呼ばれるものが入っていました。このライブラリはもともと、David Grudl の隣人で人気の道具 Adminer の作者でもある Jakub Vrána が書いたものです。そのあと Jan Škrášek が 3 年にわたってその開発を引き継ぎました。
2014 年に Nette 2.1 が出て、まもなく Nette 2.2 が続きました。どうしてそんなことが起きたのでしょうか。バージョン 2.2 は中身としては 2.1 と同じでしたが、20 個の別々のパッケージに分けられていたのです。PHP の世界では Composer という道具が定着し、ライブラリの捉え方が変わりました。Nette はひとつのかたまりであることをやめ、それぞれが自分のリポジトリ、課題の管理、開発の歩みとバージョン付けを持つ、小さく独立した部分に分けられました。これで、中身が何も変わっていなくてもパッケージの新しいバージョンが出るような、ひとかたまりのフレームワークにありがちなおかしなことを避けられます。Git のリポジトリを実際に分ける作業には、数週間の準備と何百時間もの計算機の時間がかかりました。
Nette はまた、SitePoint 誌が行った最高の PHP フレームワークを選ぶ世界規模の投票で、堂々の 3 位を得ました。