Herokuでスタート! はじめてのPaaSアプリケーション開発 第5回
小西 俊司 [著] 2015/02/18 14:00
このエントリーをはてなブックマークに追加

1 2 3 →

 JavaやRubyのWebアプリケーションフレームワークを使った経験があれば、Heroku上でアプリケーションを動かすことはそれほど難しくありません。しかし、Heroku上で日々の開発/運用を行うには独自のherokuコマンドを操れなければいけません。そこで今回は、日常的に使用するherokuコマンドを、リファレンス形式で紹介します。

取り上げるコマンド

 前回は、Dynoについての理解を深めました。Herokuの枠組みがわかってきたでしょうか?

 今回紹介するコマンドは、日々の開発・運用で毎日のように使用するものが中心です。そのため、「heroku domains」(ドメインの設定)や「heroku certs」(証明書の登録)のように、アプリケーション公開時に一度だけ実行するタイプのコマンドは取り上げていません。

 また、「heroku pgbackups」(PostgreSQLのバックアップ)のように、非常に強力だけれども用途が限られるコマンドも見送りました。それらは、本連載で追って紹介したいと思います。

 

herokuコマンドの構成と本稿での表記

 herokuコマンドは、コマンドとサブコマンドとコマンド引数、オプションから構成されます。

$ heroku COMMAND[:SUBCOMMAND] [OPTIONS] [ARGUMENTS]

 コマンドとサブコマンドは「:」で区切って記述します。そのため、第1引数に「:」が含まれていなければサブコマンドはなし、のはずですが、実はそうばかりとは限りません。

 例えば、「heroku create」は新規アプリケーションを作成するためのコマンドですが、この「create」は実はコマンドではなく、appsコマンドのサブコマンドです。

 つまり、正確なコマンド表記は、

$ heroku apps:create

 となりますが、「create」というワードが「apps:create」のエイリアスとなっているため、「apps:」を省略することができるのです。

 このように、サブコマンドにエイリアスが定義されているケースがあるため、「:」のない第1引数がコマンドであるのかサブコマンドであるのかは、厳密にはhelpを見ないと判断できません。

 herokuコマンドを使うだけであれば、それがコマンドであるかサブコマンドであるかを意識する必要はありません。しかし、体系的にコマンドを理解する場合には、この違いがわかった方がよいのは間違いありません。そこで本稿では、サブコマンドがないコマンドは「heroku ps」のように表記し、エイリアスによってコマンドを省略可能なサブコマンドは「heroku [apps:]create」と表記することにします。

 オプションはすべて「-」で始まります。多くの場合「-」と英1文字で構成されるショート形式と、「--」と、単語で構成されるロング形式の両方の書き方が用意されています(-aと--appは同じオプションです)。

 以降では、ショート形式がある場合にはそちらを使用して説明を行います。

 

-a(--app)オプションと-r(--remote)オプション

 herokuコマンドの多くは、特定のHerokuアプリケーションに対してコマンドを実行します。それらのコマンドを実行するためには、対象のアプリケーションを指定する必要がありますが、実際にはgitとの連携によりそれを省略することができます。

 演習で作成しているアプリケーションのディレクトリで「git remote -v」コマンドを実行してみてください。

$ git remote -v
heroku  git@heroku.com:codezine-sample.git (fetch)
heroku  git@heroku.com:codezine-sample.git (push)
origin  git@github.com:shunjikonishi/codezine-sample.git (fetch)
origin  git@github.com:shunjikonishi/codezine-sample.git (push)

 「heroku」というエイリアス名でgit@heroku.comのリポジトリが登録されていることがわかります。このように、

  • コマンドを実行するカレントディレクトリがgit管理下にあり、
  • そこにherokuのリポジトリが1つだけ登録されている場合

 には、herokuのリポジトリが指しているアプリケーションが対象アプリケーションとみなされて、アプリケーションの指定を省略できます。

 逆に、カレントディレクトリがgit管理外であったり、複数のherokuリポジトリがgit remoteに登録されている場合には、次のように「-a [アプリケーション名]」または「-r [git remoteのエイリアス名]」という形でアプリケーションの指定が必要です。

$ heroku logs -a codezine-sample
$ heroku logs -r heroku

 以下のリファレンスでは、コマンドごとにアプリケーション指定の要/不要**を記載しています。アプリケーション指定が必要な場合は、gitリポジトリから対象アプリケーションが特定可能であるか、あるいは-aオプションか-rオプションでアプリケーションを明示する必要があります。

 

heroku auth

 heroku authは、ログイン/ログアウトなどの認証関連の処理を行うコマンドです。サブコマンドなしでのコマンドは定義されておらず、「heroku auth」とのみコマンドを叩くと、コマンドヘルプが表示されます。

 loginを除くほぼすべてのherokuコマンドはログイン状態でないと実行できないため、ログアウト状態で何らかのコマンドを実行しようとした場合は最初にログインを求められます。

 

heroku [auth:]login

アプリケーション指定 不要
オプション引数 なし

 heroku [auth:]loginは、ログインを行うためのコマンドです。実行するとメールアドレスとパスワードの入力が求められ、認証に成功するとそのアカウントでのログイン状態となります。

 一度ログイン状態となるとlogoutコマンドを実行するまでログイン状態は維持されるので、コンピュータを再起動した場合など、毎回ログインコマンドを実行する必要はありません

 

heroku [auth:]logout

アプリケーション指定 不要
オプション引数 なし

 heroku [auth:]logoutは、ログアウトを行うためのコマンドです。ログアウト後はloginコマンド以外の他のコマンドは実行できません。

 

heroku auth:whoami

アプリケーション指定 不要
オプション引数 なし

 heroku auth:whoamiコマンドは、現在ログイン中のアカウント(メールアドレス)を表示します。

 

heroku auth:token

アプリケーション指定 不要
オプション引数 なし

 heroku auth:tokenは、現在ログイン中のアカウントのAPIトークンを表示するコマンドです。

 APIトークンは、HerokuのPlatform APIを実行する際に使用します。Platform APIについては機会を改めて紹介しますが、例えば、次のようにcurlコマンドを実行すれば、アプリケーションの一覧をJSONで得ることができます(Macでのみ実行可)。

$ curl -i -H "Accept: application/vnd.heroku+json; version=3" -H "Authorization: Bearer `heroku auth:token`" https://api.heroku.com/apps

 上記コマンドでは、HTTPリクエスト実行時のAuthorizationヘッダに「heroku auth:token」の返り値を埋め込んでいます。


1 2 3
→
INDEX
これで作業がサクサク進む! 開発・運用でよく使うherokuコマンドリファレンス
Page1
取り上げるコマンド
herokuコマンドの構成と本稿での表記
-a(--app)オプションと-r(--remote)オプション
heroku auth
heroku apps
heroku config
heroku logs
heroku ps
heroku releases
heroku maintenance
heroku run
heroku sharing
heroku addons
heroku help
おわりに
こちらの関連記事もおすすめです

プロフィール
小西 俊司 コニシ シュンジ

株式会社Giveryに所属するエンジニア。「CODEPREP」というエンジニアの成長を促進するサービスを、Herokuを使って今年4月にリプレースする予定。


記事へのコメント・トラックバック機能は2011年6月に廃止させていただきました。記事に対する反響はTwitterやFacebook、ソーシャルブックマークサービスのコメントなどでぜひお寄せください。