5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

laravel sailで簡単に実行環境を作る

Last updated at Posted at 2021-05-06

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学習する人には特におすすめかも。

5
3
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
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?