概要
- Node.js の進化に驚き、Denoからの移行を決断
- パッケージ管理 やTypeScript対応の現状と課題
- PNPM やFNMなど安全性・利便性重視のツール選定
- Denoの衰退とNode.jsの優位性
- 最終的に Deno からNode.jsへ完全移行
Node.jsへの回帰と最新事情
- 最近の SvelteKitクライアント案件 でNode.jsを再利用
- かつてのNode.jsと異なり、 ECMAScriptの最新仕様 にしっかり対応
- require() の強制がなくなり、APIも大幅にモダン化
- 長年Deno派だったが、Node.jsの進化で再評価
パッケージ管理の選択と安全対策
- 公式ドキュメントでは NVM のインストールを推奨
- NVMやNPMの過去の経験はあまり良くなかった
- Fast Node Manager (FNM) でNodeバージョン切り替えを簡単に実現
- PNPM を選択し、セキュリティリスクを軽減
- aliasでnpm=pnpm、npx=pnpxに設定し、既存スクリプトとの互換性確保
- pnpm-workspace.yaml で追加設定
- minimumReleaseAge: 1440(1日)、trustPolicy: no-downgrade
- マルウェア混入リスクを低減するためのリリース遅延
- PNPM はpost-installスクリプトもブロック
- NPMは依然として自動実行の危険性あり
TypeScript対応とパッケージ公開の現状
- Node.js でTypeScriptがスムーズに動作
- ただし、TypeScriptパッケージのNPM公開は非推奨
- node_modules配下のTypeScriptファイルはサポート外
- 技術的ではなく、 哲学的理由 による制限(Microsoft依存回避)
- 型を削除するビルドツールとして Tsdown を採用
- 必要なdotfileは2つのみ
- GitHubのMicrosoft化を嫌い、 Forgejo で自前ホスティング
- PNPMのtrust policy設定で自作パッケージの信頼性確保
静的サイトジェネレータのNode.js移行
- Deno からNode.jsへの移行テストを実施
- 以前なら大改修が必要だったが、Node v26.10.0では最小限の修正で完了
- ファイルシステムAPI をnode:fsに置換
- サーバー部分は Hono のnodeアダプタで対応
- @std/pathから node:path へのimport切替のみで互換性確保
- ビルド速度が約15%向上
- さらなる最適化の余地あり
Node.jsの進化とDenoの衰退
- Node.jsは着実に進化し、 Deno の優位性を逆転
- Denoの問題点
- ZSH連携の不具合
- JSRの「429 Too Many Requests」頻発
- 同時HTTPリクエスト時のバグ
- Deno Land Inc.の停滞・リストラ・方向性の迷走
- JSRサポートは迅速にアカウント削除対応
- 過去のDenoパッケージは見えなくなったが、古いバージョンはインストール可能
まとめ:Node.jsへの完全移行
- 長年の習慣や慣れからDenoを使い続けていたが、 Node.jsの進化 で完全移行を決断
- Denoの役目は終わり、今後はNode.js中心の開発体制へ
- 最後の一言:
- brew uninstall deno
Denoのスタンダードライブラリをv1にするのを手伝ったことがあって、チームや哲学が大好きだったんだけど、最近はなんだか彼らが徐々に忘れ去られていくのが悲しいな。レイオフの後、ロードマップもコミュニケーションもないみたいだし。彼らがどこに向かっているのかすごく気になるし、まだまだ良い方向に行ってほしいと思ってる。DenoはNodeやBunよりもずっと好きだったんだよね。