May 09, 2016

Capistrano 万能論に疑問符

IT エンジニア向けの記事です。

Capistrano は Ruby 製の deploy ツールだ。

中々良い出来だと思う。 何ができるのか、何が良いのかはちょっと検索すればすぐに出てくるだろう。 ただ、状況にもよるだろうが俺の場合 Capistrano を積極的に使う気にはなれない。

まず最初に、この手の deploy ツールを使うこと理想の方法とは思えない事だ。

Capistrano に限らず、この手のツールを使いたくなるのはどんな時だろう? プロジェクトで開発しているプログラムを数多くのサーバーに deploy したい時では無いだろうか? 多くは Web サーバーに deploy する時だろう。 bat サーバーの場合も有るかもしれない。

ただ、 deploy ツールが機能するほとんどの場合は Immutable OS でも動作する。 つまり、新バージョンのプログラムをデプロイした新しいサーバーを用意しておいて、古いサーバーを削除すれば良い。

俺の言っていることは理想論かもしれない。 コンテナや仮想マシンの技術が当たり前になった今日において Immutable OS の手法は難しくないように見えるが、仕事には色々なシガラミや制限が付き物だ。 スペアのサーバーが足りない、仕組みを構築する工数が無い、政治的に面倒、などなど。

ただ、ここで俺が言いたいのは「デプロイツールは妥協して使うものだ」という事。

次に、Capistrano を真面目に運用しようとすると以外とハードルが高い。

Capistrano を使うには、Ruby をインストールしなければ行けない。 どのバージョンを?

それから、Gem で Capistrano をインストールする。 どのバージョンを?

セットアップする側としては、どうしても Ruby や Gem にはが不安定という印象がつきまとう。 そして、万一アプリ側で Ruby を使い出したら問題はより深刻になる。 Ruby がコンパチするじゃないか。 「rbenv を使え」というのは間違いとは言わないが、やっぱり rbenv は個人の開発用マシンに入れるべき物のような気がする。 サーバーで使うとインストールパスの問題とか各マシンでコンパイルする嫌らしさが付きまとうからだ。 そこをまたゴチャゴチャやりだすと、どんどん複雑になっていく。 そんな事に工数を使いたくない。 kiss (keep it simple, stupid) の原則に反してしまう。

便利にするために使い始めた Capistrano が意外と面倒で、その結果が「理想形ではない」となると、使う気が失せる。

そして最後に、DSL 覚えるのが面倒。 既に複数のプログラムと DSL を使わざるを得ない立場の俺としては、これ以上覚えたくない。

Ruby は良い言語だと思うし、Rails で開発する事には何の問題も無いと思う。 (状況によって向き、不向きはあるけど) アプリを Ruby で作った場合、プログラマが Capistrano を使うのも良いだろう。 個人的には、Capistrano に限らず一定レベルのプログラムの知識があればサーバーを管理できる事は Ruby の長所だと考えている(Ruby レベルで環境設定関連のツールが揃っている言語は多くないだろう。)

ただ、最低限の OS、インフラ管理の知識があって、普段の開発では Ruby 以外の言語で開発している立場からすると Capistrano はあんまり有り難く無いんだよね。

当たり前だけど、全ての状況で最適なスペシャルツールなんて無い。 もし有ったとしたら、それは当たり前になってツールという印象が無くなるだろう。 ちょうど、サーバー間通信にイーサネットを使うように。 ただ、俺の調べ方が偏っているのかもしれないがネットを見ると「Capistrano バンザイ」的な発言が少し行き過ぎているような気がしたので書いてみた。