Node.js日記いろいろとつまみぐいをするような学習方法は螺旋階段のように、知識がついていって即効性はある反面、体系だった知識になりにくくって応用が利かないのがよくわかる。どこかで一度立ち止まって、基礎を学んだほうがいいなーと思う今日この頃。本題サーバーレスの流れに乗っかって、画像とかデータとかをFirebaseのFireStogageだったりRealtimeDatabaseにデータをつっこんでたりしている。FireStorageにあげた画像のサイズがおもいのほかでかくって、もっと軽くして保存しておきたい。いろいろな方法がありそうなんだけれども、せっかくなのでCloudFunctionsをつかってみる。CloudFunctionsはNode.jsで書いたコードを実行してくれるサービスでAPIとして利用できる。コードが実行されるタイミングは通常のAPIのようにHTTPリクエストがあったらレスポンスをするものだったり、FIrebaseのほかのサービスの何かの処理をトリガーにして動かしたりといろいろなことができるみたい。Storageにpng画像をあげると、jepegに変換してくれるというサンプルを実行してみる。したか描いておきたかったのに、時間が空きすぎて何したかあんま覚えていないけれども、こんなことをしたはず。Platformのアカウントを用意しておくプロジェクトをつくっておくCloudFuntionsを有効しておくサンプルコードfirebaseのサンプルが以下のリポジトリにいっぱいある。こちらのconvert-imageを試して見る。https://github.com/firebase/functions-samples.gitCloudFunctionsで動かすコードをデプロイするにはfirebaseのCLIツールであるfirebase-toolsが必要みたいなのでインストールする。firebase-toolsインストールしたら、サンプルコードのディレクトリに移動。functions-samples/convert-images/中身は、こんな感じ。package.jsonfirebase.jsonが気になったけれども、中身を見ると{}だけが記載されており空っぽ。deployを実行してみる。loginログインしてとのことなので、まずはログインする。xxxxxxxxxxxGoogle認証画面がブラウザで表示され、ぽちぽちしたことでログインできた。installでpakage.jsonに書かれているパッケージたちをインストールしておく必要があるみたい。Funcution側で依存解決するのかなと思ってたので意外。installパッケージをインストールしたら、再度デプロイしてみる。complete!なんだかデプロイできたみたい。過去にブラウザからぽちっと3つほどfirebaseのプロジェクトを作ってたんだけど、そのうちの一つにデプロイされたみたい。デフォルトのプロジェクトみたいな設定をした記憶がちょっとないんだけれども、どうなっているんだろう。initみたいなコマンドをたたくことで、そのディレクトリに紐づくプロジェクトとかを設定するんだと思う。ブラウザでコンソールにログインして、対象のプロジェクトのFunctionsをみてみるとなんかできていることが確認できた。Functionsの画面さっそく、該当のプロジェクトのStorageにpng画像をあげてみた。うまくいけば、jpegに変換されるはず。CloudStorageにアップロードどれくらいかかるのかなーとしばらく(5ふんぐらい)待つもjpeg画像ができる気配がない。(ブラウザのリロードを忘れずに。definedというエラーメッセージを吐いていた。公式のチュートリアルを参考に、以下のコードを追加して、再度デプロイすることに。require('fs');デプロイ後に再度画像をあげなおすと、無事、jpeg画像が生成されていることが確認できた。