みなさんこんにちは
エンジニアのゆうきです。
今回はGoogle スプレッドシートで社内システムの開発を行なったのでその際の知見やメリット/デメリットについて紹介していきたいと思います。
まず先に、開発したシステムの概要を紹介すると…
【開発したシステムの概要】
- A,B,C…サーバのデータを自動でスプレッドシートに集約
- スプレッドシート上でデータを整形
- 整形したデータをボタン1つでPDF出力
このようなシステムを作るとなったわけなんですが!
経緯としては複数サーバに跨って存在するデータがあり、そのデータをまとめてPDFにするという手作業が発生していたんです。
「この手作業を無くそう」ということでシステム化が提案されたんですが、
当初は1からサーバを立ててシステムを構築していこうという話に向かっていました。
ただ、それだと当然ですがそれなりに工数がかかるのでどうにか簡略化したいとなって、Google スプレッドシートでの開発を提案しました。
【Google スプレッドシートを使うメリット】
- サーバの構築工数がかからない
- 毎月のサーバ運用費用がかからない
- UIの構築が簡単
- データの変更履歴が確認できる
- Google アカウントごとに権限を設定できる
【Google スプレッドシートを使うデメリット】
- プログラムの実行制限がある
他にもあるかもしれませんが、大きいところだと以上かなと思います。
デメリットの「プログラムの実行制限がある」というところも、工夫によって回避できたので問題にはなりませんでした。
【プログラムの実行制限の回避】
実行制限の詳細についてはこちらをご覧ください。
GASには色々な実行制限があるんですが、今回苦労したのはPDF出力の部分となります。
プログラムから以下のURLを叩けばスプレッドシートをエクスポートでき
https://docs.google.com/spreadsheets/d/スプレッドシートID/export
ここに色々なオプションをつけることで望んだ形のPDFを出力できます。
GASの場合はURLを叩く際にUrlFetchApp.fetch()
を使うんですが…
連続してUrlFetchApp.fetch()を実行すると、ファイル自体は出力できるんですが中身が「サーバからの応答エラー」になっていました。
・・・(´・_・`)
なんで・・・?
色々調べてみるとどうやら「urlFetchAppを連続してリクエストしすぎると正しいレスポンスが返らない」ようです。
複数のというのは大体一度に6〜8くらいでした。
原因がわかればあとは簡単。
6回UrlFetchApp.fetch()を実行したら1分停止。
これを繰り返すことで複数のPDFを出力できます。
また、1回あたりの実行が6分以内という制限もあるため、
6分を過ぎそうな場合は一旦停止して新たにトリガーを発行して、再度PDFを出力するという処理にしてあります。
実際の画面ではありませんが、出来上がったシステムのUIとしては上記のような形になっていて非常にシンプルです。
色々と工夫することで実行制限も回避して無事社内システムを構築することができました。
まとめ
今回Google スプレッドシートを使うことで、元々の想定の半分以下の工数で開発することができ、さらにこのシステムによって運用のコストは半分以下に減らすことができました。
以前にもGoogle スプレッドシートを使ったシステム開発について記事にしていますが、ぜひこの記事を読んだ方は社内システム開発を検討してみてはいかがでしょうか?
ここまでお読みいただきありがとうございました。
また次の記事でお会いしましょう。