InfoQ

News

WebDSL:DSL作成から学んだ教訓

作者 Jean-Jacques Dubray, 翻訳者 編集部 投稿日 2008年5月25日 午前6時20分

コミュニティ
Architecture
トピック
Domain Specific Languages
タグ
JPA,
JSF,
JBoss Seam

Eelco Visser氏(source)はオランダのDelft University of Technologyの准教授で、「プログラム変換と生成」(source)を教えている。

Visser氏は「WebDSL: A Case Study in Domain-Specific Language Engineering」(WebDSL:ドメイン固有言語エンジニアリングにおけるケーススタディ)という論文(PDF・英語)を書き終えたばかりだが、この論文ではWebDSLの設計ならびに実装を調べ直している。

この論文には「ドメイン固有言語エンジニアリング」プロセスに関する導入部分が2つと、WebエンジニアリングのソリューションとしてWebDSLを評価し、関連するDSLエンジニアリング・アプローチや言語エンジニアリングの研究課題を論じる考察部分が3つあります 。

WebDSL(source)は、リッチなデータモデルを使って動的Webアプリケーションを開発するためのドメイン固有言語である。根本的なターゲットアーキテクチャはJBossのSeamをベースにしている。Visser氏は2007年12月にWebDSL初のアルファリリースを発表した。

Visser氏はDSLを次のように定義している。

  • DSLとは言語、すなわち、正式に定義されたシンタックスとセマンティクスを持つ、テキストもしくはビジュアルで表記された文の集まりである。
  • DSLは、低レベルの実装の詳細や、ことによると実装プラットフォームの詳細事項からの抽出という意味において、高レベルである。
  • DSLはソフトウェアの実装をサポートすべきものである。
  • DSLのコンセプトと抽象概念は、特定のドメインに関連している。

Visser氏が見るところのDSLの目標は次のとおりである。

...低レベルのボイラプレートコードから抽出することにより、ソフトウェアエンジニアの生産性を向上させること。

メソッドとクラスのような、汎用プログラミング言語の従来の抽出メカニズムでは、もはや新規抽出レイヤの作成には不十分です。ライブラリとフレームワークは機能性のカプセル化に長けていますが、開発者がその機能性に到達するために使わなければならない言語、すなわちアプリケーション・プログラマーズ・インターフェース(API)は扱いにくいことがよくあります。

場合によっては、APIがより適した言語をサポートすることもありますが、そうすると言葉はライブラリ呼び出しに渡される文字列リテラルの形をとり(たとえばSQLクエリ)、セマンティクスは言うまでもなく、シンタックスも、ホスト言語がチェックすることはありません。

Visser氏は以下が必要と主張している。

...DSLの設計および実装の技術のみならず、その技術を使うための方法論。すなわち、言語設計および言語実装における一般的な問題にどのように取り組むかを開発者に示す、ガイドラインや設計パターン、再利用可能なDSLコンポーネントのコレクションです。

とは言いながらも、氏は次のように特に言及している。

Webアプリケーションのエンジニアリングはかなり成熟した分野であり…このドメインはDSL開発にぴったりの環境にあります。

  • タスクの自動化:[JavaサーブレットおよびJSF]にもかかわらず、Webプログラミングには往々にして相当量のボイラプレートコードが必要です。;
  • 表記法:現在のプラットフォームは様々な関心事を扱うしばしば冗長な言語の混合物を提供しており、この混合物は統合されていません。
  • 検証:Webアプリケーション技術が統合されていない結果、実装が静的に検証されません。
  • GUI構築:[JSP式のフレームワークには頻繁に]テンプレートが生成したHTMLコードの構造に関する知識が欠けているため、よい形式とは言えないドキュメントをいとも簡単に生成してしまいます。[JSF の場合でさえ]テンプレートは非常に冗長であり、低レベルの詳細を取り上げています。
  • 分析と最適化:たとえば、データベースクエリをWiedermannおよびCook流に最適化[108]すれば、生成したクエリの調整を手動に頼ることなく、アプリケーションのパフォーマンスを改善する上で役立つかもしれません。.

Visser氏は3つのDSL設計パターンを確認している。

  • プログラミングパターンの検出
  • コア言語の設計
  • コア言語に加えて構文抽象の構築

