fly.ioのCLIインストールする際に気を付けること
目次
- DockerfileのPHPバージョンが合っているか確認・変更
- DockerfileとNode.jsのバージョンが合っているか確認・変更
内容
ローカル環境で作成していたLaravelアプリケーションを、Fly.ioを使用してデプロイしました。
その際、ローカル環境では問題なく動作していたにもかかわらず、Fly.ioのDocker環境ではビルド時にエラーが発生しました。
今回、実際にデプロイする中でいくつか躓いた点があったため、原因と対処方法をまとめます。
1. DockerfileのPHPバージョンが合っているか確認・変更
最初に発生した問題は、Composerの依存関係をインストールする際のPHPバージョンの不一致でした。
ローカル環境では、
PHP 8.4.21
を使用していました。
一方、Fly.ioのDocker環境ではPHP 8.3系が使用されていました。
そのため、composer installを実行した際に、以下のようなエラーが発生しました。
Your lock file does not contain a compatible set of packages.
Please run composer update.
さらに確認すると、
symfony/http-foundation v8.1.5 requires php >=8.4.1
your php version (8.3.35) does not satisfy that requirement
という内容が表示されました。
つまり、Composerそのものが壊れていたわけではなく、
ローカル環境
PHP 8.4.21
↓
composer.lock
↓
Fly.io
PHP 8.3.35
↓
必要なPHPバージョンを満たせない
という状態でした。
対処
Dockerfileを確認したところ、PHPのバージョン指定がローカル環境と一致していませんでした。
変更前:
ARG PHP_VERSION=8.2
これをローカル環境に合わせて、
ARG PHP_VERSION=8.4
に変更しました。
今回のように、ローカル環境とDocker環境でPHPのバージョンが異なると、composer.lockに記録されているパッケージの要求を満たせない場合があります。
そのため、デプロイ前には、
- ローカルのPHPバージョン
- Dockerfileで指定しているPHPバージョン
- Composerの依存パッケージが要求しているPHPバージョン
が一致しているか確認することが重要だと分かりました。
2. DockerfileとNode.jsのバージョンが合っているか確認・変更
PHPの問題を解決した後、今度はフロントエンドのビルドでエラーが発生しました。
今回のプロジェクトではVite 8を使用しています。
package.jsonでは、
"laravel-vite-plugin": "^3.1",
"vite": "^8.0.0"
となっていました。
一方、ローカル環境のNode.jsは、
Node.js v24.18.0
でした。
しかし、Fly.ioのDocker環境では、
Node.js v18.20.8
が使用されていました。
その結果、Viteのビルド時に以下のエラーが発生しました。
import { formatWithOptions, styleText } from "node:util";
^^^^^^^^^
SyntaxError: The requested module 'node:util'
does not provide an export named 'styleText'
最初はrolldownについて調べましたが、package.jsonにはrolldownを直接指定していませんでした。
これは、Vite 8が内部でRolldownを使用していることが関係していました。
つまり、
ローカル環境
Node.js 24
↓
Vite 8
↓
Rolldown
↓
正常に動作
Fly.io
Node.js 18
↓
Vite 8
↓
Rolldown
↓
Node.jsのバージョンが古くエラー
という状態でした。
対処
Dockerfileを確認すると、
ARG NODE_VERSION=18
となっていました。
さらにDockerfileの中では、
FROM node:${NODE_VERSION} as node_modules_go_brrr
となっていたため、ここでNode.jsのバージョンが決まっていました。
ローカル環境ではNode.js 24を使用していたため、
ARG NODE_VERSION=24
に変更しました。
変更後、Fly.ioで再度ビルドを行ったところ、Node.jsのバージョンによるエラーは解消され、デプロイを進めることができました。
今回分かったこと
ローカル環境でNode.jsのバージョンが新しくても、Dockerfileで古いNode.jsを指定していると、Fly.ioでは古いNode.jsが使用されます。
そのため、デプロイ時には、
ローカルのNode.js
↓
DockerfileのNODE_VERSION
↓
Docker環境のNode.js
が一致しているか確認する必要があります。
また、package.jsonに直接記載していないパッケージがエラーに出てくる場合があります。
今回のrolldownがその例で、Vite 8の内部で使用されていました。
まとめ
今回Fly.ioへのデプロイで主に躓いたのは、ローカル環境とDocker環境のバージョンの違いでした。
今回確認した項目は以下です。
PHP
ローカル:PHP 8.4
Docker:PHP 8.3系
↓
Dockerfileを変更
ARG PHP_VERSION=8.4
Node.js
ローカル:Node.js 24
Docker:Node.js 18
↓
Dockerfileを変更
ARG NODE_VERSION=24
今回の経験から、Fly.ioへデプロイする際には、
単純に「ローカルで正常に動いているから大丈夫」と考えるのではなく、
Docker環境で使用されるPHPやNode.jsなどのバージョンも確認する必要があると分かりました。
特にLaravelではComposer、フロントエンドではViteなど、それぞれのパッケージが必要とするバージョンがあります。
そのため、デプロイ時にエラーが発生した場合は、エラーメッセージだけを見るのではなく、
ローカル環境のバージョン
↓
Dockerfileのバージョン指定
↓
実際のDockerビルド環境
の3つを比較することで、原因を見つけやすくなると感じました。
感想
デプロイ時はPHPとnodeのバージョンを確認する必要を学びました。
