
やっとこのブログを整理した。正直、この技術的負債はずっと溜まってて、見るたびに「次やろう」って言ってたけど、結局何ヶ月も経っちゃった... 本当に先延ばし癖がひどい 😅
きっかけ:警告を見てイライラ
ある日、なんとなく pnpm audit を実行したら、画面に 43個のセキュリティ脆弱性 が表示された。そのうち18個はHigh レベル。もう気分最悪 QQ
ほとんどが間接依存関係の問題だってわかってるけど、あの赤い文字の羅列を見ると、やっぱりモヤモヤする。
他にも、とっくに対処すべきだった問題がいくつかあった:
- 機密情報が丸見え - PostHog Key、Gitalk Secret がそのまま config に書いてあった、やばい
- nuxt.config.ts が肥大化 - なんと235行!何か探すたびにスクロールが大変
- ファイル名のタイポ -
error-handler.ts.ts、そう、.tsが2つ。当時何考えてたんだろう 🤦
技術的負債はクレジットカードの借金と同じ、放置すればするほど利息が増える...
よし、返済しよう
今回のリファクタリングは主に3つのパートに分かれた:
1. まずパッケージをアップグレード
まず古い依存関係を更新:
| パッケージ | 前 | 後 |
|---|---|---|
| Vue | 3.5.16 | 3.5.28 |
| @nuxt/image | 1.10.0 | 2.0.0 |
| @antfu/eslint-config | 4.14.1 | 7.4.2 |
| posthog-js | 1.210.2 | 1.345.2 |
アップグレード中に一つハマった:shadcn-docs-nuxt を 1.1.9 にしたらビルドが爆発した。調べたら今の Nuxt 3 との互換性問題だった。仕方なく 1.0.2 に戻した。
アップグレード後、脆弱性は43個から35個に減った。完璧じゃないけど、だいぶマシになった。
2. 機密情報を環境変数に移動
GA、PostHog、Gitalk などの API Key を全部 .env に移して、Nuxt の runtimeConfig で読み込むようにした。これで機密情報はコミットされないし、環境ごとに設定を変えられる。基本中の基本なのに、ずっとやってなかった 🙈
3. 肥大化した config を分割
235行の nuxt.config.ts を見るのが嫌になったので、分割することにした:
分割後、メインファイルは約100行に。すっきり。
ついでに直した細かいこと
整理してるついでに、他の小さな問題も片付けた:
- lint と typecheck スクリプトを追加 - 今までなかったなんて、どうりでコードがぐちゃぐちゃだったわけだ
- ESLint が Markdown を無視するように - じゃないと偽警告だらけになる
- 522個の lint エラーを自動修正 -
--fix一発で解決、もっと早くやればよかった
整理後の感想
半日くらいかかったけど、本当にやってよかった:
成果:
- セキュリティ脆弱性が19%減少
- コード構造がずっとクリアに
- やっと自動チェックができた
気持ち:
- もうあの赤い警告を見なくて済む
- このプロジェクトに自信が持てるようになった
正直、もっと早くやるべきだった。でも人間って「緊急」なことを優先して、「重要だけど緊急じゃない」ことは後回しにしがち。今回の経験で実感した:技術的負債は定期的に返済しないとダメ。
未来の自分へのメモ
最後に自分(とあなた)へのリマインダー:
- 毎月
pnpm auditを実行 - 問題が山積みになる前に - 機密情報は必ず環境変数で - これは譲れない
- Config が150行超えたら分割 - じゃないとメンテが地獄
--fixを活用 - 多くの問題は一発で解決できる
技術的負債は怖くない。見て見ぬふりをするのが怖い。
今回の整理はここまで。もしあなたのプロジェクトにも似たような問題があるなら、週末に時間を取って片付けてみて。整理後のスッキリ感、本当に最高だから ✨
質問があればコメントでどうぞ~

