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

Heroku の API を使って Ruby コードで Heroku を管理

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

Heroku の管理

目的

Heroku アプリケーションの各種操作は heroku コマンドを介して行うのが標準です。

ここでは Ruby コードで直接 Heroku の API を呼び出して Heroku アプリケーションを管理する方法を紹介します。

この方法を使うと heroku コマンドの実行だけでは簡単にできない情報の参照が可能になります

この方法を Rake に応用すれば アプリケーションの作成からデプロイまでの運用を簡単に自動化できるようになります。

全ての操作を Ruby コードで書く必要はありません。情報の参照が必要でなければ heroku コマンドの実行が一番簡単です。

前提/共通事項

heroku api のインストール

以下を実行して heroku-api gem を事前にインストールしてください。

gem install heroku-api

API Key の取得

Heroku の API を利用するには Heroku アカウント毎に発行される API Key が必要になります

そのためには Heroku アカウントを持っていることが大前提です。

Heroku アカウントを作成の上、以下のページにアクセスし「API Key」という項目の値をメモしてください。Heroku API 利用時に使用します。

Heroku::API オブジェクトの取得について

Heroku API を利用するにはまず最初に Heroku::API オブジェクトを作成します。その際、上述した API Key を指定します。

API Key を指定する方法は以下の2つです。

  1. コンストラクタで指定する。
  2. HEROKU_API_KEY 環境変数で指定する。

コンストラクタで指定する例を以下に示します。

require 'heroku-api'

api = Heroku::API.new(:api_key => 'API Key の値')

環境変数で指定する場合、:api_key の指定は不要です。例を以下に示します。

require 'heroku-api'

api = Heroku::API.new

アプリケーションの操作

アプリケーションの作成

以下のコマンドでアプリケーションを作成できます。

heroku apps:create

これを Ruby のコードで行う例を以下に示します。

# coding: UTF-8

require 'heroku-api'

api = Heroku::API.new(:api_key => 'API Key の値')
info = api.post_app.body
p info

実行結果の例を以下に示します。

{
  "name"=>"mighty-stream-8487",
  "released_at"=>"2012/09/11 18:51:07 -0700",
  "repo_migrate_status"=>"complete",
  "create_status"=>"complete",
  "requested_stack"=>nil,
  "stack"=>"cedar",
  "slug_size"=>nil,
  "created_at"=>"2012/09/11 18:51:07 -0700",
  "buildpack_provided_description"=>nil,
  "git_url"=>"git@heroku.com:mighty-stream-8487.git",
  "owner_name"=>nil,
  "id"=>7508353,
  "database_size"=>nil,
  "owner_email"=>"toy@ownway.info",
  "repo_size"=>nil,
  "web_url"=>"http://mighty-stream-8487.herokuapp.com/",
  "domain_name"=>{
    "created_at"=>nil,
    "updated_at"=>nil,
    "default"=>true,
    "app_id"=>7508353,
    "base_domain"=>"herokuapp.com",
    "domain"=>"mighty-stream-8487.herokuapp.com",
    "id"=>nil
  },
  "dynos"=>1,
  "workers"=>0
}

アプリケーションの情報が Hash で返ってくるので、これらの情報を活用できます。

アプリケーション一覧の取得

以下のコマンドでアプリケーションの一覧が取得できます。

heroku apps

これを Ruby のコードで行う例を以下に示します。

# coding: UTF-8

require 'heroku-api'

api = Heroku::API.new(:api_key => 'API Key の値')
apps = api.get_apps.body
p apps

実行結果の例を以下に示します。

