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.
https://github.com/meilisearch/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>
コメント