Laravel Sail コマンド一覧

2021/09/19に公開

Laravel Sail を導入すると使用できる sail コマンドで提供されている便利なメソッドをまとめました。
sail コマンドの実態は vendor/laravel/sail/bin/sail スクリプトであり、基本的には docker-compose コマンドのエイリアスです。
実際に実行されるコマンドも掲載しています。

※ 動作確認環境
php : 8.0.7
laravel : 8.56.0
sail : 1.10.1
https://readouble.com/laravel/8.x/ja/sail.html

使用される変数について

sail スクリプトの中では .env が読み込まれ、一部の値が使用されます。
特に $APP_SERVICE という値は、laravel アプリケーションを実行しているコンテナ名を指定している重要な値です。
デフォルトは laravel.test ですが、 docker-compose.yml でコンテナ名を変更している場合は必ず .env で設定を変更しておきましょう。
これを行わなかった場合、ほとんどの sail コマンドが機能しなくなります(実行してもエラーも何も返さなくなります)。

.env
# docker-compose.yml でコンテナ名を 「app」 にした場合
APP_SERVICE="app"

DBの操作コマンドはコンテナ名がハードコーディングされているため、docker-compose.yml のコンテナ名を変更しないようにしましょう。

サーバサイド系

sail php

コンテナ内の php を実行します。

$ docker-compose exec -u sail "$APP_SERVICE" php "$@"

sail composer

コンテナ内の composer を実行します。

$ docker-compose exec -u sail "$APP_SERVICE" composer "$@"

sail shell / root-shell

コンテナ内で bash を起動します。
root-shell は root ユーザとして bash を起動します。

$ docker-compose exec -u sail "$APP_SERVICE" bash "$@"
$ docker-compose exec "$APP_SERVICE" bash "$@"

sail bin

コンテナ内の bin ファイルを実行します。

$ docker-compose exec -u sail "$APP_SERVICE" ./vendor/bin/"$@"

artisan 系

sail artisan

artisan コマンドを実行するためのエイリアスです。

$ docker-compose exec -u sail "$APP_SERVICE" php artisan "$@"

sail tinker

tinker コマンドを実行するためのエイリアスです。

$ docker-compose exec -u sail "$APP_SERVICE" php artisan tinker

sail test

phpunit を実行するためのエイリアスです。
artisan test コマンドの詳細は以下で確認できます。
https://github.com/nunomaduro/collision/blob/stable/src/Adapters/Laravel/Commands/TestCommand.php

$ docker-compose exec -u sail "$APP_SERVICE" php artisan test "$@"

sail dusk / dusk:fails

dusk コマンドを実行するためのエイリアスです。
dusk:fails は失敗したテストを再実行することができます。

$ docker-compose exec -u sail \
  -e "APP_URL=http://${APP_SERVICE}" \
  -e "DUSK_DRIVER_URL=http://selenium:4444/wd/hub" \
  "$APP_SERVICE" php artisan dusk[または dusk:fails] "$@"

sail debug

環境変数を XDEBUG_SESSION=1 にした状態で artisan コマンドを実行します。

$ docker-compose exec -u sail \
  -e XDEBUG_SESSION=1 \
  "$APP_SERVICE" php artisan "$@"

データベース系

sail mysql / mariadb

mysql / mariadb コンソールを実行するためのエイリアスです。
実行するコンテナ名が違うだけみたいです。

$ docker-compose exec mysql[または mariadb] \
  bash -c 'MYSQL_PWD=${MYSQL_PASSWORD} mysql -u ${MYSQL_USER}${MYSQL_DATABASE}'

sail psql

postgresql コンソールを実行するためのエイリアスです。

$ docker-compose exec pgsql \
  bash -c 'PGPASSWORD=${PGPASSWORD} psql -U ${POSTGRES_USER} ${POSTGRES_DB}'

sail redis

Redis cli を実行するためのエイリアスです。

$ docker-compose exec redis redis-cli

フロントエンド系

sail node / npm / npx / yarn

コンテナ内で node / npm / npx / yarn を実行するためのエイリアスです。

$ docker-compose exec -u sail "$APP_SERVICE" node "$@"
$ docker-compose exec -u sail "$APP_SERVICE" npm "$@"
$ docker-compose exec -u sail "$APP_SERVICE" npx "$@"
$ docker-compose exec -u sail "$APP_SERVICE" yarn "$@"

その他

sail share

サイトを公開して共有することができます。
詳細はドキュメントを参照してください。
https://readouble.com/laravel/8.x/ja/sail.html#sharing-your-site

$ docker run --init --rm -p $SAIL_SHARE_DASHBOARD:4040 \
  -t beyondcodegmbh/expose-server:latest \
  share http://host.docker.internal:"$APP_PORT" \
  --server-host="$SAIL_SHARE_SERVER_HOST" \
  --server-port="$SAIL_SHARE_SERVER_PORT" \
  --auth="$SAIL_SHARE_TOKEN" \
  --subdomain="" \
  $@"

Discussion