この記事は個人開発 Advent Calendar 2020の23日目です。
TL;DR
Laradockをちょっと便利にするコマンドラッパーを作りました。
https://github.com/ngmy/laradockctl
背景
WebサービスやOSSを開発するときはDockerを使うと開発マシンが汚れないので便利ですね。
私はもっぱらPHPで開発しており、また一からDockerで開発環境を構築する時間もないので、開発環境はLaradockのお世話になることが多いです。
LaradockはPHPの開発に必要なもの全部入りのDocker環境で、PHP界隈ではおなじみのツールです。
そんなLaradockですが、使っていて個人的に不便に感じる点があります。
Laradockを使っていて個人的に不便に感じる点
1. どのコンテナを起動すればいいのか忘れる
「このWebサービスではnginxコンテナとmysqlコンテナを立ち上げて……」「このOSSではmailhogコンテナも立ち上げて……」といった具合に、プロジェクトに応じて起動するコンテナが異なるので、毎回どのコンテナを起動すればいいのか忘れます。
これはしばらく触っていなかったプロジェクトをひさしぶりにメンテナンスする必要が生じたときによく起こります。
2. コマンドを打つのが面倒くさい
私はターミナルとVimで開発する古いタイプの人間なので、ターミナル上でカレントディレクトリをガンガン移動しながら開発します。
Laradockを操作するときはdocker-compose
コマンドを実行することになるのですが、Laradockのインストールディレクトリ以外から実行するにはいちいち-f
オプションや--env-file
オプションでdocker-compose.yml
ファイルや.env
ファイルを指定しなければならず、コマンドを打つのが非常に面倒くさくなります。
かといって、いちいちLaradockのインストールディレクトリに移動するのも面倒です。
作ったもの
というわけで、上記の不便に感じる点を解消するために、Laradockのコマンドラッパーを作りました。
https://github.com/ngmy/laradockctl
下記のコマンドでプロジェクトルートにインストールして使います。
git submodule add https://github.com/ngmy/laradockctl.git
パスを通します。
export PATH=/PATH_TO_LARADOCKCTL/bin:$PATH
direnvを使ってパスを通すことをおすすめしています。
これでラッパーコマンド(laradockctl
)が使えるようになります。
ラッパーコマンドの例です。
laradockctl workspace:composer
# docker-compose -f /PATH_TO_LARADOCK/docker-compose.yml --env-file /PATH_TO_LARADOCK/.env workspace composer のラッパー
laradockctl laravel:artisan
# docker-compose -f /PATH_TO_LARADOCK/docker-compose.yml --env-file /PATH_TO_LARADOCK/.env workspace php artisan のラッパー
laradockctl laravel:logs
# docker-compose -f /PATH_TO_LARADOCK/docker-compose.yml --env-file /PATH_TO_LARADOCK/.env workspace tail storage/logs/laravel.log のラッパー
素のdocker-compose
コマンドを使う場合よりタイプ数がぐっと減ります。
またカスタムコマンドを追加することもできます。
私はプロジェクトごとに開発環境の起動コマンドを書いて、プロジェクトのリポジトリに一緒にコミットしています。
下記の例では、開発環境用のLaradockの.env
ファイルを使って必要なコンテナを起動して、開発環境用のLaravelの.env
ファイルをコピーして、Composerでパッケージをインストールして、Laravelの初期処理を行い、データベースマイグレーションを行い、フロントエンドのビルドを行うmy:up
というコマンドを定義しています。
#!/bin/bash
set -Ceuo pipefail
local NAME='my:up'
local DESCRIPTION='Launch my development environment'
handle() {
cp -f ../.laradock/env-development .env
docker-compose up -d nginx mysql mailhog workspace
cp ../.env.development ../.env
docker-compose exec workspace composer install
docker-compose exec workspace php artisan key:generate
docker-compose exec workspace php artisan migrate
docker-compose exec workspace npm install
docker-compose exec workspace npm run dev
}
このカスタムコマンドをプロジェクト内の適当な場所(.laradock/commands
など)に置いて、パスを通します。
export LARADOCKCTL_COMMAND_PATH=/PATH_TO_YOUR_COMMAND:/PATH_TO_LARADOCKCTL/commands
これもdirenvを使うことをおすすめします。
これでカスタムコマンドが使えるようになります。
laradockctl my:up
上記のコマンドを実行するだけで開発環境が立ち上がるようになるので、ひさしぶりのメンテナンスでどのコンテナを起動すればいいのか忘れてしまっていても大丈夫です。
おわりに
Laradockをちょっと便利にするコマンドラッパーを作った話をしました。
Laradockを使っていて同じような点を不便に感じている人がいたらぜひ使ってみてください。