Heroku開発におけるHeroku CLI

はじめに

みなさんこんにちは。
結婚して名字が変わりました、エンジニアの溝井です。

旧姓の植松として過去に記事を書いておりましたが、
これからは溝井としてどんどん投稿していきたいと思います!

先週HerokuのMeetupイベントに参加してきたので、今回もHerokuネタについて書いていこうかと思います。
Heroku Meetup #15 Heroku Ninja

Heroku開発

Heroku開発では、Salesforce開発とは異なりGitベースの開発フローとなります。
その中で欠かせないのがコマンドラインツールの「Heroku CLI」です。

主にHerokuへのアプリケーションデプロイで利用しますが、
使いこなすと便利な機能が沢山あるので、ピックアップしていきたいと思います!

なぜHeroku CLI?

コマンドラインツールを取り上げるのは、非常に地味ですが、
一般的にGUIでの操作に比べて以下の利点があるかと思います。

  • 作業ログを残せる
  • 操作の共有が簡単
  • 自動化が可能

特にHeroku CLIではアプリケーションやアドオンの管理が柔軟に対応できるため、
作業をHeroku CLI中心に寄せて作業ログをとったり、チーム内での作業共有に関しては有効な手段となります。

色々できるHeroku CLI

さっそくHeroku CLIのコマンドをみていきたいと思います!

インストールがまだの方は、以下のリファレンスに各OSのセットアップ方法が記載されていますのでご参照ください。
https://devcenter.heroku.com/articles/heroku-cli

動作環境

  • OS
    • Mac(Windowsでも同様のコマンドが利用可能ですが一部表示が異なります)
  • Heroku CLIバージョン
    • heroku-toolbelt/3.43.16 (x86_64-darwin10.8.0) ruby/1.9.3
    • heroku-cli/5.6.28-2643c0a (darwin-amd64) go1.7.5

heroku help

まずはヘルプコマンドで利用可能なコマンドをチェック!
色々なコマンドが用意されていますね!
heroku-help.png

heroku login

はじめにログインします。
Herokuアカウントのメールアドレスとパスワードを入力します。
heroku-login.png

heroku

とりあえずherokuコマンド!
お気に入りに登録しているアプリがある場合は、その概要などが表示されます。
heroku.png

heroku apps

アプリの一覧が表示されます。
heroku-apps.png

<TIPS>
組織アカウントのアプリケーションは「heroku apps --org 組織名」で表示されます。
すべて表示したい場合は「heroku apps --all」

heroku apps --help

今度はappsコマンドのヘルプをチェックします。
アプリケーションの情報の参照や操作が可能なコマンドが用意されています。

heroku-apps-help.png



heroku create [アプリケーション名]

ここではアプリをデプロイするおなじみのコマンドを実行していきます。

今回はCLIにフォーカスしているのでアプリの準備作業は割愛させて頂きます。
私は以下の記事を参考にSpring Bootのサンプルアプリをデプロイしてみます。

ローカルのGitにコミットした後Heroku CLIを使用して、
Herokuアプリケーションの作成をします。

heroku-create-appName.png

※アプリケーション名を省略するとランダムに振られる名称が設定されます。

Git上にアプリケーションが作成されますが中身が無いので、
ローカルの変更内容をHerokuにプッシュします。
$ git push heroku master

heroku open

上記で作成したアプリを「heroku open」コマンドで表示してみます。
$ heroku open
デフォルトのブラウザでHerokuアプリケーションが起動します。
heroku-open-web.png
<TIPS>
「heroku open /hoge」の様にパス指定でアプリケーションを開くこともできます。
この様な使い方は「heroku open --help」でヘルプを見るとしっかり書いてあるので、
気になるコマンドはとりあえずヘルプを見るのがおすすめです。
heroku-open-help.png

heroku ps

Herokuのプロセスを管理するコマンドで現在の状況をチェックしてみます。
現在はweb Dynoが1で構成されています。
heroku-ps.png
ここでも何ができるかヘルプでチェックしみましょう。
heroku-ps-help.png

heroku ps:scale

上記のヘルプで「scale」コマンドが使えそうなのでweb dynoをスケールしてみます。
スケールを0にすることでインスタンスを起動していない状態にしてみます。
ps-scale-web-0.png

そうすると先程のアプリを表示すると、アプリケーションエラーが表示されました。
ps-scale-web-0-web.png

スケールを1にすることで
ps-scale-web-1.png

再度表示されるようになります。
heroku-open-web.png

管理系コマンド

上記の「heroku ps」コマンドの様にアプリケーションを管理するコマンドは、
データベースの管理系コマンドや設定変更を行うものなど他にもたくさんあります。

アプリケーション開発では、本番環境の他にもテスト環境やステージング環境を作成していくかと思います。
GUIからも同様の操作は可能な場合もありますが、初期セットアップ作業をHeroku CLI中心に行うことで、
繰り返し行わなければいけない作業を効率化することができそうですね!

もっと便利に!Heroku CLI Plugins

ここまで便利なHeroku CLIの機能を見てきましたが、最後に「Heroku CLI Plugins」のご紹介となります。
プラグインを使用すると、開発者はコマンドや機能を追加して、Heroku CLIの機能を拡張できます。

今回は、Heroku社が作成して公開している「heroku-accounts」というPluginを紹介させて頂きます。
Herokuを仕事でも利用されている方は、プライベートでもアカウントを持っていたりするなど複数のHerokuアカウントを取得しているケースが多いかと思います。

そんな時に通常のHeroku CLIだとCLI操作前にログアウト、ログインしてアカウントを切り替える必要がありますが、
「heroku-accounts」のPluginを利用するとあらかじめ利用アカウントを登録でき、すぐに切り替えることができるようになります。

インストール

$ heroku plugins:install heroku-accounts

利用方法

personalという名称で個人利用目的アカウント追加:

$ heroku accounts:add personal
Enter your Heroku credentials.
Email: david@heroku.com
Password: ******

workという名称で仕事用アカウント追加: ※認証はsingle sign-on (SSO)

$ heroku accounts:add work --sso
Enter your organization name: my-company-name
Opening browser for login... done
Enter your access token (typing will be hidden): **********************************

※上記の例ではSSOで設定していますが、SSOはオプションなのでpersonal同様に普通の認証でアカウント登録可能です。

アカウント切り替え:

$ heroku accounts:set personal

アカウント一覧表示:

$ heroku accounts
* personal
work

現在のアカウント表示:

$ heroku accounts:current
personal

アカウント除外:

$ heroku accounts:remove personal
Account removed: personal

「heroku-accounts」では複数アカウントをすぐに切り替え出来て便利ですね!

この様な独自のプラグインを作成したい場合は、「Developing CLI Plugins」をご参照ください。

最後に

いかがでしたでしょうか。気になるコマンドは見つかりましたでしょうか?

最後に紹介した「Heroku CLI Plugins」に関してはHeroku社のGithubでいくつか「heroku-cli-plugin」Topicのついたリポジトリがありました。
他にも便利なPluginが公開されているかもしれませんので今後もチェックしていきたいと思います。

Heroku CLIは奥が深そうなので、今後もHerokuのリファレンスを中心にキャッチアップしていきたいと思います!

<参考>