2017年11月29日

プログラミング

Capistranoからアプリケーションをデプロイする

目次

  1. はじめに
  2. Capistranoを設定する
  3. デプロイを実施する
  4. まとめ

はじめに

Ruby on RailsでWebアプリケーションを開発する際、どのようにデプロイ(その環境にアプリケーションを配置)していますか?
最近はFTP経由の方は少なくなってきたと思いますが、SCPやgit pullをしてまずアプリケーションを配置し、そこからmigrationやseedデータの反映など手作業でされている方もいるのではないかと思います。
とはいえ本番、ステージング環境、テスト環境、開発環境など複数の環境で同じコマンドを実行していくのはなかなか大変です。
また中には手作業の手順を間違えて正しくアプリケーションが動かない!という経験をされた方もいるのではないかと思います。

Capistrano はそんな手作業を無くし、コマンドだけでデプロイ関係のタスクを自動的に対応してくれるいうツールです。
今回はRuby on Railsの5系(5.1)でCapistranoのバージョン3を使用しデプロイを自動化していきます。

POINT!!

今回はCapistranoをRuby on Railsで使用する方法をご紹介しますが、JavaやPHPなどによるフレームワークでも使用できます。
派生系も多くあり、例えばwp-deployというCapistranoを使用したツールを使えば、WordPressのバックアップやDBの反映などを行うことができます。

Capistranoを設定する

では早速Capistranoを設定していきましょう。
今回は公式 の手順に従っていきます。
といっても難しいことはなく、まずはGemを追加します。

Gemのインストール

group :development do
  gem 'capistrano', '~> 3.6'
  gem 'capistrano-rails', '~> 1.2'
end

そしてgemをインストールしていきます。
bundle install

POINT!!

ステージング環境や本番環境に反映する為のGemなのにどうしてdevelopment環境をgroup指定するの?と思われた方もいると思います。
CapistranoはSSHでのログインやmigrationのタスク等、全て実施してくれるツールです。つまり、development環境(ローカル)からコマンドを実行するだけでステージング環境や本番環境にデプロイをしてくれるのです。

Capistranoのインストール

正常にインストールできたら、Capistranoの設定をインストールしていきます。
bundle exec cap install
このコマンドを実行した結果がこちらです。

mkdir -p config/deploy
create config/deploy.rb
create config/deploy/staging.rb
create config/deploy/production.rb
mkdir -p lib/capistrano/tasks
create Capfile
Capified

いくつかのファイルが作られたことがわかると思います。

Capfileの設定

まずCapfileを設定しましょう。

capistrano/railsを追加します。
require 'capistrano/rails'

いくつかRailsに必要な設定項目がコメントアウトされているので、必要に応じて外していきます。

require 'capistrano/bundler' # Rails needs Bundler, right?
require 'capistrano/rails/assets'
require 'capistrano/rails/migrations

deploy.rbの設定

次に config/deploy.rb を設定していきます。
こちらではデプロイ時の様々な環境等設定をすることができます。

アプリケーション名

こちらをコメントアプトしアプリケーション名を入れましょう。
set :application, "my_app_name"

リポジトリ

こちらもコメントアウトし、Gitのリポジトリを入力します。
set :repo_url, "git@example.com:me/my_repo.git"

デプロイ先のパス

デプロイ先サーバでどのディレクトリにデプロイするのか設定します。
set :deploy_to, "/var/www/my_app_name"

対象ブランチ

デプロイする対象ブランチを設定することができます。
set :branch, 'master'
もちろん都度任意のブランチでデプロイすることもできるので、こちらは設定しなくても問題はないでしょう。

個別環境の設定

config/deploy ディレクトリの下に staging.rb と production.rb が置かれていますが、こちらはそれぞれの環境毎の設定ファイルとなります。
ここでサーバの設定やサーバへの接続方法などを設定します。

下のほうにある、以下のエリアをコメントアウトして適切な項目を入力しましょう。
サーバ、sshのkeyや接続方法などを入力すればOKです。

server "example.com",
  user: "user_name",
  roles: %w{web app},
  ssh_options: {
    user: "user_name", # overrides user setting above
    keys: %w(/home/user_name/.ssh/id_rsa),
    forward_agent: false,
    auth_methods: %w(publickey password)
    # password: "please use keys"
  }

