はじめに
SlackメッセージからRedmineのissueを登録するアプリ(issue-alizeと言います)を開発しました。
issue-alize for Redmine
issue-alize for Backlog
そのSlackAppの紹介と開発する上で少し困った点およびSlack App Directoryへ登録のメリットなどを記載します。
開発しようと思った経緯
- Slackの会話上でタスクを振られることが多く、それをRedmineに手動で登録していた
- その際、SlackのメッセージをコピペしてRedmineに登録するのが発狂しそうな作業だった
- SlackのメッセージをIssueとしてRedmineに登録するアプリがSlack App Directoryに見当たらなかった
- 逆方向のRedmineの変更をSlackに通知するSlack Appはありましたが。。。
実装した機能
- インストール時
- SlackAppインストール後、issue-alizeの設定画面に遷移させてRedmineの情報と紐づける
- Slack利用時
- Slackメッセージのショートカットメニューにアプリケーションのメニューを追加
- メニュー実行後、ダイアログを表示
- ダイアログでSubmitされたらRedmineのIssueを登録
- SlackチャネルにRedmineのIssueのURLを投稿
- AppHome画面からissue-alizeの設定画面に遷移
システム構成
- 設定画面はWebアプリケーションで構成
- 設定画面以外は、AWSのAPIGateway+Lambdaで構成
- 起動・停止のメンテナンスが必要ない!
- Lambda自体はユーザが少ないうちはお金がほとんどかからない!
開発上の少し困った点
以下が今回開発したメインの画面です。
開発を振り返って困った点は以下の通り。
困った点 | 要因 | 対応方法 |
---|---|---|
100以上Redmineのプロジェクトがある場合、選択できないプロジェクトが発生した | Static Optionの上限が100であること | フィルタ文字列でプロジェクトを絞り込めるようにした |
選択したプロジェクトに応じて、RedmineAPIでAssigneeの選択肢を生成しているが、それが間に合わないことがある | プロジェクト選択後、Redmineからユーザリストを取得し、views.updateでUIを書き換える処理をしているが、それがそれなりに重い | 対応策なし |
時々SlackがResponseを受け取るに3秒以上かかりエラーとなることがある | Lambdaで実装しているので初期動作が遅い | 処理受付後はなるべく非同期処理で処理した。 Lambdaを使わず通常のウェブサービスにする(未対応) |
Slackメッセージのメンションが<@XXXXXXXXXXX>のようにそのままRedmineのIssueに表示されている。 | Slackのチャネルのメンバーの詳細情報を保持していないため | Backlogにデータを渡す際にメンションを削除するか、Redmineのユーザに変換する(未対応) |
APIキーを預かる必要があること | RedmineはAPIキーによる認証しかない | 対応策なし。 ただしBacklogはAPIキーを使わずにOAuthによる認証で紐付けた |
Slackの認証処理などでプログラムが複雑になってしまった | フレームワークを使わず、Slack Web APIだけを使って実装したから | Boltフレームワークを使う(未対応) |
Slack App Directoryへ登録
申請から登録・審査について
- かかった期間は4ヶ月程度(だらだらとプログラム修正したのでちゃんとすればもっと早く対応できたかも)
- 本当にアプリをインストールおよび使用して審査される
- 審査してもらうのに必要な環境は用意する必要あり(今回の場合Redmineのテスト用の環境やアカウントなど)
- 応対は英語(Google翻訳でなんとかなる程度だと思います)
- 指摘は3点ほどあった
- アプリの仕様上不要と思われるScopeを指摘された(実際不要であった)
- SlackAppのダイアログ上で他アプリのAPIキーを入れていることを指摘された
- その他、動作的な不具合を指摘された
- 指摘された点が再現しない場合などは丁寧にやり取りいただいた
- 申請、審査に関して費用は発生しなかった
- 利用規約やプライバシーポリシーの文書が必要
- アプリのUIは英語表記とし、サポート言語も日本語と英語にした
Slack App Directoryに申請してよかったと思ったこと
- Slack App Directoryに登録され、アプリケーションが全世界で検索対象になる。(すばらしい!)
- サポート言語を英語にしてUIを英語にすると実際、8割程度日本以外のユーザになった!(issue-alizeはヨーロッパが多い)
- Slack App Directoryに登録することで思ってたよりユーザが増えた。
課題
- Boltを使うようにする
- BoltをLambdaで使える?か調査
- SlackユーザIDとRedmineユーザIDの紐付け機能(SlackのメンションをRedmineのユーザに変換する)
- APIキーでの認証以外でのRedmineの認証の実現
- BacklogのようにOAuthでの認証が可能であれば、それがベター
- 広告などをいれて少しでも利益にできないかなぁ
(おまけ)今後作ってみたいSlack App
- Slack向けの階層アドレス帳を作ってみたいと思っています
- 組織単位宛にメッセージが送信できるもの
- SlackAppの開発をしていますのでご相談承ります:-)