追記:2012/01/04
@knzm2011 が全訳してくれました。
http://plope.com/Members/chrism/in_defense_of_zope_libraries の翻訳
1/3くらいまでです。
PyramidがZopeライブラリを使っていることについて
IRCチャンネルで訊かれた以下のような質問について、多くの時間を割いた。
<誰かさん> pyramidはzopeベースだと聞いた。zopeは悪だ。なぜpyramidはzopeベースなのか?
Pyramidはzopeの名前を持ったライブラリを使っている。
より正確にいうと、実際に使っているのは、 zope.interfaceとzope.deprecationの2つだ。
上に書いたようなIRC質問でるのは、少なくない人たちが、 zopeは悪だと考えている証拠だろう。
そして、推移的に、pyramidも悪だと感じるようだ。
もしくは、zopeを消してしまうことで、pyramidがより良くなるだろうと。
だが、そのように白黒付けたがるのはわかるが、実世界はもっと複雑だ。
物事の真実がそんなに単純であれば説明するのも簡単だろう。その方がいい。
だが、そうではない。そして、明確な答えを示す必要があるくらいに、上のようにたびたび質問される。
ただし、説明するとなにかが失われる
だから、かわりに物語として語ることにしよう。
時は1999年、場所はPhiladelphia PA, USのあるソフトウェアコンサルティングの会社で。
20数名のあまり経験のない開発者たちが、地元企業のイントラネットアプリケーションを作成する必要にせまられた。
彼はとても世間知らずだった。手に余ることばかりだった。
彼はPerlでは、どんどん危険になると気づいた。
彼はMySQLをバックエンドに使い、Perlで書いていた。
システム内の関数は、だいたいこんなものだった。
sub get_domains {
my $r = Apache::Request->new(shift);
my %cookiejar = Apache::Cookie->new($r)->parse;
# ... check the cookies for a user id ...
# ... check the userid against a table in the database that
# ... says whether the calling user is allowed to get domains
# ... if not, redirect to login page.
# ... if so, do some inscrutable SQL statement to get the domains
# ... and render them into HTML.
}
これはうまくいかなかった。
金曜日の午後(mod_perlをチューニングするという壮絶な苦しみの最中だった)、
彼は、Slashdotで Zope 1.10という新しいシステムを見つけた。
それはPythonというオープンソースのスクリプト言語で書かれていた。
それは自身をアプリケーションサーバーと称していた。
そして、すばらしい管理画面やセキュリティ機能のスクリーンショットを掲載していた。
彼はこれを試すことにした。
彼は自分のWindows NT用のインストーラーをダウンロードすると、ダブルクリックしてインストールした。
そして、基本的な操作方法にしたがって、管理画面をNetscape Navigator4で開いてみた。
彼は三つのことに感動した。
a) Webブラウザでコードを書ける
b) 非常に先進的なセキュリティモデルを持っていた。
そのため、完全に信用できるわけではない人々にでもWebブラウザからコードを書かせることができた。
そして、Zopeのセキュリティモデルは宣言型だった。
つまり、これらのデータモデルとセキュリティモデルを受け入れてしまえば、mod_perlのアプリケーションで書いていた、決まりきったセキュリティチェックのコードをすべてなくしてしまえた。
リレーショナルデータベースを用意する必要もなかった。専用のオブジェクトデータベースまで含んでいたからだ。
UIは、データベースとコードをツリーとしてグラフィカルに見せてくれた。
これは彼に信じられない天啓のようだった。
そして、彼はこれらの機能によって、今書いているシステムをより早く簡単に作れることを悟った。
彼の技術力の中で、これほどの生産性を持つものはなかった。チャンスだった。
mod_perlで書いたコードはすべて捨ててしまった。
Pythonの知識はまったくなかったが、Zopeのソースや適当なメーリングリストの議論から情報を広い上げ、Zopeを使ってどうにかシステムを作り上げた。
彼は、テストの書き方をまったく知らなかった。
彼の会社にいる人たちも、誰もテストの価値を知らなかった。
だから彼もテストを書いていなかった。
web上でのコーディングあるにもかかわらず、そしてこの仕事の以前にもPythonの知識もほとんどなくかったが、mocl_parlで書いたものよりもよいものになった。
a) Zopeの宣言的セキュリティモデルに完全に頼るようにした。
b) セキュリティの設定を変えるために必要なUIを顧客に見せた。
c)出来上がったシステムは、これまで彼が書いていたものよりも、非常に精密なセキュリティモデルを持っていた。
― セキュリティはコンテキストに依存する。よって、もし誰かがドキュメントをイントラネットに追加したい場合、問題なくそのドキュメント固有の認証情報を持っていなくてはならない。
これを顧客にみせたところ、彼らは非常に気に入ってくれた。
Zopeの新しいバージョンは、バージョン2.0として、すぐにリリースされた。彼は、コードを比較的簡単に移行させることができた。
彼はそれからいくつかのZopeの仕事をこなした。しかし、彼はその後Philadelphiaの会社をやめた。Microsoft製品を取り扱うようになったからだ。
彼は、その後、いくつかの幸運によって、Digital Creationの職を得た。Zopeそのものの開発者となった。
数年のとても良い時間をすごした。
彼はZope 2アプリケーションをさまざまな顧客に向けて書いた。
また、Digital Creationsの同僚やマネージャーたちから多くの(とても、とても良い経験だった)本当のソフトウェアエンジニアリングについて学んだ。
後半で明かされますが、これはChris MacDounoghの物語です。
ここまではZopeと出会い、そしてZope自体の開発者になるまでの話ですね。
当時のWebアプリケーションプログラミングはmod_perlが常識?だったのでしょうか。JavaもすでにServletが登場していたと思いますが、まったくかかわりがなかったようですね。