見出し画像

【ヘルプデスク】流れちゃうSlackの投稿からRedmineチケット作ってみた【タスク管理】

この記事は「corp-engr 情シスSlack(コーポレートエンジニア x 情シス)#2 Advent Calendar 2020」の7日目の記事になります。

画像1

■ 最初のタスク管理方法(Google フォーム→Redmineチケット化)

私は去年までコンサルタントとして業務設計などを行っておりましたが、過去のエンジニアの経験などもあり、今年からコーポレートエンジニアとしてIT専任の担当者となりました。

スタートアップなので、「社内外問わず、ITに関わることすべてやる」みたいな状況であり、当然業務改善などの本質的な取り組みとは別に日常的にヘルプデスクとして社員などからのITに関わる問い合わせや依頼事項への対応をする必要がありました。真っ先に「タスク管理どうしよう」といろいろ悩みましたが、我らがおかしんさん(@okash1n)の以下の記事を参考にして、Zapierを利用してGoogle Form → Redmineでタスク管理をすることにしました。
(記事ではTrelloを使っていましたが、Redmineが使い慣れていることとタスクの消化状況や件数推移、課題分類などを分析しやすいと思ったのでRedmineを採用しました。)

Slackでの通知も含めて起票先がTrelloではなくRedmineであること以外はほぼ記事のとおりなので、その実現方法については割愛させていただきます。

これが実現できたことで社員からの依頼を非常に管理しやすくなりました。
おかしんさん本当にありがとうございます!

■ たまーにタスク管理から漏れちゃうことが。。。

上記の方法で依頼されたタスクはちゃんと管理することができるようになりました。しかし少し経った時、まれにタスク管理から漏れてしまうものがあることに気づきました。その多くはSlack上で最初は「相談」だったものが最終的に「依頼」に変化したものだったり、相談内容が調べてみないとわからず少し時間をもらうような場合でした。

最初の頃はSlackのリマインド機能を使ってRedmineとは別管理にしたり、相談者に「申し訳ないんだけど、依頼フォームから起票してもらえる?」とお願いしてましたが、タスクの二重管理になったり、起票漏れで後になって慌てるみたいなこともあり、とても非効率で生産性が低いなぁと感じていました。

そこでこの問題を解決するための方法を模索することにしました!
(ここからが本題。)

■ Slackのメッセージ(=フロー情報)をRedmineのチケット(=ストック情報)に変換したい!

上述の通り、漏れが発生していたタスクの多くがSlackの相談などが発端となっていました。これはSlackの情報がフロー情報であるため、ストック情報へちゃんと変換しないと漏れてしまうのはしょうがないものと思います。(Slackのメッセージにブックマーク付けてタスク管理する方法もありますが、他のヘルプデスクタスクと並列に管理したい。)

フロー-ストック

そこでSlackのメッセージからRedmineのチケットを作成する方法を探しはじめました。ただ、そういったアプリは見つけられず。
うーん困ったな。よし、じゃあ作ろう!
ということで、簡単でも良いのでワンクリックでRedmineチケットを作るアプリを自作することにしました。こういう時エンジニア経験があると自作ハードル下がる気がしますね。ガッツリ開発経験なくても簡単なスクリプト書けるだけでめちゃめちゃ便利になるのでハードル高く感じる方は簡単なところからやってみると良いかなと思います!(この読者さんに対しては釈迦に説法かもしれないですね。)

■ 実現方法

結論としては以下のような構成で実現しました。

アーキテクチャ

処理の流れとしては、
① Slack Appsに作成したアプリにショートカットを作成し、それが押下された場合にAPI Gatewayで生成したURLにリクエストを投げるようにする。
② API Gatewayで受けたリクエストをLambdaに送信する。
③ リクエストを元にLambdaのPythonでRedmineのAPIをコールする。
④ Redmineでタスクが起票される。

という流れになります。

なお、大変申し訳無いんですが、今回は実装の詳細は割愛し、参考にしたサイトの紹介などを中心に実現方法を紹介します。
(いつか元気があれば記事をアップデートして詳細書きます。未来の自分頑張れ。)

