モチベーション維持のために作りました。
TL; DR;
- コードはここに
- https://github.com/yumechi/gas-mail-check
- GAS で Gmail を Filter して検索、一定の条件でさらに Filter しつつ、Discord に投稿する
- Confluence で WebHook するのは Slack の場合は簡単にできそうだったが、それ以外だと厳しかったので、この方法にした
- API 経由でやる方法を知りたいような気はするが、今は後回し
できたもの
隠したほうがいいあれをしょりした。
やったこと
- GAS で Gmail を検索する
- 検索したメールから情報を取り出す
- この検索メソッドから得られるのはメール本体じゃなく、スレッド
- なのでスレッドからさらにメールを取り出す
- なぜと思ったけど、表示みたら自然な気がしてきた
- 重複チェックをする
- WebHook に投げる
- 投げてるのは日付、変更ページ(メールタイトルから推測)、編集者(送信者から推測)
- 日付は
Utilities.formatDate(date, "JST", formatString);
すると楽にフォーマットできる - Class Utilities | Apps Script | Google Developers 便利なので使ってほしい
- 重複チェックのため Spread Sheet に書き込む
- 単に A1 セルにメッセージ ID を追加してるだけ
学んだこと
- 日付のフォーマットめんどい
- Utilities.formatDate を発見できなかったら終わっていた
- 世の中の人は本当にどうしてるんだろう
- 筆者は頭が Python なので strftime とかでいいじゃんとか思ったけど、そういうのがぱっと出てこない?
- 日付に関する処理、結構ごり押しのものが見つかるけどサジェストが残念なことになっている?
- Sheet がなければ作る処理、便利かも
- 汎用メソッド集を作りたい
- 狙ったシートの狙ったセルだけ書き換えるのも結構めんどくさい
- 汎用メソッド集を作りたい
- あと今の処理もあってるかどうかちょっと怪しい(range とって cell 取って set ってしてるけど、cell だけ取りたい場合って本当にこの手順でやらないと駄目なのか)
GoogleAppsScript.Base.Date
なるものがある- メッセージを取り出すときに気が付く
- 通常のものと何が違うのかまだ理解していない
- TypeScript の type 定義を覚えた
- 上に関連して
type GeneralDate = Date | GoogleAppsScript.Base.Date;
を定義した
- 上に関連して
- Discord の WebHook 簡単すぎる
- マジでこんなに簡単に作れていいのか、ありがたし
展望
- 重複チェック用のシートの作りが微妙なので改善したい
- 古いシートを消す処理がないので、シートがたまるようになってしまっている
- 月 1 とかで消して作り直してしまう?
- どちらにしろ Batch 処理が必要そう
- 更新数が少ないものなので影響が小さい、問題になってから対処でもいいような気はする
- 週ごとの成果を出したい
- モチベーションは上げていきたい
- もう少しデプロイを工夫する
- はい
- Confluence の API を使う
まとめ
Confluence API で何とかしようと思って 3 時間くらい調べてこれ無理だなってなってからメールを見て、これだと思ってから手を素早く動かしてできたのはよかったと思います。作りがいろいろ雑な部分はありますが、個人的にはまあいいかなと思ってます。