GoogleSpreadSheet+GoogleAppsScriptで簡単な管理画面代わりのものが作れをますよ、そして便利でしたよっていうお話。
たいした話じゃないけど、もし同じような悩みを持ってる人がいれば参考にしてください。
何に困っていたか?
- たまに修正が入るようなエクセルで管理された情報を画面に表示させたい。
- その修正がある度に、該当の部署から更新依頼。
- 量的にはDBにテーブルを作る程ではない、でも毎回手動で書き換えるとちょっとだけ面倒。
- 手動で書き換えるとたまにエラーになることも。(更新作業のミス)
- かと言ってやっぱりテーブルは作りたくない。(たまにカラムの変更もあるし)
どういう運用をしていたか?
- 定期的にCSVをアップロードしてもらってそれを表示
- もしくはDBにテーブルを作って、管理画面も作ってそこから更新
どういう方向性で解決したかったか?
- ミス+時間ロスに繋がるので手動で修正自体のフローをやめる
- 部署間のやり取りを減らすために極力該当部署が直接編集できるようにする
- DBにテーブルは作らない。
- 極力管理画面とか作らない。
どう解決したか?
- GoogleSpreadSheetの情報をJSON形式で返してきて、それを画面上に表示させる。
例えば以下のようなGoogleSSを作っておき、ログインしてるユーザ毎に該当するIDの行があればそのタイトルと内容をJSONで返して表示してあげる、みたいなイメージです。
id | title | content |
---|---|---|
1 | 今日の天気 | 今日は晴れです |
2 | 今日の運勢 | 今日は大吉です |
3 | 今日の天気 | 今日は大雨が降るので傘を忘れずに |
4 | ラッキーカラー | 青があなたの運命を変えるかも |
5 | ラッキーアイテム | 今日は漫画を持ち歩くと運勢UP |
ソースコード
GoogleAppsScript
今回のメインとなる部分ですが、ググったらこの方のブログで全部事足りました。
ブックのURLとシート名を自分の情報と合わせればコピペで動きました。
なのでコードは割愛させて頂きます。
サーバーサイド
GASは便利ですがレスポンスが遅かったり、仮に落ちたり(Googleなのであまりないとは思うが)した場合にこちらでは何も出来なくなってしまいます。
なので僕は今回は日次でサーバー側に一度キャッシュさせておき、それを画面上に表示するという方法にしました。といってもたいしたことはしてませんが参考までに。
def user_data_cache
con_result = open("GASで動かしてるWebアプリのアドレス")
raise HTTPStatusError unless con_result.status[0] == '200'
result_json = con_result.read
Rails.cache.write("key", result_json)
end
最後に
割と便利です。
スプレッドシートで管理してるデータは少なくないので、他にも色々生かせそうな気がしています。