[小ネタ] スプレッドシートを活かすスプレッドシートUI 〜GASとLambdaによる自動化〜
はじめに
こんにちは!株式会社ブロードエッジ・ウェアリンク CTOの高丸です。
今回は、Qiita Advent Calendar 2024の19日目の記事です。
今回は、普段の開発の中でよく目にする風景から、どのように開発のアイディアを見出していったかというお話です。開発者の皆さんの周りでも、ビジネスサイドのメンバーがGoogleスプレッドシートで情報を管理しているという光景をよく目にするのではないでしょうか。
弊社でも同様の状況がありました。スプレッドシートは手軽で柔軟なツールですが、それをシステムとどう連携させるか、どうやって自動化していくかは常に頭を悩ませる課題でした。今回は、この課題に対してGASとLambdaを活用してどのように解決していったのか、その検討から実装までの道のりをお話ししたいと思います。
スプレッドシートによる管理
弊社ではワインECサービスを運営しており、日々の在庫管理や発注作業、また特集コンテンツで取り扱いたい商品のピックアップなど、様々な業務が発生します。これらの情報管理は商品部のメンバーが担当していますが、その中心となっているのがGoogleスプレッドシートです。Google Drive上で共有され、チームメンバー間でリアルタイムに情報を更新・共有できる環境として活用されています。
私は、あえて 「スプレッドシートUI」 と呼ぼうと思います。WindowsのExcel時代から慣れ親しんだ人も多く、直感的に扱いやすいUIであることは間違いありません。しかし、データ管理や連携という観点からは、どうでしょうか?
その他にも、例えば、大量のデータを操作しようとした際のパフォーマンスの問題があります。個人のPCスペックにも依存しますが、処理が重くなりフリーズしてしまうことがあります。
また、変更履歴は残るものの、意図しないデータの変更が気づかないうちに発生していることもありました。
さらに、よくある話ですが、マクロや関数を多用したシートでは、一部を修正しようとしても思うように手を入れられないということも多いと思います。
どう連携するか
このような課題に対して、よく登場する解決策の一つがGoogle Apps Script(GAS)です。JavaScriptベースの開発が可能で、プログラマーにとっても馴染みやすい環境です。しかし、これだけでは必ずしも十分とは言えないと私は思います。
確かに、claspを使用してGitHubでコードを管理する方法もあります。
しかし、個人的な経験から、GASのコードの品質を保つのは容易ではないと考えています。
どうしても 「自分のために書く個人的なコード」 という性質が強くなってしまうのです。
他にも、例えば、トリガーの設定に関する課題があります。
インストーラブルトリガーはコードのオーナーのみが設定できるため、そのメンバーが退職してしまった場合には処理が動かなくなってしまうリスクがあります。
じゃあ、思い切って専用の管理コンソールを作成しよう!となると、開発工数が大幅に増加し、データを扱うメンバーへの教育も必要になってしまいます。
そこで我々が選択したのは、以下のようなアプローチです:
- GASは必要最小限の役割に限定し、データ整形以外のロジックは含めない
- 整形したデータをGAS経由でS3に連携
- S3へのファイル配置をトリガーとしてLambdaを起動する
このアーキテクチャの利点として、まずS3への保存により、一時的なバックアップとして機能し、GASの実行単位で履歴確認が可能になります。
また、弊社ではLambdaの利用実績が豊富にあり、「システムのコード」として扱いやすく、管理がしやすいという点も大きなメリットでした。
実装面では、GASにボタンをトリガーとして設定することで、シンプルな「スプレッドシートUI」を維持することができました。
データ管理者は、システムへの反映が必要なタイミングで単にボタンをクリックするだけで良く、数十秒から数分後には自動的にシステムに反映される仕組みとなっています。
さいごに
この仕組みの導入により、「スプレッドシートUI」 で管理されているデータが半自動連携されるようになりました。
もちろん最終的には、管理コンソールを作成し、より充実した機能を提供することを考えていますが、
まずはリプレイスプロジェクトをしっかり終わらせることに集中したいと思います。
Discussion