インターネットの広がり、Web の普及とともに、 Web アプリケーションも勢力を広げ、 従来型のアプリケーションから Web アプリケーションへのシフトが続いてきた。 携帯電話にもフルブラウザが登載され始めており、 携帯電話専用アプリだけでなく、 Web アプリケーションへのアクセスも可能となってきている今、 その Web アプリケーションの開発はどうなっているのだろうか。
Web アプリケーション開発の二極化
まず、Web アプリケーションと一口にいっても、 企業内情報システムのような大規模な重量級アプリケーションから、 掲示板、ブログのような軽量級アプリケーションまで、様々なものがある。
現在、Web アプリケーション開発といえば、Java とその関連技術(J2EE 等)を用いた開発と、 Perl/Python/PHP/Ruby といったインタプリタ言語を用いた開発に二極化している。 これまで重量級アプリケーションの開発には Java 系統の技術が用いられるのが常識であった。 理由は色々あるが、 一つには Sun Microsystems 社を中心にしてライブラリ、 開発手法、ドキュメント類が整備されていることが大きいと思われる。 重量級アプリケーションとなると、開発期間は半年から一年(以上)、 開発に関わる人員も数十人(以上)となる。 Java ではこのような大規模開発に対応するための開発モデルを積極的に盛り込んでいった (これら開発モデルは長大な文書にまとめられており、ソフトウェア開発における偉大な成果といえる)。
さて、開発モデルとは一種の作法である。 いわゆるハッカーと呼ばれるプログラマーは、 基本的に自由を愛する民族であり、人にあれこれ決められることを嫌う傾向にある。 このような人々は Java のような作法、しきたりを好まず、インタプリタ言語で好きなように開発を行う (開発言語が左右することではないのだが慣習としてそうなっている)。 好きなようにといっても、その人なりの独自の作法があるわけで、それは常に他者の作法とぶつかり合う。 このため、少人数(多くは単独)の開発になりがちで、結果的に小規模な軽量級アプリケーションとなる。
このように、重量級アプリケーションには Java、 軽量級アプリケーションにはインタプリタ言語(主に Per/PHP)という常識があった (大規模開発には Java、小規模開発にはインタプリタ言語ということ)。
インタプリタ言語によるフレームワークの登場
このところ、その常識が覆されつつある。 その契機は、インタプリタ言語の一つ、Ruby を用いた Web アプリケーションフレームワーク、 Ruby on Rails (以下、RoR)の登場である。 RoR は生産性の高さが評価されており、世界中で急速な広がりを見せている (Ruby が日本人を作者とするためか、日本では特に盛り上がっているようだ)。 RoR はフレームワークと呼ばれる作法そのものであり、 Java を中心に開発されてきた Web アプリケーション開発技術を取りこんだものである。 その謳い文句は「楽して開発」ということで、開発の省力化を徹底的に追求したものとなっていて、 そのために「こうでないといけない」的な規約(convention)が色々決められている。 開発者が規約を守ることにより、少ないプログラミングで大きな成果を得ることができるよう、 最適化されている。
RoR の目指す「省力化」とは大規模アプリケーション開発を念頭においたものである。 大規模開発になることで、開発者が多人数となる。 コード量が増え、テスト量も増え、会議も増える。 役割分担が上手に行えないと、一人一人の負荷が増大してしまう。 規約を守ることで無駄な会議を減らし、コード量を減らすことでテストも減らす。 「省力化」の利点はアプリケーションが大きいほど効いてくる。 このように、RoR はインタプリタ言語をベースにしながら、重量級アプリケーションにも十分通用するものとなっている。
さて、ハッカーは決め事を嫌うと書いたが、 決め事のある RoR は嫌われているのかというと、 そんなことは無い。 RoR では「最小限の決め事」というポリシーがあり、 開発を省力化するために必要なものだけ決め事にして、 後は好きなようにして下さい、というスタイルをとっている。 その堅いところ柔らかいところのバランスが絶妙なのである。
フレームワークサバイバル時代
RoR の成功に刺激されて Perl/PHP/Python においても同様のフレームワークの開発が進行中である。 Catalyst、Sledge(Perl)、Symphony、Ethna、Phrame、Mojavi(PHP)、Django、TurboGears(Python)などなど (筆者は Python 愛好者なので TurboGears を試している)。 今後は大規模開発においても Java でないといけないということはなくなるとともに、 フレームワーク同士の優劣、向き不向きによる生き残りの時代が始まると思われる。
時はまさに Web 2.0 であり、続々と技術革新が起きるだろう。 フレームワークには最新技術の使いやすいインターフェースを提供するという働きもある。 優れたフレームワークが優れたアプリケーションの開発を加速することで、われわれの暮しも豊かになる。 まさに Win Win Win の関係である。
(余談)フレームワークは世界を救う
筆者の専門である情報セキュリティの立場から見ると、このようなフレームワークが盛り上がることは大変喜ばしい。 Web アプリケーションの問題というと、一つには XSS (クロスサイトスクリプティング)、二つには SQL インジェクションである。 フレームワークでは、 HTML テンプレートエンジン等により XSS を、 O/R マッパー等により SQL インジェクションを防ぐことが可能となっている(そうなっていないものもあるが)。 開発、稼働環境、つまりフレームワークでカバーできる問題はプログラマーの頭と手を煩わせず、対処できるに越したことはない。
そういうことで、(良質な)フレームワークの拡大は Web アプリケーションのセキュリティ問題を少なくし、 ひいては世界を救うことにつながるといえる。 いま現在、各種フレームワークは「これから」という状況だが、 今の勢いを持続して進んでいけば、近い将来、Web アプリケーションのセキュリティ問題は過去のもとなるかもしれない。