Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Java: DSL としての可能性 #渋谷java

Java: DSL としての可能性 #渋谷java

第五.五回 #渋谷java での発表、「Java: DSL としての可能性」の資料です。AWS の CloudFormation のテンプレートを Java の DSL で表現できるようにしてみました。

KOMIYA Atsushi

April 05, 2014
Tweet

More Decks by KOMIYA Atsushi

Other Decks in Technology

Transcript

  1. DSL (Domain Specific Language、ドメイン特化⾔言語) • 特定の問題やタスクを解決するために 特別に設計された⾔言語 • Ruby / Python /

    Java / C++ などの汎⽤用的 な問題解決のためのプログラミング⾔言語と は異異なる • DSL の⼀一例例 • Rake (Ruby) • Make • 正規表現 • CSS 8
  2. 内部  DSL と外部  DSL • 内部  DSL • 汎⽤用プログラミング⾔言語をベースに作られる   DSL  のこと

    • 基となる⾔言語の範疇で  DSL を表現する • Rake はこちら • 外部  DSL • 特定の問題向けに新たに作られる  DSL のこと • yacc とか  lex とか使って頑張る? • Make や  CSS はこちら 10
  3. 今回のお題 • AWS CloudFormation • 各種  AWS サービス向けのプロビジョニング フレームワーク •  インフラ周りの⾃自動セットアップ的なもの • CloudFormation

    のテンプレート • JSON ベースの  DSL • とにかく記述するのが⾟辛い •  ただひたすらに冗⻑⾧長な表現 •  編集時は  JSON の構⽂文エラー以外は検知できない • Java  で  CloudFormation のテンプレート 相当の記述ができる  DSL を作ろう! 15
  4. メリット • あくまでも  Java  のコードなので、数々の 優れた  IDE (※)  の機能を有効活⽤用できる • ※ IntelliJ

    IDEA とか • ミススペルや構⽂文ミスなどの⽂文法エラー だけでなく、ある程度度意味的なミス  (※) も 検出できる • ※  静的型付け⾔言語としての特性を利利⽤用すれば • とは⾔言え、DSL の設計次第なところも… 18
  5. デメリット • DSL を実⾏行行するのが⾯面倒 • $  javac  –cp  dsl.jar  Hoge.java   $

     java  –cp  ./:dsl.jar  Hoge • Ruby  などの  DSL に適した他⾔言語に ⽐比べて、表現⼒力力に制限がある印象 • DSL っぽさを出すのが難しい • 「結局これ  Java じゃん」となりがち 19
  6. その他 • ⾔言語デザインの能⼒力力・センスが問われる • どうすれば気持ちよく  DSL  を書いて もらえるか? • 間違いを⽣生じさせないように書いて もらうにはどうすればよいか? • 加えて、⾔言語を  Java

    で表現するための能 ⼒力力・センスが問われる • API 設計(クラス/メソッド/引数) • クラス名/メソッド名の命名 • DSL を  ”実現する” 側の実装は混沌となりがち 20
  7. まとめ • Java でも  DSL は実現できるよ! • ⾒見見た⽬目がまんま  Java  のコードだけど • DSL の実⾏行行はちょっと⾯面倒だけど、IDE

    の⼿手厚いサポートが受けられるよ! • IntelliJ IDEA とか • DSL の設計は⾔言語デザインの能⼒力力・セ ンスや  Java における設計能⼒力力なども問 われるね! 22