ポンコツエンジニアのごじゃっぺ開発日記。

いろいろポンコツだけど、気にするな。プログラム&ロボット大好きなポンコツが日々の記録を残していきます。 自動で収入を得られるサービスやシステムを作ることが目標!!

Node.jsでGCSのファイルを処理してみた。

GCPのGoogle Cloud Storage(以下、GCS)に存在するファイル(例えばテキストファイル)をNode.jsを使って読み込んでみたかったのですが、ウェブ上ではあまり記事が存在しなかったので、こちらの記事で紹介したいと思います。

CLIでの確認

最初にコマンドライン上でファイルが開けるかを確認しておきます。 今回は仮でプロジェクトIDをproject-id、バケット名をbucket-name、ファイル名をhello.txtとしています。

gcloudコマンドが使えるようにしておけば、gsutilコマンドも使えるようになるかと思います。

gsutil cat gs://bucket-name/hello.txt
Hello World.

このように、ハローワールドが書かれたテキストファイルをアップしたことにします。

Node.jsから確認

それではこの記事でのメインの話です。

以下のドキュメントを参考にしました。

cloud.google.com

ファイルを開くために、downloadメソッドを用います。

const {Storage} = require('@google-cloud/storage');

const storage = new Storage({
    projectId: 'project-id',
    keyFilename: 'key-file.json'
});
const bucketName = 'bucket-name';

const textEncoding = require('text-encoding');
const TextDecoder = textEncoding.TextDecoder;

const main = async(fileName, callback) => {
    await storage
        .bucket(bucketName)
        .file(fileName)
        .download()
        .then(function(data) {
            var contents = data[0];
            var textDecoder = new TextDecoder("sjis");
            var str = textDecoder.decode(Uint8Array.from(contents).buffer);
            callback(str)
        });
}

main('hello.txt', function(str) {
    console.log(str)
});

そして、パッケージをインストールしてあげます。

$ npm install @google-cloud/storage
$ npm install text-encoding

この時、サービスアカウントで発行されたjsonファイルのkey-file.jsonをapp.jsと同じ階層に配置してあげます。 また、このスクリプトでは文字コードをsjisとしていますが、ここをutf-8とかに変更することが可能になっています。

$ node app.js
Hello World.

そして、実行すると無事ファイルの中身を出力してくれました。

もちろん改行したファイルも読み込めるので、あとはこの文字列を処理させてあげればなんでもできそうですね!