なぜ PHP 8.5+ なのか?
TCPDF-Next は設計上 PHP 8.5+ を必要とします。これは任意の制約ではありません。ライブラリで使用されるすべてのモダンな PHP 機能が、コード品質、セキュリティ、および開発者体験に直接的な恩恵をもたらしています。
使用している PHP 8.5 の機能
| 機能 | TCPDF-Next へのメリット |
|---|---|
| Readonly クラス | イミュータブルな値オブジェクト(PageSize、Margin、Color、FontInfo) — ミューテーションバグなし |
| Backed Enum | 型安全な設定(Orientation::Portrait、BarcodeType::QRCode、SignatureLevel::PAdES_B_LTA) |
| 名前付き引数 | 自己文書化された API 呼び出し — setSignature(certInfo: $cert, level: SignatureLevel::PAdES_B_B) |
| Union/Intersection 型 | API 全体にわたる正確なパラメータ型 |
| DNF 型 | 内部バリデーション用の複雑な型制約 |
#[\SensitiveParameter] | パスワードと秘密鍵がスタックトレースに表示されない(Aes256Encryptor、CertificateInfo、TsaClient) |
#[\NoDiscard] | 重要なメソッドの戻り値を無視するとコンパイラ警告が発生(FontManager::registerFont()、FormFlattener::flatten()) |
| プロパティフック | ボイラープレートなしのクリーンなゲッター/セッターパターン |
| パイプ演算子 | 内部データ変換の効率化 |
| Fiber | キューワーカーでの非同期 PDF 生成の基盤 |
「でも、うちのサーバーは PHP 8.1 なんだけど...」
Docker をアイソレーションレイヤーとして使用してください。あなたのアプリケーションは任意の PHP バージョンで動作できます。TCPDF-Next はコンテナ内で実行されます。
最小限の Dockerfile
dockerfile
FROM php:8.5-cli
# 必要な拡張機能をインストール
RUN apt-get update && apt-get install -y \
libicu-dev libpng-dev libjpeg-dev libwebp-dev \
&& docker-php-ext-configure gd --with-jpeg --with-webp \
&& docker-php-ext-install gd intl
# Composer をインストール
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
COPY . /app
WORKDIR /app
RUN composer install --no-dev --optimize-autoloaderチーム向け Docker Compose
yaml
services:
pdf-generator:
build: .
volumes:
- ./output:/app/output
command: php generate-pdf.phpLaravel と Docker
Laravel アプリが PHP 8.2 で動作しているが TCPDF-Next が必要な場合は、PDF 生成をマイクロサービスとして実行します:
yaml
services:
app:
image: php:8.2-fpm
# あなたの Laravel アプリ
pdf-service:
build:
context: ./pdf-service
dockerfile: Dockerfile
image: php:8.5-cli
volumes:
- shared-output:/output
volumes:
shared-output:あるいは、Laravel のキューシステムを使用して PDF 生成を PHP 8.5 ワーカーにディスパッチすることもできます。
🐳 Docker for Legacy PHP Environments
Docker は、本番 PHP バージョンをアップグレードできないチームにとって推奨されるアプローチです。PDF 生成プロセスは分離されています — 入力を読み取り、PDF ファイルを書き出し、終了します。共有状態も互換性の懸念もありません。
トレードオフ
PHP 8.5+ を要求することで、TCPDF-Next は以下を獲得しています:
- よりコンパクトなコードベース — モダンな機能が数百行のワークアラウンドを置き換えます
- より強力な型安全性 — PHPStan レベル 8 でエラーゼロ
- より優れたセキュリティ —
#[\SensitiveParameter]がログでの認証情報漏洩を防止します - イミュータブルオブジェクト — Readonly クラスがバグのカテゴリ全体を排除します
- 自己文書化コード — Enum がマジック文字列を置き換え、名前付き引数が位置引数配列を置き換えます
次の 10 年間あなたに役立つライブラリは、次の 10 年間の言語機能に基づいて構築されるべきです。