Google Cloud Functionsでlarge small thumbnail画像を生成する方法
今回はCloud Functionsでlarge small thumbnail画像を生成する方法を共有します。
デバッグをどうやればいいかとか、いろいろ不安があったのですが、なんとかできたので、その方法を説明します。
経緯
今回対応前の弊社サービスでは画像サイズの最適化ができておらず、小さいサイズの画像を表示する為に、大きいサイズの画像を読み込んでいた。
必要に応じて、適切なサイズの読み込みが行えるように、必要なサイズごとにリサイズした画像を生成する処理を作成することでパフォーマンスをあげることを狙った施策として、本対応を行った。
環境
弊社サービスのサーバサイドはrails、クライアントサイドはangularベースのフレームワークであるionicを利用し、画像の管理はCloud Strageで行っている。
Cloud Strageへの画像登録はionicからCloud Strageに対して直接行なっている。
Cloud Functionsを利用することのメリット
railsを経由してCloud Strageへアップロードする構成の場合だと、既存のgemを利用する方法もあるが、clientから直接アップロードで、画像がアップロードされたことをトリガーにサムネイル生成を行う必要があった為、strageのファイル追加をトリガーに起動できるCloud Functionsを利用することにした。
これにより、railsのサーバにも、clientにも負荷にならずにサムネイル生成が行える。
ポイント
- サムネイル生成処理しなくていいファイルはスキップするようにオリジナルプレフィックスの有無で管理する
_origin_ + filename.jpg - サムネイル生成によって作られたファイルを元にサムネイル生成が連鎖的に無限実行されてしまうことの対策としてサムネイルプレフィックスの有無で管理する
_thumb_ + filename.jpg
やり方
トリガーの設定
新規ファイルがアップされたことを検知して起動する
・トリガータイプをCroud Strageに指定
・バケットを指定
・イベントタイプをファイナライズ / 作成 を指定
作成したプログラムソース
デバッグについて
Cloud Functionsのデバッグはどうやれば良いか不安だったが、結局ログに吐いて中身をみるしかなさそう。
ブレークしてどんなオブジェクトになっているかを気軽に見れれば良いのだが、そうもいかない。
上記のソースには現れていないがconsole.logを多様することになった。
開発中に発生した問題
最初から懸念はしていたが、対策していた分岐のコードをミスしていて無限実行されることがあった。
実行回数はCloud Functionsの全般のタブで確認できるので、リリース後はもちろんだが、開発中でも時々チェックすることをお勧めします。
まとめ
今回Cloud Functionsを利用してみて感じたのは、最初に設定したり、やり方を覚えたりするので若干手間取ったが、一度経験すると、そういった手間取った部分はシンプルでわかりやすく、使いやすいと感じる。
新しい機能を追加する際もソースを書くことに集中できるので快適だった。
こういったサーバレスの処理を動かす仕組みは今後も増えていくと思うし、パフォーマンスを高めるための方法として、アプリサーバの処理を外出しする為に利用するのには活用の機会はたくさんありそうだと感じた。