君の瞳はまるでルビー - Ruby 関連まとめサイト

Hello Heroku - Heroku で Web アプリケーションを動かそう!

最終更新: 2015-03-31 (火) 21:53:16 (2920d)

目的

Heroku を使うのに必要となる基本要素を一通り理解することだけを目的としています。そのため Web アプリケーションフレームワークは使いません。

この単純な Web アプリケーションの動きがわかれば、より高度な Web アプリケーションを動かす足掛かりになります。

実行するアプリケーションが1つだけであれば*1無料で試せます。

お知らせ(2013/01/24)

サンプルが動かなくなっていることに気づき修正しました

動かなくなった正確な時期はわかりませんが、Procfile の改行コードを LF にしなければいけないようになったようです。

もし動かない場合は Procfile の改行コードが LF になっていることを確認してみてください。

サンプルファイルのダウンロード

以下のファイルをダウンロードし、解凍してみてください。

入っているのは以下の4つのファイルだけです。

  • fileProcfile
    • Heroku で起動するプロセスを記述したファイル。Heroku の基本要素の1つである foreman 用のファイル。
  • fileGemfile
    • 利用するライブラリ(gem)を記述したファイル。Heroku の基本要素の1つである Bundler 用のファイル。
  • filehello.ru
    • Web アプリケーションを起動するプログラム。Heroku の基本要素の1つである Rack 用のファイル。
  • filehello.rb
    • Web アプリケーション本体。

HerokuRack という標準的インターフェイスに対応した Web アプリケーション全般をサポートします。

Rack は、Ruby の Web アプリケーションの基礎を成すもので非常にシンプルです。

高度な Web アプリケーションフレームワークである RailsSinatra もこの Rack に対応しています。そのため Heroku で動きます。

前提

以下の手順を踏んでサービスにアクセスできるようにしてください。既に済んでいる場合、次に進んで下さい。

  • 「Heroku を始めよう!」の 1 ~ 3 を参考に、サインアップ/ツールインストール/ログインする。
  • gem install heroku を実行する。

Web アプリケーションのデプロイとアクセス

Web アプリケーションを Heroku にデプロイし、アクセスするまでの一連の流れについて説明します。

以下に説明するコマンドは hello.zip を解凍したディレクトリで全て行なってください。詳細な解説は次の節で行います。

利用するライブラリのダウンロード

bundle install

Git への登録

git init
git add .
git commit -m "init"

Heroku にアプリケーション環境を作成

heroku create

Heroku への Web アプリケーションのデプロイ

git push heroku master

Web アプリケーションへのアクセス

heroku open

解説

利用するライブラリのダウンロード

bundle コマンドは Bundler というライブラリ(gem)管理用のツールです。

Gemfile に記載のあるライブラリをダウンロードしてくれます。また、その結果を Gemfile.lock というファイルに書きこんでくれます。

Heroku は、この Gemfile と Gemfile.lock を見て利用するライブラリをアプリケーション環境にインストールします。

Bundler は、Heroku の基本要素の1つです。

Git への登録

Git とはバージョン管理システムの一種です。

他のバージョン管理システムとの大きな違いは、その作業ディレクトリ自体がリポジトリになる点です。

git init は作業ディレクトリをリポジトリにするコマンドです。

git add . でディレクトリにある全てのファイルをリポジトリ登録対象とし、git commit でファイルすべてをリポジトリに登録を実行します。

リポジトリの標準の名前には master という名前が付けられます

コマンドを実行した後、作業フォルダに .git というフォルダが作成されていると思います。これがリポジトリの情報です。

Heroku にアプリケーション環境を作成

heroku create コマンドは Heroku 上にアプリケーション環境*2を作成するコマンドです。

作成したアプリケーション環境は、Web の管理画面*3で確認できます。

最初は適当な名前が付きますが、名前は後で変更できます。

このコマンドを実行した時点で .git/config ファイルに以下のような記述が追加されます

[remote "heroku"]
	url = git@heroku.com:xxxx-xxxx-xxxx.git
	fetch = +refs/heads/*:refs/remotes/heroku/*

Heroku への Web アプリケーションのデプロイ

git push heroku master の heroku とは .git/config ファイルにある heroku のことでデプロイ先の Heroku リポジトリのことを指します。

master とは作業ディレクトリのリポジトリに付けられた名前のことです。

git push heroku master とは、master の内容を heroku に入れるというコマンドで、すなわちアプリケーションのデプロイという意味になります。

デプロイ時にメッセージが流れます。以下のメッセージを探して下さい。

-----> Discovering process types
       Procfile declares types -> web

これが Web アプリケーションの起動を表します。

Procfile とは foreman というアプリケーション起動環境用の設定ファイルです。

Heroku は Procfile を見つけると foreman を起動します。

Procfile には以下のように記述されています。

web: bundle exec rackup hello.ru -p $PORT

bundle exec とは Bundler がインストールしたライブラリ(gem)環境を使ってコマンドを起動するコマンドです。

rakeup は Rack アプリケーションを起動するコマンドです。

オプションでポートを指定していますが、そこで使っている $PORT 変数は Heroku が自動で設定してくれます。

foreman は、Heroku*4 の基本要素の1つです。

Web アプリケーションへのアクセス

heroku open でブラウザが開きます。

アプリケーションの削除

Web の管理画面で対象のアプリケーションを選んで、おもむろに Destroy App してください。

ローカルの作業フォルダは単に削除すればそれだけで大丈夫です。

試行錯誤で勉強

ここまでできたら色々と試行錯誤をして、動作がどのように変わるか試すことが簡単にできるようになります。

どんどん試行錯誤して勉強しましょう。

ローカル環境で試行錯誤

foreman は自分の環境でも動作します。

以下のページを参照してローカル環境で確認する方法も覚えれば試行錯誤が早くできるようになります。

ローカル環境での変更を Heroku への反映

何かを変更したら以下のようなコマンドを実行して下さい。Gemfile を変更した場合だけ特殊です

  • Gemfile を変更し、ライブラリを追加した場合
bundle install
git add .
git commit -m "変更内容の説明"
git push heroku master
  • その他のファイルを変更した場合
git add .
git commit -m "変更内容の説明"
git push heroku master

まとめ

Heroku で Web アプリケーションを動かすために必要な知識は以下の通りです。

foreman動かすプロセスを定義するために使います。Heroku はこれに従ってプロセスを起動します。
Bundler利用するライブラリ(gem)を定義するために使います。Heroku はこれに従い gem をインストールします。
RackHeroku がサポートする Web アプリケーションのインターフェイスです。Heroku で Web アプリケーションを動かすための前提になります。
GitHeroku にアプリケーションをデプロイするために使います。

補足

ここで示したサンプルには冗長な部分があります。それは Procfile の存在です。

Heroku の基本要素として foreman の存在を紹介するために Procfile をサンプルに含めました。

しかし、単純に単体の Web アプリケーションを動かすだけならば Rack 用設定ファイルの名前を config.ru にすることで Heroku は自動検出して Web アプリケーションを起動してくれます。

コメント

本ページの内容に関して何かコメントがある方は、以下に記入してください。

コメントはありません。 コメント/heroku/helloheroku

お名前: