緒言
弊社に出入りしているKさんがこの度めでたく初デプロイらしいのでCapistoranoについてお勉強してみましょうということで始まりました。
技術背景
Capistranoとは
CapistranoはRuby製CM(Configure Manegement)用gemである。デプロイで良く行う作業を簡単に、かつなるべく一点に集約して書けるようにし、自動化を可能にするソフトウェアであり、二回目以降のデプロイから属人性を取り払うことが可能である。派生OSSにGUIを備えたWebistranoというOSSも存在し、これをサーバー上にデプロイしておけばデザイナーでもワンクリックでフレームワークで自作したサービスのデプロイが可能であり、継続的な開発サイクル(CI:continuous integration)を設計する上で役立つ。
デプロイメント(デプロイ)とは
其れ即ちWEBサービスやアプリケーションなどのネットワークを介するソフトウェアにおいて、構成や接続をサービスとして運用可能な状態にすることである。これは個人的な感想になるが、利用するソフトウェアの依存関係が多岐に渡るために全ての名前解決が上手くいかないことが多く、柔軟かつ自動的なソフトウェアがあれば利用したいところである。
より具体的に
- Chef-serverを用いるパターン(サーバーが多いとき)
- knife-solo/chef-soloパターン(1つの命令で少数のサーバーにデプロイ)
- Capistrano内言語(DSL:ドメイン固有言語)を少し覚えるけど覚えたら簡単に書けるよ!
- development/test/staging/productionの目的に応じてtaskの使う分けができるよ!
- デプロイにまつわる設定をなるべく一箇所に集約できるので保守しやすいよ!
何故デプロイメントは手間がかかるのか
要件(要素)が多岐に渡るから
デプロイに関わる要件を列挙すると以下のようなものが挙げられる
- アプリケーションの構成
- プログラミング言語
- フレームワーク
- ミドルウェア
- 実行環境や規模
- サーバー台数
- IaaS/PaaS/SaaSの制限
- 許容時間
- アプリケーションファイルの大きさ
- デプロイに何分かけて良いか
- 納期はいつまでか
- 自動化にかける時間があるのか
- 予算はいくら使えるか
- 初期費用にかける予算が出るのか
どんなときに自動化してどんな時に手作業するの?
手作業いつやるの?
デプロイツールを使用できる人がチームにいないし雇えないとき
デプロイ手順書(秘伝のタレ)を作って保守する覚悟があるとき
手順書通りにやってるのに人的ミスでハマってURYYYYYYってなってもいいとき
自動化いつやるの?
- Capistrano使いが居るとき
- シェル芸人が居るとき
- デプロイツールの使い方を勉強して後に活かせそうなとき
- 何度もバグの改修が入りそうなとき
- 何度も仕様変更や機能拡張がありそうなとき
- 他のプロジェクトでも使用する言語やフレームワークが変わらないとき
- 保守や引き継ぎをする時期に困らないだろうと思えるとき
自動化、いつやるの?
_人人 人人人_
> いまでしょ <
 ̄Y^Y^Y^Y^Y ̄
どんなデプロイツールで自動化したらいいの?
- Ant(Java)
- Fabric(Python)
- Ansible(Python)
- Capistrano(Ruby)
- chef-solo(Ruby)
- knife-solo(Ruby)
- Puppet(Ruby)
_人人人人人人人人人人人人人人人人人人人人人人_
> Rails使いならRuby製のがイジれて良いでしょ <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
- chef-solo(Ruby)
- knife-solo(Ruby)
- Capistrano(Ruby)
- Puppet(Ruby)
_人人人人人人人人人人人_
> どれがどんな役割なの <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
-
knife-solo(Ruby)
をポチッと叩くとlinuxだろうとmacだろうとwindowsだろうとchef-soloが起動可能な状態まで組み上げてchef-soloを起動してくれる(らしい!) -
chef-solo(Ruby)
knife-soloで起動されてRailsなどのフレームワークで作ったWEBアプリケーションやその依存関係を良い感じにしてくれる(らしい!) -
Capistrano(Ruby)
DSL(ドメイン固有言語:Capistrano語)を使ってtaskという処理の中にシェルスクリプトを書いて行く感じ -
Puppet(Ruby)
よくわからんけどchef-soloよりも古くあって、作りが複雑らしい。(source : http://www.slideshare.net/winebarrel/2013-0720-chefpuppet)