Fun Done Run

yazawa's tech blog

開発サイクルを爆速で回そう! ~ Herokuを使ってRailsアプリをデプロイするまで ~

f:id:yazawa_tech:20190705103445p:plain

仕事とは別にRuby on Rails(以下 Rails)を修得中で、作ったアプリをローカルホスト以外で動かすためにHeroku にデプロイしてみた。Heroku とは何かということと、実際にHeroku のプラットフォーム上でアプリが動くことをするところまでをまとめておく。

Heroku とは

PaaS(Platform as a Service) の一つで、主にアプリケーションのデプロイ、環境の管理、スケールなどをお任せできるサービス!デプロイするための環境の構築や管理が不要で、開発者にとってはプロダクトを完成することに集中できるという利点がある。また、様々な言語のアプリケーションに対応しているため、主要な言語で開発したプロダクトに関してはほぼほぼ動作させることができる様子。チームでDevOpsを回すにも有用なそうだが、今回は個人開発なので個人で使う人向け。

jp.heroku.com

Heroku 以外の選択肢は?

個人開発をするにあたり、PaaS やIaaS、VPS などなどいろいろな選択肢があるかと思うが、今回は 「インフラを全く意識せずWebアプリを公開して動作させること」 が目的だったため、Heroku を対象にしてみた。PaaS だけではないが、個人開発時にどのサービスを使うか、みたいな比較の記事はこちらのQiita の記事が参考になると思う。

qiita.com

アプリをHeroku にデプロイする

さて、ではさっそくRails で作成した簡単なWeb アプリをHeroku にデプロイしていく。Heroku の利用にはSign up が必要なため、登録してから進める。

signup.heroku.com

フロー

  • Heroku CLI のインストール
  • Heroku にログイン
  • Rails アプリケーションの準備
  • Ruby のバージョンの確認
  • Rails アプリのGit 管理化
  • Heroku にデプロイ
  • アプリケーションの起動

Heroku CLI のインストール

Heroku はログインすれば GUI(ブラウザ)でも操作できるが、CLI で操作できるように以下のコマンドを実行してインストール。

% brew tap heroku/brew && brew install heroku

brew install heroku はともかく、brew tap heroku/brew って何かと思って調べてみると、brew tap コマンドは 公式以外のformula をダウンロードすることのできるサブコマンド らしい。こちらの記事が参考になった。

qiita.com

コマンドの実行が完了したら、インストールされていることを確認する。

% heroku --version
heroku/7.25.0 darwin-x64 node-v11.14.0

Heroku にログイン

heroku login コマンドを使ってまずはHeroku にログインする。

% heroku login
heroku: Press any key to open up the browser to login or q to exit:
Opening browser to https://cli-auth.heroku.com/auth/browser/66fe1a7d-a267-45ca-a375-d396f030b12e
Logging in... done
Logged in as piyo@example.com

heroku: Press any key to open up the browser to login or q to exit: まで表示された時点でEnter を押すとブラウザが起動するので、「Log in」ボタンを押してターミナルに戻ればログイン完了になる。

f:id:yazawa_tech:20190705062725p:plain
ブラウザでログイン画面が立ち上がる

CLI オンリーでログインしたい場合は-i オプションをつければ、EmailPassword を入力するよう促されるので入力してEnter すればログインできる。

% heroku login -i
heroku: Enter your login credentials
Email: piyo@example.com
Password: **********
Logged in as piyo@example.com

Rails アプリケーションの準備

今回は既に作成してあるRails アプリを使う。

% cd /Users/piyo/env/work/taskleaf

新しくRails new して作る時に注意しないといけないのは、 Heroku にデプロイした後にルートアドレスにアクセスした時のページを定義することを忘れずに。

% cat config/routes.rb | grep root
        root to: 'tasks#index'

Ruby のバージョンの確認

Gemfile に記述してあるruby のバージョンとローカルホストにインストールされているruby のバージョンが同じである必要があるので、それを確認する。

% grep "^ruby" Gemfile
ruby '2.5.1'

% ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) x86_64-darwin18

Rails アプリのGit 管理化

Heroku にデプロイする時にもGit を使ってデプロイしていくので、対象のアプリケーションがGit 管理されている必要がある。Rails アプリは Rails new した時点で.git ファイルが含まれているので、大丈夫かと思う。

% ls -la
total 72
drwxr-xr-x  22 piyo  staff   704  7  4 06:26 .
drwxr-xr-x  18 piyo  staff   576  7  4 06:01 ..
drwxr-xr-x  12 piyo  staff   384  7  5 06:47 .git
-rw-r--r--   1 piyo  staff   620  7  4 06:00 .gitignore
-rw-r--r--   1 piyo  staff     5  7  4 06:00 .ruby-version
-rw-r--r--   1 piyo  staff  2232  7  4 06:26 Gemfile
-rw-r--r--   1 piyo  staff  5739  7  4 06:26 Gemfile.lock
-rw-r--r--   1 piyo  staff   374  7  4 06:00 README.md
-rw-r--r--   1 piyo  staff   227  7  4 06:00 Rakefile
drwxr-xr-x  10 piyo  staff   320  7  4 06:00 app
:
:

Heroku にデプロイ

ではHeroku にデプロイをしていく!対象のRails アプリを新しいHeroku アプリとして追加する!

% heroku create
Creating app... done, ⬢ protected-sierra-22318
https://protected-sierra-22318.herokuapp.com/ | https://git.heroku.com/protected-sierra-22318.git

すると、Heroku に対象のアプリのリポジトリが作成される。

この時点で git remote -v するとHeroku のGit リポジトリが追加されている。

% git remote -v
heroku  https://git.heroku.com/protected-sierra-22318.git (fetch)
heroku  https://git.heroku.com/protected-sierra-22318.git (push)
origin  https://github.com/yazawatech/taskleaf.git (fetch)
origin  https://github.com/yazawatech/taskleaf.git (push)

ではmaster ブランチの内容をHeroku にアップしていく。

% git push heroku master
:
:
remote:        https://protected-sierra-22318.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/protected-sierra-22318.git
    * new branch      master -> master

プッシュが完了したら、Heroku のサーバー上にあるPostgresql にもDB の内容を反映させる。

% heroku run rake db:migrate
Running rake db:migrate on ⬢ protected-sierra-22318... up, run.3150 (Free)
:
:
D, [2019-06-22T09:24:25.354947 #4] DEBUG -- :    (1.3ms)  SELECT pg_advisory_unlock(4371305944939093965)

デバッグログと共に準備していたマイグレーションファイルの適用内容が表示される。

アプリケーションの起動

heroku create コマンド時に表示されたURLをブラウザに入力しても、もちろんアプリは確認できるが、heroku open コマンドを使うと、そのアプリのルートアドレスをブラウザで表示してくれる。

% heroku open

f:id:yazawa_tech:20190705071240p:plain

今回はアプリの仕様でルートアドレスにアクセスした時にログインされていなければ/login にリダイレクトするようになっているため、 https://protected-sierra-22318.herokuapp.com/login が表示されている。これでHeroku にアプリケーションをデプロイすることができた!

まとめ

今回はHeroku を使ったハンズオンの流れを書いてみた。感想としては以下の通り。

  • PaaS を使うと簡単にWeb アプリを公開することができるので、LT でのデモにも良さそう
  • Heroku はAdd-on も充実しており、何か一つサービスを使ってみたい
  • CI/CD の練習としても使えそうなため、CI ツールとの連携を検討すると面白そう

これからも開発していく中で上記のことを試せないか考えつつ、ブログに書きたいと思う。