WEB/システム/IT技術ブログ

PHP処理のボトルネックをプロファイルで調査します
今回は、Docker環境でXdebugのProfiling機能を使った検証です
Xdebug: Documentation » Profiling

環境の詳細は以下の通り

  • Windows 11 Home 64bit
  • Docker Desktop
  • PHP 8.2.28
  • Xdebug v3.4.2

既に、任意のPHPプロジェクトをDockerで開発していることを前提とします
Xdebug 2では設定が異なるので注意が必要です。今回はXdebug 3です

Xdebugのインストール

Docker環境にXdebugをインストールします

php.iniに以下の設定を追加します

[xdebug]
xdebug.mode=profile
xdebug.start_with_request=yes
xdebug.profiler_output_name=cachegrind.out.%t-%s
xdebug.output_dir=tmp/xdebug

profiler_output_nameでプロファイル結果のファイル名を指定します
ファイルが多くなると、どの処理かわからなくなるので、
ドキュメントを参考にして必要に応じて設定します
https://xdebug.org/docs/all_settings#trace_output_name

WAILSはgo言語を使ってWindowsやMacなどのデスクトップアプリが開発できるプラットフォームです
The Wails Project | Wails
少し気になってたので、今回はHello Worldを試してみたいと思います

今回、試した開発環境は以下の通りです

  • Windows 11 Home 64bit
  • go 1.23.1
  • Node.js 20.17
  • npm 10.8.2

Windows上にて、wsl2とDockerで開発環境を構築した際に、ファイルの権限エラーが発生する事があります
wsl2とアプリケーションコンテナのユーザIDが異なるのが原因なのですが、その回避策のひとつを紹介します

環境は以下の通りです

  • Windows 11 Home 64bit
  • wsl 2.2.4.0
  • Ubuntu 24.04 LTS
  • Docker Desktop 4.33.1
  • Laravel 9

例えば、LaravelプロジェクトをUbuntuに展開してる事を前提とします

Windows 11 HomeにDocker Desktopをインストールします

今回、インストールする環境は以下の通りです

  • Windows 11 Home 64bit 22H2
  • Docker Desktop 4.32.0

システム要件

Windows 11にDocker Desktopをインストールするためには、以下の要件を満たす必要があります

  • WSL 2がインストール済み
  • Windows 11 Home 64bitのバージョン21H2以上
  • CPUが仮想化に対応していること

Windows 11 HomeにWindows Subsystem for Linux 2(WSL 2)をインストールします

以下の環境でのインストールです

  • Windows 11 Home 22H2
  • Ubuntu 24.04 LTS

WSL 2のインストール

スタートメニューからコントロールパネルを開き、「プログラム」を選択します
「Windowsの機能を有効化または無効化」クリックし、「仮想マシン プラットフォーム」と「Linux 用 Windows サブシステム」を有効化します

私の場合、デフォルトで「仮想マシン プラットフォーム」が有効化されてたので、「Linux 用 Windows サブシステム」のみチェックを入れます

「OK」ボタンを押すと、OSの再起動を促されるので、再起動してインストールを完了させます

コマンドプロンプトまたはPowerShellを起動し、以下のコマンドでインストール確認ができます

> wsl --status
既定のバージョン: 2

Linux 用 Windows サブシステム カーネルは、'wsl --update' を使用して手動で更新できますが、システム設定が原因で自動更新が 発生することはありません。
カーネルの自動更新を受け取るには、 Windows Update の設定を有効にしてください:' Windowsの更新に、その他のMicrosoftの製品 の更新情報を受け取る'。
詳細については、 https://aka.ms/wsl2kernel.
 を参照してください
WSL 2 カーネル ファイルが見つかりません。カーネルを更新または復元するには、'wsl.exe --update' を実行してください。

xampp環境のLaravelプロジェクトでMailHogを活用します。

時に開発環境でのメールテストは面倒です。
例えば、ローカルからメールを送信する環境を構築して、テスト用メールアドレスを作成して、メールを送信する度にメールボックスを確認するなど。
さらに、誤送信に気を使いつつなど、コストとリスクがあります。
そこでMailHogで気軽なローカル開発環境を構築してみます。

