Laravel Sailを使うと2コマンドで開発環境を構築できる

Laravel8からSailを使ってLaravelをインストールすることができるようになりました。
この記事ではLaravel Sailを使ってLaravel9をdockerの中にインストールして開発環境を構築します。

Laravel Sailとは

Sail provides a Docker powered local development experience for Laravel that is compatible with macOS, Windows (WSL2), and Linux. Other than Docker, no software or libraries are required to be installed on your local computer before using Sail. Sail’s simple CLI means you can start building your Laravel application without any previous Docker experience.

Sailは、macOS、Windows(WSL2)、Linuxに対応したLaravelのDockerを利用したローカル開発環境を提供します。Docker以外のソフトウェアやライブラリは、Sailを使用する前にローカルのコンピュータにインストールする必要はありません。SailのシンプルなCLIは、Dockerの経験がなくても、Laravelアプリケーションの構築を開始できることを意味します。

https://github.com/laravel/sail

です。

つまり、Laravel Sailを使うと爆速でLaravelをインストールして開発環境を整えますってことです。

実際にLaravel Sailを使うとLaravelをインストールするコマンドとLaravel Sailでdockerを立ち上げるコマンドの2 つだけでLaravelの開発環境が整います。

目次

dockerをインストール

Sailはdockerを使ってLaravelを動かすので、まずはDocker Desktopをインストールする必要があります。

dockerをダウンロード後、インストールすると準備完了です。

Laravelをインストール

次にLaravelをインストールします。次のコマンドを使うと Sailなど必要なものがすべてインストールされます。

$ curl -s "https://laravel.build/example-app" | bash
Unable to find image 'laravelsail/php81-composer:latest' locally
latest: Pulling from laravelsail/php81-composer
eff15d958d66: Pull complete 
933427dc39f7: Pull complete 
35bb08dc7ee2: Pull complete 
...

Application ready! Build something amazing.
Sail scaffolding installed successfully.

Please provide your password so we can make some final adjustments to your application's permissions.

Password:

Thank you! We hope you build something incredible. Dive in with: cd example-app && ./vendor/bin/sail up

これでLaravelがインストールできました。
初めてインストールする場合は少し時間がかかります。また、ディレクトリのパーミッションを変更するのでパスワードが求められます。

この時点でLaravelやSailなどインストールされています。

