写真●左から木村真幸氏,大西正太氏,竹添直樹氏
写真●左から木村真幸氏,大西正太氏,竹添直樹氏
[画像のクリックで拡大表示]

 「生産性は,開発者のモチベーションにかかっている。XML設定のようなモチベーションを下げる作業は,フレームワーク/ツールにまかせるべき」。企業システムの提案/開発を行うDTSの木村真幸氏らは,9月7日に開催された開発者向けイベント「X-over Development Conference 2007」で講演し,CoCの重要性を説いた。

 講演のタイトルは「生産性アップの秘訣はこれだ! スクリプト系&Java系フレームワーク」。冒頭で木村氏は,現在のWebアプリケーション開発の生産性向上の鍵を握るのは,CoC(Convention Over Configuration:設定より規約)であると明言。この講演では,木村氏のほかに,SaaS事業を展開するアスタリクスのプロダクトマネージャである大西正太氏と,NTTデータ先端技術のコンサルタント竹添直樹氏が登壇し,Spring,Ruby on Rails(以下Rails),Seasar2でCoCをうまく活用する方法を紹介した。

 CoCは,適切な規約を守れば,面倒な設定をしなくても,フレームワークが自動的に適切な設定をしてくれるという考えである。Railsが広めたとされる言葉で,その概念や機能は,その後の様々なフレームワークに影響を与えた。

 木村氏は,ソフト開発の生産性は結局,開発者のモチベーション,つまり集中力が持続できるかどうかにかかっていると言う。そして,集中力を持続させるためには,モチベーションを下げるような作業をなるべくしないようにする。現在のWebアプリケーション開発では,同じ様な記述を何度も書かかねばならない多数のXMLファイルの設定作業(“XML地獄”と表現した)こそが,開発者の集中力を奪っていると断言した。

 フレームワークやツールに実装されたCoC機能によって,開発者はコードの記述規約を守りさえすれば,定型的な作業から免除される。規約に慣れれば慣れるほど,生産性が上がる。一方で,複雑で非直線的な規約は覚えられない,自動生成された設定がうまく機能するかどうかは実行してみないとわからないといった面もある。木村氏は,こうした問題点も理解したうえで,開発者はバランスよくCoCを使うべきと語る。

三つのフレームワークでのCoC実現

 その後,Spring,Rails,Seasar2という代表的な三つのフレームワークについて,CoC活用の具体的な方法を,三人がかわるがわる説明した。

 最初に木村氏が,SpringでCoCを実現するための現実的な方法として,Arid POJOsを紹介した。Arid POJOsは,Chris Richardson氏が開発した,フレームワークにカスタムな命名規約を設定するツール。これを使うことで,SpringMVC(Webアプリケーション開発機能)などで,Bean定義ファイルの設定を省略できるようになる。

 続いて,大西氏がRailsのCoC機能を紹介した。まず,データベースと連動するためのO/Rマッピングの記述を,JavaとRailsとで比較した例を示した。一昔前のJavaでは,O/Rマッピングを実現するために,JavaBeans,マッピングXML,DAOインタフェース/実装といった複数のファイルの作成/記述が必要だった。しかし,Railsではたったの3行で記述できると言う。

 RailsのO/Rマッピングでは,「テーブル名はモデル名の複数形にする」「主キー名は“id”にする」「外部キー名は“関連テーブル名_id”にする」などの規約がある。これを守れば,自動的にモデル名とテーブルがマッピングされ,カラム名と同名のメソッドがモデルに追加される。それによって,簡単にアプリケーションからデータベース/テーブルにアクセスできるようになる。大西氏は,デモンストレーションとして,MySQLデータベースのテーブルにアクセスするRubyプログラムを短時間で作って見せた。

 RailsのCoCがもたらすメリットとして,大西は「変更に強いこと」を挙げた。例えば,テーブル名が変わる仕様変更があった場合でも,複数の設定ファイルを書き換える面倒な作業をすることなく,コードのモデル名を変更するだけで済む。

 一方で,弱点もある。規約に従わないテーブルとのマッピングには設定が必要になるので,既存システムには適用しづらいこと。また,Oracleのように,テーブル名は30バイトまでといった制限がある製品ではCoCが難しいケースがあると言う。

 最後に,竹添氏がDIコンテナで有名なSeasar2に関して,CoCを実現する様々な機能やツールを紹介した。具体的には,Seasar2では「AutoRegister」「S2Dao」「Chura」といった機能/ツールがある。

 AutoRegisterは,命名規約に従ってコンポーネントを設定ファイルに自動登録する機能だ。S2Daoは,XMLファイル無しで,O/Rマッピングを可能にするツール。開発者はインタフェースを定義するだけでよく,命名規約や引数,戻り値にしたがって,実行時にSQLが自動生成される。

 三つ目のChuraは,データベースにアクセスするWebアプリケーションを容易に開発するためのツール・セット。Hot Deploy機能を備えたSeasar2,JSF(JavaServer Faces)コンポーネントのTeeda,EclipseプラグインDoltengなどで構成される。

 Hot Deploy機能とは,ソースコードを修正した際に,アプリケーション・サーバーを再起動することなく,動作確認ができるというもの。また,Doltengを使うと,Eclipse上で,id属性とJavaクラスがマッピングされているかどうかをアイコン表示で確認できる。竹添氏は,「規約を覚える必要がある」「動かしてみないとわからない」というCoCの弱点をカバーするツール群だと語った。