Capistrano 3ではじめる自動化
前述の生産性と保守性の壁をこえる一つの方法は、学習と引き継ぎのコストを下げることです。そのためにこの記事をお送りします。
Capistrano採用による変化
Capistranoを採用すると、いろいろなサービスのデプロイなどの手順が「Capistranoの設定」という形に統一されます。それではこのような変化によって、どんなメリット・デメリットが発生するのでしょうか?
メリット
保守性が高い ~maintainable~
シェルスクリプト等だと書いた人によって設計思想が異なるので、設計思想を読み取るところから時間がかかります。Capistranoを知っている人同士であれば、他人の書いたデプロイ設定も読みやすく、結果的に保守や引き継ぎがしやすくなります。
生産性が高い ~productive~
シェルスクリプトだと、使うツールをパッケージマネージャなどでインストール、依存スクリプトはgitで取得、とか色々な配布形態が人や組織によります。書くことはできても、再利用しづらいとか、新しい開発者が来た時にデプロイスクリプトの開発環境整えるのが大変などの問題があります。RubyライブラリやCapistrano拡張という再配布の形式と、gemやbundlerのようなツールの存在により、デプロイによく使うロジックの再利用がしやすいです。インストールはbundle installすればCapistrano本体・ライブラリ・拡張ふくめて揃います。
柔軟性が高い ~flexible~
既にコマンドの実行手順を書いた手順書や、自動化のためのシェルスクリプトをお持ちでしょうか?Capistranoタスク自体は「コマンドを順番に実行する」だけなので、デプロイのためにシェルスクリプトでやっていたようなことはひと通りできます。nohupでバックグラウンドプロセス化・upstart/monit/daemontools/godなどでデーモン化・プロセス監視・プロセスIDの管理などシェルスクリプトやRubyコードで表現できることであればできます。したがって、デプロイに関していえば、Capistranoにロックインされることにより機能や要件が制限されることは少ないはずです。
読みやすく、書きやすい
まるで英語のような洗練されたDSLでスクリプトを書くことができます。
また、ローカルマシンとサーバへの操作がDSLの文法上、明確に区別されます。まずローカルマシンで何をして、それからサーバで何をして・・・という大局をつかみやすいスクリプトが自然と書けるように強制されます。
Capistranoのモデル
具体的なコードや設定について知る前に、そもそもどういう枠組みの中で何をするのかという全体像を知っておくと理解が進みやすいと思います。それがすなわちCapistranoのモデルです。プログラムは設計書から、文章は目次から読み始めると全体像が頭にはいって理解しやすかったりしますよね!同じようにツールはモデルから入ってみましょう。
Capistranoのモデルを理解するために最小限必要な単語は以下のとおりです。
* Capistrano
* ライブラリ
* 設定ファイル
* ホスト
Capistrano
Capistranoはおおまかに以下の3要素から構成されています。
capコマンド
Capistranoのライブラリ
デフォルトのデプロイタスク
わたしたちはCapistranoのライブラリやデフォルトのタスクを利用して設定ファイルを記述して、それをcapコマンドで実行します。すると、Capistranoがもろもろの操作を自動的に行なってくれます。Capistranoがオートメーションのツールであると言われるのはこのためです。
ライブラリ
Capistranoは単なるフレームワークなので、みなさんが開発・利用しているアプリケーション固有のデプロイ方法や、サーバの情報などは含まれていません。皆さんの作業を自動化するためには、Capistranoを皆さん好みにカスタマイズする必要があります。
カスタマイズするにあたって、一度だけ使うものと再利用するものがあると思います。再利用性が高いものはライブラリと呼びます。具体的には以下の2つです。
Rubyライブラリ
Capistrano拡張
設定ファイル
Capistranoのカスタマイズの際、一度だけ使う設定(例えばあるプロジェクトのサーバ情報、あるプロジェクト固有のタスク)は前述のライブラリではなく設定ファイルに記述します。具体的には以下の2つです。
config/deploy.rb
config/deploy/任意のステージ名.rb
「deploy.rb」はデプロイ等の共通的な設定や手順を書きます。「任意のステージ名.rb」は本番環境・テスト環境・開発環境などの環境ごとに異なる設定やタスクを書きます。
ホスト
デプロイにあたってコマンドを実行する対象マシンは大きく分けて、「ローカルマシン」と「サーバ」の2つがあります。どこでどのようなコマンドを実行するか決まっているわけではありません。例えばローカルマシンでアプリケーションをビルドして、サーバへアプリケーションをデプロイする、というような使い分けをイメージしていただければわかりやすいと思います。
以上、Capistrano・ライブラリ・設定ファイル・ホストの4つです。この4つはそらでも説明できるように覚えてくださいね!そのあとの詳細なところの理解が格段に進むはずです。
Capistranoのワークフロー
Capistranoを使うためには、いつ、何のために、どんな操作をしてどんなコードを書けばよいでしょうか?その全体の流れをおさらいしておき、それから具体的なコードと操作を覚えていきましょう。
Capistranoのインストール
設定ファイルのひな形をつくる
設定ファイルのカスタマイズ
capコマンドを実行する
以上に流れにそって、具体的な説明をしていく。さっそくターミナルを開いて、みなさんの環境に置き換えながら、実際にCapistranoを使ってみましょう!
この記事が気に入ったらサポートをしてみませんか?