デプロイを実施する

デプロイチェック

cap production deploy:check
こちらのコマンドでデプロイのチェックをすることができます。

デプロイ

こちらのコマンドでデプロイを実施することができます。
production部分は当然、環境を変えることで変更可能です。
cap production deploy
こうすることでステージング環境にデプロイが可能です。
cap staging deploy

デプロイ時にタスクを実行する

デプロイをする際に、例えばunicornの再起動や遅延JOBの再起動をしたいというケースもあります。
その場合、先程作成された lib/capistrano/tasks 内にタスクを作成します。

lib/capistrano/tasks/sample.rake

namespace :sample do  
  desc 'Sample'
  task :test do
    on roles(:all) do
      run_locally do
        execute "echo hogehoge"
      end
    end
  end
end  

これを実行するようdeployファイルに設定します。
config/deploy.rb

namespace :deploy do
  desc 'hogehoge'
  task :restart do
      invoke 'sample:test'
  end
  after :publishing, :restart
end

こんな感じで書くとデプロイタスクが終わった後に sample:test を実行してくれます。

その他、様々なオプションがあります。
ドキュメントはかなり充実しているので、不明な点はぜひドキュメントを読んでみてください。

公式ドキュメント

まとめ

今回はCapistranoの基本のコマンドをご紹介しました。
どうしても人はミスをしてしまう為、手作業での本番作業は大きなリスクを伴います。
Capistranoで自動化することにより、そのリスクを軽減し作業時間も大幅に短縮することができる為、ぜひ使用してみてください。

0

0

AUTHOR

eishis

Eishi Saito 総務

SIerやスタートアップ、フリーランスを経て2016年11月にeishis, Inc.を設立。 マーケター・ディレクター・エンジニアなど何でも屋。 COBOLからReactまで色んなことやります。

アプリでもっと便利に!気になる記事をチェック!

記事のお気に入り登録やランキングが表示される昨日に対応!毎日の情報収集や調べ物にもっと身近なメディアになりました。

palanでは一緒に働く仲間を募集しています

正社員や業務委託、アルバイトやインターンなど雇用形態にこだわらず、
ベテランの方から業界未経験の方まで様々なかたのお力をお借りしたいと考えております。

話を聞いてみたい

運営メンバー

eishis

Eishi Saito 総務

SIerやスタートアップ、フリーランスを経て2016年11月にeishis, Inc.を設立。 マーケター・ディレクター・エンジニアなど何でも屋。 COBOLからReactまで色んなことやります。

sasakki デザイナー

アメリカの大学を卒業後、日本、シンガポールでデザイナーとして活動。

しまだ

しまだ デザイナー

WebAR/VRのデザインと3DCG制作がメインです。 肩書きは「アニメ案件に関わりたいデザイナー」。

Miu マーケター

ドイツでWEBマーケティングしています。

しんのき エンジニア

新しい技術が好きなWebエンジニアです。 元々インフラやPHPをやっていたのですが、最近はReact NativeとFirebaseを使って頑張ってます。

yamakawa

やまかわたかし デザイナー

フロントエンドデザイナー。デザイン・HTML/CSSマークアップ・JSアニメーション実装を担当しています。

furuya エンジニア

サーバーサイド、フロントエンド、Unityと色々手を出してる雑食系エンジニア。ReactNativeが最近のマイブーム。

Sayaka Osanai デザイナー

Sketchだいすきプロダクトデザイナー。シンプルだけどちょっとかわいいデザインが得意。 好きな食べものは生ハムとお寿司とカレーです。

はらた

はらた エンジニア

サーバーサイドエンジニア Ruby on Railsを使った開発を行なっています

うえまつゆい エンジニア

サーバーサイドエンジニアからフロントエンドエンジニアになりました。主にReact Nativeでのアプリ開発をしています。

kobori

こぼり ともろう エンジニア

サーバーサイドエンジニア。SIerを経て2019年7月に入社。日々学習しながらRuby on Railsを使った開発を行っています。

sasai

ささい エンジニア

フロントエンドエンジニア WebGLとReactが強みと言えるように頑張ってます。

CONTACT PAGE TOP