無料ブログはココログ

« [#xpjugkansai] 失われつつある企業文化をアジャイル開発に学べ - XP祭り関西2014 - | トップページ | 火消しの成功条件から改善を考える »

DSLとXTextとお好み焼き - 第56回 SEA関西プロセス分科会に参加して -

DSLを、同じように仕様記述に用いられる形式手法に当てはめると、事前条件と事後条件を示すものと、アルゴリズムなどの操作を含むものがあります。前者は実装との比較テストや目的の状態になる(ならない)かの確認に、後者は不整合の確認や動作させることに向いています。

分科会「Eclipse XText によるドメイン特化言語の応用」で紹介されたXTextは、コードがジェネレートできるDSL環境です(細合 晋太郎さんの資料:ドキュメントチュートリアル

乱暴に言ってしまうと、とても良くできたyacc/lex(構文解析/字句解析)環境で、eclipse上でのバリデーションやjava来無頼の利用、プラグインかが可能です。

今回の分解会を終えてから、DSLでコードをジェネレートする理由を考えていました。ようやく、言語の汎用性、簡易言語のような生産性、ドメイン特化のメリットとスモールスタート、に思い至りました。今回は、お好み焼きに例えて説明してみます。

言語とは何か

言語と言うのは、ある特定の概念に言葉を定義して、その言葉の組合せや抽象化された概念で、高度な情報を効率的に伝達する方法です。

「小麦粉・玉子・水・キャベツを材料と共に焼いてソースをかけたもの」

と毎回言わなくても「お好み焼き」と言うことで伝わります。ここでは「材料と共に」と書きましたが、これはすでに抽象化された概念で、材料も混ぜる「練り込み」と、鉄板に材料を先に置く「重ね焼き」があります。

関西のお好み焼き屋さんでは練り込みが多く、「材料名」+「玉子」を指定する意味で「豚玉」のように言うだけで、豚の練り込みのお好み焼きが注文できます(YAHOO!知恵袋)。

このように言語とは、言葉を定義して、その組合せや抽象化された概念で、情報を効率的に伝達する方法です。情報が計算機で実行するプログラムなら、プログラミング言語になります。

より高度な言語は、細かなプログラミングをしなくても設定だけでプログラムを実現できます。ここでは設定だけで実行できる言語を簡易言語と呼びます。

簡易言語との違い

ここで「モダン焼き」を考えてみます。モダン焼きとは、片面を焼いたお好み焼きを焼きそばの上に載せて一体化させたもので、重ね焼きの一種です。

重ね焼きが定義されているなら、焼きそばの定義を追加すればモダン焼きを表現できます。しかし、重ね焼きが定義されていないと、少々面倒です。

簡易言語では、あらかじめ定義された部品を組み合わせることで、プログラムを実現します。基本的には、用意された部品と組合せ法が実現できるものの限界になります。

限界の解決法には色々あって、オープンソース化や拡張インタフェースなどもあるでしょう。しかし、パッケージングされているメリットを考えると、基本は多様な機能をサポートして汎用化してある方が便利でしょう。

ドメイン特化のメリット

さて、お好み焼きの一種と言えなくもないのが、地元でお好み焼きと呼べレテいる「広島焼き」です。全体を一体化させないで、クレープのような作り方をします。

汎用性を考えるなら広島焼きを含めて定義すべきですが、広島で商売をするのでなければコストメリットがないかもしれません。そうなると、広島焼きを食べたい人は自分で定義せざるを得ません。

注文を聞いてくれるお好み焼き屋さんなら、オープンソースのツールのように改造も不可能ではありません。しかし、全体のコーディネート(設計)のほか、正式メニューにならなければ調理師さんがかわる(バージョンアップ)ごとに一から注文のやり直しになる可能性があります。

そこで、専用の調理師(XText) を雇って、作成したレシピどおりに作ってもらいます。広島焼きのテクニックを定義しておけば、色々な広島焼きもお願いできるでしょう。

しかし、レシピを作る際に関西風のお好み焼きを含めてしまうと、レシピは膨大なものになってしまいます。レシピを作ることが必要な部分(ドメイン)だけに特化することで、大きな効果が得られるでしょう。

スモールスタート

XTextのようなDSL作成環境があれば、特定のドメイン専用の簡易言語を開発することができます。定義した言語は類似のものを汎用的に処理可能で、簡易言語の様に高い生産性を得ることができます。

類似のものを処理する場合、テーブルプログラミングのような方法もありますが、汎用性に限界があります。より汎用的にするにはテープルに言語的な定義を入れ、再評価(evaluation)して実行することも可能ですが、定義の間違いを簡単には検証できません。

XTextはeclipse環境と一体化して、コード補完やバリデーションが可能です。汎用性と信頼性を簡単に両立できる方法だと言えるでしょう。

細谷さんの講演では通信プロトコルのDSL定義にXTextを用いられていました。通信ヘッダーにあるデータ長は、ヘッダー以外のバイト数がほとんどですが、ヘッダー部のバイト数を含むものもあるので、その分類を定義することで共通に処理できるようにされていました。

お話の中では「必要なところから実施すれば良い」という言葉が気になりました。ドメイン定義と聞くと全ての定義する様に思ってしまいますが、必要なところ、役に立つところをドメインとしてスモールスタートすれば良いのだと理解しました。

おわりに

SEA関西プロセス分科会をきっかけにDSLとXTextについて考えました。世の中にはXTextを初めとして、様々なツールがあります。ここぞと言う時に、迷わずにふさわしいものが使える様に、腕を磨いておきたいと思いました。

« [#xpjugkansai] 失われつつある企業文化をアジャイル開発に学べ - XP祭り関西2014 - | トップページ | 火消しの成功条件から改善を考える »

ソフトウェア」カテゴリの記事

コメント

この記事へのコメントは終了しました。