まとめ
- orangehill/iseed: Laravel 5 Inverse Seed Generator
- レコードをテーブルに挿入するシーダークラスファイルを生成する。 1 テーブルにつき 1 ファイルを生成することができる。
- Laravel 5.5 既存のデータベースからマイグレーションファイルを一発で生成した手順 – oki2a24 ではテーブル情報を生成するマイグレーションファイルを取り扱ったが、今回は、テーブル内のレコードをファイルに取り出す話。
バーション情報
- Laravel Framework 5.5.45
- Inverse seed generator (iSeed) v2.6.1
Inverse seed generator (iSeed) インストール
composer require orangehill/iseed --dev
実際は次のようになりました。注意点は前回と同じです。
$ docker-compose run --rm composer require orangehill/iseed --dev
Using version ^2.6 for orangehill/iseed
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Installing orangehill/iseed (v2.6.1): Downloading (100%)
Package phpunit/phpunit-mock-objects is abandoned, you should avoid using it. No replacement was suggested.
Writing lock file
Generating optimized autoload files
*******************************************
/!\ Warning, you're using a deprecated
¨¨¨ version of Carbon, we will soon stop
providing support and update for 1.x
versions, please upgrade to Carbon 2.
*******************************************
Most features of Carbon 1 are still available in Carbon 2.
See how to migrate: https://carbon.nesbot.com/docs/#api-carbon-2
Please consider upgrading your Laravel dependencies to be compatible with Carbon 2:
- laravel/framework at least to version 5.8.0
If you can't update Laravel, check https://carbon.nesbot.com/ to see how to
install Carbon 2 using alias version and our adapter kylekatarnls/laravel-carbon-2
You can run './vendor/bin/upgrade-carbon' to get help in updating carbon and other frameworks and libraries that depend on it.
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: orangehill/iseed
Package manifest generated successfully.
Inverse seed generator (iSeed) の help
# php artisan help iseed
Usage:
iseed [options] [--] <tables>
Arguments:
tables comma separated string of table names
Options:
--clean clean iseed section
--force force overwrite of all existing seed classes
--database[=DATABASE] database connection [default: "mysql"]
--max[=MAX] max number of rows
--chunksize[=CHUNKSIZE] size of data chunks for each insert query
--exclude[=EXCLUDE] exclude columns
--prerun[=PRERUN] prerun event name
--postrun[=POSTRUN] postrun event name
--dumpauto[=DUMPAUTO] run composer dump-autoload [default: true]
--noindex no indexing in the seed
--orderby[=ORDERBY] orderby desc by column
--direction[=DIRECTION] orderby direction
--classnameprefix[=CLASSNAMEPREFIX] prefix for class and file name
--classnamesuffix[=CLASSNAMESUFFIX] suffix for class and file name
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
--env[=ENV] The environment the command should run under
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Help:
Generate seed file from table
#
Inverse seed generator (iSeed) を実際に動かす
必ずテーブル名を指定しなければならないのが少し面倒ですけれども、使い方自体は簡単でした。
# php artisan iseed wp_commentmeta,wp_comments,wp_links,wp_options,wp_postmeta,wp_posts,wp_term_relationships,wp_term_taxonomy,wp_termmeta,wp_terms,wp_usermeta,wp_users
Created a seed file from table wp_commentmeta
Created a seed file from table wp_comments
Created a seed file from table wp_links
Created a seed file from table wp_options
Created a seed file from table wp_postmeta
Created a seed file from table wp_posts
Created a seed file from table wp_term_relationships
Created a seed file from table wp_term_taxonomy
Created a seed file from table wp_termmeta
Created a seed file from table wp_terms
Created a seed file from table wp_usermeta
Created a seed file from table wp_users
#
結果、 database/seeds/ に上記のファイルが追加され、さらに、 database/seeds/DatabaseSeeder.php に上記ファイルを実行するように追記されていました。
生成されたシーダーファイルの中身
例えば database/seeds/WpCommentsTableSeeder.php は次のようになりました。
- まずレコードを全て削除してからデータを追加する流れ。
- ファイルの各行の行末に不要なスペースが高い頻度で混じっている。
<?php
use Illuminate\Database\Seeder;
class WpCommentsTableSeeder extends Seeder
{
/**
* Auto generated seed file
*
* @return void
*/
public function run()
{
\DB::table('wp_comments')->delete();
\DB::table('wp_comments')->insert(array (
0 =>
array (
'comment_ID' => 1,
'comment_post_ID' => 1,
'comment_author' => 'WordPress コメントの投稿者',
'comment_author_email' => 'wapuu@wordpress.example',
'comment_author_url' => 'https://wordpress.org/',
'comment_author_IP' => '',
'comment_date' => '2019-06-02 10:24:29',
'comment_date_gmt' => '2019-06-02 01:24:29',
'comment_content' => 'こんにちは、これはコメントです。
コメントの承認、編集、削除を始めるにはダッシュボードの「コメント画面」にアクセスしてください。
コメントのアバターは「<a href="https://gravatar.com">Gravatar</a>」から取得されます。',
'comment_karma' => 0,
'comment_approved' => '1',
'comment_agent' => '',
'comment_type' => '',
'comment_parent' => 0,
'user_id' => 0,
),
));
}
おわりに
Laravel 5.5 既存のデータベースからマイグレーションファイルを一発で生成した手順 – oki2a24 で疑問視したように、マイグレーションファイルで既存のデータベースの情報をマイグレーションファイルとして生成したとしても、データベースレコードも使いたい場合は意味がありません。レコードも抽出できれば良いのに、という問題がありました。
今回の投稿はそれを解決するものとなります。
ただ、シーダークラスファイルは、どちらかというとテスト用のデータを気軽に作るための用途が一般的なように感じます。
既存のデータベースのレコード数が非常に大きな場合、シーダークラスファイルに抽出して、というのはシーダークラスファイルの大きさが非常に大きくなり、また、DB へ入れる際にも非常に時間がかかると予想されるため、良い方法とは言えないと思います。
そうなると使いどころですけれども、アプリをリリースする準備段階として、余計なデータベースデータを削除して、残した設定系のマスタデータをシーダークラスファイルとして逆生成する、というのは、良い使い道ではないでしょうか。
既存のデータベースを使ったままのシステムリプレース業務の場合は、マイグレーションクラスやシーダークラスのファイルをデータベースから逆生成する意味は薄いように感じました。
最後に、参考ページです。このページのおかげで、 Inverse seed generator (iSeed) を見つけることができました。
以上です。