Skip to content

Node.jsエラー error:0308010C の解決方法

問題の概要

Node.js v18でアプリケーションを動作させようとすると、以下のエラーが発生しサーバーが起動しないことがあります。

Error: error:0308010C:digital envelope routines::unsupported

このエラーはNode.js v18にアップグレード後に頻繁に発生し、OpenSSLのデジタルエンベロープ関連のルーチンがサポートされないことが原因で起こります。特にNuxt.jsプロジェクトでよく報告されます。

エラーの根本原因

エラーが発生する根本的な理由は、Node.js v18でのOpenSSL 3.0デフォルト採用にあります。OpenSSL 3.0ではレガシーなハッシュ関数や暗号化方式のサポートが削除されましたが、古いプロジェクトや依存関係はまだこれらに依存している場合があります。

注意

この問題はフロントエンドビルドツール(Webpack, Viteなど)を使用するプロジェクトで特に起きやすく、バックエンドのNode.jsサーバーを実行する際にも発生します。

実用的な解決策

方法1: 環境変数でOpenSSLレガシープロバイダーを有効化(一時的な回避策)

最も簡単な解決法は、環境変数NODE_OPTIONSを設定する方法です:

bash
# コマンドで直接実行
export NODE_OPTIONS=--openssl-legacy-provider
npm run dev

package.jsonに永続的に設定する場合は、scriptsを変更します:

json
"scripts": {
  "dev": "NODE_OPTIONS=--openssl-legacy-provider nuxt dev",
  "build": "NODE_OPTIONS=--openssl-legacy-provider nuxt build",
  "start": "NODE_OPTIONS=--openssl-legacy-provider nuxt start"
}

注意点

この方法は一時的な回避策です。--openssl-legacy-providerを使用するとセキュリティレベルが低下します。なるべく早めに依存ライブラリの更新を行い、レガシー機能への依存を解消すべきです。

方法2: Node.jsをv16にダウングレード(安定版推奨)

Node.js v16(LTS版)ではこの問題は発生しないため、バージョン管理ツールnvmを使って切り替えが可能です。

bash
# Node.js v16のインストール
nvm install 16.20.2

# v16の使用
nvm use 16.20.2

# 確認
node -v # v16.20.2が表示されるはず

既存のv18が問題を起こす場合、不要ならアンインストールもできます:

bash
nvm uninstall 18.12.1

方法3: プロジェクトに特定のNodeバージョンを指定(チーム開発向け)

プロジェクトごとにNodeバージョンを固定する場合、プロジェクトルートに.nvmrcファイルを作成します:

:.nvmrc
16.20.2

チームメンバーはnvm installで自動的に正しいバージョンをインストールできます:

bash
nvm install

解決策の比較表

方法難易度セキュリティ影響持続性推奨ケース
環境変数設定★☆☆▲ 中リスク緊急回避時
Node v16利用★★☆◎ 無リスク中長期的解決
ライブラリ更新★★★◎ 最適最⾼プロダクション向け

根本的な解決

長期的には、依存ライブラリの更新を推奨します。次のコマンドで古い依存関係を特定し対応可能です:

bash
npm outdated
npm update

Nuxt.jsではnuxt upgradeコマンドでプロジェクトのアップグレードもサポートされています。

補足:Fedora利用者の注意点

Fedoraユーザーは追加で/etc/ssl/openssl.cnfの設定変更が必要な場合があります:

  1. 適切なエディタでファイルを開く
  2. 以下セクションのコメントを解除
ini
openssl_conf = openssl_init

代替案:Dockerでのバージョン固定

コンテナ環境では、Dockerfileで明示的にNodeバージョンを指定:

dockerfile
FROM node:16.20.2-alpine

WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .

EXPOSE 3000
CMD ["npm", "run", "dev"]

まとめ

error:0308010CエラーはOpenSSL 3.0の非互換性が原因です。以下の選択肢から状況に合わせて対処してください:

  1. 即時対応が必要なら:環境変数NODE_OPTIONS=--openssl-legacy-provider
  2. 安定性を求めるなら:Node.js v16 LTSにダウングレード
  3. 今後を見据えるなら:依存ライブラリの更新とNode.js v20以降のLTSへの移行

プロジェクトに参加するメンバー間でNodeバージョンを統一することが、開発環境エラーを防ぐ重要なポイントです。