cakePHPでPhinx入れる時の手順（Postgres）

<h1>前提</h1>
・Macのターミナルを使用します。
・cakePHP3.8において、PostgreSQLを使用します。
・cakePHPのインストールやcomposerのインストールについては公式を当たってください。

<h1>cakePHPのマイグレーションについて</h1>
・Phinxはデフォルトとして入ってませんので、ガイドに従って入れる必要があります。
・マイグレーションについては素晴らしい説明が他にあると思います。
cakePHPにおいては、PHP言語の命令文を利用してデータベースを操作する機能です。sql文をたくさん書かなくて良いというのは本当に素晴らしいと思います。


<h1>手順</h1>

１、マイグレーションをインストールします。もしエラーが出たら、おそらくcomposer.pharがないことが原因なので、公式ガイドに従ってインストールしてください。（ダウンロードする場所とコマンドの打ち方については後述します。）

```
composer require cakephp/migrations
```

２、以下のコマンドを打つことで、Application.phpにプラグイン設定が自動で書かれます（素敵）。

```
bin/cake plugin load Migrations
```

３、cakePHPはPhinxというツールを利用してマイグレーションを行います。そこでPhinxをインストールします。

```
php composer.phar require robmorgan/phinx
```

４、このコマンドを打つことでcakePHPプロジェクト直下に、phinx.ymlが生成されます。

```
vendor/bin/phinx init
```

５、app.phpとphinx.ymlを以下のように修正します。

```app.php

（省略）
use Cake\Database\Driver\Postgres;

（省略）
'Datasources' => [
        'default' => [
            'className' => Connection::class,
            'driver' => Postgres::class,
            'persistent' => false,
            'host' => '任意',
            /*
             * CakePHP will use the default DB port based on the driver selected
             * MySQL on MAMP uses port 8889, MAMP users will want to uncomment
             * the following line and set the port accordingly
             */
            //'port' => 'non_standard_port_number',
            'username' => '任意',
            'password' => '任意',
            'database' => '任意',
            'schema' => '任意',

（省略）
```

```phinx.yaml
environments:
    default_migration_table: phinxlog
    default_database: development
    production:
        adapter: pgsql
        host: 任意
        name: 任意
        user: 任意
        pass: 任意
        port: 任意
        charset: utf8
（省略）
```

ポイントを解説します。
app.phpは３つ気をつけます。

①cakePHPはデフォルトでMysqlをサポートしてますので、use Cake\Database\Driver\Postgres;　は本来、Postgresの箇所がMysqlです。

②配列Datasourcesだけでなく、その下にある配列testも、同じように設定してあげてください。
また、postgresはだいたいポート番号が5432です。

③schemaキーを足してください！

次にphinx.yamlです。

最大の注目点は、Postgresではなく、pgsqlと書いてあげなければいけないことです。
また、environments:の集合の下に、developmentとtestingの集合があり、同様な書き方をします。

６、最後に、マイグレーションを実行してみます。
このコマンドで、articlesテーブルを作成するようのコマンドが実行できます。

```
bin/cake bake migration CreateArticles title:string body:text
```
次にこのコマンドを打てば、
DB接続→書き込み　の手順を一気に実行してくれます。

```
bin/cake migrations migrate
```

最後に、Psequel等のツールでselectコマンド等を打ち込み、articlesテーブルが作成されていれば成功です。


<h1>composer.pharファイルのダウンロード方法</h1>
公式の冒頭の４行でインストールできます。

```
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'a5c698ffe4b8e849a443b120cd5ba38043260d5c4023dbf93e1558871f1f07f58274fc6f4c93bcfd858c6bd0775cd8d1') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
```
コマンドの大体の意味はインストーラーをダウンロードして、実際にインストールして、インストーラーを捨てる、です。

<h1>インストール場所とコマンド</h1>
composer.pharを該当プロジェクトのディレクトリ内に配置しても良いですが、
他にも使えるよう、該当プロジェクトと同じディレクトリに配置するのもアリです。
というかそっちの方が上記の４行コマンドをいちいち打たなくて良いので嬉しいです。

composer.pharとプロジェクトを同じディレクトリに配置した場合、3番の手順にて下記コマンドを実行してください。

```
php ../composer.phar require robmorgan/phinx
```
<h1>最後に</h1>

お役に立てたでしょうか？
私はこの作業に日曜日の３〜4時間程度かけてしまいました。
「そんな笑」と思う方もいらっしゃると思いますが、私のように苦しまれている方が楽しく自分の作成したいプロダクトを1秒でも早く作れるようになったなら幸いです。

後、pharってピャーとか読みます？広まってくれないかなあ。

<h1>参考文献</h1>
マイグレーションのインストール
https://github.com/cakephp/migrations

Phinxのインストール
https://book.cakephp.org/migrations/2/en/index.html

phinx.yamlの設定の仕方
http://docs.phinx.org/en/latest/configuration.html

composerピャーのインストールの仕方
https://getcomposer.org/download/

app.phpの設定の仕方
→　これは自分で試した結果わかりました。