Capistranoによる自動デプロイ(中級向け)

Railsアプリケーションを本番環境に安全かつ効率的にデプロイする手段の一つとして「Capistrano(カピストラーノ)」があります。Capistranoはリモートサーバーへの自動デプロイツールで、特に中規模〜大規模のRailsプロジェクトでよく用いられます。

以下では、Capistranoによる自動デプロイの概要、設定手順、典型的な構成、注意点を順を追って説明します。


1. Capistranoの概要

CapistranoはRuby製のリモートサーバー操作ツールで、以下のような特徴を持ちます:

  • 複数のサーバーへの同時デプロイが可能

  • ロール(app, db, webなど)に応じた処理の分離

  • ロールバック機能のサポート

  • sshを利用した安全な接続

  • タスクベースの柔軟なカスタマイズ


2. 前提条件

  • Gitによるバージョン管理

  • 公開鍵認証によるSSH接続設定済み

  • 本番サーバーにRails、Ruby、Bundlerなど必要な環境が整っている

  • データベースやnginx、pumaなどのサーバー構成が完了していること


3. Capistranoの導入手順

3.1 Gemのインストール

まず、Gemfileに以下を追加します:

ruby
group :development do gem 'capistrano', require: false gem 'capistrano-rails', require: false gem 'capistrano-passenger', require: false # または capistrano-puma など gem 'capistrano-bundler', require: false gem 'capistrano-rbenv', require: false end

その後、インストールします:

bash
bundle install

3.2 初期化

bash
bundle exec cap install

以下のディレクトリ・ファイルが生成されます:

  • Capfile

  • config/deploy.rb

  • config/deploy/production.rb

  • lib/capistrano/tasks(必要に応じて)


4. Capfileの編集

Capfileに使用するプラグインを読み込みます:

ruby
require 'capistrano/setup' require 'capistrano/deploy' require 'capistrano/rbenv' require 'capistrano/bundler' require 'capistrano/rails/assets' require 'capistrano/rails/migrations' require 'capistrano/passenger' # もしくは capistrano/puma

5. config/deploy.rbの設定

基本的な設定:

ruby
lock "~> 3.18.1" # 使用しているCapistranoのバージョン set :application, "my_app_name" set :repo_url, "git@github.com:username/my_app.git" set :deploy_to, "/var/www/my_app_name" set :rbenv_type, :user set :rbenv_ruby, '3.2.2' append :linked_files, "config/master.key" append :linked_dirs, "log", "tmp/pids", "tmp/cache", "tmp/sockets", "public/system"

6. config/deploy/production.rbの設定

本番サーバーの情報を記載します:

ruby
server "your.server.ip", user: "deploy", roles: %w{app db web} set :branch, "main"

7. SSH公開鍵の設定

ローカルの~/.ssh/id_rsa.pubを本番サーバーの~/.ssh/authorized_keysに登録し、SSH接続を確認してください。


8. デプロイ実行

以下のコマンドでデプロイします:

bash
bundle exec cap production deploy

初回は次のようなタスクも必要になります:

bash
bundle exec cap production deploy:check bundle exec cap production deploy:initial

9. Capistranoによるデプロイの流れ

  1. Gitからコードを取得

  2. サーバーにコードを展開(releases ディレクトリ)

  3. シンボリックリンクの更新(current ディレクトリ)

  4. Bundlerでgemをインストール

  5. アセットのプリコンパイル

  6. マイグレーションの実行(オプション)

  7. アプリケーションサーバーの再起動


10. よくあるカスタマイズ例

  • deploy:restartタスクでpumaやpassengerの再起動設定

  • .envファイルの共有や環境変数設定

  • バックアップや通知の組み込み


11. 注意点とベストプラクティス

  • linked_fileslinked_dirsの設定を怠ると設定ファイルやログが失われる

  • Capistranoは「状態管理型」のデプロイ手法なので、適切なディレクトリ構成(shared, releases, current)を理解しておく

  • 複数人開発時はデプロイ前のdeploy:checkを必ず実施する


まとめ

Capistranoは中級以上のRails開発者にとって、効率的で信頼性の高いデプロイ手段です。設定に若干の学習コストがありますが、導入すればデプロイミスの防止や作業の自動化が実現できます。適切な設定とタスク分離を行えば、保守性の高い本番運用体制を構築することが可能です。

ChatGPT4o 生成日:2025/06/21