MailHogを使うと、全てのメールはローカルのMailHogメールボックスに送信されるので、テスト用のメールアドレスを用意する必要もなければ、誤送信の心配もありません。

  • Windows 11 Home
  • xampp 8.1.25
  • Laravel 9.52.0
  • MailHog v1.0.0

MailHogをダウンロード

MailHogの公式サイトから、Windows用の実行ファイル「MailHog_windows_amd64.exe」をダウンロードします。
GitHub – mailhog/MailHog: Web and API based SMTP testing

ダウンロードしたファイルを任意の場所、例えば今回は以下の場所に設置します。

C:\xampp-8.1.25\sendmail\MailHog_windows_amd64.exe

ある日、Reactプロジェクトにおけるダッシュボードのフロントをデザインなしで実装する案件がありました。
デザイン指定がないとはいえ、それっぽいモダンなレイアウトは確保したい。
そこで今回「Flowbite React」を試してみます。
Flowbite React Components

「Flowbite」は「Tailwind CSS」のコンポーネントで、クラスを指定するだけでモダンな見た目を提供してくれます。
応用性がある反面、クラスの指定が多少細かいので冗長になりがちです。
「Flowbite React」では、簡単な引数を指定するだけで、Flowbiteを適用することができます。

今回試した環境は以下の通りです。Tailwind CSSなどはインストール済みを前提とします。

  • Windows 11 Home
  • Node.js 16.19.1
  • React 18.2.0
  • Tailwind CSS 3.2.7
  • Flowbite 0.4.3

Laravelでデータベースをテストします。
今回は、新規プロジェクトではなく、既存プロジェクトをテストする前提で進めていきます。

  • PHP 8.0.25
  • Laravel 9.52.0
  • SQLite

テスト用のDBを用意する

データベースをテストする際、安全なDBが必要です。
つまり、テストで本番環境のDBを使うわけにはいきません。また、場合によっては開発環境のDBを汚すこともあると思います。

そこで、今回はテスト用のDBを用意してみます。
例えば、SQLiteで用意したテスト用DB「testing」を使用します。

まず、空のファイル「/database/database_test.sqlite」を用意します。Linux系であればtouchコマンド、Windowsであればテキストファイルを新規作成します。

次に「/config/database.php」を開きます。
「sqlite」ブロックをコピペして「testing」にリネームします。

いつものようにLaravelのFakerでダミーデータを作成しようとしたら、関数joinでエラーになってしまいました。

join(): Argument #2 ($array) must be of type ?array, string given

そういえば、最近、開発環境をPHP7.xからPHP8.xにアップグレードしたばかりでした。

調べてみると、ライブラリ「fzaninotto / Faker」は2020年に開発がストップしていて、PHP8には対応していないようです。
fzaninotto/Faker: Faker is a PHP library that generates fake data for you

代替のライブラリとしてはFakerPHPがあるようです。
FakerPHP / Faker

早速、ライブラリをインストールしてみます。composer.jsonから古いライブラリを削除します。

		"fzaninotto/faker": "^1.4",

続けて新しいライブラリを追加して、Composerインストールを実行します。

		"fakerphp/faker": "^1.9.1",

インストール後、再度Fakerを実行したところ、無事にエラーは解消されました。

Laravel HomesteadでWindowsに開発環境を作ります。

これまでxamppをメインにWindowsで開発をしてきました。
モダンな環境でということでwsl & Dockerに乗り換えたのですが、環境をアップグレードする度にCPUの負荷が上がったり、メモリを大量に消費したり。。
チューニングの繰り返しで作業にならないので、安定した環境を求めてLaravel Homesteadを試してみます。

ちなみにHomesteadに必要なVirtualBoxとVagrantはインストール済みを前提とします。

  • Windows 11 Home 64bit
  • VirtualBox 7.0.6
  • Vagrant 2.3.4

Homesteadをインストール

まず、BoxをVagrantに追加します。Windows PowerShellを起動して以下のコマンドを実行します。

> vagrant box add laravel/homestead
==> box: Loading metadata for box 'laravel/homestead'
    box: URL: https://vagrantcloud.com/laravel/homestead
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1) libvirt
2) parallels
3) virtualbox

Enter your choice:

プロバイダの選択を求められるので、今回はVirtualBoxの「3」を選択します。
こちらの処理に5分ほどかかりました。

Monthly Archives