ROBOT PAYMENT TECH-BLOG

株式会社ROBOT PAYMENTのテックブログです

Google Apps Script(GAS)でアジェンダ作成

こんにちは。決済システムでエンジニアをやっております hoshino33 です。 突然ですが皆さん朝会はどのように行っていますか? 決済システムでは、前日やったことや本日やることの報告などを行っているのですが、その際にGoogle ドキュメントに内容を記載しております。 今回はこのアジェンダ作成の自動化をGASで行ってみたいと思います。

はじめに

決済システムの朝会の自動化しない手順について考えると、毎日コピー&ペーストして、日付を変える必要が出てきます。 今回はこれをボタンひとつで行いたいと思います。 なお、朝会用のアジェンダは日単位で新規作成を行わず、過去の内容をすぐ見られるように追記するような運用になっております。

自動化方法

①テンプレートのドキュメントの作成

内容は何でもいいですが以下のようにしておきます。 ここで重要なのは以下のXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXの部分です

https://docs.google.com/document/d/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/edit

②テンプレートを反映するドキュメントの作成

内容は何でもいいですが以下のようにしておきます。

③GASでスクリプトの作成

②で作成したドキュメントで「機能拡張」>「Apps Script」を選択し以下を貼り付けて保存します。

/*
 * テンプレートをアジェンダに反映
 */
function insertMorningMeetingAgenda() {
  // ①で作成したID(https://docs.google.com/document/d/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/edit)
  const fileId = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
  const templateDocument = DocumentApp.openById(fileId);

  // アジェンダにコピー
  let insertRowNumber = 1;
  let document = DocumentApp.getActiveDocument();
  templateDocument.getBody().getParagraphs().forEach(paragraph => {
    let para = paragraph.copy();
    if (insertRowNumber == 1) {
      const title = para.getText().replace("{date}", getDate());
      document.insertParagraph(insertRowNumber++, title).setAttributes(para.getAttributes()).setFontSize(13).setBold(true);
    } else if (para.getType() === DocumentApp.ElementType.LIST_ITEM) {
      document.insertListItem(insertRowNumber++, para.getText()).setGlyphType(DocumentApp.GlyphType.BULLET).setAttributes(para.getAttributes());
    } else {
      document.insertParagraph(insertRowNumber++, para.getText()).setAttributes(para.getAttributes());
    }
  });
  
  // 区切り線
  document.insertHorizontalRule(insertRowNumber++);
}

/*
 * 日付を取得
 */
function getDate(addDays = 1) {
  let now = new Date();
  now.setDate(now.getDate() + addDays);  
  return Utilities.formatDate(now, 'Asia/Tokyo', 'YYYY-MM-dd');
}

/*
 * ファイルを開いたときのイベントハンドラ
 */
function onOpen() {
  let ui = DocumentApp.getUi();
  let menu = ui.createMenu('アジェンダ');
  menu.addItem('朝会', 'insertMorningMeetingAgenda');
  menu.addToUi();
}

既存のGoogle Apps Scriptプロジェクトのコードを Git で管理!という記事があるのでこちらも合わせるとコード管理もできますね。

④実行

②のドキュメントを確認すると登録した「アジェンダ」>「朝会」というのがメニューに表示されていると思うので実行します。 ※初回時はGoogleの認証確認が表示されると思うのでOKしてください。

課題点

支障はないのですが実行すると以下の現象が発生する時としない時があったりします。詳しい方教えてください! ・テンプレートにリンクを記載した場合にリンクが貼られているが見た目上貼られていない表示になる場合がある ・段落のフォーマットが変わる場合がある

まとめ

たったこれだけで今まで毎日手動で行っていた煩わしい作業を無事に自動化することができました。 手動でやった場合60秒かかっていたとして、1秒に縮めることができました。 毎日行う手順のある作業はどんどん自動化を進めて効率化をしましょう! 次回はさらなる効率化を目指したいと思います。



We are hiring!!

ROBOT PAYMENTでは一緒に働く仲間を募集しています!!!

speakerdeck.com
www.robotpayment.co.jp