いちばん簡単にPostgreSQLを使う ～HerokuPosgresに繋いでみよう

# 概要

Herokuに登録してPostgreSQLサーバを立ち上げ、自分のPCにインストールしたA5M2というフリーのSQL開発ツールで接続するまでの手順を解説します。
クラウドのデータベースサービスの強烈な手軽さを体験してみてください！

ボーナストラック＃１ 定期バックアップを取ってみる
ボーナストラック＃２ Herokuでアプリ公開する簡単な手順を紹介。


# 用語について

### １．Heroku 

- https://www.heroku.com/
- クラウドでWebアプリケーションを簡単に公開できるプラットフォームを展開している会社。Platform as a Service（PaaS）と呼ばれるサービスです。
    - アメリカに本拠地を置いてます。2010年にSalesforce.comに買収されました。
- 当初はRuby on Railsのアプリしか公開できなかったが、現在はJava、Node.js、Scala、Clojure、Python、PHP、GOなどサポートするように。
- クレカ登録すれば月1000時間まで無料でWebサービスを公開することができる、24時間×31日＝744時間なので1か月余裕。クレカ登録なしだと550時間まで。
	- 無料時間を超えると動かなくなります。勝手に課金されたりはしません。
	- https://www.heroku.com/pricing
- ただし無料～安いプランは米国リージョンのみ。Privateプランなら日本サーバ使えますがちょっとお金いります。
- 公式サイトは英語。ただし日本にもサポート部隊がいて、日本語で問い合わせ可能です。


### ２．Heroku Postgres  

- heroku社が提供するクラウドのデータベース。Database as a Service（DBaaS）と呼ばれるサービスです。
	- 似たようなサービスで、PostgreSQLが使えるものとしては Amazon Web Service RDS、 EnterprizeDBなどがあります。
- Herokuアプリに対するアドオンって立ち位置ですが、外部アプリからも利用可能です。
- 10000レコードまで無料で使える。
	- オーバーしたら警告メールが来て、１週間経つと強制削除されます。勝手に課金されたりはしません。
- 無料なのにバックアップがついてる！素晴らしい！
- $50～のstandardプランでは 分単位で任意の時点に戻せるRollback機能、PremiumプランだとHAが使えるようになります。
- 注意点もあります。
	- Configレベルの細かい設定できない、ユーザも１つしか使えず権限の設定もできない、アクセス制限できない、日本語の扱いにちょっと注意が必要、など。
- https://elements.heroku.com/addons/heroku-postgresql


### ３．A5M2

- 正式名称は A5:SQL Mk-2 。公式には「えーふぁいぶ」と発音するが、つい「えーご」と呼んでしまいます。
- データベース開発を支援するために開発されたフリーの汎用SQL開発ツール。日本人の松原正和さんが開発されてます。
- これ１本で様々なデータベースに対応できる。SQLを実行したりテーブルを編集するほか ER図を作ったり Excel仕様書を出力できたり云々と変態的なまでの高機能ぶりで有名。次はMongoDBへ対応させるんですって！
    - http://a5m2.mmatsubara.com/wp/index.php/2017/08/13/a5sql-mk-2_mongodb/



# 導入手順


### １．Herokuのアカウント取得/ログイン

1. Herokuサイトを開く
    - https://www.heroku.com/
    - 右上の三本線をクリック → [Sign up]ボタンをクリック
1. サインアップ画面が開いたら、アカウント情報を入力
	- First name：名前、漢字でもOK
	- Last name：性、漢字でもOK
	- Email Address：自分のメールアドレス。Herokuへのログインアカウント名としても使われます。
	- Company name：未入力でOK
	- Country：Japanを選択
	- Primary Development Language：好きなの選択してください。
	- 私はロボットではありません： チェックを入れてください。
    - 入力が終わったら[CREATE FREE ACCOUNT]をクリック。
        - 「 Almost there... 」という画面に切り替わります。
