2
0

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.

個人開発Advent Calendar 2020

Day 23

Laradockをちょっと便利にするコマンドラッパーを作った

Posted at

この記事は個人開発 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)が使えるようになります。

ラッパーコマンドの例です。

Composerを実行する
laradockctl workspace:composer
# docker-compose -f /PATH_TO_LARADOCK/docker-compose.yml --env-file /PATH_TO_LARADOCK/.env workspace composer のラッパー
Artisanを実行する
laradockctl laravel:artisan
# docker-compose -f /PATH_TO_LARADOCK/docker-compose.yml --env-file /PATH_TO_LARADOCK/.env workspace php artisan のラッパー
Laravelのアプリケーションログを表示する
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を使っていて同じような点を不便に感じている人がいたらぜひ使ってみてください。

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?