これは何
仕事でHerokuを使っていますが、デプロイまわりのことがあまりわかっていないので、試しにHerokuに簡単なRailsアプリをデプロイしてみた備忘録です。
git push heroku master
で手軽にデプロイできました。
また、Procfile
はherokuにアプリケーションの実行コマンドを指示するもの、ということを認識しました。
手順URL
公式のこちらのスタートガイドの手順に沿って進めました。
Rails5をデプロイする手順になっていましたが、現時点(2020/3)で最新のRails6にしました。
https://devcenter.heroku.com/articles/getting-started-with-rails5
他にも、Python、Goとかいろんな言語のスタートガイドが揃ってます。
https://devcenter.heroku.com/start
手順
1. ローカルでアプリケーション準備
-
開発マシンにHeroku CLIをインストールする必要があります。
-
ローカルで、手順に沿ってRailsアプリケーションを新規作成します。
- この手順に沿ってやると、Railsは現在の最新(現時点だとRails6)に勝手になります。(gem install railsコマンドでバージョンを指定していないため)
- 記載がなかったのですが、ローカルで
rails server
する前に、以下コマンドでDBを作成する必要がありました。
$ rails db:create
Created database 'firstapp_development'
Created database 'firstapp_test'
```
- ローカルで画面を確認します。

- ローカルで稼働確認が取れたら、gitリポジトリに保存します。
2. Herokuにデプロイ
- Railsプロジェクトのディレクトリで、
heroku create
コマンドを叩くと、アプリケーションがHerokuに作成されます。(以下のコマンド内のアプリ名は公式記載のもの)- アプリ名を指定すれば指定のアプリ名で作成できますが、一意である必要があるので指定がむずかしい。。。
- 今回は、アプリ名指定なしの
heroku create
を叩きました。アプリ名は勝手にランダムになります。
$ heroku create firstapp
Creating ⬢ firstapp... !
▸ Name firstapp is already taken
$ heroku create
Creating app... done, secret-tor-42278
https://secret-tor-42278.herokuapp.com/ | https://git.heroku.com/secret-tor-42278.git
$ git config --list | grep heroku
remote.heroku.url=https://git.heroku.com/secret-tor-42278.git
remote.heroku.fetch=+refs/heads/*:refs/remotes/heroku/*
-
git push heroku master
コマンドで、指定されているherokuのリモートにデプロイすることができます。
$ git push heroku master
remote: Compressing source files... done.
remote: Building source:
remote:
(略)
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/secret-tor-42278.git
* [new branch] master -> master
3. アプリケーション起動、アクセスする
- デプロイしても、dynoが起動していないのでアクセスできないので、
heroku ps:scale web=1
コマンドでdynoを起動します。 - dynoはHerokuの構成の基本単位である軽量コンテナーです。
- デフォルトで、アプリケーションは無料のdynoにデプロイされます。無料のdynoの動作について詳しくはこちら。
- 無料のweb dynoは、30分、トラフィックを受信しないとスリープします。
- 個人アカウントには、毎月550時間の無料のdyno時間が与えられます。超えるとその月はずっとスリープ状態になります。
- 無料dynoの残り時間は、
heroku ps -a [アプリ名]
で確認できます。
$ heroku ps:scale web=1
Scaling dynos... done, now running web at 1:Free
- dynoの状態を
heroku ps
コマンで確認します。
$ heroku ps
Free dyno hours quota remaining this month: 550h 0m (100%)
Free dyno usage for this app: 0h 0m (0%)
For more information on dyno sleeping and how to upgrade, see:
https://devcenter.heroku.com/articles/dyno-sleeping
=== web (Free): bin/rails server -p $PORT -e $RAILS_ENV (1)
web.1: up 2020/03/08 08:41:15 +0900 (~ 5m ago)
-
heroku open
コマンドで、ブラウザが開き、アプリケーションにアクセスできます。
$ heroku open

4. Webサーバーを構成する
- デフォルトでは、アプリのWebプロセスは
rails server
で実行されますが、これをpumaに変えます。pumaの設定ファイルは、config/puma.rb
です。- pumaの構成方法の詳細はこちら。
- HerokuにRailsアプリケーションの起動コマンドを指示するには、アプリケーションディレクトリのルートに
Procfile
を作成する必要があります。Procfileの詳細はこちら。 - Procfileというファイルを新規作成し、以下を書き込みます。
web: bundle exec puma -t 5:5 -p ${PORT:-3000} -e ${RACK_ENV:-development}
- または、pumaの設定ファイルを指定します。
web: bundle exec puma -C config/puma.rb
-
Procfile
を使った起動をlocalで試すには、heroku local
を実行します。-
.env
ファイルを介してローカルで環境変数を管理することもできます。 -
.env
ファイルは、ローカル環境のセットアップであるため、.gitignore
に追加しておくと良いです。
-
$ echo "RACK_ENV=development" >>.env
$ echo "PORT=3000" >> .env
$ heroku local
[OKAY] Loaded ENV .env File as KEY=VALUE Format
9:04:22 web.1 | Puma starting in single mode...
9:04:22 web.1 | * Version 4.3.3 (ruby 2.6.5-p114), codename: Mysterious Traveller
9:04:22 web.1 | * Min threads: 5, max threads: 5
9:04:22 web.1 | * Environment: development
9:04:30 web.1 | * Listening on tcp://0.0.0.0:3000
9:04:30 web.1 | Use Ctrl-C to stop
- ローカルで確認が取れたので、
Procfile
をgitに追加し、Herokuにデプロイします。
$ git add .
$ git commit -m "use puma via procfile"
$ git push heroku master
-
heroku ps
で見ると、pumaで起動していることが確認できます。
$ heroku ps
Free dyno hours quota remaining this month: 550h 0m (100%)
Free dyno usage for this app: 0h 0m (0%)
For more information on dyno sleeping and how to upgrade, see:
https://devcenter.heroku.com/articles/dyno-sleeping
=== web (Free): bundle exec puma -C config/puma.rb (1)
web.1: up 2020/03/08 09:09:05 +0900 (~ 1m ago)
- herokuコンソールのResourcesタブでも、起動コマンドが見れました。

所感
本当に基本を試してみただけですが、Herokuへのデプロイはとてもお手軽でした。
herokuアカウントさえあれば無料枠でいろいろできそうです。(私はクレジット登録もまだしていないです)