🐛

Node.jsのFirebase Storageでファイルのダウンロードに失敗する問題に対処する

2024/01/30に公開

数日ぶりにfirebaseのデプロイを行ったところ、アプリがうまく動かない事象が発生しました。
調査を進める上でFirebase Functions上でStorageからファイルをダウンロードしようとすると以下のログが表示されていることが分かりました。

TypeError: Cannot read properties of null (reading 'length')
    at getStateLength (/workspace/node_modules/stream-shift/index.js:16:28)
    at shift (/workspace/node_modules/stream-shift/index.js:6:99)
    at Duplexify._forward (/workspace/node_modules/duplexify/index.js:170:35)
    at PassThrough.onreadable (/workspace/node_modules/duplexify/index.js:136:10)
    at PassThrough.emit (node:events:518:28)
    at PassThrough.emit (node:domain:551:15)
    at emitReadable_ (node:internal/streams/readable:832:12)
    at process.processTicksAndRejections (node:internal/process/task_queues:81:21)

調べてみると似たような問題が最近発生していることが分かります。

https://stackoverflow.com/questions/77872930/google-cloud-bucket-file-download-nodejs-file-exists-but-readable-throws-erro
https://github.com/googleapis/nodejs-storage/issues/2368#issuecomment-1909718054

対処法としては stream-shift のパッケージを1.0.2に上げると解消するとのことだったので、 functions ディレクトリに入ってから npm install --save stream-shift@1.0.2 を実行し、親ディレクトリに戻ってから firebase deploy を実行すると解消しました。
Firebaseの更新でも修正が入りそうな気はしますが、しばらくはこれで凌ぎたいと思います。

Discussion