uehaj's blog

Grな日々 - GroovyとかGrailsとかElmとかRustとかHaskellとかReactとかFregeとかJavaとか -

Artefactとは何か

GCR12回、お疲れ様でした。
一周年おめでとうございます。山田様、山本様、参加者の皆様、CIJさまありがとうございました。大変興味深い活動であり、いまだに興味が尽きません。

「アーテファクトとは何か」とは、約一年前のGCRのテーマでもありましたが、おぼろげながら自分の言葉で話せる気がしてきましたのでちょっと書きます。

アーテファクトとは、Grailsにおける以下のような特徴を持ったコンポーネントのことです。

  • DSL・ビルダー駆使
  • 注入・MOP・ダイナミックメソッド駆使
  • 依存性・リロード監視の仕組み
  • CoC
  • 一括管理
  • Groovyの文法に従うがJavaクラスと一対一対応できるようなしろものではない。Groovyクラスで実装された、一段抽象的な、「浮いた」存在。
  • 「仕様を書けばそれが動く」を実現するためのブツ。モデルを目指す存在。

Grailsで開発者が記述する中核的コンポーネント(ドメインクラス、コントローラ、サービス、・・・)はArtefactのインスタンスであり、それを実現している仕組みがArtefactである。

「MOP」や「DSL」とかはGroovyレベルの要素技術なんだが、それらをぽんと渡されても普通の開発者は困る。それらを、効果的に・整合的に使うことなんかマズできなくて、独りよがりなものか、他人が理解できないものが出来上がるだけ。それを徹底的に使いこなしかつ整合性・規則性のある、高次元の統合的コンポーネント集成体を作り上げるための「流儀」であり「仕組み」がArtefactといえるのではないか。Grails開発の中で、鍛えられ、練り上げられたベストプラクティスの中核的存在。プラグインはまた直交するコンポーネントで、また面白いがここでは語らないことにしよう。

この観点から見ると、すなわちアーテファクトのレベルに1段突っ込んで見ると、Grailsは「アーテファクトフレームワーク」であり、フレームワークを作り上げるための「メタ」フレームワークであるともいえる。あるいは言い方を変えると、Grailsの中には「メタGrails」があって、そのサンプル実装事例の一つが開発者に見える今の「Grails」というか。

Grailsフレームワークを組み合わせた(Spring Framework,Hibernate, ..)フレームワーク、という意味からメタフレームワークと呼ばれることもあるので、二重の意味でメタであり、メタ^2フレームワークといえるのではないでしょうかね。

「Grailsが特筆すべき存在」というのが実感としてやっとわかった気がします。そこいらのJavaフレームワークとかそういうレベルとは全く違っていて、とにかくArtefact一つをとっても、他のフレームワークとは全く違う特筆すべき存在でしょう。

後で書く