LoginSignup
20
9

More than 3 years have passed since last update.

Using 1 worker with 2048MB memory limit をどうにかする

Last updated at Posted at 2020-05-23

はじめに

Vue.js や Nuxt.js で TypeScript を使って開発したプロジェクトをビルドすると、以下のような記述を見る事があります。

Using 1 worker with 2048MB memory limit

Vue.js + TypeScript のビルド時

Vue.jsビルド時-2048MB

Nuxt.js + TypeScript のビルド時

最近のバージョンではこのメッセージは見かけなくなりましたけど少し前までは出ていました。

Nuxt.JSビルド時-2048MB

これは何?

これは読んで字の如く 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 にしてみます。

vue.config.js
module.exports = {
  // ...省略
  chainWebpack: (config) => {
    config.plugin("fork-ts-checker").tap((args) => {
      args[0].memoryLimit = 512;
      return args;
    });
  },
  // ...省略
};

これでビルドしてみると、
Vue.jsビルド時-512MB

512MB に変わってますね!

上の 512 の部分を好きに変えれば良いわけですが、まあ小さすぎてもダメでしょうし、2 とか 3 とかでうまく行く気はしませんね。
プロジェクトの具合によって程良い数字を見つけて貰えればと思います。

Nuxt.js + TypeScript の場合

Nuxt.js の場合は、create-nuxt-app でプロジェクトを始めれば nuxt.config.ts と言うファイルがあるはずですので、そこに追記します。

nuxt.config.ts
export default {
  // ...省略
  typescript: {
    typeCheck: { memoryLimit: 512 },
    ignoreNotFoundWarnings: true,
  },
  // ...省略
};

これでビルドすると・・・

Nuxt.jsビルド時-512MB

こちらも 512MB の制限が有効になりました。

ビルドオプションについては Nuxt TypeScript のドキュメント にもざっくりと記載がありますが、設定できる値等細かい話はプラグイン側のドキュメントを見なさいよと言うスタンスですね。

そもそもなんでこんな事をやることになったのか

Nuxt.js + TypeScript で作ったプロジェクトを EC2 で動かそうとした時に、ビルドがいつまで経っても終わらなくて何じゃこれってなったのがきっかけでした。
で、よくよく見たらどうもこの Using 1 worker with 2048MB memory limit が怪しいぞ、と。t2.micro ってメモリ 1GB しかないのに 2GB とか要求されたらそらいつまでも終わらないわけだよ、と。
じゃあこの 2048MB をどうにかしてやらなきゃいけないけど、ググっても意外と情報転がってませんね、と。
あんまりこんな事で困る人自体がいないせいかとも思ったわけですが、日本語でこの辺に言及している記事も見当たらないので記録として書いておこうかな、と思った次第です。

この記事が同じ疑問にぶち当たった誰か(とか数ヶ月後の自分とか)の役に立てばと思います。

参考

CircleCI 上での Typescript + vue.js プロジェクトのビルドが不安定な時にやったこと

20
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
9