Heroku クイックスタート
このセクションでは、Heroku への最初のアプリケーションのリリースを開始する方法について説明します。説明のために Ruby アプリケーションを例として使用します。アプリケーションをリリースするプロセスは、Heroku でサポートされているどの言語 (Ruby、Python、Node.js、Java) でもほとんど同じです。ただし、言語の標準や構造による若干の違いがある場合があります。言語に固有の詳細は、https://devcenter.heroku.com/quickstart を参照してください。
ステップ 1: サインアップする
まず、Heroku.com に移動して [サインアップ] をクリックし、無料の Heroku アカウントを取得します。無料のアカウントと共に、開始するための無料の dyno 時間を得られます。
ステップ 2: Heroku Toolbelt をインストールする
Heroku Toolbelt には、Heroku クライアント (Heroku アプリケーションを作成および管理するためのコマンドラインツール)、Foreman (アプリケーションをローカルで実行するための簡単なオプション)、および Git (Heroku にアプリケーションを転送するために必要なリビジョン管理システム) が含まれています。
Heroku Toolbelt には、スタンドアロンパッケージのほかに、Mac OS X、Windows、および Debian/Ubuntu 用のパッケージが用意されています。
ステップ 3: コマンドラインからログインする
Toolbelt をインストールしたら、コマンドシェルから heroku コマンドにアクセスできます。
Heroku アカウントの作成時に使用したメールアドレスとパスワードを使用して認証します。以前にキーを Heroku にアップロードしている場合、そのキーを使用し続けると想定されるため、ログイン中に新しいキーを作成するように求められることはありません。
プロンプトで Enter キーを押して、既存の ssh キーをアップロードするか、新しいキーを作成します。このキーは、後でコードを転送するときに使用します。
1$ heroku login
2
3Enter your Heroku credentials.
4
5Email: adam@example.com
6
7Password:
8
9Could not find an existing public key.
10
11Would you like to generate one? [Yn]
12
13Generating new SSH public key.
14
15Uploading ssh public key /Users/adam/.ssh/id_rsa.pubログイン後に新しいキーを作成してアップロードする場合、単に heroku keys:add を実行します。
ステップ 4: アプリケーションのリリースの準備をする
これで、Heroku にアプリケーションをリリースする準備が整いました。既存のアプリケーションがない場合、オンラインの開発センターにある「Hello World!」サンプルを利用できます。
Heroku は、Gemfile が存在していれば、アプリケーションが Ruby で記述されていると判断します。Heroku が、pom.xml ファイル (Java)、requirements.txt (Python)、および package.json (Node.js) を検索します。
アプリケーションを Heroku にリリースする前に、あといくつかの作業 (連動関係の宣言、プロセスタイプの宣言、ローカルでのアプリケーションのテスト、Git へのコードのコミット) を行う必要があります。
まず、連動関係 (システムレベルの連動関係は除く) を宣言する必要があります。アプリケーションをローカルでテストし、アプリケーションと連動するすべての gem が Gemfile にあることを確認します。使用する Ruby のバージョンを忘れずに指定してください。Heroku では、デフォルトで Ruby 2.0 がサポートされていますが、整合性を確保するためにすべてのアプリケーションでバージョンを指定する必要があります。
次に、Procfile でプロセスタイプを宣言する必要があります。Procfile は、dyno を起動するために実行する必要のあるコマンドを明示的に宣言するテキストファイルで、アプリケーションのルートにあります。このファイルには、web、worker、またはその他のプロセスが含まれます。この例では、web dyno を開始します。
1web: bundle exec ruby web.rb -p $PORTこれは、単一プロセスタイプ web と、web を実行するために必要なコマンドを宣言しています。ここでは、「web」という名前が重要です。これは、このプロセスタイプが Heroku の HTTP ルーティングスタックに関連付けられ、リリース時に Web トラフィックを受信することを宣言しています。
この時点で、Foreman (Procfile 対応アプリケーションを実行するためのコマンドラインツール) を使用して、ローカルでアプリケーションを実行できます。Foreman は、Heroku Toolbelt と共にインストールされています。
foreman start を実行するだけでポート 5000 でアプリケーションが起動されるため、確認します。
最後に、アプリケーションファイルをローカルの Git リポジトリにコミットします。
1$ git init
2
3$ git add
4
5$ git commit -m "init"ステップ 5: リリースする
これで、Heroku にアプリケーションをリリースする準備が整いました (負荷の高い作業は完了しました)。
まず、heroku create コマンドを使用して Heroku にアプリケーションを作成します。
1$ heroku create
2
3Creating blazing-galaxy-997... done, stack is cedar
4
5http://blazing-galaxy-997.herokuapp.com/ | git@heroku.com:blazing-galaxy-997.git
6
7Git remote heroku added次に、git push heroku master コマンドを使用して、Git でアプリケーションをリリースします。
1$ git push heroku master
2
3Counting objects: 6, done.
4
5Delta compression using up to 4 threads.
6
7Compressing objects: 100% (5/5), done.
8
9Writing objects: 100% (6/6), 660 bytes, done.
10
11Total 6 (delta 0), reused 0 (delta 0)
12
13
14
15-----> Ruby/Rack app detected
16
17-----> Using Ruby version: ruby-2.1.2
18
19-----> Installing dependencies using Bundler version 1.3.2
20
21 Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin --deployment
22
23 Fetching gem metadata from https://rubygems.org/..........
24
25 Fetching gem metadata from https://rubygems.org/..
26
27 Installing rack (1.2.2)
28
29 Installing tilt (1.3)
30
31 Installing sinatra (1.1.0)
32
33 Using bundler (1.3.2)
34
35 Your bundle is complete! It was installed into ./vendor/bundle
36
37 Cleaning up the bundler cache.
38
39-----> Discovering process types
40
41 Procfile declares types -> web
42
43 Default types for Ruby/Rack -> console, rake
44
45-----> Compiled slug size: 25.1MB
46
47-----> Launching... done, v3
48
49 http://blazing-galaxy-997.herokuapp.com deployed to Heroku
50
51
52
53To git@heroku.com:blazing-galaxy-997.git
54
55 * [new branch] master -> masterこの例では、http://blazing-galaxy-997.herokuapp.com で Web ブラウザにアプリケーションを表示したり、curl を使用してテストしたりできるようになります。
これで、最初のアプリケーションを Heroku にリリースできました。
ステップ 6: CLI を使用する
Heroku CLI を使用して、アプリケーションの操作 (統合ログの表示、アプリケーションの拡張、アドオンサービスの追加) を行うことができます。
Web トラフィックをスケールアップする場合、web dyno の数を調整するように Heroku に通知するだけですみます。
1$ heroku ps:scale web=2
2
3Scaling web dynos... done, now running 2実行されている dyno の数を確認します。
1$ heroku ps
2
3git:master
4
5=== web (1X): `bundle exec ruby web.rb -p $PORT`
6
7web.1: up 2013/10/15 11:28:17 (~ 5m ago)
8
9web.2: up 2013/10/15 11:33:24 (~ 1s ago)発生したすべての新規ログイベントが表示されるように tail を指定して、統合ログストリームを表示します。
1$ heroku logs --tail
2
32013-10-15T10:24:25.602652+00:00 app[web.1]: Started GET "/articles/getting-started-with-nodejs" for 84.32.143.141 at 2013-10-15 10:24:25 +0000
4
52013-10-15T10:24:25.885004+00:00 heroku[router]: at=info method=GET path=/assets/public/feed-icon-sprite.png host=devcenter.heroku.com request_id=fd511f6195f52e8e58f58cccbc07109c fwd="77.252.246.255" dyno=web.12 connect=0ms service=15ms status=200 bytes=4867
6
72013-10-15T10:24:26.563176+00:00 heroku[web.1]: source=web.1 dyno=heroku.12227120.90edce79-b91e-403e-be3f-2f2ba11aa5af sample#load_avg_1m=0.00 sample#load_avg_5m=0.00 sample#load_avg_15m=0.00
8
9…重大なイベントに関するログを保持してアラートを送信する必要がある場合、多数のログ記録アドオン (Papertrail など) のいずれかを追加します。
1$ heroku addons:add papertrail
2
3Adding papertrail on blazing-galaxy-997... done, v6 (free)
4
5Use `heroku addons:docs papertrail` to view documentation.効率性と生産性の高い開発者ワークフローを設定する必要がある場合、Heroku では、アプリケーション全体に fork を実行できるため、同一のステージング環境を簡単に構築できます。
1$ heroku fork staging-galaxy
2
3Creating fork blazing-galaxy-997... done
4
5Copying slug... done
6
7Copying config vars... done
8
9Fork complete, view it at http://staging-galaxy.herokuapp.com/これで、ソースの新しいブランチをこの新規アプリケーションにリリースできます。
1$ heroku git:remote -a staging-galaxy -r staging git:master
2
3Git remote staging added
4
5$ git push staging newbranch:masterカスタムドメインで起動する準備はできましたか。DNS および CNAME を設定すれば、簡単に実行できます。
1$ heroku domains:add www.mydomain.com
2
3Adding www.mydomain.com to blazing-galaxy-997... doneHeroku では、設定とコードが分離されているため、アプリケーションに影響する可能性のある値 (秘密鍵など) を簡単に変更できます。
1$ heroku config:set SECRET_KEY=2342434434343433555422
2
3Setting config vars and restarting blazing-galaxy-997….done, v8リリース履歴にドリルダウンして、ベロシティ、最新の変更、またはトラブルシューティングの問題に関する詳細情報を取得する必要がある場合、これに対応するコマンドも用意されています。
1$ heroku releases
2
3=== demo-for-james Releases
4
5v6 Add SECRET_KEY config jon@heroku.com 2013/10/15 12:00:10 (~ 59s ago)
6
7v5 Add papertrail:choklad add-on jon@heroku.com 2013/10/15 11:26:59 (~ 34m ago)
8
9v4 Deploy 9579f23 jon@heroku.com 2013/10/15 10:23:32 (~ 1h ago)
10
11v3 Deploy 0eb78aa jon@heroku.com 2013/10/15 10:21:33 (~ 1h ago)
12
13v2 Enable Logplex heroku@herokumanager.com 2013/10/15 09:58:21 (~ 2h ago)
14
15v1 Initial release heroku@herokumanager.com 2013/10/15 09:58:20 (~ 2h ago)問題を修正するために以前のリリースにロールバックします。
1$ heroku rollback v6
2
3Rolling back blazing-galaxy-997... done, v6
4
5 ! Warning: rollback affects code and config vars; it doesn't add or remove addons. To undo, run: heroku rollback v7