1. さきほど入力したメールアドレス宛てにHerokuからメールが届くので、開いて そこに記載されたリンクをクリック。
    - 「 Set your password 」という画面に移動するので、パスワードを登録します。
	- Password：8桁以上の半角英数記号。英字だけだと弱いって怒られます
	- Password Confirmation：上記と同じものを入力
    - 入力が終わったら[SET PASSWORD AND LOG IN]ボタンををクリック。
        - 「 Welcome to Heroku 」という画面に切り替わります。
        - 少し下にスクロールして [CLICK HERE TO PROCEED]ボタンをクリック。
1. Heroku登録＆ログイン完了です！



### 2. Herokuアプリの作成

1. ログインした画面で [Create New App]ボタンをクリック。
	- 右上[New] > [Create new app] でもOK。
1. Create New App 画面に遷移します。
	- App name：未入力でOK。あとで変更できます。
	- Choose a region：デフォルト(United States)でOK。(Europeよりマシなので…)
	- [Create app] ボタンをクリック。
1. アプリケーション作成完了です！！


### 3. Heroku-Postgresの作成

1. アプリケーション画面の上方、メニュータブが並んでいるところで [Resources]ボタンをクリック。
1. Resources画面が表示されたら、
Add-onsの下の[Quickly add add-ons from Elements]と書かれたテキストボックスに『postgres』と入力します。
すると「Heroku Postgres」という選択肢が出てくるので、それをクリックします。
1. ライトボックスが現れます。
	- Plan name： デフォルトの「Hobby Dev - Free 」を選択。
    - [Provision]ボタンをクリックします。
1. PostgreSQLデータベースの追加完了です！！！


PostgreSQLの接続情報確認

1. Resources画面 Add-onsの下に、「 Heroku Postgres :: Database 」と書かれた列があるので、そこをクリックします。
1. Heroku Data 画面が開きます。上方、メニュータブが並んでいるところで [Settings]ボタンをクリック。
1. Settings画面 右方に [View Credentials...]ボタンがあるのでクリック。
1. 接続情報が表示されます。
	- 外部からの接続には Host、Database、User、Password の4つを使います。メモしておいてください。


### 4. A5M2のインストール ＆ A5M2で接続

1. A5M2のダウンロード
    - http://a5m2.mmatsubara.com/
    - x86 editionをダウンロードします。（64bitOSでもx86版でOKです）
    - 公式サイトによると PostgreSQL, MySQL, SQL Serverに関してはどっちでもOK、32bit版のが速いことが多いそうなので。
        - http://a5m2.mmatsubara.com/tips/other_x86_x64/
1. A5M2のインストール
	- Zipファイルを解凍するだけです。
1. A5M2の起動＆初期設定
	1. 解凍したフォルダのA5M2.exe をダブルクリック。
	1. 初回起動時は「設定情報保存先の選択」が出るので、「設定ファイル（ポータブルモード）」を選択します。
		- どちらでもよいのですが。A5M2はインストーラが無いため、レジストリにすると アンインストール（削除）してもレジストリには接続情報が残ったままになります。
		- 設定ファイルにしておくと、別端末をつかいたいときもコピーするだけで動くので捗ることが経験上多いです。
1. OpenSSLの導入
	- Heroku Postgres へA5M2でSSL接続するためにはSSLのライブラリが必要です。
	- 「OpenSSL client library couldn't be loaded. ～」エラーが出る場合は別途インストールしてください。
	- RAD Studioの解説ページからダウンロードします。
		- http://docwiki.embarcadero.com/RADStudio/Berlin/ja/OpenSSL
		- 「選択肢 2 -- OpenSSL 圧縮ライブラリ ファイルをダウンロード」する方法のほうが間違いがないようです。
		- こちらは32bit版と64bit版でインストール手順が少し異なりますので、解説ページをよく読んでdllをコピーしてください。

