メニューを閉じる

テクノデジタルグループ

メニューを開く

2015.10.28

開発環境・ツール

RailsアプリをTravisCI使ってHerokuに自動デプロイする

こんにちは。KTです。

MA11用のサービス作ってた時に、RailsをTravisCI使って自動的にHerokuにデプロイするようにしてたので、紹介します。

Railsって?

RubyのフルスタックMVCフレームワークです。多分Rubyのフレームワークのなかで一番有名なんじゃないかな。

Herokuって?

もとはRails向けに作られたPaasです。簡単に言うと「会員登録してGitでPushすればアプリを公開できるよ」なサービスです。

TravisCIって?

CI(継続的インテグレーション)用ツールの一つです。簡単に言うと「GithubにPushしてテストしてHerokuにデプロイしてって作業を自動でやってくれる」ツールです。

CIだとJenkinsが有名ですが、TravisCIにはRailsとかGithubとかHerokuの設定がデフォで用意されてるので、今回はTravisCIを選びました。

 

Herokuデプロイのための準備

1. DBまわり

Rails標準で開発者向けに用意されているDBはSQLiteなんですが、Herokuではサポートしていないので、本番の環境ではPostgreSQLを使うようにRailsを修正します。

Gemfileに下記を追加

group :production do
  gem 'pg'
end

config/database.ymlのproductionの設定を変更

  production:
-   <<: *default
-   database: db/production.sqlite3
+   adapter: pg
+   database: db/production.pg

 

2. JS, CSSまわり

Railsでは標準でAltJSにCoffeeScript、AltCSSにScssを使うようになっているので、コンパイルする設定を追加しましょう。

config/environments/production.rbの下記を修正

-  config.assets.compile = false
+  config.assets.compile = true

 

3. Secretsまわり

Herokuにアップするためにはconfig/secrets.ymlをコミットする必要があるため、下記の様に環境変数から取得するように修正しましょう。

config/secrets.yml

development:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

test:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

また、Herokuで環境変数を設定するために、下記のGemを導入しましょう。

Gemfile

 group :production do
+  gem 'heroku_secrets', github: 'alexpeattie/heroku_secrets'
+  gem 'rails_12factor'
   gem 'pg'
 end

その後、bundle installでインストールし、

bundle exec rake heroku:secrets[app-name] RAILS_ENV=production

でHerokuにSecretsを登録すればOKです。

※ ローカル開発環境で確認する際にも環境変数を設定するのを忘れないこと。

ここまでの設定で、PushすればHerokuで動く環境は出来ているはず。。。

 

TravisCIでの自動デプロイ設定

いよいよ本題のTravisCIの設定方法について。

兎にも角にもまずはアカウント登録が必要になるので、TravisCIのサイトからアカウントを登録し、Githubのリポジトリとの紐付けまで終わらせちゃってください。

1. travis gemのインストール

TravisCIを簡単に使うためのRuby Gemsがあるのでそれを使いましょう。

Gemfileにgem 'travis'と追加してbundle installを実行すればインストールされます。

 

2. travis設定ファイルの生成

Railsアプリのルートディレクトリに移動してターミナルから

travis init

と実行し、色々質問されるので答えていけば、.travis.ymlファイルが生成されます。

あとは、この.travis.ymlを適宜修正してGithubにPushすれば完了です。(簡単ですね!

 

3. Herokuに自動デプロイする設定

さて、上述の通り.travis.ymlにHerokuにデプロイする設定を書いていきます。。

なんてことはする必要はないです。コマンド一発でOKです。

travis setup heroku

あとは色々聞かれるので適宜答えてください。

 

4. CI高速化

3.まででTravisCIの設定は一通り完了、なのですが、そのままでは自動テスト、自動デプロイに非常に時間がかかってしまうので、ささっと高速化出来る部分だけ対応しちゃいましょう。

ちなみに、現時点では.travis.ymlは以下のようになっているはずです。

language: ruby
rvm:
- 2.0.0
- 1.9.3
- jruby-19mode
- rbx-2
deploy:
  provider: heroku
  api_key:
    secure: hogehoge
  app: app-name
  on:
    repo: k-t/app-name

 

まずは不要なRubyのバージョンを削除します。

 rvm:
 - 2.0.0
-- 1.9.3
-- jruby-19mode
-- rbx-2
 deploy:

さらに、bundle installの結果をキャッシュするようにしましょう。(毎回bundle installが行われるので)

 rvm:
 - 2.0.0
+cache: bundler
 deploy:

 

あとは、この.travis.ymlをGithubにPushすれば完了です。

これだけでGithubのトピックブランチにコードをPushする度に自動テストが行われ、更にmasterブランチにマージされる度にHerokuに自動デプロイされるようになります。

 

まとめ

このとおり、Rails、Herokuを使っている分には、TravisCIは非常に簡単にCI環境を構築することが出来ます。

しかもGithubのパブリックリポジトリを使っている場合は無料です!(プライベートリポジトリの場合は有料で、しかも結構なお値段となります。。。

業務に適用するかどうかは別として、趣味で使う分には最良のCIツールの1つだと思うので、是非使ってみてください。

 

以上、でわでわ


【記事への感想募集中!】

記事への感想・ご意見がありましたら、ぜひフォームからご投稿ください!
  • こんな記事が読んでみたい、こんなことが知りたい、調べてほしい!という意見も募集中!
  • いただいた感想は今後の記事に活かしたいと思います!

感想フォームはこちら


【テクノデジタルではエンジニア/デザイナーを積極採用中です!】

下記項目に1つでも当てはまる方は是非、詳細ページへ!
  • 自分でアプリを作ってみたい
  • ITで世の中にワクワクを生み出したい
  • 使いやすさ、デザインにこだわったWebサイトを開発したい

採用情報の詳細はこちら


Qangaroo(カンガルー)

  • 徹底した見やすさと優れた操作性で、テストの「見える化」を実現。
  • テストの進捗が見える。開発がスマートに進む。
  • クラウド型テスト管理ツール『Qangaroo(カンガルー)』

【テクノデジタルのインフラサービス】

当社では、多数のサービスの開発実績を活かし、
アプリケーションのパフォーマンスを最大限に引き出すインフラ設計・構築を行います。
AWSなどへのクラウド移行、既存インフラの監視・運用保守も承りますので、ぜひご相談ください。
詳細は下記ページをご覧ください。

https://www.tcdigital.jp/infrastructure/

最近の記事