この記事はFujitsu Advent Calendar 2020 12日目の記事です。
現在自分が所属している部署では、作業時間のごにょ%を自己研鑽に充てることが可能です。
そんな前提があり、所属のMattermostに通知するbotを作成していました。
昔はHubotやJenkinsで対話(・対話モドキ)botで遊んだりもしましたが
今年はちょっとしたbotの量産をしたので、それを振り返ってみたいと思います。
技術的な要素
Pythonスクリプトとして実装しcronにより定期実行しました。
- Python
- Mattermost incoming webhook
- Mattermost API
- Slack API
- webスクレイピング
作ったbotたち
GitHub release checker
リリースを追いたいOSSについて、GitHubリリースページのatomを定期的に参照して
追加があれば通知します。
各OSSのSNSや公式ページをずっと監視するわけにもいかず
全部のスクレイピング実装もかったるい GitHubのリリースページに目をつけて実装しました。
数々のリリース検知に活躍したので、今回紹介する中では一番働いた子だと思います。
GitHub APIの方がかっこいい(?)実装ですが、対象OSSの増加などから
あえてトークンの制限がないatomによる実装としています。
GitHub add repository
GitHubの特定組織のrepoページのatomを定期的に参照して
repository追加があれば通知します。
repo追加を監視すると、論文や新しいOSSの公開を追えたので興味深かったです。
こちらもトークン制限回避のためatomによる実装です。
GitHub status checker
https://www.githubstatus.com のatomを定期的に参照して
追加があれば通知します。
GitHubを開いていて50xエラーに延々と遭遇したときに作りました。
githubstatusのatomはEntryの更新時にタイムスタンプupdatedも一緒に更新されていたため
進捗状況も通知しています。
Mattermostチャンネル追加通知
1日1回公開チャンネルの一覧をチェックし、追加があれば通知します。
過去に似たbot(メンバが追加されたら、ウェルカムメッセージとチャンネル一覧をPOST)を作っていましたが
別所属のMattermostでチャンネル通知のみのbotを見かけ、そちらのほうが便利そうなので新たに作り直しました。
所属のMattermostでは認証基盤を別にしているため、Mattermostの認証APIが使えず、若干苦労しました。
PREMIUM FRIDAY!!!!!!!
プレミアムフライデーを通知します。
テレワークになり、なかなかプレミアム撤退がやりにくいのが痛しかゆし。
mat2mat
MattermostのチャンネルAのPOSTをチャンネルBに転記し
元POSTには転記済みのマーキングとして絵文字リアクションをします。
次のslack2mattermostのための習作でした。現在はslack2mattermostが稼働しているため停止しています。
slack2mattermost
SlackのPOSTをMattermostに転記します。
作った経緯などを別記事にまとめましたので、よろしければそちらをご覧いただければと思います。
Slack status checker
https://status.slack.com/ のatomを定期的に参照して
追加があれば通知します。
GitHub版と同じノリで作りましたが、slack statusのatomは
updatedがatomページにアクセスしたタイムスタンプが設定されているのかEntryの更新を検出できませんでした。
そのためSlack版では進捗の通知はできていません。
CUDA, cuDNN release checker
CUDA, cuDNNの最新ドキュメントをスクレイピングし
バージョンが更新されていたら通知します。
CUDA,cuDNNはGitHub管理ではないため、リリース検知として作りました。
スクレイピングはchrome canaryを使いたかったのですが、プロキシの壁に阻まれphantomJSを利用しています。
今後作りたいbot
久々に対話・対話モドキがやりたくなっているので、今後もbotを作っていきたいと考えています。
Hubotで遊んだのは5~6年前でしょうか、最近の流行りも追いかけたいですね。
みんなで更新、用語辞書
ちょっとした単語から社内用語まで、なかなか人に聞きづらかったりしますが
Mattermostに"♯what_is" (~とは)チャンネルを作り、わからない単語とその意味をPOSTしてみたところ
ありがたいことにいろんな方にも参加いただけるようになってきました。
ただ、gitlab wikiにも用語集のページは作ってありますが、それを更新するまでは至っていないため
botでつなげられればいいなと思っています。
対話モドキとして、ハッシュタグによるコマンドbotとして検討中です。
Mattermostログ + search
Mattermostは非常に便利ですが、検索機能には少し不満があります。
別サーバにログを保存し、ログ+検索用botが作れないかなーとぼんやり検討しています。
さいごに
最終的にはこういうbotになりたいです。
以上、ありがとうございました。
追記
うっかり記事公開とリンク修正を忘れていたので更新しました。(12/12 22:00)