DockerでLaravelコマンドを楽に打つ技
はじめに
みなさんはDockerでLaravelのコマンドを打つ時、どうしていますか?
Dockerデスクトップを開いて、CLIタブを開いて、コンテナのシェルに入ってartisanコマンドを打ったり、結構面倒臭いですよね。
私は長年Makefileを作って対応したりしていました。
しかし、Makefileはartisanのコマンドとちょっと相性が悪いです。
artisanに引数がある場合どうしてもうまくいきません。
いくらググってもそれ以上の方法は見つからないまま長い年月が過ぎました。
シェルスクリプトを使えば一撃
試行錯誤の中ついに閃きました。
めちゃくちゃ便利にできたので本当は独占したい情報ですが、教えちゃいます!!
以下のファイルをコピペから作ってください。
「task_manager_app」の文字だけ、開発中のdocker-composeのサービス名に置換すればOKです。
php artisan make ○○ ~ 全般
#!/bin/bash
docker-compose exec task_manager_app php artisan make:$1 $2
php artisan migrate
引数にfreshを与えるとmigrate:fresh、引数なしだとmigrateを実行
#!/bin/bash
if [ $1 = "fresh" ]; then
docker-compose exec task_manager_app php artisan migrate:fresh
else
docker-compose exec task_manager_app php artisan migrate
fi
php artisan optimize
#!/bin/bash
docker-compose exec task_manager_app php artisan optimize
composer dump-autoload
#!/bin/bash
docker-compose exec task_manager_app composer dump-autoload
配置
シェルスクリプトの配置場所はこんな感じ。
docker-compose.ymlと同じディレクトリに配置するといいと思います。
→ tree -L 2 -a
.
├── .env
├── .env.example
├── .tbls.yml
├── .vscode
│ └── settings.json
├── artisan_make.sh
├── artisan_migrate.sh
├── artisan_optimize.sh
├── composer_dump.sh
├── docker
│ ├── .DS_Store
│ ├── mysql
│ └── php
├── docker-compose.yml
└── src
├── .editorconfig
├── .env
├── .env.example
├── .gitattributes
├── .gitignore
├── .styleci.yml
├── README.md
├── app
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── phpunit.xml
├── public
├── resources
├── routes
├── server.php
├── storage
├── tests
├── vendor
└── webpack.mix.js
使い方
以下のようにタイプします。
./artisan_optimize.sh のように打つと実行権限がないと怒られるので、shコマンドで起動しましょう
sh artisan_make controller HelloController
sh artisan_make.sh model Ticket
sh artisan_migrate.sh fresh
sh artisan_optimize.sh
sh artisan_make.sh migration create_ticket_table
sh composer_dump.sh
おわりに
閃きさえすればスクリプトのコーディング自体はすぐにできました。
こんな毎日何度も使うコマンド、なぜ誰も教えてくれないのか・・・
過去10年以上、誰も閃かなかったのか、有償記事にしているのか。
知識を独り占めしているのか。
自分でも今までの苦労はなんだったのかと思いました。
それでは快適なDockerライフをお楽しみください。
株式会社ONE WEDGE
【Serverlessで世の中をもっと楽しく】 ONE WEDGEはServerlessシステム開発を中核技術としてWeb系システム開発、AWS/GCPを利用した業務システム・サービス開発、PWAを用いたモバイル開発、Alexaスキル開発など、元気と技術力を武器にお客様に真摯に向き合う価値創造企業です。
Discussion
私の勘違いだったらすいません。
シェルエイリアスの設定をすれば、
後は、sail artisan ... でコマンド実行できると思いますが、
その辺とは何か違った事情があるのでしょうか?