連載
» 2007年03月20日 07時00分 UPDATE

Ruby on Rails究極指南:第3回 話題騒然! 「言語内DSL」の概念とRake【前編】 (1/2)

近年、特定の領域に存在する問題の解決に特化してデザインされたコンピュータ言語「DSL」が注目を集めている。本稿では、RubyとDSLの関係について解説していく。Railsによって注目を浴びたRakeを取り上げて、DSLの概念やRakeの特徴、その使い方などを説明する。

[角谷信太郎,ITmedia]

この連載のバックナンバーは以下の通りです。併せてお楽しみください。

連載第1回:Instant Railsで始めるWindows環境のRails

連載第2回:Rails専用IDE「RadRails」でRailsをもっともっと快適に


RubyとDSLの関係

 近ごろ、DSLという考え方が注目を集めています。DSLとは、特定の領域(ドメイン)に存在する問題の解決に特化してデザインされたコンピュータ言語のことを指します。

 DSLの考え方*は新しいものではありません。例えば、awkは「テキストをフィルタリングする」という問題を解くことに特化したDSLと考えられます。そのほか、自分で特定の問題を解くためにミニ言語を設計・実装された経験のある方もいるでしょう。

 ここでは言語指向のDSLとRubyとの親和性の高さを、Rakeを題材にして紹介します。

ビルドツールRake

 RakeはRubyで実装されたビルドツール*であり、ジム・ウェイリッチ(Jim Weirich)氏が中心となって開発(2007年3月20日時点での最新版は0.7.2)しています。Rakeの利用例の筆頭は、もちろんRuby on Rails(以下Rails)です。「Railsの利用を通じてRakeの存在を知った」という人も多いのではないでしょうか。

 まずは、ビルドツールの役割などから説明していきます。

ビルドツールとDSL

 ビルドツールの利用方法として最も多いのは、ソフトウェア開発におけるソースコードのコンパイルです。しかし、ビルドツールを適用できる場面はこれだけに限りません。このツールが行っていることをもう少し一般化して考えると、ビルドツールが取り組みんでいる問題領域は「時系列的に依存関係のある成果物に対する処理の自動化」といえます。例えば、図1のように「成果物Dが成果物Bと成果物Cに、成果物Eが成果物Cに、そして成果物Bと成果物Cは成果物Aに依存している」といった状態です。ここでいう「成果物」は主にファイルのことを指しますが、コンピュータが処理結果として出力するものであればファイル以外でも構いません。特定のWebサイトのページをHTTPクライアント経由で取得した文字列ストリームなども成果物と考えられます。

図1 図1 成果物の依存関係

 ビルドツールを利用するには、ビルドファイルを用意して、ビルドツールに対する指示を記述します。RakeのビルドファイルはRakefileであり、これはmakeのMakefile、antのbuild.xmlに該当します。

 ビルドファイルには、ビルドツールが自動化するタスクの依存関係の宣言と、タスク本体の処理手続きを記述します。この書式は、ビルドツールごとに独自のもの(文法)となっています。従って、ビルドファイルは「処理の自動化という問題領域を記述するための言語」、すなわちビルド用DSLととらえることもできるわけです。マーティン・ファウラー(Martin Fowler)氏*は、このようなビルド用DSLのことを「ビルド言語」と呼んでいます。

コラム:動く疑似コードRuby

 当初、ジム・ウェイリッチ氏はRakeのようなビルドツールを作るつもりはなかったようですが、「MakefileをRubyで書けたら素敵なのになあ」という同僚との雑談がきっかけとなり、開発を始めたようです。

 最初のRakefileのスケッチは次のようなものでした。

target "compile" do

  java.compie JAVA.SRC

end


 このように記述できるビルドツールが作成可能かどうかを確認するため、プロトタイプを作ったところ、100行程度のRubyコードによって15分間で実装できたそうです。疑似コードのような簡潔な記述がそのまま簡単に動かせるように実装できるのは、Rubyの手軽さと生産性を物語っているように思います。

 ここで紹介したプロトタイプのソースコードは、いまでもRakeのドキュメントにバンドルされています。興味のある方は参照してください。


このページで出てきた専門用語

DSLの考え方

http://capsctrl.que.jp/kdmsnr/wiki/bliki/?LanguageWorkbench

ビルドツール

既存のビルドツールとしては、makeやAntが有名。

マーティン・ファウラー氏

オブジェクト指向分析、オブジェクト指向設計、UML、分析パターンをはじめとしたソフトウェアパターン、アジャイルソフトウェア開発方法論の分野において、活発に活動しているソフトウェア技術者。


       1|2 次のページへ

Copyright© 2016 ITmedia, Inc. All Rights Reserved.

Loading

ピックアップコンテンツ

- PR -

注目のテーマ