SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Herokuでスタート! はじめてのPaaSアプリケーション開発

コマンド1つでDBをアプリに追加できるのもPaaSの魅力! Heroku Postgresの使い方

Herokuでスタート! はじめてのPaaSアプリケーション開発 第3回


  • X ポスト
  • このエントリーをはてなブックマークに追加

Heroku Postgresを追加する

 Heroku Postgresの追加は、CLI(コマンドラインインタフェース)のherokuコマンドとGUIのWebコンソールのどちらからでも行うことができます。 Webコンソールは、Add-onの説明やプランの詳細を確認しながら追加を行えるので便利なのですが、この連載では、CLIで行える操作は極力CLIで行う方針とします(CLIでの操作方法を知っていればWebコンソールでの操作は特に迷うことはありません)。

 まずは、前回作成したアプリケーションのディレクトリに移動して、アプリに追加されているAdd-onの一覧を表示する「heroku addons」コマンドを実行してみてください。

$ heroku addons
=== codezine-sample Configured Add-ons
heroku-postgresql:hobby-dev  HEROKU_POSTGRESQL_ONYX

(アプリケーション名とHEROKU_POSTGRESQL_XXXXの部分は環境によって異なります)

 

 なんと、まだ何もしていないにもかかわらず、heroku-postgresqlがすでに追加されています。 これは、Javaのbuildpackが初回のbuild時に「Javaでアプリを作るんであれば、RDBもきっと使うよね!」ということで自動的に追加しているからです。

 最近ではMongoDBなどのNoSQLも台頭してきており、RDBは必須といえないと思うのですが、どのみち無料なのであまり気にする必要はありません。 使わない場合でもそのまま放置しておいて問題ありません。

 今回は練習なので、とりあえずコマンドからこのPostgreSQLの削除と追加を行ってみます。

$ heroku addons:remove heroku-postgresql

 !    WARNING: Destructive Action
 !    This command will affect the app: codezine-sample
 !    To proceed, type "codezine-sample" or re-run this command with --confirm codezine-sample

> codezine-sample
Removing heroku-postgresql on codezine-sample... done, v12 (free)

 

 「heroku addons:remove」がAdd-onを削除するためのコマンドです。 破壊的な操作のため、コマンド実行後に確認のためにアプリケーション名の入力が促されます。

 続いて、追加コマンドです。

$ heroku addons:add heroku-postgresql
Adding heroku-postgresql on codezine-sample... done, v14 (free)
Attached as HEROKU_POSTGRESQL_BLUE_URL
Database has been created and is available
 ! This database is empty. If upgrading, you can transfer
 ! data from another database with pgbackups:restore.
Use `heroku addons:docs heroku-postgresql` to view documentation.

 

 Add-onのプランを指定する場合はAdd-on名の後ろに[:PLANNAME]を追加します(例 heroku-postgresql:standard-0)。 プランを指定しない場合は、最も低位のプラン(heroku-postgresqlの場合はhobby-basic)が追加されます。

 追加されたデータベースの接続情報は、(先のコマンド実行例では)HEROKU_POSTGRESQL_BLUE_URLという環境変数に追加されています。

 

heroku pg:wait

 Heroku Postgresを追加した場合、マルチテナントのhobby-dev、hobby-basicはほとんどすぐにデータベースにアクセス可能になります。

 しかし、シングルテナントのstandard-0以降のプランではセットアップが完了するまでに数秒から数分の時間がかかります。

 スクリプトなどでセットアップの終了を待ちたい場合は「heroku pg:wait」コマンドを使用することで、セットアップが完了するまで処理をブロックすることができます。

 

Heroku Postgresにアクセスする

 データベースが追加されていることを確認するために「heroku config」コマンドを実行してみます[2]

$ heroku config
=== codezine-sample Config Vars
DATABASE_URL:               postgres://xazxehmuvqeurc:-4XWLr17qoATDG0ftW2lC2ld-8@ec2-54-225-136-187.compute-1.amazonaws.com:5432/deflc9ag02nkfu
HEROKU_POSTGRESQL_BLUE_URL: postgres://xazxehmuvqeurc:-4XWLr17qoATDG0ftW2lC2ld-8@ec2-54-225-136-187.compute-1.amazonaws.com:5432/deflc9ag02nkfu
JAVA_OPTS:                  -Xmx384m -Xss512k -XX:+UseCompressedOops
MAVEN_OPTS:                 -Xmx384m -Xss512k -XX:+UseCompressedOops
PATH:                       /app/.jdk/bin:/usr/local/bin:/usr/bin:/bin

 

 DATABASE_URLとHEROKU_POSTGRESQL_BLUE_URLという環境変数に、全く同じpostgresスキームの値が設定されています。 Heroku Postgresは1つのアプリケーションに複数追加することができるので、そのそれぞれの接続情報が「HEROKU_POSTGRES_[色名]_URL」という環境変数に設定されます。

 DATABASE_URLは、アプリケーションがメインで使用するデータベースの接続情報です。 アプリケーションにHeroku Postgresが1つだけ追加されている場合は、自動的にその値が設定されます。

 

[2] 上記コマンドサンプルに含まれている接続情報は実際にHerokuが返したものですが、コピー後に再度、削除と追加を行っているので、すでに無効になっています。念のため。

 

psqlでアクセス

 ローカル環境にpsqlコマンド(PostgreSQLのコマンドラインクライアント)がインストールされている場合には、「heroku pg:psql」コマンドでDATABASE_URLに設定されているデータベースにアクセスすることができます。

codezine-sample $heroku pg:psql
---> Connecting to HEROKU_POSTGRESQL_BLUE_URL (DATABASE_URL)
psql (9.3.3, server 9.3.4)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.

codezine-sample::BLUE=>

 

 これはpsqlそのものなので、ここでCREATE TABLEやINSERT文、SELECT文などのSQLを自由に実行することができます。

 

pgAdminでアクセス

 psqlのほか、DATABASE_URLの接続情報を用いて、pgAdminなどのGUIツールから接続することも可能です。

 postgresスキームは、

postgres://[ユーザ名]:[パスワード]@[ホスト名]:[ポート]/[DBメンテナンス]

という構成になっているので接続設定の各項目に設定してください。

 また、外部から接続する場合はSSLが必須なので、接続設定のSSLタブでSSLを有効にする必要があります。

次のページ
掲示板アプリケーション

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Herokuでスタート! はじめてのPaaSアプリケーション開発連載記事一覧

もっと読む

この記事の著者

小西 俊司(コニシ シュンジ)

株式会社Giveryに所属するエンジニア。CODEプロジェクトというエンジニアの成長を促進するプラットフォーム開発のテックリード。Herokuも使った新しいプロダクトを今秋リリース予定。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8279 2014/12/17 20:50

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング