🍣

日報作成をカスタムGemとGASで効率化する

に公開

日報は毎日行う作業になるので効率化を進めたい。日報とは概ね行ったこと、それに対しての意見の付与だと考えている。
意見の付与はAIにはできないし、自分の考えを表明するいい機会だが、行ったことについては自動化できる余地がある。
理想をいえば、下書きに意見をどんどん付け足していけるのがいいと思う。そんな日報作成フローを目指す。

全体の流れ

  1. Googleカレンダーの予定がスプレッドシート「日報用」に自動転記されるようにする(GAS)
  2. gemでその日報用を読み取って日報下書きを作成するようにする

https://support.google.com/gemini/answer/15235603?hl=ja

GAS

シートはこんな感じ

なお、そもそもGoogleカレンダーにタスクの予定があるのは、以下の仕組みも使っているため。
https://zenn.dev/nag8/articles/b07427f582ba10

main.js
function main(){
  const eventList = CalendarApp.getDefaultCalendar().getEventsForDay(new Date()).reduce((eventList, event) => {
    const e = new Event(event);
    if (e.isTarget()) eventList.push(e);
    return eventList;
  }, []);

  // シートを更新
  Shomin.refreshSheet(
    SHEET.todayEvent.name,
    eventList.map(e => e.getOutList())
  );
}
class/Event.js
class Event {
  constructor(event) {
    this.title = event.getTitle();
    // Notion→Googleカレンダーには半自動的に入っているが、IDやissueという文言があるのでその12文字分を削っている。
    if(this.title.includes('issue')) this.title = this.title.slice(12);

    // 全日の予定はいらないと思って排除する。ここは後々仕様を変えるかも。
    this.allFlg = event.isAllDayEvent();
  }

  getTitle(){
    return this.title;
  }

  // 昼休みはカレンダーから除外する。実際の処理は他にも定常mtgをここで除外している。
  isTarget(){
    return !this.allFlg
    && ![
      '昼'
    ].some(text => this.title.includes(text));
  }

  getOutList() {

    return [
      this.title
    ];
  }
}
sheet.js
const SHEET = {
  todayEvent: {
    name: '今日の予定',
  }
};

カスタムgem

# 前提
あなたは経験豊富な情シスです。日報を提出してください。

# 流れ
質問で「きょう」ともらったら、以下フォーマットで日報案を作成してください。

# フォーマット
- 今期の目標
- 今期の目標達成のために今週やり切ること
- 本日の業務報告
  - 勤務場所:出社 / リモート
- 目標達成に向けてリスクがあれば報告、相談

# 気をつけること
- 「今期の目標」と「今期の目標達成のために今週やり切ること」についてはspreadsheet『日報用』の「目標」シートから情報を取得して、文字すべてが記載内容と一致する必要があります。
- 勤務場所についてはGoogleカレンダーの勤務場所を参照してください
- 本日の業務報告についてはspreadsheet『日報用』の「今日の予定」シートから取得して、文字すべてが記載内容と一致する必要があります。

結果

何度か試行錯誤して、目標や業務報告についてAIが勝手に答えをつくらないようにできたと考えている。
こう考えると、前述した「意見の付与」と同じように、AIが動いてほしくない場所はプログラムで実装し、AIが動いてほしい場所にAIを入れたほうがいいと思う。
今回は日報だったけど、これがメンタルチェックやキャリア相談になるかもしれない。

Discussion