PHP
laravel
LaraDock

PHPの開発全般にLaradockを使えばいいんじゃないかという話

まずLaradockについて

LaradockはLaravel(PHP製のWebフレームワーク)用の(開発用)実行環境で、その名の通りDockerを使用した仮想環境です。
これが非常に良く出来ており、Laravel以外のPHP開発でもガンガン使っていけるのではないかと思ったので紹介させて頂きます。
(実際に公式サイトでもLaravel以外でも採用されていると記載されています)

Dockerがないと使用できないのがハードルといえばその通りですが、以下の理由からDocker使ったこと無い方にもオススメです。

  • 基本的な使い方ならDockerの知識はほぼ不要
  • Docker自体が有用なのでLaradockをきっかけにDockerを覚えるくらいの気持ちで導入しても損は無い

ということでこの記事は以下の方針で書いています。

  • 導入方法については割愛して機能的な部分について紹介
  • Docker使ったことないよって方でも差し支えないように記載

Laradockの特徴

主な特徴としては、

  1. PHPの開発で使う一通りのソフトウェアに対応
  2. プロジェクト毎の環境の切替が容易
  3. 複数バージョンのPHPに対応(7.1/7.0/5.6)
  4. 環境の共有がイメージではなくコードベースでできる
  5. 一元化された設定ファイルで各機能の設定が可能
  6. 各機能は複数のコンテナ(仮想環境)に分割されており必要なものを任意に実行できる
  7. 各機能を個別にカスタマイズすることもできる

などなど...

以下、各特徴を掘り下げていきます。

1. PHPの開発で使う一通りのソフトウェアに対応

LaradockではApache/nginx、MySQL/PostgreSQLといった各サーバーはもちろん、

  • Composer、npm
  • phpMyAdmin、pgAdmin
  • Xdebug

などの各種ツールも同時に導入することができます。
(これらのツールも仮想環境上で実行されます)

2. プロジェクト毎の環境の切替が容易

開発環境を仮想化するメリットは色々ありますが、中でも「プロジェクト毎に独立した環境を用意して相互干渉を回避できる」というのは特に重要な動機になります。
これはVMを使用した他の仮想化でも実現できますが、LaradockではVM環境のように巨大なサイズのイメージをコピーして...みたいな作業は不要です。
Githubで配布されているソースファイルをクローンし、ディレクトリをプロジェクト固有の名前にリネームして実行するだけでOKです。

3. 複数バージョンのPHPに対応(7.1/7.0/5.6)

「プロジェクトによってPHPのバージョンが違う」というのもよくある仮想化の理由ではないでしょうか。
Laradockは設定ファイルの一箇所を書き換えるだけでバージョンを変更できます。
(※設定ファイルに関しては後述)

4. 環境の共有がイメージではなくコードベースでできる

前述のとおりLaradockはソースファイルとして配布されていますので、チーム内で環境を共有する場合もコードベースでOKです。
単純な環境なら設定ファイルの共有だけで済ませることもできますし、
独自のカスタマイズや設定変更が多いならならGitなどでバージョン管理することもできます。
変更の反映も「最新ファイルを落としてね再構築してね」で済みます。

5. 一元化された設定ファイルで各機能の設定が可能

Laradockでは複数のソフトウェアを動作させることができますが、
基本的な設定は「.env」というファイルに集約されています。
「.env」はよくある設定項目=設定値形式の設定ファイルで、こちらを書き換えていけばDockerとしての構成はあまり意識せずに設定変更を行うことが出来ます。
(PHPのバージョンやインストールする拡張機能、各サーバーの使用ポートなどが設定できます)

6. 複数のコンテナ(仮想環境)に分割されており必要なものを任意に実行できる

Laradockでは様々なソフトウェアに対応していますが、実際に使用する機能は個別に選択することができます。
これはLaradock(を起動するためのDocker)を実行する際にコマンドライン引数として指定するだけです。

たとえば、NginxとPostgreSQLを使ったWebアプリの場合は以下のようなコマンドになります

docker-compose up -d nginx postgres

7. 各機能を個別にカスタマイズすることもできる

「.env」では変更できないカスタマイズが必要であれば、Dockerで仮想環境を構築するためのソースファイルである「Dockerfile」を編集することもできます。
これはDockerの知識が必要になりますが、「Dockerfile」はコンテナ毎に分割されていますし、やっていることはCUIで行うサーバーの操作相当の内容なので、そのあたりの経験があればすぐに理解できるのではないかと思います。

不便な所とか

最後にそんなLaradockの不便だなと思う点について

初回起動時のビルドが長い

Laradockは初回起動時にソースファイルからイメージをビルドする必要があり、そこで時間がかかります。
コードベースでやり取りするできるメリットとのトレードオフなので仕方ない部分ではありますが。
どうしても気になるならDockerの機能で配布用イメージを作って運用という手段も取れます。

アップデートが頻繁で構成が変わる可能性がある

最近は落ち着いたかなーと感じていますが、少し前までは対応ツールや設定項目の追加で構成が頻繁に変わっていました。
それ自体は良いことなのですが、設定ファイルの互換が失われる為にチーム内でちゃんとバージョンを揃えないとエラーで起動できないなどのトラブルもありました。

設定でつまづく

慣れの問題もありますが、ちょこちょこ設定の不足で手戻りが発生します。
仮想環境の再起動で済めばそれほど手間ではないですが、再ビルドを行わないと反映されない設定もあります(ツールや拡張機能のインストールなど)
例えば初期設定ではDB接続用のPHP拡張が無効になっており、これを有効にするのを忘れると再ビルドとなります。
(コンテナが分割されているので該当コンテナだけ再ビルドすればいいのが救い)

まとめ

一言でまとめれば、「良いところも悪いところもコードベース故に」というところです。

そしてお気づきの方もいらっしゃると思いますが、紹介させて頂いたLaradockの特徴のほとんどが「docker-compose」というDockerの構成管理の仕組みの話になります。
ただ、多数の機能が使いやすくまとめてあるのはLaradockの中の人たちに感謝という他ありません。

以上、拙い文章でしたが少しでもLaradockについて知って頂けたなら幸いです。