■  ①~② SlackのショートカットからAmazon API Gatewayを通じLambdaを呼び出す

以下の記事を参考にしました。

なお、受け取れるリクエストパラメーターがわからなかったので、以下のSlackのリファレンスを参考に必要なパラメーターを確認して情報を抽出しました。

この部分は速度優先でそこまで深く理解せず参考記事を模倣して作りました。本記事をアップデートするときにはもうちょっと理解を深めたいと思います。

■ ③~④ LambdaのPythonからRedmineチケットを起票する

以下の記事を参考にしました。

Lambda上で実行するPythonの実装ですが、内容はほぼほぼこちらの記事の「チケットの作成」の項を参考に作成しました。
Slackからのリクエストパラメーターは先程の翻訳アプリを作成記事で理解できていたので、そのデータを活用し、この記事に登場するRedmine用のPythonライブラリを介してチケットを作成するようにしました。

ここまで実装するだけで以下のようにワンクリックでSlackのメッセージからRedmineのチケット作成ができるようになりました!

Slack ショートカット

■ 残課題

ガーッと速さ重視で実装し、そのままずっと運用してますが、認識してる残課題がいくつかあります。

・メッセージ本文からチケットタイトルを付けているためパッと見で分かりづらい場合がある
ワンクリックでチケット作成できるようにしているためチケットのタイトルはメッセージの前半50文字までを切り取って付けています。そのため前口上の長いメッセージだとタイトルだけだと何のことかわからず、チケットタイトルを修正する必要が多々あります。でも手軽さ重視してチケットの管理漏れを防ぐことを重要視しているので、目をつぶってます。

・Slackのショートカットからボタンを押下した後何のメッセージも表示されないためちゃんと起票されたか分かりづらい
チケット作成のショートカットを押下した時にBotが「Redmineチケットを作成しました。チケットはこちらです:[URL]」みたいに通知してくれると親切かと思いますが、その部分の実装はサボっています。今は基本的な利用者が私だけなので、問題はありませんが、利用者が増えた時に混乱を生じさせないためにアップデートする必要がありそうです。

・Slack Events APIの再送仕様に対して未対応
SlackのAPIには再送仕様というものがあるようです。

これに対する回避方法は現状特段取っていません。たまにエラーメッセージが表示されたり重複起票されてしまうこともありますが、起票自体が失敗してしまうことは今までないので、これについても目をつぶっています。ただ正直不完全な状態なので要アップデートですね。サボってます。

■ まとめ

細かい実装などの説明まで手が回っておらず不十分な記事になってしまったこと少し反省しています。すみません。この点は未来の私がきっとアップデートしてくれるはず。。

ただ、1,2時間実装するだけで管理漏れが激変し、結果的にヘルプデスクの管理がかなり効率化されたと思います。また、この実装を通じ、Slack API、AWS(API Gateway、Lambda)、Pythonなど様々な技術に簡単ながらも触れることができるので、いい機会だったと思います。
今回はRedmineに対するチケット起票に関して記載しましたが、当然APIが公開されているサービスであればいくらでも流用ができる内容だと思います。ぜひ参考にしていただければと思います!
(Slack Appsがかなり充実していてすでにアプリとして公開されているものも多くあると思うので、そういうのがあればそちらを利用するのが絶対良いと思います。やりたいことが既存アプリだとできないなどの場合に参考にしていただければと思います。)
(今後はSlack ワークフローとかでこういうことを実現してくのが主流になっていくのかな?ワークフローもっと使いこなしていかないと。)

(おまけ)私が働いているメリービズについて(宣伝です)

最後に簡単に弊社の宣伝です。

メリービズは「あなたの会社の経理部に。」をコンセプトにバーチャル経理アシスタントを提供しています。
オンラインであなたの会社の経理業務を実施し、コア業務に集中できる環境を提供しています。
また、一緒に働く仲間も募集しています。正社員だけでなく、リモート経理スタッフも絶賛募集しておりますので、ご興味がありましたらぜひお問い合わせください。

この記事が気に入ったらサポートをしてみませんか?