2017年11月29日
プログラミング
Capistranoからアプリケーションをデプロイする


はじめに
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
関連記事

2021年12月23日
RailsアプリにGoogle Mapから緯度経度情報を取得する機能を追加する

2021年12月22日
RDBでセットメニューを表現する方法

2021年12月11日
Railsでツリー構造アプリを作ってみた

2021年12月10日
Dockerで作成したRailsアプリケーションをHerokuにデプロイする

2021年12月9日
モデルに書いていたメソッドをPOROに切り出してみた!

2021年12月7日
gem cancancanを使ってみた!
簡単に自分で作れるWebAR
「palanAR」はオンラインで簡単に作れるWebAR作成ツールです。WebARとはアプリを使用せずに、Webサイト上でARを体験できる新しい技術です。
palanARへ
palanでは一緒に働く仲間を募集しています
正社員や業務委託、アルバイトやインターンなど雇用形態にこだわらず、
ベテランの方から業界未経験の方まで様々なかたのお力をお借りしたいと考えております。
運営メンバー

Eishi Saito 総務
SIerやスタートアップ、フリーランスを経て2016年11月にpalan(旧eishis)を設立。 マーケター・ディレクター・エンジニアなど何でも屋。 COBOLからReactまで色んなことやります。
sasakki デザイナー
アメリカの大学を卒業後、日本、シンガポールでデザイナーとして活動。

やまかわたかし デザイナー
フロントエンドデザイナー。デザインからHTML / CSS、JSの実装を担当しています。最近はReactやReact Nativeをよく触っています。
Sayaka Osanai デザイナー
Sketchだいすきプロダクトデザイナー。シンプルだけどちょっとかわいいデザインが得意。 好きな食べものは生ハムとお寿司とカレーです。

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

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

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

Damien
WebAR/VRの企画・開発をやっています。森に住んでいます。

ゲスト bagelee

かっきー

まりな

suzuki
miyagi

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

いわもと
デザイナーをしています。 好きな食べ物はラーメンです。

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

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

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

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

sugimoto
asama
ando
iwasawa ayane

oshimo
異業界からやってきたデザイナー。 palanARのUIをメインに担当してます。 これからたくさん吸収していきます!