laravelを動かす環境はHomestead,laradockなど色々ありますが、sailってどんなもんだろうということで使ってみました。
構築環境:
macOS BigSur 11.2.3
Docker version 20.10.0, build 7287ab3
docker-compose version:1.27.4, build 40524192
sailインストール方法
2つ方法がある
方法1.curlコマンドによるプロジェクト作成+sail環境作成
プロジェクト作成と一緒にsail環境も入れたい場合はcurlインストールで作成できる
# withパラメタ指定がない場合は`mysql,redis,meilisearch,mailhog,seleniu`がデフォルト
$ curl -s "https://laravel.build/アプリ名" | bash
# with引数を指定することで一緒にインストールするものを選べる(指定できるワードは方法2参照)
$ curl -s "https://laravel.build/アプリ名?with=pgsql,memcached" | bash
方法2. 既にあるlaravelプロジェクトにcomposer requireしてsail環境作成
create-project済みの環境にインストールする場合はこちら
# プロジェクトに移動してcomposer require
$ composer require laravel/sail --dev
# 必要な環境を以下コマンドで作成する
$ php artisan sail:install
# 以下のようなメッセージが表示されるので必要な機能を`,`区切りで入力する
Which services would you like to install? [mysql]:
[0] mysql
[1] pgsql
[2] mariadb
[3] redis
[4] memcached
[5] meilisearch
[6] mailhog
[7] selenium
> 1,4
# 間違った場合は再度`php artisan sail:install`すれば良い
2つのインストール方法に違いはある?
違いがあるかな?ということで2つのプロジェクトをdiffしてみたところ以下の違いがあった
- .env
設定 | curl install | composer require |
---|---|---|
APP_KEY | 設定済み | 未設定 |
APP_URL | プロジェクト名.test | localhost |
DB_DATABASE | プロジェクト名 | laravel |
これはsailというよりcurlインストール方式の違いだと思う
composer requireはAPP_KEYが未設定なのでphp artisan key:generate
しないと動かせないので注意
- composer.json
設定 | curl install | composer require |
---|---|---|
larave/sail | ^1.0.1 | ^1.5 |
composer requireはバージョン指定しなかったので当然ながら最新が入っていた
curl installはそもそも設定されたバージョンなのか1.0.1だった
どちらの方法でもあとは以下のコマンドでdockerを起動でき、http://localhost
で画面が見れる
# 起動 (sailコマンドについては後で記載)
./vendor/bin/sail up -d
create-projectした際は.envの修正が必要だったがAPP_KEYのみでほぼ触ってないに等しい状態で動かせるのがすごい
以降は方法2で作った環境で確認
sailコマンドについて
docker-composeコマンドとは別にsailコマンド覚えなきゃいけないのかなーって思ったら、sail help
するとdocker-composeのヘルプが出る・・・!
それに以下のようなコマンドがあり、ほぼdocker-composeと同じように見えた
# 起動
./vendor/bin/sail up -d
# 停止
./vendor/bin/sail down
こんな命令をするとホスト側からdocker内にコマンドを流すことも出来た
# docker内でmigrate
./vendor/bin/sail artisan migrate
# docker内のphp versionを表示
./vendor/bin/sail php --version
sailコマンドってどういうものなの?ということでリポジトリを見てみる(2021/5/5時点)
https://github.com/laravel/sail/blob/1.x/bin/sail
docker execしてコマンドを流す機能
sailコマンドの引数$1を見て、docker-compose execしてコマンドを流してくれる以下がある。
php,composer,artisan,art,test,dusk,dusk:fails,tinker,node,npm,npx,yarn,mysql,mariadb,pgsql,shell,bash,root-shell,share
artisan以外に気になったものだけピックアップすると
- mysqlとmariadbは同じmysqlコマンドだけどdocker execする名前が違うから別に分けられてる
- shell,bashは同じ機能
- root-shellはroot権限でのbash実行になる
docker-composeにコマンドを流す
docker execしてコマンドを流してくれる上記以外の場合はそのままdocker-composeコマンドに流すようになっている。(sail helpはこれに該当した)
なのでdocker-composeのbuildも使えるので、sailをdocker-composeに読み替えて使うことが出来る
alias設定
そんな便利なsailコマンドだけど./vendor/bin/sailを一々打つのは面倒なのでalias設定をしておくと便利
macの場合:~/.zshrcに以下を設定しておく
alias sail='bash ./vendor/bin/sail'
結論
- さくっと環境を作りたい場合に便利
- 細かい.envを設定しなくても動かせる環境が出来る
- sailコマンドによるdocker内にコマンドを流すのが簡単
- docker exec -it xxxx bash しなくていいんだ・・・!
あまりに簡単に環境が作れるので、これからlaravel学習する人には特におすすめかも。