Laravel / Lumen 9.x 開発環境構築(1)

Laravel / Lumen 9.x 開発環境構築(1)

ここ最近TypeScriptとPythonばかりで、PHPにあまり触れていなかったのですが、またPHP8.xになってから色々触る機会が増えてきたのと、開発環境構築からVue3も入れたフレームワークの構造を教えなくてはならなったので、資料別途作るならブログにしてしまおうと思いまして、久々の投稿です。

Laravel ? Lumen ?

Laravel は、PHPのウェブアプリケーションフレームワークと呼ばれるものです、ここ見てるような人はとっくに知ってますね。フレームワーク自体説明は、たくさん世の中にでているので割愛します。そして、Lumen は、Laravel から機能を省きREST APIを作るために最適化、高速化されたいる同類のフレームワークです。細かいところでイコールではないのですが、ほぼ一緒です。

機能としては、Lumen < Laravel という関係になります。Laravel から入ってLumenにいくと、意外とない機能がたくさんあったり、デフォルトで無効化されたりしていますので注意が必要です。また、Lumenは、Lumen公式サイトに書かれているように、

Lumenをリリースしてから数年の間に、PHPは様々な素晴らしいパフォーマンスの向上を遂げてきました。このため、Laravel Octaneが利用できるようになったこともあり、新しいプロジェクトをLumenで開始することは推奨されなくなりました。代わりに、新しいプロジェクトは常にLaravelで始めることをお勧めします。

新たなプロジェクトは Laravel で作れ。とのことです。が!いま現在 まだLumenも使ってるんだわ!っていうことがありますね、なのでLumenがシンプルなので、Lumen そして、Laravelの環境を作っていって掘り下げて行ければなと思っています。

PHP 開発環境構築

表題とちょっとずれますが、まずは、素のPHPを扱うための環境を作ります。

REST API サーバーとしてデータベースを使わないのであれば、公式サイト通りPHPビルトインウェブサーバーで起動して、ちゃっちゃと開始するのでいいと思うのですが、現実データベースは使いますよね。データベースが別に起動してたり、外部から接続するだけで良い開発環境ならそれで良いのですが、開発環境なんで、ローカルで全部立てておきたいところです。

作業は、Ubuntu 22.04 で行っています。ローカル環境を汚したくないので、docker-composeを利用して環境を作成します。WSL2やmacOSの環境は読み替えてください、ほとんど変わらないはずです。docker-compose 知らないですぅ… って人でも、使うコマンドは、1か2つといった感じなので、記載通り入力すれば使えます。

Nginx+PHP8.1+MySQL5.7 という構成で作成します。

正確には、php-fpm + Nginx の連携です。

結論からいうと、githubにすぐ使えるようにリポジトリ公開してあるので、ソレを引っ張ってきて起動する手順を記載します。次の手順で完了です。

  1. docker-compose 環境コードをクローンする
  2. 設定ファイルを修正する
  3. サーバーを起動する

では、順番に作業を進めます。

1. docker-compose 環境コードをクローンする

作業するディレクトリは任意のディレクトリで構いません。個人的にローカルで試すプロジェクトはは、~/Projects/local 下で作業しています。

mkdir -p ~/Projects/local
cd ~/Projects/local
git clone https://github.com/xenophy/php8-nginx-mysql.git
cd php8-nginx-mysql
rm -rf .git

下記のファイルたちが配置されます、公開リポジトリの.gitディレクトリは不要なので削除します。必要に応じて git init するなり、開発用のリポジトリに追加してあげてください。

.
├── .env.example
├── .gitignore
├── Dockerfile
├── README.md
├── docker-compose.yml
├── nginx
│   └── conf.d
│       └── default.conf
└── public
    └── index.php


2. 設定ファイルを修正する

Lumen も、Laravel も、動作設定は .env ファイルで行います。このファイルにはデータベース接続のパスワードなども含まれるため、絶対にリポジトリに入れないでください。しかし、何を書けばいいのかわからないので、.env.example というファイルが存在します。このファイルをコピーして、使います。

cp .env.example .env

docker-compose で構築されているMySQLの初期パスワードは、そのまま設定してあるので、開発時はコピーするだけでOKです、注意点は、必要に応じてdocker-compose.ymlのパスワードを変えたなら、.envも一緒に変えるくらいです。

3. サーバーを起動する

これで、準備ができたので、あとはサーバーを起動するだけです。

docker-compose up

しばらく待っていると、dockerコンテナの作成が完了して、サーバーが起動します。利用しているポートは、8000番と3306番です。既に、同じポート番号を利用している場合は、docker-compose.ymlのportsを変更してください。

