はじめに
CodeIgniter4 で Shield
を導入する際、マイグレーションが適用されず、settings
テーブルが作成されない問題に直面しました。本記事では、その原因と解決策を共有します。
発生した問題
php spark migrate:status
を実行すると、以下のように Shield
と Settings
のマイグレーションが認識されているにも関わらず、適用されていない状態が続きました。
$ php spark migrate:status
+----------------------+-------------------+---------------------+----------+--------+--------+
| 名前空間 | バージョン | ファイル名 | グループ | 移行日 | バッチ |
+----------------------+-------------------+---------------------+----------+--------+--------+
| CodeIgniter\Shield | 2020-12-28-223112 | create_auth_tables | --- | --- | --- |
| CodeIgniter\Settings | 2021-07-04-041948 | CreateSettingsTable | --- | --- | --- |
| CodeIgniter\Settings | 2021-11-14-143905 | AddContextColumn | --- | --- | --- |
+----------------------+-------------------+---------------------+----------+--------+--------+
マイグレーションを適用しようとしても、特にエラーは発生せず マイグレーションが完了しました
と表示されるものの、データベースには何も適用されていない状態でした。
原因
原因は Myth/Auth
がインストールされていたこと でした。
CodeIgniter 4 では Myth/Auth
と Shield
はどちらも認証ライブラリですが、それぞれ users
テーブルや auth_*
系のテーブルを作成するため、競合が発生します。
Myth/Auth
のマイグレーションが適用されていると Shield
のマイグレーションが適用されないケースがあるため、Myth/Auth
を削除することで Shield
のマイグレーションが正常に適用されるようになりました。
解決策
1. Myth/Auth
がインストールされているか確認
$ composer show | grep myth/auth
上記のコマンドで myth/auth
が表示される場合、インストールされています。
2. Myth/Auth
をアンインストール
$ composer remove myth/auth
3. マイグレーションのリセット
既存のマイグレーションをリセットします。
$ php spark migrate:reset
4. Shield
のマイグレーションを適用
$ php spark migrate --namespace CodeIgniter\Shield
$ php spark migrate --namespace CodeIgniter\Settings
これで、Shield
と Settings
のマイグレーションが正常に適用され、settings
テーブルも作成されるはずです。
おわりに
同様の問題に直面している方の参考になれば幸いです。Myth/Auth
と Shield
の競合に注意し、適切なマイグレーションの適用を行ってください。