# GAS を利用した web アプリ
## 事例(某社案件)
### 要件
以下のフローを自動化したい。
- 営業担当者がお客様の情報を取得
- マーケティング担当者が Excel シートに入力
- 計算式が組んである
- Excel シートの分析結果を PowerPoint に転記
- 数値
- 図形(サイズ調整)
- チャート
- PowerPoint 資料をお客様に提出
追加の仕様。
- 結果を PDF で出力したい
- 履歴を CSV で取得したい
### GAS を利用したアプローチ
- Excel シートを Google Spreadseet 化
- 計算式をそのまま利用
- PowerPoint 資料を Google Slide 化
- 実装
- web フォーム
- HTML + CSS + JS
- テンプレート
- Spreadsheet
- Slide
- データを埋め込むべき場所に目標の文字列を入れておく
- script
- フロー
- テンプレート (Spreadsheet, Slide) をコピー
- web フォームから Spreadsheet にデータ入力
- Spreadsheet の計算結果を Slide に挿入
- 数値
- 目標の文字列を計算結果で置換
- 図形
- 計算結果に応じてサイズ調整
- チャート
- 目標の文字列が入った図形を置換
- GAS で web アプリを公開
## Pros / Cons
### Pros
- 追加費用なしで web アプリを公開できる
- 自前サーバー不要
- 非エンジニアがロジックを作成できる
- Excel や Spreadsheet で計算式を組む
- ビジネスレイヤーの人
- 結果のスライドの実装コストが低い
- HTML + CSS での実装が不要
- そのままエンドユーザーに渡せる
- 非エンジニアが用意できる
- クライアントの既存の Excel や Spreadsheet を利用可能
- Google Slide から各種フォーマットで出力可能
### Cons
- コードを書きにくい
- 複数人で同時編集できない
- バージョン管理が難しい
- Spreadsheet のデザインの制約
- PowerPoint よりも表現力が低い
- 利用できるフォントなど
- 処理時間がかかる
- ファイルのコピー
- チャートの埋め込み
- 権限まわりの制約
- クライアントへの納品に共有ドライブが必要
- ドメインをまたがってオーナー変更できない
- クライアント側で公開したアプリへのアクセス制限
- コードの実行は可能
- web アプリの実行に制限
- Google アカウントを持つすべての人への公開が必要
## ベストプラクティス
### 実装
- スクリプトにドメインロジックを実装しない
- すべて Spreadsheet で済ませる
- スクリプトは値の受け渡しのみを担当
- 👉 ライブラリ化できそう
- web フォームにプログレスバーなどを用意
- 固まっているように見えるのを回避
### ユースケース
- ユーザーが web フォームでデータ入力後、結果の資料を取得できる web アプリ
- 営業やマーケ担当者が Spreadsheet と Slide を作成
- デザイナー
- web フォームのデザイン
- コーダー
- web フォームのコーディング
- エンジニア(でなくても可、簡単な js を扱えれば OK)
- Slide に目標となる文字列を配置
- 受け渡しロジックの実装