ports:
 - 8000:80

※ 補足ですが、左側がローカルのポート、右側がコンテナー内のポートです。当たり前なんですが、使い慣れてない人は適当に右側変えるなどの謎現象みかけるので、一応💦

上を合わせただけですが、一気に貼り付けるだけでOKなのは下記になります。クローン先のディレクトリ存在確認とかは入れてないので、php8-nginx-mysqlディレクトリは存在しない前提です。

mkdir -p ~/Projects/local
cd ~/Projects/local
git clone https://github.com/xenophy/php8-nginx-mysql.git
cd php8-nginx-mysql
rm -rf .git
cp .env.example .env
docker-compose up

ブラウザで、http://localhost:8000 にアクセスするか、CURLでアクセスすると次のレスポンスが帰ってきます。

curl -X GET http://localhost:8000

> Current PHP version: 8.1.11<br />Database connected successfully<br />

ブラウザだと

Current PHP version: 8.1.11
Database connected successfully

CTRL + C でサーバーを終了できます。

あえて、デーモン(バックグラウンド)実行にはしていません。

最初はデーモン実行にして教えていたのですが、知らないうちに裏で起動しているっていうのは、初学者が、ポートぶつかるミスが多いので、最悪ターミナル終わったら一緒に落ちるほうが安全だと考えるからです。熟知している方は、オプション設定してデーモン起動しても構いません。

public ディレクトリの下にphpのコードを書いていけば、localhost:8000 番でアクセスできる環境は出来上がりです。素のPHPで動作確認行う場合にも、さくっと使えて便利です。

Lumen インストール

さて、本題の Lumen を入れていきます。先程と同じノリで、リポジトリをクローンしてきて実行します。

git clone https://github.com/xenophy/lumen-php8-nginx-mysql.git

同じく、.env.example を .env としてコピーします。

cd lumen-php8-nginx-mysql
rm -rf .git
cp .env.example .env

次に、必要なパッケージを取得します。

docker-compose exec app composer update

それなりにパッケージをダウンロードするので、数分待つことになるかと思います。あとは、docker-compose up を実行するだけ!

docker-compose up

http://localhost:8000 にアクセスすると下記が表示されるはずです。

Lumen (9.1.2) (Laravel Components ^9.21)

まとめると、以下のコマンドで起動するところまで一発です。

git clone https://github.com/xenophy/lumen-php8-nginx-mysql.git
cd lumen-php8-nginx-mysql
rm -rf .git
cp .env.example .env
docker-compose up
xdg-open http://localhost:8000

lumenに関しては、公式サイトにあるように、composerでインストールを行い・・・って手順を踏むのですが、先程の素のPHP環境に事前にいれたものをリポジトリに格納してあります。素早くLumenの環境を立ち上げて確認したり、開発を始める際に役立つかと思います。

まとめ

素のPHP環境をビルドインウェブサーバーで起動する方法がよく出てきますが、データベース含めてdocker-composeで管理することで環境を汚さす、素早くバージョンも合わせて開発が始められます。次回は、Laravel の環境に取り掛かりたいと思います。Laravel は、Laravel Sail が似たようなことをやってくれるので、それを活用して素早く開発環境を準備するようにします。

何はともあれ、なれてる人なら自前でWEBサーバー立てようが、dockerだろうが、そんなに難しくないと思いますが、初学者の入門書を見てると、ここをスキップするためにMAMPやXAMPPの説明が書かれていることが多々あります。Linux版のMAMPがないのと、この方法であれば、Win/Macでも対応可能です。

初学者に、docker-composeの書き方から入るのはちょっと厳しいものがあるんですが、かと言ってローカルのPHPビルトインウェブサーバーだけでは、MySQLのインストールなどで詰まったり、なにより本番の稼働環境と違うので、せめてNginxくらいは通して開発させたいところです。

PHPの言語仕様をおさえて、Laravelなどフレームワークに入るときに、環境構築で死ぬ を少しでもなくして、動かせるようになってから理解を深めても遅くないかと思います。動かないとつまんないですからね、あと、やりたいことは環境構築じゃなくてPHPフレームワークを使うところなんで。

もちろん後々ココらへんの知識はしっかりつけてもらいたいものですが、ソレ以前にLaravel一つとっても、マニュアル見てて、初心者殺し感は未だに拭えません。色々やってきた人からすると当たり前のことの前提知識が抜けてるからなんですけど、この環境を踏まえて、フレームワークの動作を丁寧に学んでいくことが、一番の近道ではないのかな。と日々教育しながら思う次第です。

よろしければ、ご活用ください。

では、また。

最新の更新を
プッシュ通知で購読しよう