田原 悠西さんに聞くTres Seaver氏の業績
Plone Synposium 2015 Tokyo ではゲストキーノートスピーカーとして Tres Seaver氏が来日します。Tres Seaver氏は果たしてどんな功績をあげた人物なのか?
運営スタッフの一員でもあり、自称「Zope大ファン」の田原 悠西さんに、お話を伺いました。
聞き手: Tres Seaver氏の業績についてご存知のものを教えて下さい。
田原: 僕がプログラマーとしてTresさんを尊敬しているのはZopeのコアコンポーネントであるCMFを設計してくれたことです。
CMFの抽象化の技法に則ってソフトウェアをデザインすれば、Zope上で非常に高機能なソフトウェアを誰でも理解可能な形で実装できる。この仕組みを考えだしたということですね。
ごく手短に言うと、すぐれたソフトウェアの設計方法を発明して、それを公開したってことです。
聞き手: CMFの設計はどんなところがすぐれているのですか?
田原: それが本当に良い設計だったというのはZope2上で動く高機能なソフトウェアがみんなCMFを使っていることから明らかで、PloneやERP5など、みんなCMFを使っていますし、考え方はZopeコンポーネントアーキテクチャにも引き継がれています。
で、その考え方ですが、大きくはふたつの概念があって、
ひとつは「とある特定の機能」の塊を「ツール」という、データを基本的には持たない存在にまとめて、それをどこからでも使えるようにするということ。
もうひとつは「タイプインフォーメーション」という、インスタンスとクラスの間に位置するレイヤーを用意して、それを使ってある種類のデータの振舞いを定義するということですね。
聞き手: 「ツール」と「タイプインフォメーション」がCMFのキーとなる考え方なのですね
田原: はい、そうです。とくに「タイプインフォメーション」にはいつも感謝しています。(笑)
聞き手: それはまた、どうしてですか?
田原: 普通はpythonのクラスがあって、そのクラスのインスタンスがある、という2つのレイヤーになるんだけれど、その間にタイプインフォメーションという新しいレイヤーを入れることで、一つのpythonのクラスをあまり特定の用途に特化させずに済むようになりました。ある特定の用途に特化させる情報はクラスに書かずにタイプインフォメーションに書くということです。こうすることで、クラスは汎用的なままにしておけるので、使い回しが効くんです。同じクラスのインスタンスなんだけど、似たような違う用途に使えるってことですね。
例えば、ERP5だと"注文"というものを扱うためのクラスOrderがありますが、これを受注と発注、社内注文など複数の用途に使い回しています。これはタイプインフォーメーションのおかげです。
もう少し書くと、タイプインフォメーションにはアプリケーションのナビゲーションを構築するための仕組みも入っているので、どうやってアプリケーションを構築してユーザーにアプリケーションの使い方を伝えるか(ナビゲートするか)まで最初から入っているので、とにかくCMFの流儀に乗っかってアプリケーションを作るのが楽ですね。
といった訳で、これを考え出したTresさんにはいつも感謝にしているんですが、なぜ感謝しているかの説明はこのように若干長くなってしまいます(笑)。。。
聞き手: なるほど、そういうことなのですね。詳しく説明していただき、ありがとうございました。
Plone Symposium Tokyo のゲストキーノートで話を聞くのがますます楽しみです!
[田原 悠西 (たはらゆうせい)]
Python/ZopeベースのオープンソースERPシステムERP5の開発者。株式会社Nexedi 代表取締役社長。