1. A5M2へのサーバ登録
	1. A5M2で「サーバの追加と削除」のダイアログを表示させます。
	1. “追加”ボタンをクリック
	1. “PostgreSQL(直接接続)”ボタンをクリック
	1. 接続情報を入力します。Heroku Data 画面でメモした Host、Database、User、Password の4つを記入し“パスワードを保存する”にチェックを入れます。
	1. “SSL”タブに移動します。
	1. SSLモードを”優先(SSL接続を優先)”に変更します。
	1. “テスト接続”ボタンをクリックし、接続に成功すれば“OK”ボタンをクリックして登録を行ってください。
	1. データベース別名は任意に入力してかまいません。例：" heroku/postgres "など
	2. ※認証に失敗しましたエラーが出る場合はdaikさんに頂いたコメントを参照してみてください。

1. A5M2での接続
	- A5M2の左ペイン、データベースツリーでデータベース名をダブルクリックしてください。
	- 接続できれば成功です！！

> OnePoint:
> より詳しい接続手順のスライドがありますので、よろしければこちらもご覧ください。
> https://www.slideshare.net/ester41/a5-sql-mk2


# ボーナストラック１： DBのスケジュールバックアップを設定する

バックアップは必須ですよねjk
手動バックアップはHeroku管理画面からボタンひとつで取れますが、定期バックアップは画面操作では取ることができません。コマンドラインから設定します。


### １．HerokuCLIのダウンロード＆インストール

1. Herokuコマンドラインツールをダウンロード
	- https://devcenter.heroku.com/articles/heroku-cli
	- Windows用は32bit用と64bit用があるので間違えないでください。
	- インストール時のオプションは本体、Pathともチェックを入れます。
1. ダウンロードしたパッケージをダブルクリックで インストール。


> OnePoint:
>  じつはHerokuは画面操作よりもコマンドライン操作の方ができることが多いです。
>  画面でできることはすべてコマンドで操作できます。


### ２．HerokuCLIでのログイン

1. Windowsのコマンドプロンプトを起動
	- 検索窓に「 cmd 」と打ち込む
	- スタートメニューからプログラム > WIndowsシステムツール > コマンドプロンプト
	- ※Windows10の場合、コマンドプロンプトの代わりにPowershellでもOKです。
1. 画面が出たら、`heroku login`とタイプ。
1. 画面表示に従って Email、Password を入力。
	- Logd in as ～ のようなメッセージが表示されたらログイン成功です。

【参考】コマンドラインログイン方法
https://devcenter.heroku.com/articles/heroku-cli#getting-started


### ３．スケジュールバックアップコマンドの実行

- コマンドプロンプトから 以下のコマンドを打ち込みます。
	- `heroku pg:backups schedule DATABASE_URL --at "02:00 Asia/Tokyo" --app your-app-name`
	- ※最後のyour-app-nameのところはアプリケーション名に書き換えてください。

```
実行例：
C:\>heroku pg:backups schedule DATABASE_URL --at "02:00 Asia/Tokyo" --app polar-temple-94261
Scheduling automatic daily backups of postgresql-slippery-64415 at 02:00 Asia/Tokyo... done
C:\>
```

【参考】スケジュール登録方法
https://devcenter.heroku.com/articles/heroku-postgres-backups#scheduling-backups
※Windowsの場合、パラメータ指定は"（ダブルクォート）を使ってください。


### ４．スケジュールバックアップの確認コマンドの実行

- コマンドプロンプトから 以下のコマンドを打ち込みます。
	- `heroku pg:backups:schedules --app your-app-name`
	- ※最後のyour-app-nameのところはアプリケーション名に書き換えてください。

```
実行例：
C:\>heroku pg:backups:schedules --app polar-temple-94261
=== Backup Schedules
DATABASE_URL: daily at 2:00 Asia/Tokyo
C:\>
```

