取り上げるコマンド
前回は、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」の返り値を埋め込んでいます。