AppSheet+スプレッドシート+Google Cloud Storageを連携して、画像付きで撮影データを閲覧できるようにした話

こんにちは、ピリカ開発チームの九鬼です。

AppSheetを使うと、スプレッドシートをデータベース代わりにしたアプリをノーコードで作成できます。AppSheetでは画像を表示することもできるのですが、設定すればGoogle Cloud Storage(GCS)上にある画像も参照することができます。

そこで、スプレッドシート+GCSに毎日データを追加し、AppSheetアプリでデータを見られる仕組みを構築してみました。

背景

タカノメにおいて、1日あたり数万を超える地点の撮影データが蓄積されています。データの閲覧用ページはあるものの、統計的な結果を見るためにカスタマイズしていました。その関係で、

  • 各画像が正しく撮影されているか
  • ごみが多い地点がどんな画像か

を地点ごとにチェックするには適していませんでした。その仕組みをつくるには数週間を要するため、すぐに対応するのは難しい状況でした。

対策を探していたところ、AppSheetで要件を満たせそうなことがわかりました。AppSheetであればUIをすぐに変更することができ、かつデータをリスト・マップ・画像付きで柔軟に確認することができるためです。そこで、AppSheetで撮影データをチェックするためのアプリを作ってみました。

以下、作成したアプリのイメージです。

システムイメージ

Cloud Functionsにて、撮影地点一覧の取得・保存を定期的に行っています。その結果をスプレッドシートないしはStorageの特定バケットに保存し、AppSheetで参照しています。

システム構築にあたって判明した点

GCS上にある画像を参照するにあたって、下記2点がネックとなっていました。特に1番目は公式ドキュメントがなかったため、AppSheetの挙動を見て実装しました。

GCSの保存場所は固定

バケット名は自由に設定可能ですが、オブジェクトの先頭は/DocId_xxx(xxxはスプレッドシートのファイルID)/にから始まる必要があります。これ以外の接頭詞はAppSheetから認識されず、画像を参照しようとしても404になります。また、ファイルIDにあるハイフンはすべてアンダースコアに置き換える必要があります。

なお、スプレッドシート上でGCSの画像パスを記載する場合、/DocId_xxx/以降のパスをセルに記載すればOKです。例えば、画像が/DocId_xxx/hoge/fuga.jpgで保存されている場合、hoge/fuga.jpgという文字列をセルに保存しておけばアクセスできます。 AppSheet上では、Dataの設定でTypeをImageとし、Table settings > Store for image and file captureでGCSへのアクセス設定を指定すれば画像が読み込み可能になります。

画像をアプリ外でアクセスできないようにする

デフォルトでは、署名付きURLで画像が配信されます。これにより、署名がない状態での画像アクセスは制限されます。ただし、画像の実態はCDNから配信されているため、デベロッパツール等でCDN上のURLを参照すれば誰でもアクセス可能です。

もし画像をよりセキュアにした場合、Security > Options > Secure Image access を入れることができます。ONにした後、最大で1日以内に反映されます。

以上になります。皆様良いお年を!

TerraformとCloud RunとCloud Load BalancingでCI/CDを突き詰めた

こんにちは。 ピリカ開発チームの伊藤です。

ピリカでは6月1日より、ピリカサポーターズクラブを開始しました。 まだご覧になっていない方はこちらをご覧ください。

corp.pirika.org

ピリカサポーターズクラブをはじめるにあたって新しいシステムを構築しました。 ピリカの開発チームのリソースは潤沢ではない中、全く新しいシステムを作るのはとても大きなチャレンジです。

社内からも「開発のリソースが潤沢でないならSNSピリカに注力すべき」という意見はありましたが、開発チームでは単に新しいシステムを作るだけではなく、この開発を「SNSピリカの開発を今後少ないリソースで効率的に進めるために必要な基盤の実験」としても位置付けていました。

この開発を通じて得たことのまとめとして、ピリカサポーターズクラブの構成やデプロイの仕組みをご紹介したいと思います。

SNSピリカの開発で抱えている問題

続きを読む

ごみ検出処理をCloud Batchに移行した話

こんにちは、ピリカ開発チームの九鬼です。

2022年にGCPでCloud Batchのプレビューがリリースされ、2023年4月には東京リージョンがサポートされました。ピリカではタカノメでごみ検出処理をCloud Runで行ってきましたが、この度Cloud Batchに移行しました。その中で得た知見を共有いたします。

続きを読む

CVATをGKE上で動かして見た話

こんにちは、ピリカ開発チームの九鬼です。

ピリカでは撮影したごみの画像に対してアノテーションし、その結果を基に解析・研究を進めることがあります。

その中でGCP上の自社サービスと連携できるアノテーションツールが必要になり、CVATをGKEに構築しました。

続きを読む

ReactでGISデータを宣言的に可視化する

GISデータをGoogle Mapで可視化するにあたって、Reactと連携しながら使いたいことがあります。 一方で、Google MapのMaps JavaScript APIでオーバーレイは命令的に実行する必要があり、差分表示などもケアしようとするとそれなりのコードを書く必要がでてきます。

@react-google-maps/apiライブラリでは、Rectangle, Circle, HeatmapLayerなどオーバレイ用のコンポーネントが提供されており、これらを使うことで宣言的に可視化を行うことができます。本記事では、具体例を交えながら使い方を紹介します。

続きを読む