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で自動化することにより、そのリスクを軽減し作業時間も大幅に短縮することができる為、ぜひ使用してみてください。

Ruby on Railsのお仕事に関するご相談

Bageleeの運営会社、palanではRuby on Railsに関するお仕事のご相談を無料で承っております。
zoomなどのオンラインミーティング、お電話、貴社への訪問、いずれも可能です。
ぜひお気軽にご相談ください。

無料相談フォームへ

0

0

AUTHOR

eishis

Eishi Saito 総務

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

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

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

簡単に自分で作れるWebAR

「palanAR」はオンラインで簡単に作れるWebAR作成ツールです。WebARとはアプリを使用せずに、Webサイト上でARを体験できる新しい技術です。

palanARへ
palanar

palanはWebARの開発を
行っています

弊社では企画からサービスの公開終了まで一緒に関わらせていただきます。 企画からシステム開発、3DCG、デザインまで一貫して承ります。

webar_waterpark

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

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

話を聞いてみたい

運営メンバー

eishis

Eishi Saito 総務

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

sasakki デザイナー

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

yamakawa

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

フロントエンドデザイナー。デザインからHTML / CSS、JSの実装を担当しています。最近はReactやReact Nativeをよく触っています。

Sayaka Osanai デザイナー

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

はらた

はらた エンジニア

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

kobori

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

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

sasai

ささい エンジニア

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

damien

Damien

WebAR/VRを中心に企画・マークアップ・開発をやっています。森に住んでいます。

ゲスト bagelee

ゲスト bagelee

かっきー

かっきー

まりな

まりな

suzuki

suzuki

taro

taro

xR界隈のビズをやっています。新しいガジェットとか使うのが好きです。あとお寿司は玉子のお寿司が好きです。

miyagi

ogawa

ogawa

雑食デザイナー。UI/UXデザインやコーディング、時々フロントエンドやってます。最近はARも。

いわもと

いわもと

kobari

taishi kobari

フロントエンドの開発を主に担当してます。Blitz.js好きです。

shogokubota

kubota shogo

サーバーサイドエンジニア。Ruby on Railsを使った開発を行いつつ月500kmほど走っています!

nishi tomoya

aihara

aihara

グラフィックデザイナーから、フロントエンドエンジニアになりました。最近はWebAR/VRの開発や、Blender、Unityを触っています。モノづくりとワンコが好きです。

nagao

SIerを経てアプリのエンジニアに。xR業界に興味があり、unityを使って開発をしたりしています。

kainuma

Kainuma

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

sugimoto

sugimoto

CONTACT PAGE TOP