10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GASでGoogleドキュメント自動作成&メールで通知するbotを作った

Last updated at Posted at 2018-12-04

背景

私の研究室では、毎週ミーティングがあり各々が1つのGoogleドキュメントに進捗報告を書いていきます。
毎週新たにドキュメントを作成&共有URLを取得し、それをメールで流す作業があるのですが、
毎回忘れてしまい、そして面倒なので自動化しました。

前提

  • Google Driveで共有フォルダを作成している
  • 共有フォルダにテンプレートのドキュメントを作ってある

以上を前提に進めます。

目標

以下の手順で行っている作業を自動化します。

  1. 日付をタイトルにしたドキュメントを作成
  2. URLを取得
  3. メール送信

手順

初期準備

  • Google拡張機能でGoogleAppsScriptを追加
  • 共有フォルダIDを取得
    共有フォルダのURLの一番後ろの塊です。
    https://drive.google.com/drive/u/0/folders/<ここ>
    • コードのtargetFolderIdになります
  • テンプレートドキュメントのIDを取得
    URLの後ろの部分です。
    https://docs.google.com/document/d/<ここ>/edit
    • コードのfileIdになります

スクリプト作成

  • GoogleDriveの新規その他Google Apps Scriptから新規スクリプトを作成
  • コードを書く(JavaScript)
  • エディター上から実行できます
    • 左上側の関数を選択で実行する関数を選択してからその2つ左の実行▲ボタン

コード


// 共有フォルダのID
var targetFolderId = '<共有フォルダのID>'

/**
* copy docs
*/
function createCopy() {

  //コピー元となるドキュメントファイルのIDを取得
  var fileId = '<テンプレートドキュメントのID>'

  //ファイル名の日付部分作成
  var date = new Date();
  date.setDate(date.getDate() + 1); // 火曜に作成して日付は水曜にするので1日ずらす
  var formattedDate = Utilities.formatDate(date, "JST", "yyyy/MM/dd");

  //コピー元のファイルを開く
  var file = DriveApp.getFileById(fileId);
  
  //コピーを作成。作成したコピーを参照。
  var newFile = file.makeCopy(formattedDate);
  return newFile;
}

/**
* send a mail to member
* こっちを実行する。本番はsendEmailの引数がtoになっていることを確認。
*/
function sendMail() {
  
  // 複数宛先
  var to = ['hogehoge@gmail.com',
            'fugafuga@gmail.com'];
  // 件名
  var subject = '件名'
  // 本文
  var body = '本文'
  
  // 新規作成ファイルのID
  var newFileId = createCopy().getId(); //ここでコピーが生成されるのでsenMail関数のみ実行すればよい
  // docsのリンク
  var link = 'https://docs.google.com/document/d/'+newFileId
  
  //メール本文の最後に作成されたドキュメントのURLを足してメール送信
  MailApp.sendEmail(to, subject, body+link);  
  
}

実行スケジュール設定

  • 編集現在のプロジェクトのトリガーへ行き、トリガーを追加する
  • 実行したい関数と実行スケジュールを選択
    今回は毎週火曜の午前中に実行したいので、
    • イベントのソースを選択:時間主導型
    • 時間ベースのトリガーのタイプを選択:週ベースタイマー
    • 曜日を選択:毎週火曜日
    • 時刻を選択:午前10時~11時

参考にしたサイト

10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?