💬

私のWebフロントエンド開発環境事情

に公開

作成日時: 2025-11-14

はじめに

この記事では、Webフロントエンド開発において私が最近採用している開発環境のセットアップや設定について紹介します。バージョン管理、パッケージマネージャーの選定、タスクランナーの活用など、開発体験を向上させるための実践的なTipsをまとめています。

Node.jsとパッケージマネージャーのversion管理

チーム開発やCI/CD環境では、Node.jsとパッケージマネージャーのバージョンを統一することが重要です。バージョンの不一致により、ローカル環境では動作するがCI環境では失敗する、といった問題を防ぐことができます。

最近はパッケージマネージャーとしてpnpmを使用しているため、package.jsonpnpm-workspace.yamlに以下の設定をしてバージョンを固定しています。これにより、チームメンバー全員が同じバージョンの環境で開発できます。

{
  "engines": {
    "node": "22.20.0"
  },
  "packageManager": "pnpm@10.13.1",
}
engineStrict: true
packageManagerStrictVersion: true

設定の詳細

  • package.json
    • engines.node: Node.jsのバージョンを指定
    • packageManager: パッケージマネージャーとそのバージョンを指定(Corepackの形式)
  • pnpm-workspace.yaml
    • engineStrict: enginesフィールドで指定したバージョンと異なる場合にエラーを出す
    • packageManagerStrictVersion: packageManagerで指定したバージョンと異なる場合にエラーを出す

pnpmに関しては、v9.7以降がインストールされていれば、managePackageManagerVersions: true(デフォルト)により、package.jsonに指定したバージョンが自動的にインストールされるため、チームメンバーは個別にバージョンを管理する必要がありません。

GitHub Actionsでの活用

GitHub Actionsのactions/setup-nodepackage.jsonenginesフィールドを参照する設定があるため、CI環境でも同じNode.jsバージョンを使用できます。

- uses: actions/setup-node@v4
  with:
    node-version-file: "package.json"

依存パッケージのバージョン指定

デフォルトでは、pnpm addなどでパッケージをインストールすると、バージョンがsemver形式(^1.0.0~1.0.0など)でpackage.jsonに記録されます。実際にインストールされるバージョンはpnpm-lock.yamlで固定されるため、再現性は保証されています。

しかし、semver指定の場合、package.jsonを見ただけでは実際にインストールされているバージョンが分かりません。そのため、以下の設定でバージョンをプレフィックスなしで保存するようにしています。

savePrefix: ''

この設定により、pnpm add <package>を実行した際、package.jsonには"package": "1.0.0"のように、プレフィックスなしで正確なバージョンが記録されます。

メリット

  • 可視性の向上: package.jsonを見るだけで、現在インストールされているバージョンがすぐに確認できる
  • コミュニケーションの円滑化: PRレビューやドキュメントで、具体的なバージョン番号が明確になる
  • lockfileを開く手間が減る: バージョンを確認するためにpnpm-lock.yamlを開く必要がない

タスクランナー

多くのプロジェクトではpackage.jsonscriptsフィールドにタスクを定義していますが、個人的にはタスクランナーを別で用意する方が好みです。

makeの活用

makeはmacOSやLinuxであればデフォルトでインストールされているため、追加のセットアップが不要という利点があります。

.PHONY: install dev build test

install:
	pnpm install

dev:
	pnpm run dev

build:
	pnpm run build

test:
	pnpm test

miseへの移行

最近はmiseが気になっています。miseは、ランタイムバージョン管理とタスクランナーの機能を兼ね備えたツールです。

mise.toml
[tasks.dev]
run = 'pnpm run dev'

[tasks.build]
run = 'pnpm run build'

[tasks.test]
run = 'pnpm test'

個人プロジェクトではmiseを積極的に採用しており、開発体験の向上を実感しています。

まとめ

この記事では、Webフロントエンド開発において私が採用している開発環境の設定について紹介しました。

  • バージョン管理: package.jsonpnpm-workspace.yamlで、Node.jsとpnpmのバージョンを厳密に管理
  • 依存パッケージ: savePrefix: ''で、package.jsonを見るだけでインストールされているバージョンを確認可能に
  • タスクランナー: makemiseを使って、package.jsonから分離してタスクを管理

これらの設定により、チーム開発でのバージョン不一致によるトラブルを防ぎ、開発環境のセットアップを簡素化できます。特に、CI/CD環境との一貫性を保つことで、「ローカルでは動くのにCIで失敗する」といった問題を減らすことができます。

あくまで個人的な好みと経験に基づいた設定ですが、皆さんのプロジェクトでも参考になれば幸いです。

GENDA

Discussion