先取り!Laravel 8.xで追加される「Schema Dump」機能を調べてみた

こんにちは❗フリーランス・エンジニアの 九保すこひ です。

さてさて、先日も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ファイルは、mysqldumppgdumpコマンドで作成されるようです。
そして、ファイルは次の場所に保存されます。

/database/schema/(DBのコネクション名)-schema.mysql

どんなメリットがあるか?

基本的にローカル環境でのメリットを想定しているようです。

まず、サイトの規模が大きくなってくると通常マイグレーションがたくさん必要になりますが、これを1つのファイルにまとめることができ、これによりDBの初期化が高速になります。

例えば、通常のマイグレーションを使った次の例を見てみましょう。

  1. booksテーブルをつくる
  2. booksテーブルに「comment」フィールドを追加する
  3. やっぱり「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した
ファイルをつくって初期化してました😊」

今回の技術をつかった開発のご依頼、お待ちしております😊✨ お問い合わせ また、個人レッスンや、わかりにくい部分がありましたらからお気軽にご連絡ください。 どうぞよろしくお願いいたします!
このエントリーをはてなブックマークに追加       follow us in feedly