九保すこひ@フリーランスエンジニア|累計300万PVのブログ運営中
さてさて、先日もReddit
で日課の情報収集をしていたところ、以下の記事を発見しました。
[8.x] Schema Dump by taylorotwell
簡単に言うと、Laravel
の次期バージョン8.x
に、
Schema Dump
と呼ばれる新機能が追加されるとのことだったのですが、この機能がなかなか興味深かったので、7.x
が公開されたばかりですが、先取りしてSchema Dump機能をまとめてみることにしました。
ぜひ皆さんのお役に立てると嬉しいです😊✨
「うーん、Laravel開発者はやっぱ凄い😊」
Schema Dumpは何ができるのか?
新コマンド、php artisan schema:dump
が使えるようになります。
そして、このコマンドを実行するとすでに存在しているマイグレーションを「Schemaファイル」として1つにまとめることができます。
また、php artisan schema:dump --prune
を実行するとすでに「Schemaファイル」にまとめられたマイグレーションを削除することもできるようになっています。
なお、Schemaファイルは、マイグレーションするとき一番最初に実行されますが、これはDBが初期状態のときだけです。その後、まだSchemaファイル
に入っていないマイグレーションがあれば続いて実行されることになります。
どのようにして実装されるか?
Schemaファイル
は、mysqldump
やpgdump
コマンドで作成されるようです。
そして、ファイルは次の場所に保存されます。
/database/schema/(DBのコネクション名)-schema.mysql
どんなメリットがあるか?
基本的にローカル環境でのメリットを想定しているようです。
まず、サイトの規模が大きくなってくると通常マイグレーションがたくさん必要になりますが、これを1つのファイルにまとめることができ、これによりDBの初期化が高速になります。
例えば、通常のマイグレーションを使った次の例を見てみましょう。
- booksテーブルをつくる
- booksテーブルに「comment」フィールドを追加する
- やっぱり「comment」フィールドは不要になったので削除した
もしこの作業をマイグレーションを追加することで実装したとすると、3つのファイルを実行することになります。
しかし、Schemaファイルはmysqldump
などのコマンドで今現在のDB構造をまとめてくれるので、2と3は省略できます。
また、先ほども書きましたが、Schemaファイル
はDBが初期状態(migrations
テーブルが空)のときだけ実行されるので、すでに運営中の本番環境にSchemaファイルをアップロードしても、そのファイルは実行されることはありません。
つまり、頻繁にDBを初期化するローカル環境ではメリットが多いといっていいでしょう。
なお、GitHubのPullリクエストに投稿されたコメントには次のようなものがありましたので、紹介したいと思います。
(意訳)
その昔、本番環境のDBを手動で変更したヤツがいたから、ローカル環境と同期をとりたかった。そんなときこの機能で解決できるんじゃないかな。
確かに、こう考えると本番環境でのメリットもありますね😊✨
おわりに
ということで、今回は気が早いですがLaravel 8.x
で追加される「Schema Dump」機能をご紹介しました。
なお、個人的にこの機能はとても歓迎です。(プルリクエストのページに思わず「いいね👍」してしまいました)
というのも、やはりサイトの規模が大きくなってくるとDBを初期化するとき「・・・・・うーん、まだ終わらない💦」となることが多いからです。
Seeder
でテストデータをたくさん用意する場合はさらに時間がかかるわけで、これがちょっとでも高速化できれば嬉しいですね。
ちなみに、まだ言及されてないと思うのですがSchema Dump
がこのテストデータをどう扱うのかに注目しています。「Schema(構造)」という名前だけあってSeeder
はサポート外なのかもしれませんが、できればSeeder
も時間がかかるので同じような機能があるとさらに嬉しいですね。
まだこれから変更があるかもしれませんが、この機能を使うのが楽しみです。
ではでは〜❗
「その昔は、mysqldumpした
ファイルをつくって初期化してました😊」