スケジュールバックアップ登録完了です！

Hobby-Devプラン（無料プラン）では1週間分のバックアップが残すことができます。
バックアップはHeroku管理画面からダウンロードすることも可能です。


# ボーナストラック２： HerokuでphpPgAdminを動かしてみる

せっかくなのでHerokuでデータベースを使うアプリケーションを動かしてみたいと思います。
今回はphpPgAdminを設置してみます。


> ＜phpPgAdminとは＞
> phpで作られたPostgreSQL用のデータベース管理ソフト。
> 2013.04.14 から更新が止まっています。
> 公式に対応しているのはPostgerSQL9.2.xまでなので、正式な運用には使用しないでください。


アプリケーションの設置（デプロイ）は、コマンドラインで行います。
"git"というバージョン管理システムと連携させて プログラムソースを送信する方法が Heroku的には一般的です。


### １．gitのインストール

1. Gitをダウンロード
	- https://git-scm.com/downloads
	- バージョンは最新版でOKです。（ver2.14.1で動作確認しています）
	- Windows用は32bit用と64bit用があるので間違えないでください。
1. Gitのインストール
	- インストールオプションはすべてデフォルトにします。
	- 変更した場合、手順にずれが発生する可能性があるのでご注意ください。
1. Gitの初期設定
	- コマンドプロンプトを開き、以下のコマンドを実行します。
		- git config --global user.name "taro yamada"
		- git config --global user.email taro.yamada@example.com
		- ※名前はローマ字で、メールアドレスは適当なものに書き換えてください。

```
実行例：
C:\> git config --global user.name "michio kataoka"
C:\> git config --global user.email kataoka@example.com
```


### ２．フォルダ作成&Gitチェックアウト

適当なところに作業用フォルダ（gitリポジトリ）を作ります。

1. 右クリックで新規作成 > フォルダー
	- フォルダー名は `my-project` とします。
	- 変更した場合は以下 変更した名前に読み替えてください。
1. 作成したフォルダを開き、SHIFTキーを押しながら右クリック。
	- Windows7の場合： コマンドプロンプトをここで開く(S) をクリック。
	- Windows10の場合： Powershellウィンドウをここに開く(S) をクリック。
1. 以下のコマンドを打ち込みます。
	- `git init`
	- `heroku git:remote -a your-app-name`
	- ※最後のyour-app-nameのところはアプリケーション名に書き換えてください

```
実行例：
C:\my-project> git init
Initialized empty Git repository in C:/Users/IEUser/Desktop/my-project/.git/
C:\my-project> heroku git:remote -a polar-temple-94261
set git remote heroku to https://git.heroku.com/polar-temple-94261.git
C:\my-project>
```


### ３．phpPgAdminのダウンロード&展開

1. phpPgAdminをダウンロード
	- http://phppgadmin.sourceforge.net/doku.php?id=download
	- phpPgAdmin-5.1.zip をダウンロードしてください。
1. phpPgAdminの展開
	- ダウンロードしたphpPgAdmin-5.1.zip を右クリック、「すべて展開(T)...」して解凍します。
	- 解凍先は任意のフォルダでかまいません。
1. 解凍されたフォルダを開き、
    - その中身を 先に作ったmy-project フォルダの中にコピーします。


### ４．コンフィグファイルの編集

1. my-project フォルダ ＞ conf フォルダの中にあるconfig.inc.php を開きます。
	- パス：`～\my-project\conf\config.inc.php`
	- メモ帳で開くと、改行されずに１列で表示されてしまいます。そんなときは
		- まず Internet Explorerで開き、表示されたテキストをCtrl+A → Ctrl+Cでコピー。
		- 次にメモ帳で開き直し、Ctrl+A → Ctrl+V で上書き、保存します。
	- Sakuraエディタ、秀丸エディタ等あればそれらを使ってください。
