【議事録ファイルを自動で作成! Part 1】 GASを使ってGoogle フォームからGoogle ドキュメントを作る方法
はじめに
なぜ作ったか
会議を始める前に「Google ドライブを開く → 議事録フォルダを開く → ドキュメントを新規作成 → Slackへ共有」の作業を毎回やるの面倒くさすぎる!!
ということで、一連の作業をGASで自動化してみました!
何ができる?
会議の種類、日付、開始時刻を入力するだけで、以下のファイルが自動で作られSlackに共有されます。
何が便利?
- わざわざフォルダを開かなくても議事録が作れる
- 会議の種類に応じて自動でフォルダ分けしてくれる
- 何回目の会議なのか自動で数えてくれる
- 曜日を確認しなくても自動で判定してくれる
- 進行役、議事録担当を自動でローテしてくれる
- ファイルの編集権限を自動で変更してくれる
- Slackへの投稿を自動でやってくれる
これら全部がフォームをポチるだけでできてしまうんです!
会議のたびにいちいち議事録を作るのも、これがあればかなり楽になります!
今回扱う範囲
これら全部をやるとかなり長い記事になってしまうので、今回は
- わざわざフォルダを開かなくても議事録が作れる
の部分だけ扱います。
そのため、ただドキュメントが作られるだけで、上にあるように議事録らしいドキュメントではありません。
後日、残りの記事もあげるので、興味がある人はフォロー、いいね お願いします🙇
記事なんか待ってらんねぇよという方は、以下のソースコード参考にしてみてください!
では、さっそく実装していきましょう!
わざわざフォルダを開かなくても議事録が作れるようにする
今回はGoogle フォームからドキュメントを作成することで、フォルダを開かずに議事録を作成していこうと思います!
Googleフォームとリンクしたスプレッドシート、スクリプトの作成
まずは、Google フォームとスプレッドシートを作成します。
Google フォームはドライブから新規作成します。
スプレッドシートは作成したGoogle フォームの回答タブにあるスプレッドシートのボタンから作成します。
ボタンを押すとポップアップが出てくるので、新規作成で作成します。
作成したスプレッドシートの拡張機能 > Apps Scriptからスクリプトを作成します。
フォームから送信されたデータの取得
作成したスクリプトに以下のコードを書きます。
function receiveFormData(e) {
Logger.log(JSON.stringify(e));
}
コードを書いたら上の保存ボタンをクリック(Ctrl + s)します。
次に、フォームが回答されたら、receveFormData関数が呼び出されるように、トリガーを設定します。
エディタの左側にある時計ボタンをクリックし、右下にある「トリガーを追加」ボタンをクリックします。
すると、このようなダイアログが表示されるので、イベントの種類を「フォーム送信時」に変更し、保存します。
保存を押すと、アカウント承認のポップアップが出てくると思います。
まず、Google Apps Scriptを使用するアカウントを選択してください。
次に、このような警告文が出てくるので「Advanced」をクリックし、「Go to プロジェクト名 (unsafe)」をクリックします。
するとアクセスリクエストが表示されるので、右下の「Allow」を押して許可をします。
これで、トリガーを作ることができました〜
以下のようにトリガーが表示されると思います。
これで、フォームを送信すると、最初に作った関数receiveFormDataが動くようになっているはずです。
実際に動作するか試してみましょう!
最初に作ったフォームに移動し、上のプレビューボタンを押します。
すると、回答ページに移るので、回答を送信してみましょう!
Google フォームに回答を送信したら、プロジェクトの左のタブから「実行数」の画面に移動します。
トリガーがちゃんと起動している場合、以下のようにjson形式で回答の内容がlogとして出力されます。
データの抽出
これで、回答を受け取ることはできましたが、このままのデータでは使うことができません。
フォームの質問に対しての回答だけ欲しいので、以下のようにコードを書いて抽出します。
var answer1 = e.namedValues["無題の質問"][0];
これも、logを出力して抽出できているか確かめてみましょう。
Logger.log(answer1);
ログのコードを書いて、保存してから、フォームを送ってみてください。
うまくいけば、以下のように "無題の質問" に対しての回答が出力されるはずです。
フォームが送信されたらドキュメントを作成する
ここまでで、フォームの送信、送信されたデータの参照ができました。
ここからは、いよいよドキュメントの作成に移ります。
コードエディタに戻り、コードを作成していきます。
新たに、議事録作成用の関数を作ります。
/* 議事録を作成する関数 */
function createMinute(answer1) {
}
まずは、議事録ファイルを作っていきます。
/* 議事録を作成する関数 */
function createMinute(answer1) {
// 議事録ファイルの作成
var fileName = answer1;
var minutes = DocumentApp.create(fileName);
var fileId = minutes.getId();
var body = minutes.getBody();
body.appendParagraph(answer1);
var file = DriveApp.getFileById(fileId);
}
次に、作ったファイルをフォルダーに追加します。
// ファイルを作成するフォルダーのアドレス
var folder = DriveApp.getFolderById("18SrAAvFXocLbPZSVKBw3n2XuNrht0eod");
//フォルダーにファイルを追加
folder.addFile(file);
このフォルダーのアドレスは、自分のドライブのアドレスの/folders/以下のアドレスです。
私の場合、フォルダーのアドレスが以下のようなアドレスでした。
https://drive.google.com/drive/u/0/folders/18SrAAvFXocLbPZSVKBw3n2XuNrht0eod
よって、folders/以下の "18SrAAvFXocLbPZSVKBw3n2XuNrht0eod" をgetFolderByIdに入れます。
これで、完成した関数は以下のようになります。
/* 議事録を作成する関数 */
function createMinute(answer1) {
// 議事録ファイルの作成
var fileName = answer1;
var minutes = DocumentApp.create(fileName);
var fileId = minutes.getId();
var body = minutes.getBody();
body.appendParagraph(answer1);
var file = DriveApp.getFileById(fileId);
// ファイルを作成するフォルダーのアドレス
var folder = DriveApp.getFolderById("18SrAAvFXocLbPZSVKBw3n2XuNrht0eod");
//フォルダーにファイルを追加
folder.addFile(file);
}
この関数をreceiveFormDataで呼び出して使います。
function receiveFormData(e) {
var answer1 = e.namedValues["無題の質問"][0];
createMinute(answer1);
}
では、動作確認をしてみましょう!
※ もし、実行して権限周りのエラーが出ている場合はこちらをご覧ください。
うまく動作すればドライブのフォルダーに、このようなドキュメントが作成されているはずです。
最終的なコード
/* フォームが回答されたら呼ばれる関数 */
function receiveFormData(e) {
var answer1 = e.namedValues["無題の質問"][0];
createMinute(answer1);
}
/* 議事録を作成する関数 */
function createMinute(answer1) {
// 議事録ファイルの作成
var fileName = answer1;
var minutes = DocumentApp.create(fileName);
var fileId = minutes.getId();
var body = minutes.getBody();
body.appendParagraph(answer1);
var file = DriveApp.getFileById(fileId);
// ファイルを作成するフォルダーのアドレス
var folder = DriveApp.getFolderById("18SrAAvFXocLbPZSVKBw3n2XuNrht0eod");
//フォルダーにファイルを追加
folder.addFile(file);
}
おわりに
今回はGoogleフォームからGoogleドキュメントを作る方法を紹介しました。
- 会議の種類に応じて自動でフォルダ分けしてくれる
- 何回目の会議なのか自動で数えてくれる
- 曜日を確認しなくても自動で判定してくれる
- 進行役、議事録担当を自動でローテしてくれる
- ファイルの編集権限を自動で変更してくれる
- Slackへの投稿を自動でやってくれる
最初に言った通り、これらについての記事は、後日書くつもりなので、興味がある方はフォローやいいねしてお待ち頂けると嬉しいです!
Discussion