ドメイン固有言語

マーチン・ファウラー著、レベッカ・パーソンズ共著

2010

内部DSLと外部DSLの実装に関する詳細なガイド

ドメイン固有言語 (DSL) は私がコンピュータ業界にいるときから存在していましたが、その使い方に関する情報はあまり見当たりません。DSLは、ソフトウェアシステムの特定の一側面に焦点を当てた小さな言語です。DSLだけでプログラム全体を構築することはできませんが、汎用言語で主に書かれたシステムでは、複数のDSLをよく使用します。

DSLには、外部と内部の2つの主な形式があります。外部DSLは、ホストとなる汎用言語とは独立して解析される言語です。良い例としては、正規表現やCSSがあります。外部DSLには、Unixコミュニティに強い伝統があります。内部DSLは、ホストとなる汎用言語における特定の形式のAPIであり、しばしばfluent interfaceと呼ばれます。JMockなどのモックライブラリがテストの期待値を定義する方法は、その良い例であり、Ruby on Railsで使用される多くのメカニズムも同様です。内部DSLにも長い使用の歴史があり、特にLispコミュニティでよく使用されています。

DSLは、適切に設計されたDSLが従来のライブラリよりもはるかに簡単にプログラミングできるため、価値があるとされています。これにより、プログラマの生産性が向上し、常に価値があります。特に、ドメインエキスパートとのコミュニケーションを改善することもできます。これは、ソフトウェア開発における最も困難な問題の1つに取り組むための重要なツールです。CSSはこれの優れた例であり、CSSをプログラミングするほとんどの人は、自分がプログラミングをしているとは考えていません。しかし、それにもかかわらず、エンドユーザーが通常DSLを直接記述するとは一般的に考えていません。重要なのはコミュニケーションの強化です。

DSLは長い間存在していますが、それらをプログラミングする方法に関する知識の欠如は大きな障壁です。だからこそ、私はこの本に取り組みました。この本では、内部DSLと外部DSLの両方を開発するための手法を提供し、どちらを選ぶかに関する情報と、作業を開始するための適切な情報パッケージの両方を提供します。また、DSLをライブラリの上にレイヤー化することの重要性を強調し、通常は両方を一緒に構築するようにしています。DSLを使用する上で不可欠な場合があるコード生成に関する資料もあります。

P of EAAのように、この本はDuplex Bookであり、DSLについて学ぶための物語と詳細なリファレンスブックの両方を提供しているため、ページ数の多さに怖がる必要はありません。物語セクション(142ページ)を読むことでトピックを十分に把握し、残りの部分は必要なときに参照として利用できます。

この本の電子版が利用可能です。Amazonにはkindle版があります。InformITにはepub版とpdf版があります。Appleにはibookstoreにepub版があります。

正誤表

さらに読む

DSLガイド

このウェブサイトの私のガイドページでは、私がDSLに関して持っている情報をまとめています。

無料の第1章

無料で利用できる本の第1章では、DSLの概要と私のアプローチについて概説しています。

DSLパターンカタログ

本の中のパターンの参照URI。それぞれにパターン意図と章参照が記載されています。

翻訳

日本語、韓国語、ポルトガル語