Laravelプロジェクトにおいて、Makefileを使用してよく使うコマンドを効率的に実行するためのショートカットを作成する方法を紹介します。Makefileを使うことでコマンドを簡略化し、開発効率を向上させることができますのでぜひ使ってみてください。
Makefileとは
作業の自動化などに使われますが、今回はコマンドの簡略化に焦点をあてて解説します。
ターゲット:
コマンド
まずはターゲットとコマンドをペアで定義します。
make ターゲット
上記をターミナルなどで実行すると、定義したコマンドが自動で走ってくれるという優れものです。
例えば・・・
Laravel開発においてよく使うartisanコマンドを例に挙げてみます。
まずはMakefileに以下を記述します。
mig:
php artisan migrate
そしてターミナルなどで
$ make mig
として実行してみると
$ make m-mig
Enter migration name: test
INFO Migration [database/migrations/2024_07_27_155038_create_test_table.php] created successfully.
しっかりphp artisan migrate
が実行されています。
makeコマンドのセットアップについては下記をご参照ください。
・Windows10環境でmakeコマンドを使用する方法【ハマリ回避】
Makefileをどこに置くか
makeコマンドを打つ際は実行場所と同階層にMakefileという名前で配置する必要があります。
Laravelのプロジェクトの場合、Makefileは .envファイルと同じ階層に置くのが一般的です。
例えば・・・
laravel/
├── app/
├── bootstrap/
├── config/
├── database/
├── public/
├── resources/
├── routes/
├── storage/
├── tests/
├── .env
├── artisan
├── composer.json
├── composer.lock
├── Makefile # Makefile
大体このように置きます。
コマンドリストを作る
まずMakefileは
$ make
上記のようにターゲットを何も指定しないとデフォルトでは一つ目のターゲットが実行されます。
mig:
php artisan migrate
seed:
php artisan db:seed
この場合、php artisan migrate
が実行されます。
これを活かすと、
command-list:
@echo "command list"
@echo "make mig - php artisan migrate"
@echo "make seed - php artisan db:seed"
何も指定しなければコマンド一覧が出るようになります。
実際に実行してみると
$ make
command list:
make mig - php artisan migrate
make seed - php artisan db:seed
とコマンドリストが出るのでとても使いやすくなりました。
プロンプトを入力させる
Laravelではマイグレーションファイルなどを作成するとき名前を決めますよね。
そのような場合はMakefileを以下のようにします。
m-mig:
@read -p " Enter migration name: " name; \
php artisan make:migration create_$${name}_table
上記のように定義してコマンドをたたくと、
$ make m-ctrl
Enter controller name:
//testと入力
INFO Migration [database/migrations/2024_07_27_155038_create_test_table.php] created successfully.
指定通りにマイグレーションファイルが作成されています。
さいごに
いかがだったでしょうか?
すぐに使えて効率化を狙えるのでとてもおすすめです。
最後に他のartisanコマンドを一部掲載しますのでどんどんカスタマイズしていってください。
default:
@echo "command list:"
@echo " make mig - php artisan migrate"
@echo " make mig-roll - php artisan migrate:rollback"
@echo " make mig-status - php artisan migrate:status"
@echo " make seed - php artisan db:seed"
@echo " make tinker - php artisan tinker"
@echo " make test - php artisan test"
@echo " make cache-clear - php artisan cache:clear"
@echo " make m-mig - php artisan make:migration"
@echo " make a-mig - php artisan make:migration --table=table_name"
@echo " make c-mig - php artisan make:migration --table=table_name"
@echo " make m-model - php artisan make:model"
@echo " make m-model-mig - php artisan make:model -m"
@echo " make m-rule - php artisan make:rule"
@echo " make m-ctrl - php artisan make:controller"
mig:
php artisan migrate
mig-roll:
php artisan migrate:rollback
mig-status:
php artisan migrate:status
seed:
php artisan db:seed
tinker:
php artisan tinker
test:
php artisan test
cache-clear:
php artisan cache:clear
m-mig:
@read -p " Enter migration name: " name; \
php artisan make:migration create_$${name}_table
a-mig:
@read -p " Enter column name: " column; \
read -p " Enter table name: " table; \
php artisan make:migration add_$${column}_to_$${table}_table --table=$${table}
c-mig:
@read -p " Enter column name: " column; \
read -p " Enter table name: " table; \
php artisan make:migration change_$${column}_in_$${table}_table --table=$${table}
m-model:
@read -p " Enter model name: " name; \
php artisan make:model $$name
m-model-mig:
@read -p " Enter model name: " name; \
php artisan make:model $$name -m
m-rule:
@read -p " Enter rule name: " name; \
php artisan make:rule $$name
m-ctrl:
@read -p " Enter controller name: " name; \
php artisan make:controller $$name