# LN マイグレーションの方針 ## 現状の課題 LN にマイグレーションやシーダーがないため、トラブルがある - 個々の開発者同士でDB構造が若干違うためトラブルがある(反映したらローカル環境とデータが違ったとか) - テーブルの変更時にSQLで共有を行うという運用面でカバーするしかない。 - テーブルの変更時はメッセージでSQLを残すため、メッセージがどんどん流れていってしまっていて後から追うのが大変。。 - テスト作成時にDBに仮データを登録できない - マスターデータなどはテストごとにDBにinsertすると重くなりそうなので、マイグレーション経由でテスト実行前に先に登録しておくのが理想 上記を改善するためにマイグレーションなどの仕組みを導入。 ## このタスクの目標 最終的に以下の条件で運用できるようなマイグレーション・Seederファイルを作成する - ローカル環境で0から全て、database作成 〜 ダミーデータの作成 を行う - マイグレーション実行後、LN開発者がローカル環境でログインできること - 今後のデータ追加、テーブルの変更についても対応できること 以下の2点で対応予定 + laravel のマイグレーション機能を使う + ユーザーDBに関しては動的に作成する - 本番環境でのテーブル変更時に運用できること(一部不可) 全ユーザーDBに対して特定のマイグレーションやSeeder を実行は可能 ==但し、特定のユーザーに対してのみマイグレーションやseederを実行するのは無理== (例えば、listnavi_user_suppportのテーブルだけ更新したいとか) ↑今後対応しても良さそう ## マイグレーションの仕様説明 ### マイグレーションファイルの種類 LNのマイグレーションで作成するデータは主に以下三種類 - マスター系 - listnavi_user_master - listnavi_master - ユーザーデータ系(マイグレーションでの投下はダミーデータ) - listnavi_user_〇〇(例: listnavi_user_takagi) - 登録時は「listnavi_master.companys」に登録されているデータ別にループを回しDBが作成を行い、そこにダミーデータを登録 ### DBのマイグレーション・Seederファイル実行処理の流れ 実行先DBの接続先別でそれぞれまとめた。 1. listnavi_master - マイグレーション - Seederの実行も先に行う => companys のデータの登録が事前に必要なため、listnavi_masterのseeder実行までやってしまう => 処理はマイグレーションファイル内でSeederを呼ぶ形 2. listnavi_user_master のマイグレーション - マイグレーション - Seederの実行 3. listnavi_user_〇〇 のマイグレーションとSeeder実行 listnavi_master に登録されているcompanysでループを行い 各ユーザーの「DBの作成〜seeder実行」までを行う 上記は、コマンドを作成 ## マイグレーションでの運用後に気をつけること マイグレーション運用になった際に気をつけた方がいいことを以下に記載 1. 新しい開発者がLNに入ってきたとき seeder ファイルに新しいユーザーのデータを登録する内容のソース変更をgitに追加 (listnavi_master.companys とかのseeder辺りに追加) 2. 実装でテーブルの変更があった時 1. 変更者が必要なマイグレーションファイルなどを作成 ==マイグレーションファイルについては追加したいテーブルやカラムが既に存在していれば何もしないように条件分岐を加えること== (運用時に特定のデータベースにだけ、先にテーブル構造を反映する時があるため) 2. git に反映されたタイミングで変更者がchatworkで共有し、他の開発者は指定されたコマンドを実行 --- ### 仕様ツール #### マイグレーションファイルDBからの自動生成 [laravel-migrations-generator](https://github.com/kitloong/laravel-migrations-generator) を使用 ``` $ php artisan migrate:generate --tables"${テーブル名}" --connection="${接続先}" ``` #### seeder ファイルをDBから自動生成 [iseed](https://github.com/orangehill/iseed) を使用 ``` $ php artisan iseed my_table --database=master ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up