はじめに

はいさい!沖縄支店の石原です。
僕が学生の頃、敬老の日は9/15だったのですが、ハッピーマンデー法で平日になってしまいましたね。

「ハッピーマンデー法」って何気なく使っていますが、日本語が入ってないんですけど。いいのでしょうか。学生の頃に思った疑問は、今も解決していません。


今回は、データベースへの更新処理をCapistranoで行うための設定について書いていきたいと思います。
触れる機会がなかったたため記載していませんでしたが、
このシリーズはLAMP環境でのデプロイをCapistranoで行うことを想定しています。


まずは結論から

  1. 使用しているフレームワークにマイグレーション機能が備わっていれば、それを使用する
  2. マイグレーション機能が存在しなければ、ツールを導入する(今回はPhinxを導入)
  3. rbファイルの設定を行う

1. LAMP環境でDBのマイグレーションを行うには

Capistrano3はRailsアプリのデプロイを想定しているため、
DBのマイグレーションについては
Railsのdb:migrateが実行されます(たぶん)。

そのため、LAMP環境でDBのマイグレーションを行うためには、プロジェクト内でマイグレーションツールを用意する必要があります。


2. マイグレーションツール

  1. CakePHP3で環境構築する場合
    CakePHP3はフレームワーク内でマイグレーションのための機構を持っているため、
    そのまま利用することができます。

  2. その他のフレームワークなどで環境構築する場合
    フレームワーク内にマイグレーションの機能を持っていれば、そのまま利用できます。
    こちらの記事を参考に確認してみてください。
    今回は、CakePHP3のマイグレーションのコアとして採用されているPhinxを使っていきます。

3. Phinxのダウンロード

phinx

公式サイトの「INSTALL NOW v.x.x.x」というボタンを押下すると、DLするために必要なコマンドが表示されます。以下はコマンドの転記です。

# The best way to get Phinx is is via Composer (https://getcomposer.org):

curl -s https://getcomposer.org/installer | php


# Then install Phinx:

php composer.phar require robmorgan/phinx
php composer.phar install --no-dev


# Then Phinx can be executed using:

vendor/bin/phinx

# Now write your first migration:

$ vendor/bin/phinx init .
$ $EDITOR phinx.yml
$ mkdir -p db/migrations db/seeds
$ vendor/bin/phinx create MyFirstMigration
$ vendor/bin/phinx migrate -e development


phinxのマイグレーションファイルの作成方法について詳しく知りたい方は、「CakePHP3にも採用されているマイグレーションツール「Phinx」を使ってみた」が参考になります。



5. Capistranoでphinxを実行するための設定を行う

DBマイグレーションの実行タイミングは、ソース(マイグレーションファイル)のデプロイ完了後となります。
Capistranoはafterタスクでデプロイ完了時に実行されるタスクで設定することができます。

以下を参考に、deploy/[環境別ファイル].rbに追記してください。




データベースの更新処理が自動化できるようになれば、本番環境移行時のリスクを大幅に減らすことができるようになります。

ただし、誤った状態でマイグレーションファイルをアップしてしまうと危険ですので、必ずアップする前にローカルの開発環境などでテストをするように気を付けましょう!



第5回の記事はこちら