📑

【議事録ファイルを自動で作成! Part 1】 GASを使ってGoogle フォームからGoogle ドキュメントを作る方法

2023/01/10に公開

はじめに

なぜ作ったか

会議を始める前に「Google ドライブを開く → 議事録フォルダを開く → ドキュメントを新規作成 → Slackへ共有」の作業を毎回やるの面倒くさすぎる!!
ということで、一連の作業をGASで自動化してみました!

何ができる?

会議の種類、日付、開始時刻を入力するだけで、以下のファイルが自動で作られSlackに共有されます。


何が便利?

  • わざわざフォルダを開かなくても議事録が作れる
  • 会議の種類に応じて自動でフォルダ分けしてくれる
  • 何回目の会議なのか自動で数えてくれる
  • 曜日を確認しなくても自動で判定してくれる
  • 進行役、議事録担当を自動でローテしてくれる
  • ファイルの編集権限を自動で変更してくれる
  • Slackへの投稿を自動でやってくれる

これら全部がフォームをポチるだけでできてしまうんです!
会議のたびにいちいち議事録を作るのも、これがあればかなり楽になります!

今回扱う範囲

これら全部をやるとかなり長い記事になってしまうので、今回は

  • わざわざフォルダを開かなくても議事録が作れる

の部分だけ扱います。

そのため、ただドキュメントが作られるだけで、上にあるように議事録らしいドキュメントではありません。

後日、残りの記事もあげるので、興味がある人はフォロー、いいね お願いします🙇

記事なんか待ってらんねぇよという方は、以下のソースコード参考にしてみてください!
https://github.com/atomic928/auto_minutes_create

では、さっそく実装していきましょう!

わざわざフォルダを開かなくても議事録が作れるようにする

今回は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);
}

では、動作確認をしてみましょう!

※ もし、実行して権限周りのエラーが出ている場合はこちらをご覧ください。
https://zenn.dev/atomic/articles/831195249869ff

うまく動作すればドライブのフォルダーに、このようなドキュメントが作成されているはずです。

ドキュメント作成について、もう少し詳しく知りたい方はこちら

最終的なコード

/* フォームが回答されたら呼ばれる関数 */
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