名もなき未知

エンジニアリングとか、日常とかそういうのをまとめる場所。アクセス解析のためGAを利用、Googleに情報を送信しています。商品紹介のためAmazonアフィリエイトを利用、Amazonに情報を送信しています。記事に関しては私が書いていない引用文を除いて自由にご利用ください。

Confluenceからの通知メールをGASで拾って、Discordに通知するものを作った

モチベーション維持のために作りました。

TL; DR;

  • コードはここに
  • https://github.com/yumechi/gas-mail-check
  • GAS で Gmail を Filter して検索、一定の条件でさらに Filter しつつ、Discord に投稿する
  • Confluence で WebHook するのは Slack の場合は簡単にできそうだったが、それ以外だと厳しかったので、この方法にした
  • API 経由でやる方法を知りたいような気はするが、今は後回し

できたもの

隠したほうがいいあれをしょりした。

f:id:MireiMixin:20200615050158p:plain

やったこと

  • GAS で Gmail を検索する
    • GmailApp.search(条件) で取れる
    • 条件は環境変数からとるものと、直近 1 日にした
    • ちなみに環境変数は特定のメールアドレスから、としてる(公開はしたくなかったので環境変数に隠した)
  • 検索したメールから情報を取り出す
    • この検索メソッドから得られるのはメール本体じゃなく、スレッド
    • なのでスレッドからさらにメールを取り出す
    • なぜと思ったけど、表示みたら自然な気がしてきた
  • 重複チェックをする
    • メールの持つメッセージ ID で重複チェック(基本的には被らない値)
    • データ保持は Spread Sheet
    • すでに WebHook 送信したものはスプレッドシートの A1 セルに書いてあるので、その場合はスキップ
    • シートがない場合はこの時点でシートを作る
      • 参考にした
      • (ちなみにこれ、 set_sheet じゃなくて get_sheet だよねと思った)
  • 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 を使う
    • はい
    • とりあえずぱっと WebHook 的に更新がありましたという情報を得るためのものはなさそうだった
      • Streaming API 的なものを使ってアップしろみたいな雰囲気を感じる
      • サンプルがあまり手に入らないので、かなり険しい、とりあえず今の忙しさでは時間だけが解けて気持ちが壊れるので却下
    • 適当に API たたく例もあまり出てこない
      • バッチ処理API たたいて、適当に重複排除すれば行けそうだなとは思った
      • が、それすらほぼ出てこない
    • というか API を使うためのもろもろの状況が分からなさすぎる(API KEY 発行が難しそうな雰囲気)
    • とりあえず自分用の JIRA と Confluence 立てたので、この辺いじりながら何かを発見したい
      • いきなり今動いてるプロジェクトでやるのはきつかった

まとめ

Confluence API で何とかしようと思って 3 時間くらい調べてこれ無理だなってなってからメールを見て、これだと思ってから手を素早く動かしてできたのはよかったと思います。作りがいろいろ雑な部分はありますが、個人的にはまあいいかなと思ってます。

もくもく会振り返り(2020/06/14)

イベント

[オンライン!] TeckUpもくもく会 #8 - connpass

主催していました。

振り返り

Y

  • 2 時間開催のオンラインで初めてイベント実施
  • 説明方法を少し変えて、スライドを連絡用チャンネルにはった

W

  • 人が少ないかも(イベントページ立てたタイミングが遅かったのはある)
  • 2 時間だと運営負担は小さい
  • 説明スライドをチャンネルに張るの悪くないなと思った
    • 自己紹介はチャンネルが変わる想定なので、配信画面を誰かが移さないといけない手間から解放される想定
    • オフラインでずっと表示してたものは特定のチャンネルに貼るのがよさそう

T

  • 可能ならオンライン開催を隔週でやりたい
  • 隔週でやるなら人がいれば 4 時間、いなければ今回みたいに 2 時間のショート版でやりたい
  • 事前連絡、自己紹介、成果発表のスライドは連絡用チャンネルに貼るのを継続したい

その他

6/14の15時からもくもく会やります - 名もなき未知 これに触れる。

  • 自分がやること多すぎるのだが、集中して物事を対処できていない
    • 2 時間もあれば何かしろ 1 つの作業は終わるなという印象
    • 捗るので積極的に自分がピンチの時はイベントを開こう
  • どうせやるなら人と一緒に頑張りたい
    • 久々に話す人もいて、いい感じだった
  • まあ自分と同じような人はいるだろう
    • 目標となる時間を決めているのでやりやすいという意見はあったかも(うろ覚え)

まとめ

もくもく会に対して、繰り返し開いてきたこともあり、発見が少なくなりつつあります。

一方で、自分が必要なので、もくもく会開くのって全然ありなんだなと思いました。

結局同じような悩みを抱えていて、やらなければいけないけど意志や環境の問題からできない人は必ずいると思います。

やっていきたいができない人は誰かを誘ってみるのがとても良いと思います。そのためにイベントを開いていたんだな、っていうのを再発見したかもしれません。

6/14の15時からもくもく会やります

概要

teckup-tokyo.connpass.com

15時から自己紹介して、2時間くらい作業して、18時くらいには終わります。

どうしてやるのか

  • 自分がやること多すぎるのだが、集中して物事を対処できていない
    • スタッフ活動、コンテスト参加、etcで忙しいという噂は多々立っている
    • ゲームをついついやりすぎてしまうので、そういうのも避けたい
  • どうせやるなら人と一緒に頑張りたい
    • さぎょいぷ(ナウい言葉)とかもあるが、まあ一定の人とやっているとどうしても気が抜ける
    • そもそもさぎょいぷなど捕まらない時がある、じゃあイベント開いたほうが早くないという試行
  • まあ自分と同じような人はいるだろう
    • 楽観主義だがそういうこと
    • 人のところに参加しに行くのももう少しやったほうがいいかなーと思いつつ、タイムスケジュールとかのノウハウはあるので自分のところで開けばいいかとなってしまう
    • (自分自身も参加者としてのノウハウを増やしたいので、よさげなもくもく会があれば教えてください)

まとめ

自分が対応する場合はローコストでできてしまうので(たぶん案を考えてから文面に起こすのに30分分くらいで済み、当日の準備も含めて30分くらいでやれる)、みんなで一緒に頑張れる場所が提供できるならそれはどんどん提供しなければいけないかなという気持ちです。ただ、もう一から新規で考えてイベント回す、みたいなのは自分一人でやるのはまあまあつらいのでやらないとは思います(もくもくだからやります、という感じ)。

LTとかもやりたいなーと思いつつ、人ってそんなに長時間LT聞きたいわけではなさそうだし、これまで自分が開いてきたLT大会ってたぶん時間長すぎて間延びしてるんですよね。まあその辺はだれかやってみましょう、スタッフとして参加どうですか?と聞かれたら参加しようかなと思います(すべてのことに手を挙げられるほど時間とプライオリティは制御できていないので、ここは選択的に受け身です)。

終わり。