1. 以下2か所を書き換えます。（比較的上の方にあります）
	- `$conf['servers'][0]['host'] = '';` ←HerokuPostgresの「Host」を記入
	- `$conf['servers'][0]['defaultdb'] = 'template1';` ←HerokuPostgresの「Database」を記入
	- ※接続情報は、HerokuPostgresの管理画面から確認して記入してください。

```config.inc.php
書き換え例：
	$conf['servers'][0]['host'] = '';
　　　　　↓
	$conf['servers'][0]['host'] = 'ec2-46-137-117-43.eu-west-1.compute.amazonaws.com';

	$conf['servers'][0]['defaultdb'] = 'template1';
　　　　　↓
	$conf['servers'][0]['defaultdb'] = 'datin9kograjql';

```

- 書き換えたら保存してください。



### ５．Gitコミット＆Herokuデプロイ

- 以下のコマンドを打ち込みます。
	- `git add .`
	- `git commit -am "make it better"`
		- ※make it betterはコメントなので適当に変更してもOKです。
	- `git push heroku master`
		- ※このコマンドで送信が始まります

```
実行例：
C:\my-project> git add .
warning: LF will be replaced by CRLF in CREDITS.
The file will have its original line endings in your working directory.
  :
  :

C:\my-project> git commit -am "make it better"
[master (root-commit) 9676282] make it better
 360 files changed, 77254 insertions(+)
 create mode 100644 CREDITS
  :
  :

C:\my-project> git push heroku master
Counting objects: 391, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (382/382), done.
Writing objects: 100% (391/391), 794.45 KiB | 2.92 MiB/s, done.
Total 391 (delta 46), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> PHP app detected
remote:
remote:  !     WARNING: No 'composer.json' found.
remote:        Using 'index.php' to declare app type as PHP is considered legacy
remote:        functionality and may lead to unexpected behavior.
remote:
remote: -----> Bootstrapping...
remote: -----> Installing platform packages...
remote:        NOTICE: No runtime required in composer.lock; using PHP ^5.5.17
remote:        - apache (2.4.20)
remote:        - nginx (1.8.1)
remote:        - php (5.6.31)
remote: -----> Installing dependencies...
remote:        Composer version 1.5.1 2017-08-09 16:07:22
remote: -----> Preparing runtime environment...
remote:        NOTICE: No Procfile, using 'web: heroku-php-apache2'.
remote: -----> Checking for additional extensions to install...
remote: -----> Discovering process types
remote:        Procfile declares types -> web
remote:
remote: -----> Compressing...
remote:        Done: 14.4M
remote: -----> Launching...
remote:        Released v4
remote:        https://polar-temple-94261.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/polar-temple-94261.git
 * [new branch]      master -> master
C:\my-project>

```


### ６．アクセスしてみる

- 以下のコマンドを打ち込みます。
	- `heroku open`

```
実行例：
C:\my-project> heroku open
```

ブラウザが立ち上がってアプリが開きます。
アプリケーションのデプロイ完了です！！

HerokuPostgresの管理画面から 接続情報を確認し、User・Password の2つを使ってログインしてください。


### ７．さいごに

- `git push heroku master`したときにWARNING:が出ていますが、今回の手順ではちょっと手抜きをしてデプロイしました。
	- 正式にはPHPにはComposerを使うことが推奨されてます。
	- 詳しくは以下を参考にしてください。
	- https://devcenter.heroku.com/articles/getting-started-with-php#introduction
- 今回デプロイしたphpPgAdminは、当然ですが世界中からアクセス可能な状態になっています。
	- もし実際に使われる場合はBASIC認証をかけるなりしてください。
	- 当面使わないのであれば、メンテナンスモードにしておく方が無難です。
		- Herokuの管理画面から設定可能です。
- デプロイ手順は、Heroku管理画面の Deployタブ下方にも書かれていますので参考にしてください。


***タダで使えるPosgreSQL、ぜひ活用してみてください！***