0
0

LaravelでMakefileを使って効率的にコマンドのショートカットを作成する方法

Posted at

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0