はじめに
Vue.js や Nuxt.js で TypeScript を使って開発したプロジェクトをビルドすると、以下のような記述を見る事があります。
Using 1 worker with 2048MB memory limit
Vue.js + TypeScript のビルド時

Nuxt.js + TypeScript のビルド時
最近のバージョンではこのメッセージは見かけなくなりましたけど少し前までは出ていました。

これは何?
これは読んで字の如く TypeScript の型チェックを実行するのに最大こんだけのメモリを使いますぜと言っているわけですが、この 2048MB と言う数字はどこから来ているのか。
これは、この型チェックプロセスを担当する fork-ts-checker-webpack-plugin さんが初期値として持っている値です。
最近の Nuxt.js でこのメッセージが出なくなったのは、同梱されているこのプラグインのバージョンが 3.x 系から 4.x 系に変わったからであるようです。
2048MB をどうにかする
型チェックごときに貴重なメモリを 2GB もおごってやるのって剛毅すぎない?もう少しささやかな量で満足してもらえない?と言う場合、あるいは 2GB とかみみっちい事言ってるんじゃない!欲しいなら 2TB くらいくれてやるわ!と言う場合に、どこをどうすればこの数字を弄れるのかを解説します。
Vue.js + TypeScript の場合
vue.config.js
で、Webpack の設定をいじる事ができます。
以下のように chainWebpack
のところに追記してやります。(ファイルがなければ作成)
試しに制限値を 512MB
にしてみます。
module.exports = {
// ...省略
chainWebpack: (config) => {
config.plugin("fork-ts-checker").tap((args) => {
args[0].memoryLimit = 512;
return args;
});
},
// ...省略
};
512MB に変わってますね!
上の 512
の部分を好きに変えれば良いわけですが、まあ小さすぎてもダメでしょうし、2
とか 3
とかでうまく行く気はしませんね。
プロジェクトの具合によって程良い数字を見つけて貰えればと思います。
Nuxt.js + TypeScript の場合
Nuxt.js の場合は、create-nuxt-app
でプロジェクトを始めれば nuxt.config.ts
と言うファイルがあるはずですので、そこに追記します。
export default {
// ...省略
typescript: {
typeCheck: { memoryLimit: 512 },
ignoreNotFoundWarnings: true,
},
// ...省略
};
これでビルドすると・・・

こちらも 512MB の制限が有効になりました。
ビルドオプションについては Nuxt TypeScript のドキュメント にもざっくりと記載がありますが、設定できる値等細かい話はプラグイン側のドキュメントを見なさいよと言うスタンスですね。
そもそもなんでこんな事をやることになったのか
Nuxt.js + TypeScript で作ったプロジェクトを EC2 で動かそうとした時に、ビルドがいつまで経っても終わらなくて何じゃこれってなったのがきっかけでした。
で、よくよく見たらどうもこの Using 1 worker with 2048MB memory limit
が怪しいぞ、と。t2.micro ってメモリ 1GB しかないのに 2GB とか要求されたらそらいつまでも終わらないわけだよ、と。
じゃあこの 2048MB
をどうにかしてやらなきゃいけないけど、ググっても意外と情報転がってませんね、と。
あんまりこんな事で困る人自体がいないせいかとも思ったわけですが、日本語でこの辺に言及している記事も見当たらないので記録として書いておこうかな、と思った次第です。
この記事が同じ疑問にぶち当たった誰か(とか数ヶ月後の自分とか)の役に立てばと思います。