BLOG::はるかさん

はるかさん のブログです。近況情報や技術的な話題など。

記述したいのはサーバの状態なのか、セットアップ手順なのか

id:catatsuy石狩DCでLTしていたように、 弊社のセットアップスクリプトもserverspecで管理されるようになった。 これによりセットアップスクリプトもテスト駆動になり、JenkinsによるCIでテストされるようになった。 手でセットアップしてみないと合ってるかどうかわからない時代は終わりを告げた。

そして世の中はImmutable Infrastructureに向かい始めている。 これは仮想化技術により、サーバをつくったり壊したりが簡単になったので、 冪等性とか考えずに新しいサーバをつくってバシッと切り替えれば、変に悩まなくてもすむよね、 ということだと理解している。 弊社はオンプレだけど、サーバのセットアップってのは毎日のようにやっていて、 セットアップしては壊してを繰り返している。

で、話は戻るのだけど、serverspecとかconfigspec、chef、ansibleの記述を見ていると、 どれも状態を記述してるという点は一緒だと気づいた。 どういうことかというと「サーバにアプリケーションをインストールすること」を記述するのではなく 「サーバにアプリケーションがインストールされている」ことを記述するのである。 当たり前のことなのかも知れないけど、普段手続き型言語の世界で生きているとはっとすることであった。

さて、とはいえ、いつもはいろいろ検証しながら必要なパッケージをまとめて、サーバのセットアップ手順を作っている。 これはとても手続き的な作業で、最終的な状態を把握するのは難しいし、 必要なパッケージさえ入れば、必要じゃないものが入っていてもあまり困らない。 ここで本当に必要なのは、サーバの完全な状態を記述できる言語なのか、テスト可能な手続き型言語なのかといわれると、 実は後者なのでは、という気がしていて、そのようなアイデアを練っていたりする。