php artisanの意味わかってる?
はじめに
Laravelを使っていていると以下のようなコマンドを誰しも打ったことがあると思います。
php artisan make:controller SampleController
php artisan tinker
php artisan migrate
などなど。
このコマンドってどういう意味ですか?
多分、丸暗記しているからあんまり考えたことないと思います。
入門書にも載っていないので。
PHPって実はスタンドアロンで動く!?
なんとなく、PHPってjavascriptみたいにブラウザでしか動かない言語っていうイメージないですか?
私はありました。
ブラウザ系スクリプト言語だと。
しかし、実はPHPはブラウザがなくても動かすことができます。
というより、サーバサイドの言語は全てブラウザがなくても動かせます。
そのためには動かす端末にPHPのエンジンをインストールしておく必要あります。
そうすることで、phpコマンドが使えるようになるのです。
つまり、以下の命令はartisanコマンドではなく、 PHPコマンドです。
入門書だとartisanコマンドを打ちましょう、とか書いているのを見かけますが、間違いです。
phpコマンドの引数としてartisanというオプションを指定しているのです。
php artisan make:controller SampleController
php ファイル名 で、指定したファイルの中身のPHPスクリプトを実行します。
そう、artisanとはコマンド名ではなく、phpコマンドに渡されるソースコードの1ファイルに過ぎなかったのです!!
じゃあそれってどこにあるかですが、なんか見た事ないですか?
そうです。Laravelプロジェクトのプロジェクトルートにありますね!
これがmakeコマンドやtinkerコマンドを実行しているソースコードだったのです。
拡張子がないので単体実行ファイルのように見えますが、単純にartisan.phpの名前をそれっぽくみせているだけです。
各コマンドの実体はどこ?
ただ、artisanのソースコードは数行しか書いていません。
そこからなんやかんやインクルードして大きなコマンドになっているイメージです。
各コマンドの具体的なソースコードは、vendor/laravel/framework/src/Illuminate/Console/ 配下に定義されています。
例えば、make:controller コマンドはこれです。
vendor/laravel/framework/src/Illuminate/Routing/Console/MakeController.php
ちなみに、vendor/laravel/framework以下にはLaravelの本体が入っています。
composer install忘れて、vendorフォルダがないまま動かそうとするとシステムエラーになるのはそういうことです。
Laravel本体のエンジン部がないから動かないんですね。
まとめ
今回はLaravelの心臓部を覗いてみました。
いかがだったでしょうか?
php artisan は スタンドアロンプログラムとしてPHPコマンドを実行しているということでした。
普段はこんなことは知らなくても動かせますが、サーバにデプロイするときや、ローカル開発環境の構築手順書を書く時にはこういった知識もあると助かる場合があります。
例えば複数のPHPバージョンの案件を同時に動かす場合なんかですね。
気が向いたら皆さんもLaravelの深淵を覗いてみてくださいね。
株式会社ONE WEDGE
【Serverlessで世の中をもっと楽しく】 ONE WEDGEはServerlessシステム開発を中核技術としてWeb系システム開発、AWS/GCPを利用した業務システム・サービス開発、PWAを用いたモバイル開発、Alexaスキル開発など、元気と技術力を武器にお客様に真摯に向き合う価値創造企業です。
Discussion