tool(以下、CMT)の要件およびそれを満たすツールについて議論する。Fowlerにより提唱された概念だ。ある種のプログラミング言語における不変性がプログラムにおける厄介な問題を解決するように、サーバの状態を不変な(正確には、状態を変更しない)ものとすることで、成長し続けるソフトウェアにとって避けられない、時間の経過によりもたらされる種々の問題が、解決可能であるとする。Infrastructureという考え方が現れたのか、それが解決するであろう問題の具体的な例については、下記文書に詳述されている。Miyashitaは、インフラ系技術を下記3つのレイヤを成すものとして整理する。Infrastructureは、このうちOrchestrationおよびBootstrappingの革新により可能となるだろうものだ。Packerなど一方、configurationのレイヤにおいては、現在のところ、目立った革新はない(DockerやPackerは、その一部にconfigurationを含むが、ツールと密結合することになる)。CMTのこれまでそもそも、ChefやPuppetなどのようなCMTがなぜ重要であるかについては、これまで様々に述べられているので、ここでは言及しない(詳しくは拙著『入門Puppet』を参照のこと)。それらのツールは、以下の特徴を持つ。Code"において重要な特徴である。サーバの状態を構造化しなければ、設計のまずいコードがそうであるように、共有・レビュー可能とならない。(2)は、設定コードの一般性を担保するためのものである。Puppetにおけるpackageリソースは、プラットフォームに応じて実行されるコマンドが自動的に切り替わる。(3)は、それらツールがmutableな状態を持つサーバに対してくりかえし適用することが前提であるために、要請される性質である。Miyashitaは、次のように予告している。シンプルで、実行順序がわかりやすく制御しやすいものが。それでは、そうしたツールの要件とは、具体的にはなんであろうか。Miyashitaは、configspecについて以下のように述べる。Miyashitaでは、広義のconfigurationレイヤでのポータビリティの確保が行われている。Infrastructureを前提とするアプローチをとっている。目につくのは、冪等性の切り捨てだ。いつでも捨てられる/再作成可能な状態を保つ、ということであれば、冪等性は必要ない。これは、この時代のCMTにおける一番の要件である。ポータビリティについてもChef/Puppetとは異なるアプローチをとっている。確かに、configspecはbe_installedマッチャにより、プラットフォームの違いにそったコマンドを実行する。そこはあまり重要なところではない。configspecが担保するポータビリティは、CMT間のポータビリティだ。それは現在、Docker用の設定ファイルと、CMTとしては最もプリミティブなシェルスクリプトとの間で実現されている。この他、冪等性が不要となったこの時代のツールとして、構造化手法についても変化を加えなければならない。ChefやPuppetは、mutableな状態変更が前提となっているために、宣言的な構文を持っている。}packageが、ただ存在すればいいだけならことはさほど難しくはない。Chef/Puppetで管理されるシステムはmutableであるため、上述のpackageが存在しないことを記述するためには以下のように書く。absent,}このような「状態」は、ensureで指定される以外にも多数ありうる。そのため、Chef/Puppetは宣言的な構文を採用している。Infrastructureを前提とするCMTは、状態について考慮する必要がないため、その構文はもっとシンプルにすることができる。手続きを並べるだけでよい。...まとめると、以下の通りの要件を挙げられる。状態の構造化を支援する。それは、シェルスクリプトよりはマシという程度でよい一方で、行き過ぎた構造化を廃する(依存関係の管理等)プラットフォーム間はもとより、CMT間のポータビリティを担保する冪等性を考慮しない手続き的な記法を採用するSyllabus上述の考えに基づいて、Syllabusという新たなCMTを開発しはじめた。このツールが満たす要件は以下の通りである。冪等性について考慮しないプラットフォーム間ポータビリティを担保するリソース間の依存関係を管理しないCMT間ポータビリティを担保する手続き的記法を採用するconfigspecと違うところは、抽象化の手法(RSpecによるDSLと、独自DSLとの相違)と「手続き的記法を採用する」ぐらいだろう。Miyashitaでの私の発言は、そうした意図に基づく)。以下に、Syllabusによる設定ファイルを示す(現在は、パッケージのインストールのみ対応)。...この設定ファイルを元に、syllabusコマンドにいくつかの引数をわたすことで、設定の適用を実行する。Execポータビリティ確保の実装には、configspecのバックエンドを成すspecinfraを利用している。Infrastructureを可能にしたのは、OrchestrationおよびBootstrappingレイヤにおける革新である。一方で、Configurationレイヤにおいては、いまだ革新が現れていない。既存のツールが新しいアーキテクチャにそぐわないのは明らかである。そのための要件として、configspecの実装を参考に、本稿では以下のように整理した。状態の構造化を支援する。それは、シェルスクリプトよりはマシという程度でよい一方で、行き過ぎた構造化を廃する(依存関係の管理等)プラットフォーム間はもとより、CMT間のポータビリティを担保する冪等性を考慮しない手続き的な記法を採用するその上で、上述要件を満たすPoCとしての実装、Syllabusについて紹介した。