2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

fly.ioのCLIインストールする際に気を付けること

2
Posted at

fly.ioのCLIインストールする際に気を付けること

目次

  1. DockerfileのPHPバージョンが合っているか確認・変更
  2. DockerfileとNode.jsのバージョンが合っているか確認・変更

内容

ローカル環境で作成していたLaravelアプリケーションを、Fly.ioを使用してデプロイしました。

その際、ローカル環境では問題なく動作していたにもかかわらず、Fly.ioのDocker環境ではビルド時にエラーが発生しました。

今回、実際にデプロイする中でいくつか躓いた点があったため、原因と対処方法をまとめます。

https://fly.io/
image.png


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のバージョンを確認する必要を学びました。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?