Gmailアカウントでの話。
やりたいこと
Googleフォームでの送信情報はGoogleスプレッドシートに登録することができる。
手間もなく便利なんだけど、フォーム自体の自由度が低すぎて、入れ込む項目によってはユーザー目線的に微妙だったりする。フリガナ自動入力とか、郵便番号からの住所自動入力とか。
なので、自作した送信フォームからGoogleスプレッドシートに登録する手段がほしい。
APIとGASの2つがあるらしいけど、APIは準備がめんどくさいのでGASで済ませたい。
そういう話。
やっていく
2024年3月現在、こちらの記事のコピペで済んだ。
分かってる人からすれば簡単な話なんだけど、ズブの素人には足りない情報があるので補完していく。
Googleスプレッドシートの作成
他のファイルと混ざったりしないようにフォルダ分けするとかして、Googleスプレッドシートを作成する。
ファイルの公開範囲はいじらなくていい。
作ったらurlを確認して、スプレッドシートのIDを控えておく。
https://docs.google.com/spreadsheets/d/【この部分】/edit#gid=0
GASをやっていく
数年前にアップデートが入って、GASのリンクが変わった。
上部メニュー「拡張機能」→「Apps Script」をクリック。
記事元にあるGASをコピペする。
「SPREADSHEET_ID」に、上記のURLから拾ったIDを代入する。
入力したら「デプロイ」をクリック。
デプロイは記事の公開みたいなものなので、コードを保存しただけじゃ動かない。
種類の選択から「ウェブアプリ」を選択して、次のユーザーとして実行を「自分」、アクセスできるユーザーを「全員」にする。
ウェブアプリのURLをコピーする。
警告「Google hasn’t verified this app」が出る場合
デプロイの際に「承認が必要です」的なポップアップが出て、アカウントの選択を勧めていったら「Google hasn’t verified this app」または「このアプリはGoogleで確認されていません」が出た場合。
ここを参照して、書いてあるとおりに進めると承認に漕ぎ着けられる。
とりあえず、doPost()、sendEmail()設定時に求められた。
この承認はアカウントに紐づく設定らしく、一度承認すると以降は別ファイル作成時にも出てこない。
「実行」するとエラーが出る
doPost()はpostされてはじめて動作する。
「実行」は必須過程であるpostをすっ飛ばして走らせるので、エラーが出る。
動作チェックをする場合はフォームから送信することになる。
html、phpをやっていく
記事元のコードをコピペしてinde.html、post.phpを作成。
post.php内の「$post_url」にデプロイで生成されたウェブアプリのURLを入れ込む。
「GOOGLE_APPS_SCRIPT_ID」となってるけど、文字数が多いので「https://」からまるっと差し替えた方がミスがなくて安心できる。
なお、末尾のこの2行は出力例なので貼り付けないこと。
//ダンプ結果
array(2) { ["fullname"]=> string(9) "てすと" ["furigana"]=> string(9) "テスト" }
作り込む前にサンプルを試したほうが良い
先にフォームを作り込んで、サンプルとかをカスタマイズするのが普通の流れだと思う。
だけど、動かなかった。
作り込んだ状態は要素が多すぎるんで、エラーが出ても何が原因かがめっちゃ分かりにくい。
なので、実際の環境でサンプルをそのまま動かして、ちゃんと動くことを確認してから応用に手を出したほうが良い。
Google Workspaceで作ったものが動かなかった。原因がマジでわからなかった。
V8が原因のエラーが出たりして、散らかりまくった。
よくわからない状態でエラー祭りになると混乱しか招かないので止めたほうが良い。
遠回りが最短だったりするんで、とりあえずは成功体験を得たほうが良いです。
注意:GASを編集した場合
gasを編集して保存しても、その内容は反映されていない。
編集するたびにデプロイをアーカイブし、新しいデプロイを作成し、ウェブサービスのURLを生成し直して使用する。
そうしないと、せっかく編集したのに走ってるコードは以前のままということになる。
おまけ:確認メールを仕込みたい場合
送信内容の確認のために、自動返信を仕込みたいということもある。
GAS上でメール送信をやっていくことができるけど、これは作成したGoogleアカウントが送信元になる。変更することもできるけど、Gmailに該当アカウントを追加するとかの準備が必要になる。
きっちりしてるけど、Gmailには追加できるアカウント数に上限があるのでめんどくさい。
phpを使ってるので、php上でメール送信を仕込んだほうが何かと都合がいいかなと思う。
まあ、使い方によります。
コメント