2024.03.07
イベントの感想募集でGoogleフォーム使ってみたら便利だった
2015.10.28
開発環境・ツールRailsアプリをTravisCI使ってHerokuに自動デプロイする

こんにちは。KTです。
MA11用のサービス作ってた時に、RailsをTravisCI使って自動的にHerokuにデプロイするようにしてたので、紹介します。
RubyのフルスタックMVCフレームワークです。多分Rubyのフレームワークのなかで一番有名なんじゃないかな。
もとはRails向けに作られたPaasです。簡単に言うと「会員登録してGitでPushすればアプリを公開できるよ」なサービスです。
CI(継続的インテグレーション)用ツールの一つです。簡単に言うと「GithubにPushしてテストしてHerokuにデプロイしてって作業を自動でやってくれる」ツールです。
CIだとJenkinsが有名ですが、TravisCIにはRailsとかGithubとかHerokuの設定がデフォで用意されてるので、今回はTravisCIを選びました。
Rails標準で開発者向けに用意されているDBはSQLiteなんですが、Herokuではサポートしていないので、本番の環境ではPostgreSQLを使うようにRailsを修正します。
Gemfileに下記を追加
|
1 2 3 |
<span class="line"><span class="gi">group :production do</span> </span><span class="line"><span class="gi"> gem 'pg'</span> </span><span class="line"><span class="gi">end</span></span> |
config/database.ymlのproductionの設定を変更
|
1 2 3 4 5 |
<span class="line"> production: </span><span class="line"><span class="gd">- <<: *default</span> </span><span class="line"><span class="gd">- database: db/production.sqlite3</span> </span><span class="line"><span class="gi">+ adapter: pg</span> </span><span class="line"><span class="gi">+ database: db/production.pg</span></span> |
Railsでは標準でAltJSにCoffeeScript、AltCSSにScssを使うようになっているので、コンパイルする設定を追加しましょう。
config/environments/production.rbの下記を修正
|
1 2 |
<span class="line"><span class="gd">- config.assets.compile = false</span> </span><span class="line"><span class="gi">+ config.assets.compile = true</span></span> |
Herokuにアップするためにはconfig/secrets.ymlをコミットする必要があるため、下記の様に環境変数から取得するように修正しましょう。
config/secrets.yml
|
1 2 3 4 5 6 7 8 |
<span class="line"><span class="gi">development:</span> </span><span class="line"><span class="gi"> secret_key_base: <%= ENV["SECRET_KEY_BASE"] %></span> </span> <span class="line"><span class="gi">test:</span> </span><span class="line"><span class="gi"> secret_key_base: <%= ENV["SECRET_KEY_BASE"] %></span> </span> <span class="line"><span class="gi">production:</span> </span><span class="line"><span class="gi"> secret_key_base: <%= ENV["SECRET_KEY_BASE"] %></span></span> |
また、Herokuで環境変数を設定するために、下記のGemを導入しましょう。
Gemfile
|
1 2 3 4 5 |
<span class="line"> group :production do </span><span class="line"><span class="gi">+ gem 'heroku_secrets', github: 'alexpeattie/heroku_secrets'</span> </span><span class="line"><span class="gi">+ gem 'rails_12factor'</span> </span><span class="line"> gem 'pg' </span><span class="line"> end</span> |
その後、bundle installでインストールし、
|
1 |
<span class="line">bundle exec rake heroku:secrets[app-name] RAILS_ENV=production</span> |
でHerokuにSecretsを登録すればOKです。
※ ローカル開発環境で確認する際にも環境変数を設定するのを忘れないこと。
ここまでの設定で、PushすればHerokuで動く環境は出来ているはず。。。
いよいよ本題のTravisCIの設定方法について。
兎にも角にもまずはアカウント登録が必要になるので、TravisCIのサイトからアカウントを登録し、Githubのリポジトリとの紐付けまで終わらせちゃってください。
TravisCIを簡単に使うためのRuby Gemsがあるのでそれを使いましょう。
Gemfileにgem 'travis'と追加してbundle installを実行すればインストールされます。
Railsアプリのルートディレクトリに移動してターミナルから
travis init
と実行し、色々質問されるので答えていけば、.travis.ymlファイルが生成されます。
あとは、この.travis.ymlを適宜修正してGithubにPushすれば完了です。(簡単ですね!
さて、上述の通り.travis.ymlにHerokuにデプロイする設定を書いていきます。。
なんてことはする必要はないです。コマンド一発でOKです。
travis setup heroku
あとは色々聞かれるので適宜答えてください。
3.まででTravisCIの設定は一通り完了、なのですが、そのままでは自動テスト、自動デプロイに非常に時間がかかってしまうので、ささっと高速化出来る部分だけ対応しちゃいましょう。
ちなみに、現時点では.travis.ymlは以下のようになっているはずです。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<span class="line"><span class="l-Scalar-Plain">language</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">ruby</span> </span><span class="line"><span class="l-Scalar-Plain">rvm</span><span class="p-Indicator">:</span> </span><span class="line"><span class="p-Indicator">-</span> <span class="l-Scalar-Plain">2.0.0</span> </span><span class="line"><span class="p-Indicator">-</span> <span class="l-Scalar-Plain">1.9.3</span> </span><span class="line"><span class="p-Indicator">-</span> <span class="l-Scalar-Plain">jruby-19mode</span> </span><span class="line"><span class="p-Indicator">-</span> <span class="l-Scalar-Plain">rbx-2</span> </span><span class="line"><span class="l-Scalar-Plain">deploy</span><span class="p-Indicator">:</span> </span><span class="line"> <span class="l-Scalar-Plain">provider</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">heroku</span> </span><span class="line"> <span class="l-Scalar-Plain">api_key</span><span class="p-Indicator">:</span> </span><span class="line"> <span class="l-Scalar-Plain">secure</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">hogehoge</span> </span><span class="line"> <span class="l-Scalar-Plain">app</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">app-name</span> </span><span class="line"> <span class="l-Scalar-Plain">on</span><span class="p-Indicator">:</span> </span><span class="line"> <span class="l-Scalar-Plain">repo</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">k-t/app-name</span></span> |
まずは不要なRubyのバージョンを削除します。
|
1 2 3 4 5 6 |
<span class="line"> rvm: </span><span class="line"> - 2.0.0 </span><span class="line"><span class="gd">-- 1.9.3</span> </span><span class="line"><span class="gd">-- jruby-19mode</span> </span><span class="line"><span class="gd">-- rbx-2</span> </span><span class="line"> deploy:</span> |
さらに、bundle installの結果をキャッシュするようにしましょう。(毎回bundle installが行われるので)
|
1 2 3 4 |
<span class="line"> rvm: </span><span class="line"> - 2.0.0 </span><span class="line"><span class="gi">+cache: bundler</span> </span><span class="line"> deploy:</span> |
あとは、この.travis.ymlをGithubにPushすれば完了です。
これだけでGithubのトピックブランチにコードをPushする度に自動テストが行われ、更にmasterブランチにマージされる度にHerokuに自動デプロイされるようになります。
このとおり、Rails、Herokuを使っている分には、TravisCIは非常に簡単にCI環境を構築することが出来ます。
しかもGithubのパブリックリポジトリを使っている場合は無料です!(プライベートリポジトリの場合は有料で、しかも結構なお値段となります。。。
業務に適用するかどうかは別として、趣味で使う分には最良のCIツールの1つだと思うので、是非使ってみてください。
以上、でわでわ
【記事への感想募集中!】
記事への感想・ご意見がありましたら、ぜひフォームからご投稿ください!【テクノデジタルではエンジニア/デザイナーを積極採用中です!】
下記項目に1つでも当てはまる方は是非、詳細ページへ!Qangaroo(カンガルー)
【テクノデジタルのインフラサービス】
当社では、多数のサービスの開発実績を活かし、
アプリケーションのパフォーマンスを最大限に引き出すインフラ設計・構築を行います。
AWSなどへのクラウド移行、既存インフラの監視・運用保守も承りますので、ぜひご相談ください。
詳細は下記ページをご覧ください。
最近の記事
タグ検索
SNS共有