問題の概要
プロフィール画像のリサイズ、キャプチャの生成、サムネイルの作成など、画像の処理を行おうとした際に、スクリプトが以下のエラーでクラッシュしたのではないでしょうか。
PHP Fatal error: Uncaught Error: Call to undefined function imagecreatetruecolor()
これは、imagecreatetruecolor() が GD (Graphics Draw) エクステンションの一部であるために発生します。このエクステンションがインストールされていないか、php.ini で有効になっていない場合、PHP はこの関数を認識できません。これは、サーバーを新規にセットアップした際や、エクステンションが自動的に引き継がれない新しい PHP バージョンへ移行した際によく発生する問題です。
根本的な原因
GD ライブラリは、ほとんどの PHP 画像操作ライブラリ(Intervention Image や Imagine など)の必須要件です。デフォルトでは、多くの Linux ディストリビューションや最小構成の Docker イメージは、インストールサイズを軽量に保つために GD を含んでいません。GD エクステンションがないと、imagecreatetruecolor()、imagecreatefromjpeg()、imagepng() などの呼び出しはすべて失敗します。
Ubuntu / Debian での修正方法
Debian 系のシステムでは、使用している PHP バージョンに対応した特定の GD パッケージをインストールする必要があります。8.x を現在のバージョン(例:7.4、8.1、8.2、8.3)に置き換えてください。
# パッケージリストの更新
sudo apt update
# GD エクステンションのインストール(PHP 8.2 の例)
sudo apt install php8.2-gd
インストール後、変更を適用するためにウェブサーバーまたは PHP-FPM プロセスを再起動します。
# Apache を使用している場合
sudo systemctl restart apache2
# PHP-FPM と Nginx を使用している場合
sudo systemctl restart php8.2-fpm
CentOS / RHEL / AlmaLinux での修正方法
yum または dnf パッケージマネージャーを使用する RHEL 系のシステムの場合:
# GD エクステンションのインストール
sudo dnf install php-gd
# PHP-FPM の再起動
sudo systemctl restart php-fpm
Docker (PHP-FPM イメージ) での修正方法
PHP の公式 Docker イメージを使用している場合、コンテナ内で単に apt install を実行するだけでは不十分です。エクステンションを PHP 環境内で設定し、有効化する必要があるからです。ヘルパースクリプトである docker-php-ext-install を使用してください。
Dockerfile に以下を追加します:
FROM php:8.2-fpm
# GD の依存関係をインストール
RUN apt-get update && apt-get install -y \
libpng-dev \
libjpeg-dev \
libfreetype6-dev
# GD の設定とインストール
RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install gd
注意: モダンな PHP バージョン(7.4以降)で特定のフォーマットをサポートする必要がある場合は、設定時に --with-freetype および --with-jpeg フラグが必要になります。
Windows (XAMPP / WAMP) での修正方法
Windows 上でローカル開発を行っている場合、GD エクステンションは通常含まれていますが、デフォルトでは無効になっています。
php.iniファイルを探します(XAMPP の場合、通常はC:\xampp\php\php.iniにあります)。- テキストエディタでファイルを開き、
extension=gdを検索します。 - 行頭のセミコロン(
;)を削除して、コメントアウトを解除します:
;extension=gd --> 次のように変更 --> extension=gd
- ファイルを保存し、XAMPP/WAMP コントロールパネルから Apache サービスを再起動します。
## 修正の確認
サーバーを再起動したら、エクステンションが有効になっているかを確認する必要があります。これはコマンドラインまたはウェブスクリプトから行えます。
### 方法 1:コマンドライン (CLI)
以下のコマンドを実行して、ロードされているモジュールの一覧に "gd" が表示されるか確認します:
php -m | grep -i gd
`gd` と出力されれば、CLI 用にエクステンションが正常にロードされています。
### 方法 2:PHP Info
ウェブディレクトリに、以下の内容を含む `info.php` という名前の一時ファイルを作成します:
ブラウザからこのファイルにアクセスし(例:`http://localhost/info.php`)、"gd" セクションを探します。"GD Support => enabled" と表示されているはずです。
## 予防策とベストプラクティス
将来的に、特に本番環境へのデプロイ時にこのエラーを回避するために、以下の慣行に従ってください:
- **Composer の依存関係を確認する:** `intervention/image` のようなライブラリを使用している場合は、それが `composer.json` に記載されていることを確認してください。また、`composer.json` で明示的にエクステンションを要求することで、エクステンションが不足している場合に `composer install` を失敗させることもできます:
```
"require": {
"ext-gd": "*"
}
- 環境の同一性: ローカルの開発環境(XAMPP/Docker)が本番サーバーの PHP エクステンションと一致していることを確認してください。
- プロビジョニングの自動化: Ansible、Docker、Bash などのスクリプトを使用してサーバーをセットアップし、
gd、mbstring、pdoなどの必要なエクステンションが常にデフォルトでインストールされるようにします。

