matsutoba’s blog

フロントエンドエンジニアをしています

macのターミナルが重い

macOS15にアップデートしてから標準のターミナルが重くて、文字の入力も遅すぎる状態になった。

ネットで検索するとキャッシュを消す方法が出てきたので試してみたが直らず。

ターミナルの設定かと思ったので、いろいろ見ていると、アップデートする前にターミナルでShiftJISコードの文字を表示させたくて、テキストエンコーディングの設定をShiftJISにしていたことを発見。

これをUTF-8に戻してみたらターミナルが軽くなった。

アップデートとは関係ないかもしれないが、備忘録として残しておく。

Axiosを使ってファイルダウンロードをするときはresponseType:'blob'の指定が必要

Axiosを使ってファイルのダウンロードをするとき

axios.get(downloadUrl)

と記述すると、ダウンロードしたファイルが意図したものにならない場合がある。

例:shift_jisのファイルをダウンロードしていて、サーバからもshift_jisコードのデータが来ていることが確認できているが、ローカルに保存されたファイルを開いてみると、shift_jisで開けない。

デフォルトが responseType: 'json' になっている

axiosのコードを見ると、responseTypeのデフォルト値が json になっているので、ダウンロードしたいファイルのタイプに合わせて設定を変更する必要がある。

  // `responseType` indicates the type of data that the server will respond with
  // options are: 'arraybuffer', 'document', 'json', 'text', 'stream'
  //   browser only: 'blob'
  responseType: 'json', // default

ブラウザからダウンロードする場合は、

axios.get(downloadUrl),
null,  // パラメータが不要ならnull
{ responseType: 'blob' }

の設定が必要。

axios.request() を使えば、responseTypeの指定以外のパラメータも細く設定できるようなので、汎用性が高そう。

JavaScript heap out of memory

eslintを実行したところ、このようなJavaScriptのエラーが表示されました。

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory

Node.jsが使用可能なメモリ上限を超えたようなので、ヒープメモリサイズを増やす必要がありました。

現在のヒープサイズの上限を確認してみると、2048MBでした。

# node -e 'console.log(v8.getHeapStatistics().heap_size_limit/1024/1024)'
# 2048

これではメモリ不足のようなので、ヒープサイズを大きくします。 毎回設定するのが面倒なので、.zhsrcに設定しておきます。

# vi ~/.zshrc
で、ファイルを開いて
export NODE_OPTIONS=--max-old-space-size=4096
を追加

これでeslintを再実行するとエラーが出なくなりました。