WebDSLについてVisser氏は、テキストのデータモデルDSLの定義から開始している。コードジェネレータは、JPAベースのJava コードでエンティティ定義を変換する。その後、View/Edit(ビュー/編集)DSLを展開させるが、このDSLからJSFページとSeamセッションBeanを生成する。この後は、カスタマイズ可能なView/Editページやコレクション、複雑な関連付けを導入することにより、WebDSLを拡張して「適用範囲を拡大」することができる。

Visser氏の報告によると、生成されたコード行をDSLの行で割った比率が100を超えていると、ジェネレータ改善の余地がある。

氏の論文は、言語エンジニアリング・パラダイムと言語エンジニアリングの課題、そしてとりわけ「モデルマイグレーション」に関する議論へと続く。

Visser氏は自身の経験に基づき、以下を推奨している。

  • DSL[の開発を開始]…アプリケーションドメインを十分理解し、ドメイン内にシステム用のコードベースが相当規模で存在する場合。
  • プログラムの比較的大きなチャンクをパターン候補として検討することから始めること。
  • 技術を研究、理解し、一般的なパターンを見分けること。早い段階に基本的なジェネレータを準備してください。
  • シンタックスを特殊化しすぎないこと。
  • 始めからコア言語を識別しようとはしないでください。結果が目標の技術に接近しすぎることにもなりかねません。
  • 簡潔な表現を可能にする構文抽象を用いてコア言語を拡張すること。
  • コードベースの組織化向けのモジュールやDSL断片の上位に位置するパラメータ付き抽象など、ライブラリを構築する機能を入れるようにしてください。

原文はこちらです:http://www.infoq.com/news/2008/05/webdsl-case-study

ブックマーク
digg+,
reddit+,
del.icio.us+,
dzone+,
Hatena

No comments

返信

特集コンテンツ一覧

トップスポーツチームの監督に教わる秘訣

この論文では、氏が発見した原則を要約し、その原則をいかにしてソフトウェア開発に応用するかを説明します。

事例研究:Dutch Railwaysのプロジェクトにおける分散拠点でのスクラム・プロジェクト

この記事では、私達がどのようにして大規模(240人月、10万行強)でインドとオランダの開発者も参加したスクラム・プロジェクトを成功させたのかを示しています。

Agile2008チーム参加レポート - 帰国そして変化

Agileカンファレンスに「参加者としてだけでなく、発表者として参加しよう」を掲げたチームgoyattomは、サブミッションを提出し、7つのセッションが日本から選択されました。参加者はカンファレンスで各々の発表や、各セッションへの参加、諸外国のエンジニアとの出会い、ステージ上で DearXPを熱演などの様々な思い出を抱えて、無事日本に戻ってきました。

SilverlightとJavaのインターオペラビリティ

マイクロソフトのRobert Bellが、SilverlightとJavaを使用したインターオペラビリティのシナリオを紹介し、サンプルコードを例にとってアーキテクチャの手引きを提供します。

Agile2008 チーム参加レポート - カンファレンス参加編

Agileカンファレンスに「参加者としてだけでなく、発表者として参加しよう」を掲げたチームgoyattomは、サブミッションを提出し、7つのセッションが日本から選択されました。サブミッションが選択された人、そうでない人も含めて、個々の目的意識の確認、膨大なプログラムから聞きたいセッションの選択、旅行の準備、プレゼンテーションの準備の期間を終えて、無事当日を迎えました。

Agile2008 チーム参加レポート - 動機/準備編

筆者はアジャイルソフトウェア開発についての年に一度の国際会議であるAgile2008に初めて参加してきました。今年の日本からの参加者の数は14名にも及び、発表者は5名、受け持ったセッションは8つに及び、例年にない活躍を見せました。なぜ今年のAgile2008では、これほど多くの日本人が参加し発表に至ったのか? そのレポートをお届けします。

Javaトラブルシューティングメルマガ総集編 2008/08~09

エスエムジーでは、Java全般を対象にしたトラブルシューティングサービス「JaTS」を提供しています。この記事では、前回に引き続き、JaTSにて蓄積したトラブル事例とその解決ノウハウの一部をお送りしている「Javaトラブルシューティングメールマガジン」(JTSMM)の総集編として、過去2ヶ月のトラブル事例と追加情報をダイジェストとして提供いたします。

モデル駆動アプローチがうまく機能しない(しなくなる)8 つの理由

この記事では、モデル駆動アプローチがうまく機能しない、または機能しなくなることによって期待した結果が実現できなくなる 8 つの理由について書きたいと思います。