[
  {
    "name"=>"agile-lowlands-8155",
    "released_at"=>"2012/09/10 04:01:31 -0700", 
    "repo_migrate_status"=>"complete",
    "create_status"=>"complete", 
    "requested_stack"=>nil,
    "stack"=>"cedar",
    "slug_size"=>2916352, 
    "created_at"=>"2012/09/10 03:49:51-0700", 
    "buildpack_provided_description"=>"Ruby", 
    "git_url"=>"git@heroku.com:agile-lowlands-8155.git",
    "owner_name"=>nil, 
    "id"=>7462869, "database_size"=>nil, "owner_email"=>"toy@ownway.info", 
    "repo_size"=>2781184, 
    "web_url"=>"http://agile-lowlands-8155.herokuapp.com/", 
    "domain_name"=>{
      "created_at"=>nil,
      "updated_at"=>nil,
      "default"=>true, 
      "app_id"=>7462869,
      "base_domain"=>"herokuapp.com", 
      "domain"=>"agile-lowlands-8155.herokuapp.com",
      "id"=>nil
    },
    "dynos"=>0, 
    "workers"=>0
  }
]
}}

アプリケーションの情報が Hash の配列として返ってきます。以下、利用例です。

例)現在作成しているアプリケーション数の取得

puts apps.size

例)アプリケーション一覧の出力

apps.each do |app|
  puts app['name']
end

アプリケーションの破棄

以下のコマンドでアプリケーションを破棄できます。

heroku apps:destroy --confirm アプリケーションID

これを Ruby のコードで行う例を以下に示します。

# coding: UTF-8

require 'heroku-api'

api = Heroku::API.new(:api_key => 'API Key の値')
apps = api.delete_app('アプリケーションID')

以下、利用例です。

例)全ての Heroku アプリケーションを破棄(アプリケーション一覧の取得との組み合わせ)

# coding: UTF-8

require 'heroku-api'

api = Heroku::API.new(:api_key => 'API Key の値')
apps = api.get_apps.body
apps.each do |app|
  api.delete_app(app['name'])
end

例)Rake でのアプリケーション破棄

require 'heroku-api'

desc 'Destroy heroku application.'
task :destroy_app do |t|
  api = Heroku::API.new(:api_key => 'API Key の値')
  apps = api.delete_app(ENV['app'])
end

以下のコマンドでアプリケーションを破棄できます。

rake destroy_app app=アプリケーションID

コンフィグの操作

コンフィグの取得

以下のコマンドでアプリケーションのコンフィグ一覧が取得できます。

heroku config --app アプリケーションID

これを Ruby のコードで行う例を以下に示します。

# coding: UTF-8

require 'heroku-api'

api = Heroku::API.new(:api_key => 'API Key の値')
vars = api.get_config_vars(ARGV[0]).body
p vars

第1引数にアプリケーションIDを指定して実行してください。

実行結果の例を以下に示します。

{"HEROKU_POSTGRESQL_CRIMSON_URL"=>"postgres://oxhgwcjadrokmp:Io1l4VM2TlH5bQ2WytD7uJni4E@ec2-107-20-169-45.compute-1.amazonaws.com:5432/dbs777fktejs2r"}

コンフィグの情報が Hash の配列として返ってきます。以下、利用例です。

例)データベース接続情報の取得

vars = api.get_config_vars(ARGV[0]).body
if vars[vars.keys[vars.keys.index { |key| key =~ /HEROKU_POSTGRESQL_.+_URL/ }]] =~ %r!postgres://(.+?):(.+?)@(.+?):([0-9]+)/(.+?)$! then
  puts "username: #{$1}"
  puts "password: #{$2}"
  puts "host    : #{$3}"
  puts "port    : #{$4}"
  puts "database: #{$5}"
end

...

以下、必要に応じて執筆中。

参考

コメント

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

最新の10件を表示しています。 コメントページを参照

  • 最初は heroku gem をインストールするよう記事を書いていましたが、heroku-api gem を使う形に書き直しました。現時点で heroku gem は非推奨になったようです。Heroku Toolbelt を使ってくれと警告が出ます。 -- トゥイー 2012-10-29 (月) 19:51:14
  • Heroku::API オブジェクトの取得方法も修正しました。Heroku::Auth.api を使っていましたが、公式ページを見ると API Key を使って Heroku::API.new で生成するようです。 -- トゥイー 2012-10-29 (月) 19:53:07
お名前: