Endo Tech Blog

Techブログと言う名のただのブログです。

Laradockはどんな経緯で作られて、何が駄目なのか?

f:id:kikuchi1201:20190727101108p:plain

はじめに 

巷では「Laradock」はLaravelの開発環境においては「適さない」或いは「ゴミ」という言葉を使って形容する事が流行っているみたいですね。

 

長いので自分の結論を先に書くと

現在のLaradockはLaravel向けのDockerの開発環境ではなく、あらゆるPHPアプリケーションの開発環境に対応してソフトウェアを詰め込んだプロジェクトになっている。

なので、「Laravelを使ってみたい」だけを考えてやると、Laradock側の設定で詰まるポイントが多い為、オススメできない。

ある程度Docker Composeやインフラの知識がわかっている人だったら、検証環境としてはよいが、自分でdocker-compose.ymlを作った方がデバッグ時に困る事が少ない。

・Laravelの事だけを考えたいならDockerの事は考えずにcomposerを使った方法がオススメ。

 

です。

 

余談

 で、あんまりこういう話題に突っ込みたくないんですが、「Laradockがゴミだ」という発言に関してですが、これにはメリットとデメリットがあると思います。

 

メリットとしては

 

・選択肢の一つとして消えるので、技術選定時に他の手段(HomesteadやValet、或いは他のDockerの環境) に移りやすくなる。

・Dockerの文法もわからない初心者がLaradockに触れて躓くのを防ぐ事ができる。

 

デメリットとしては

 

・「ゴミ」という言葉を見る事で我々はそこに関して一切関心を持たなくなるし、むしろ「近寄りたくない」という非常にネガティブな印象を与えてしまう。

・まだ学習途中の初心者がこの発言を見ると、ドキュメントやコードをみずに、勝手な思い込みで「Laradockはゴミだ」と受け入れてしまう

 

というのがあります。

 

こういう時に一番良い状況というのは、「何故だめなのか?」を疑問に持って、自分の言葉で語る事です。或いはそれについて調べたりとかですね。

 

決して発言力を持つ方の言葉を鵜呑みにして、それを自分の言葉のように代弁するというのは否定はしませんが、エンジニアの姿勢としては余りオススメしません。

 

という事で調べます。まず僕が知りたい事は

 

Laradockがどんな経緯で作られたのか?

Laradockは何が駄目なのか?

 

の2つです。

では土曜日の朝で全くもってテンションが上がらないですがやっていきましょう。

Laradockがどんな経緯で作られたのか?

Laradockの作成者は Mahmoud Zalt Mahmoudさんです。

 

github.com

 

twitter.com

 

またご自身のWebサイトで詳細なTechプロフィールも公開しています。

 

zalt.me

 

経緯を知る一番の方法は本人に聞く事です。

しかし僕の英語スキルがE3参加時に絶望的なスキルだと把握しているので、 ここでは過去のインタビュー記事や、MahmoudさんがMediumに投稿した記事を参考にします。

 

www.shiphp.com

 

インタビュー記事では、「Laradockがどんな経緯作られたのか?」が語られています。

以下記事の翻訳です。

 

 

・ 

 

How did Laradock get started?

In the early days of Docker, booting multiple containers wasn’t an enjoyable process. I used to have scripts to automate booting multiple containers until Docker Compose showed up and solved that problem.

First I started looking for some open source, pre-configured docker images as a ready Docker environment for my personal PHP Apps. For some reason, the existing solutions used to contain all the software (PHP, MySQL, NGINX, etc.) in a single container, which prevents benefiting from the real power of Docker

 

Laradockはどのようにして始まったのですか?

Dockerの初期の頃は複数のコンテナを起動するのは楽しいプロセスではなかったです。Docker Composeが現れて問題を解決するまでは、複数のコンテナの起動を自動化するスクリプトを使ってその問題に対処してました。

 まず最初に、自分のPHPアプリケーション用のDocker環境として、オープンソースで事前に用意されたDockerイメージを探し始めました。しかし何らかの理由で、従来の方法では、すべてのソフトウェア(PHPMySQLNGINXなど。)を単一のコンテナに収容していましたが、これではDockerの持つ真の力を妨げており、恩恵を得てませんでした。

 

So I had to build my own solution, which consists of multiple separated Docker images that can be booted by a single docker-compose command to serve all my PHP Apps with the fewest modifications.

Before attending Laracon EU 2015, I wanted to make a new open source project for the Laravel community. Just four days before the conference, I released the first version of Laradock, as an alternative to Laravel Homestead for the Docker users. I remember pitching it to Taylor Otwelloffstage, who liked it, although he hadn’t had a chance to play with Docker before.

Later, due to the large adoption from the PHP community, I modified Laradock to support more PHP projects as well. I would like to take this opportunity to thank all the contributors and the awesome maintainers of Laradock, for making this project as cool as it is today.

 

そのため複数のDockerイメージを分離した独自の方法を考えて、docker-composeコマンドを1回実行するだけで、PHPアプリケーションの変更を最小限に抑えるようにしました。

Laracon EU2015に参加する前、私はLaravelコミュニティのために新しいオープンソースプロジェクトを作りたかったのです。カンファレンスのわずか4日前に、Laravel Homesteadの代替として、Dockerユーザ向けのLaradockの最初のバージョンをリリースしました。それまでDockerに触れる機会がなかったTaylor Otwell氏にステージの舞台裏でプレゼンして気に入ってもらったことを覚えています。

その後、PHPコミュニティからの大規模な採用のために、私はLaradockをより多くのPHPプロジェクトをサポートするように修正しました。 このプロジェクトを今日と同じくらいクールにしてくれたLaradockのすべての貢献者と素晴らしいメンテナに感謝しています。

What’s Laradock’s intended audience and what it is typically used for?

My short answer would be “Laradock is for PHP developers of any level who want to setup their development environment, using Docker without learning about it.”

 

Laradockが対象とするユーザ、および一般的な用途について教えてください。

私の返事は「Laradockは、Dockerを知らなくても開発環境をセットアップしたい、あらゆるレベルのPHP開発者のためのツールだ。」です。

Your documentation is very thorough. Did you focus on documentation much in the beginning or only after Laradock gained some popularity?

I focused on writing a super simple and clear documentation from day one. My approach for writing documentation is trying to make them serve as tutorials about the topic, in addition to being a guide for how to use the tool. The Laradock documentation used to be a simplified Docker tutorial for beginners.

Therefore many users have told me that they learned how Docker works because of the Laradock documentation, which for them was simpler than the official Docker documentation. That official documentation was intended for DevOps engineers, unlike the Laradock documentation which was intended only for PHP Developers.

Later on, many contributors helped to grow and enhance the documentation to become what you see today.

Laradockのドキュメントはとても徹底されています。最初はドキュメントに重点を置いていましたか?それともLaradockの人気が出てからでしょうか?

私は、最初から非常にシンプルで明確なドキュメントを書くことに集中しました。ドキュメントを書くための私のアプローチは、ツールの使い方のガイドとしてだけでなく、トピックに関するチュートリアルとしても使えるようにすることです。Laradockのドキュメントは、以前は初心者向けのシンプルなDockerチュートリアルだったのです。

そのため多くのユーザーがLaradockのドキュメントのおかげでDockerがどのように機能するのかを学んだと私に言ってきました。Docker側の公式ドキュメントは、PHP開発者のみを対象としたLaradockドキュメントとは異なり、DevOpsエンジニアを対象としていたのです。

その後、多くのコントリビュータがドキュメントの成長と強化を支援してくれて、現在のドキュメントになりました。

 

Is there a good way to share Laradock configurations with other maintainers of a project?

Sharing the App environment with other team members is very helpful and good approach. You can do that with Laradock since it can be used in two ways: one is setting up one Laradock per project and the other is setting up single Laradock for all projects.

To share the environment with other developers you’ll need to use the single project setup (one Laradock per project), which adds the Laradock folder to the root of your application, thus making it part of the same repository of your project.

 

Laradockの設定を他のプロジェクトメンバーと共有する良い方法はありますか?

 

Appの環境を他のチームメンバーと共有することは非常に有用で優れたアプローチです。 Laradockを使用すると、プロジェクトごとに1つのLaradockを設定する方法と、すべてのプロジェクトに対して1つのLaradockを設定する方法の2つの方法で使用できます。

 

他の開発者と環境を共有するには、単一プロジェクト設定(プロジェクトごとに1つのLaradock)を使用する必要があります。これにより、アプリケーションのルートにLaradockフォルダが追加され、プロジェクトの同じリポジトリの一部になります。

 

.

.

(途中省略)

 

____

 

という事でざっと翻訳してわかった事は

 

  • 最初はLaravel向けでシンプルなDockerでの開発環境を構築するプロジェクトだった。
  • 初期バージョンをリリース後に、Laravelコミュニティ以外にもPHPコミュニティから要望があり、Laravelだけではなく他のPHPプロジェクトをサポートするようになった。

 

という経緯がある事がわかりました。

また以下の記事では「Inspired by Laravel Homestead.」と書かれており、Laravel Homesteadをインスパイアされて開発された事もわかります。

 

medium.com

 

因みにGithubで今確認できる初期のバージョンは  「v0.1.0-Beta.1」です。

 

github.com

 

このバージョンでサポートしているソフトウェア(イメージ)は

 

の5つだけです。

構成はこんな感じです。

 

f:id:kikuchi1201:20190727134409p:plain



今のLaradockの構成と比べるとだいぶシンプルというか、「Laradockのあるべき姿はこれで良いじゃん!」という気もしてきます。ですが、インタビューでも語られているように、他の要望に合わせた結果今の形になっているので、最早「LaravelのDocker開発環境とは言い難い」状況だと思います。

 

リポジトリを見ると、一番最初に

「PHP development environment that runs on Docker. 」

と書かれているので、確かにLaravel専用ではないですね。

 

github.com

 

とは言え「Laradock」という名前は初心者から観たら「Laravel+Docker」と理解して、LaravelのDocker開発環境と認識されてしまうのは無理はないと思います。

 

せめて名前を「Laradock」から「PHPDevelopmentSoftwareAllInDocker」ぐらいに変えてあげた方が良い気がします。

 

という訳で、結論としてはLaradockは、Dockerを使ってLaravelを動かす環境よりも、Laravelに関わらずPHPでの開発環境で必要なあらゆるソフトウェアをDockerで構築できるようにした超便利ソフトウェアという認識です。

 

Laradockは何が駄目なのか?

結論としては「Easyでもないし、Simpleでもない」というのが僕の考えです。 

 

そもそもLaravelを使いたい目的でLaradockを使い始めると、ハマるポイントが、Laradock側での.envファイルの設定(めっちゃ長い)や、MySQLバージョンによるエラー、Dockerでの記述方法など、Laravelとは関係ない所でのデバッグが大変です。

しかもエラーを確認して変更を加えようにも毎回コンテナを止めて、変更を加えて再度立ち上げたり等すぐ確認できるわけではないので、「Laravelで早くアプリケーションを開発したいのに、なんで俺はDockerのデバッグでこんな時間を費やさないといけないんだ...」という気持ちになります。辛い、非常に辛いです...。

 

インタビューの説明で「Laradock is for PHP developers of any level who want to setup their development environment, using Docker without learning about it.」と言ってますが、途中で失敗してデバッグが起きれば話は別です。

必然とインフラの知識や、Dockerの文法を理解する必要が出てきます。

 

なので、Laradockは何が駄目なのか?というと、Laravelの開発環境を構築する目的を前提とした時に、Laravel以外の設定で詰まるポイントが多すぎるというのが一番の理由と考えます。

 

 

 

インフラの知識があり、Dockerをある程度理解している人なら、設定を加えてコンテナを立ち上げれば、 「Redis」や「Mailhog」など、Laravelと、この組み合わせってどう使えばいいの?」みたいな感じで、検証手段としては良い開発環境だと思います。

 

しかし、Laravelだけを目的にしたいのなら、Laradockはオススメできる方法ではありません。一番はやい方法はReaDoubleに書いてありますが、composerを使った方法です。

 

readouble.com

 

 

まとめ  

一番最初の冒頭で結論を出したので、これ以上語る事はないです。

「なぜ皆不満なんだろう?」と思ったらチャンスだと思って、「なぜ」を追いかけて見て下さい!

 

後、「DockerでのLaravelの開発環境はどうすればいいのか?」という疑問の関しては、それこそ調べれば出てきますし、過去に僕もやった事があったので、良かったら参考にして見てください。

 

Docker(compose)を使ってシンプルなLaravel環境を作成する。 · Issue #2 · Fendo181-sandbox/laravel_app · GitHub

 

もし詰まったら「おい!動かじゃねーか!」とコメント下さい。

エラー調べて直しておきます。平日に。

 

今日はそんな感じです!

良い週末を!

 

おわり