カテゴリー
Linux

Laravel 5.5 既存のデータベースからレコード情報のシーダーファイルを一発で生成した手順

まとめ

バーション情報

  • 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) を見つけることができました。

以上です。

カテゴリー
Linux

Laravel 5.5 既存のデータベースからマイグレーションファイルを一発で生成した手順

まとめ

カテゴリー
Linux

mapleader の定義は最初に行うこと! キーマップの Leader が変になった。

誤り

nmap <Leader>c [coc.nvim]
nnoremap [coc.nvim] <Nop>
" Remap keys for gotos
nmap <silent> [coc.nvim]d <Plug>(coc-definition)

let mapleader = "\<Space>"

上記のように書くと、次のようなキーマッピングとなってしまいました。

  • \c -> [coc.nvim]
  • \cd -> coc-definition
  • それ以外での <leader> -> <Space>
カテゴリー
Linux

ついに Vim のキーマッピングを始めるので覚書

まとめ

  • <Leader> を設定する。 <Space> にした。
  • 既存のマッピングを潰さない。
  • プラグイン固有のキーマッピングは次のようにする。
    1. nmap <Leader>x [xxx] (例えば xxx という名前のプラグイン。頭文字は x である) としてプラグイン固有のプレフィックスを定義する。
    2. nmap <silent> [x]d <Plug>(xxx-function) 、つまり <プラグイン固有のプレフィックス + キー> という形でマッピングを定義する。
カテゴリー
Linux

Vim に coc.nvim エクステンション coc-phpls を入れて PHP の LSP サーバを使えるようにする

まとめ

  • coc.nvim インストール済みならば、 marlonfan/coc-phpls: ? php language server for coc.nvim をインストールするだけで良い。
  • coc-settings.json を編集する必要はない。
  • 確認方法。 PHP ファイルを開いた状態で、 :CocList extensions を実行し、結果に "* coc-phpls" と表示されれば使用可能状態。
カテゴリー
Linux

【Vim で LSP 試行錯誤】coc.nvim をインストールする

理解のまとめ

カテゴリー
Linux

tree コマンドで .git/ 以外を全て表示するオプション

.git ディレクトリを無視し、それ以外を全て表示する tree コマンド

tree -a -I ".git"

tree コマンド -I オプションのポイント

  • -I オプションは、ディレクトリやファイルに含まれる文字列を指定する。指定された文字列を含むディレクトリやファイルは結果から無視される。
  • ディレクトリが無視された場合は、そのディレクトリないのファイルも表示されない。
カテゴリー
Linux

ダメだったがメモ。異なるアプリからログを送ったら Elasticsearch コンテナが落ちる問題に取り組む

複数の Docker コンテナからそれぞれ異なる index で "その 2" の Elasticsearch へとログを送ったのですけれども、 2 つ目の index を送った時点で Elasticsearch コンテナが Exit してしまいます。

カテゴリー
Linux

tmux 。スタイルの確認方法を調べて、アクティブなウインドウを目立たせたい

まとめ

  • アクティブなウインドウを明るく (太く) することで目立たせる: set-window-option -g window-status-current-style bright
  • ウインドウを薄くすることで目立たないようにする: set-window-option -g window-status-style dim
カテゴリー
Linux

【ELK スタック】Docker Compose アプリ (コンテナ) のログを別の Docker Comose のネットワークの Elasticsearch へ送る構成

はじめに

Docker ロギング・ドライバを使ってコンテナログを ELK スタックで利用する – oki2a24 の続きです。

前回は、 1 つの Docker Compose に、 アプリ (Nginx) も Logstash も Elasticsearch も Kibana も全部入っていました。

開発環境ではこれで足ります。けれども、他のアプリのログも集めたいとなりますと、 Elasticsearch と Kibana は独立させたいと思うようになりました。

今回、以下の 2 つの Docker Compose を用意し、これらを Docker のネットワークで繋ぐことで ELK スタックを実現できましたので、ノートいたします。

  • Docker Compose その 1: Nginx と Logstash
  • Docker Compose その 2: Elasticsearch と Kibana