{
    "name": "laravel/laravel",
    "type": "project",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "require": {
        "php": "^8.0.2",
        "guzzlehttp/guzzle": "^7.2",
        "laravel/framework": "^9.2",
        "laravel/sanctum": "^2.14.1",
        "laravel/tinker": "^2.7"
    },
    "require-dev": {
        "fakerphp/faker": "^1.9.1",
        "laravel/sail": "^1.0.1",
        "mockery/mockery": "^1.4.4",
        "nunomaduro/collision": "^6.1",
        "phpunit/phpunit": "^9.5.10",
        "spatie/laravel-ignition": "^1.0"
    },

cd example-app && ./vendor/bin/sail upを実行するように案内が出たので、実行します。

$ cd example-app && ./vendor/bin/sail up
Creating network "example-app_sail" with driver "bridge"
Creating volume "example-app_sail-mysql" with local driver
...
.0.0.1:44702 "GET /health HTTP/1.1" 200 22 "-" "Wget" 0.000676
mailhog_1       | [APIv1] KEEPALIVE /api/v1/events
meilisearch_1   | [2022-03-10T09:00:57Z INFO  actix_web::middleware::logger] 127.0.0.1:44706 "GET /health HTTP/1.1" 200 22 "-" "Wget" 0.000106
mailhog_1       | [APIv1] KEEPALIVE /api/v1/events
meilisearch_1   | [2022-03-10T09:01:27Z INFO  actix_web::middleware::logger] 127.0.0.1:44712 "GET /health HTTP/1.1" 200 22 "-" "Wget" 0.000058
^CGracefully stopping... (press Ctrl+C again to force)

これでdockerの中でLaravelが動き出しました。

Laravelをインストールしてdockerで動かすまで次の2つのコマンドだけでできました。

$ curl -s "https://laravel.build/example-app" | bash
$ cd example-app && ./vendor/bin/sail up

http://localhost/にアクセスするとLaravelが表示されます。

MailHogもdockerにインストールされているのでhttp://localhost:8025/にアクセスするとMailHogが開きます。

Laravel9からLaravel Scout にMailiSearchが組み込まれたのでhttp://localhost:7700/にアクセスするとMailiSearchが開きます。

Meilisearchとは?

Meilisearch is a powerful, fast, open-source, easy to use and deploy search engine. Both searching and indexing are highly customizable. Features such as typo-tolerance, filters, and synonyms are provided out-of-the-box.

Meilisearchは、パワフルで高速、オープンソースで使いやすく、導入しやすい検索エンジンです。検索とインデックス作成の両方が高度にカスタマイズ可能です。タイポトレランス、フィルタ、同義語などの機能がすぐに利用できます。

https://github.com/meilisearch/meilisearch

Laravel NewsではMeiliSearchのメリットが紹介されています。

バックグラウンドでdockerを動かす

Laravelを動かしているdockerをバックグラウンドで動かす場合事もできます。次のように-dオプションをつけるとバックグラウンドでLaravelが動きます。

$ ./vendor/bin/sail up -d
example-app_laravel.test_1   start-container   Exit 137        
Shutting down old Sail processes...
Creating network "example-app_sail" with driver "bridge"
Creating example-app_selenium_1    ... done
Creating example-app_mailhog_1     ... done
Creating example-app_meilisearch_1 ... done
Creating example-app_redis_1       ... done
Creating example-app_mysql_1       ... done
Creating example-app_laravel.test_1 ... done
$ 

Laravelを動かしているdockerを落とすときは次のようにdownすると止まります。

$ ./vendor/bin/sail down
Stopping example-app_laravel.test_1 ... done
Stopping example-app_mysql_1        ... done
Stopping example-app_redis_1        ... done
Stopping example-app_meilisearch_1  ... done
Stopping example-app_selenium_1     ... done
Stopping example-app_mailhog_1      ... done
Removing example-app_laravel.test_1 ... done
Removing example-app_mysql_1        ... done
Removing example-app_redis_1        ... done
Removing example-app_meilisearch_1  ... done
Removing example-app_selenium_1     ... done
Removing example-app_mailhog_1      ... done
Removing network example-app_sail

Sailへのパスを通す

コマンドを叩く時に./vendor/bin/sailと打つのは面倒なので、パスを通します。
パスを通すと次のようにsailのパスを指定していましたが、

$ ./vendor/bin/sail up -d

次のコマンドのようにsailのパスの指定はいらなくなります。

$ sail up -d

パスを通すにはまず今使っているシェルの確認をします。
macOS Catalina にアップデートすると、デフォルトシェルが bash から zshに変更になりました。

今使っているシェルは次の画像のようにターミナルで確認することができます。

ターミナルに以下のコマンドを打ってシェルを確認する事もできます。

$ echo $SHELL
/bin/bash

zshを使っている場合

まずはホームディレクトリにある.zshrcを開きます。

$ vim ~/.zshrc

次のようにsailへのエイリアスを追記します。

# Laravel Sail
alias sail="./vendor/bin/sail"

.zshrcを読み込めばパスが通ります。

$ source ~/.zshrc

bashを使っている場合

まずはホームディレクトリにある.bash_profileにパスを登録します。

$ export PATH=$PATH:./vendor/bin/sail

.bash_profileを読み込めばパスが通ります。

$ source ~/.bash_profile

Sailを経由してインストールサービスを指定する

Sailではインストールしたいサービスを指定することができます。

mysqlとradisのみをインストールしたい場合は次の様にwithパラメータでカンマ区切りで指定します。

$ curl -s "https://laravel.build/example-app?with=mysql,redis" | bash

withパラメータでインストールを指定できるサービスは

  • mysql
  • pgsql
  • mariadb
  • redis
  • memcached
  • meilisearch
  • minio
  • selenium
  • mailhog

です。
必要に応じてインストールしてください。

withパラメータで指定しない場合は

  • mysql
  • redis
  • meilisearch
  • mailhog
  • selenium

がデフォルトでインストールされます。

Sailコマンド

Sailで使えるコマンドを紹介します。

sailコマンドを使うと簡単にdockerの中の環境へコマンドを叩けます。

sail ps : dockerのコンテナ一覧

docker内のコンテナ一覧を表示します。

$ sail ps
        Name                 Command             State              Ports       
--------------------------------------------------------------------------------
example-               start-container        Up             0.0.0.0:80->80/tcp,
app_laravel.test_1                                           8000/tcp           
example-               MailHog                Up             0.0.0.0:1025->1025/
app_mailhog_1                                                tcp, 0.0.0.0:8025->
                                                             8025/tcp           
example-               tini -- /bin/sh -c     Up (healthy)   0.0.0.0:7700->7700/
app_meilisearch_1      ./meili ...                           tcp                
example-app_mysql_1    /entrypoint.sh         Up (healthy)   0.0.0.0:3306->3306/
                       mysqld                                tcp, 33060/tcp,    
                                                             33061/tcp          
example-app_redis_1    docker-entrypoint.sh   Up (healthy)   0.0.0.0:6379->6379/
                       redis ...                             tcp                
example-               /opt/bin/entry_point   Up             4444/tcp, 5900/tcp 
app_selenium_1         .sh                                                      

sail artisan : artisanコマンドを実行

dockerの中でartisanコマンドを実行できます。

$ sail artisan route:list 

  GET|HEAD   / ............................................................... 
  POST       _ignition/execute-solution ignition.executeSolution › Spatie\Lar…
  GET|HEAD   _ignition/health-check ignition.healthCheck › Spatie\LaravelIgni…
  POST       _ignition/update-config ignition.updateConfig › Spatie\LaravelIg…
  GET|HEAD   api/user ........................................................ 
  GET|HEAD   sanctum/csrf-cookie . Laravel\Sanctum › CsrfCookieController@show

sail php : phpコマンドを実行

dockerの中でphpコマンドを実行できます。

$ sail php -v
PHP 8.1.3 (cli) (built: Feb 21 2022 14:48:58) (NTS)

sail composer : composerコマンドを実行

dockerの中でcomposerコマンドを実行できます。

$ sail composer -V
Composer version 2.2.7

sail npm : npmコマンドを実行

dockerの中でnpmコマンドを実行できます。

$ sail npm install

sail shell : dockerコンテナに入る

dockerの中に入ることができます。

$ sail shell
sail@823849697db3:/var/www/html$ 

sail logs -f : dockerコンテナのログを表示

dockerの中のログを表示する事ができます。

$ sail logs -f
Attaching to example-app_laravel.test_1, example-app_selenium_1, example-app_mysql_1, example-app_redis_1, example-app_mailhog_1, example-app_meilisearch_1
laravel.test_1  | 2022-03-11 04:32:27,631 INFO Set uid to user 0 succeeded
...
selenium_1      | 04:32:29.162 INFO [Standalone.execute] - Started Selenium Standalone 4.1.2 (revision 9a5a329c5a): http://172.25.0.2:4444
meilisearch_1   | [2022-03-11T04:47:55Z INFO  actix_web::middleware::logger] 127.0.0.1:45642 "GET /health HTTP/1.1" 200 22 "-" "Wget" 0.000043

sail restart : dockerコンテナを再起動

dockerのコンテナを再起動できます。

$ sail restart

sail mysql : dockerコンテナのmysqlに入る

dockerの中でmysqlコンテナに入ることができます。

$ sail mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 59
Server version: 8.0.28 MySQL Community Server - GPL

...

mysql> 
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

目次