平素よりお世話になっております。 アスクルに入社してもうすぐで3年目になるもりぱーです。
普段の業務は、注文領域を担当するバックエンドチームに所属して注文の処理するAPIの開発や性能改善をしています。
今回は、Power Automateを使って業務を半自動化したことを紹介します。
Power Automateとは
Power Automateは、Microsoft社が提供している業務プロセス自動化ツールです。
Power Automateを使うことで、日々の業務の中で発生する繰り返しの作業を簡単に自動化ができます。
また、Power Automateはノーコードで書けるビジュアルプログラミングであるため、 プログラミングの知識がなくても自動化フローの作成ができます。
改善前の業務フロー
今回改善する業務は、パートナーさんの新規参画者の登録作業になります。
注文領域のチームへ新規に参画する際、必要となるのは、
- AWSアカウントの作成
- AWS管理のBacklogへ依頼チケット作成
- 踏み台サーバアカウントの作成
- インフラチームのBacklogへ依頼チケット作成
- インフラチームへSlackで連絡
- New Relicアカウントの作成
- インフラチームのBacklogへ依頼チケット作成
- インフラチームへSlackで連絡
- Redmineのアカウント作成
- メールでアカウント作成担当者へ連絡
の4つの作業になります。
図で表すと以下で、最初、パートナーさんから新規参画者のアカウント登録依頼の連絡があり、内製開発者が上記の作業を実施します。
通常業務にこの業務が加わると手間がかかったりミスへ繋がってしまう可能性があります。 かといって通常業務を優先して登録作業を後回しに、ということもできないので、この面倒な作業をPower Automateを使って半自動化します。
Power Automateを導入した業務フロー
Power Automateを導入した業務フローの全体図は次のとおりです。
依頼フェーズでは、パートナーさんがMicrosoft Formsから新規参画者の名前や社員番号、必要な情報を入力します。 Formsを提出すると、Power AutomateでSlackへ依頼通知を投げつつ、SharePointの新規参画者リストへ追加します。
登録申請フェーズでは、依頼通知を受けた内製開発者が、SharePointの新規参画者リストを確認し、問題がなければFormsの登録フォームに行番号を入力し提出します。 Power Automateが提出を検知すると各種Backlogへチケット起票やSlackへの投稿、メールの送信をします。
「パートナーさんのFormsから直接登録申請したらいいんじゃね?」と思った方、大正解です。 直接申請をすることはもちろん可能です。ただ今回は、内製側で確認する必要があるため 全自動化ではなく、フェーズで分けて半自動化 としています。
もう少し各フェーズについて詳細を見ていきます。
依頼フェーズ
登録申請フェーズで必要となる次の情報をFormsへ入力してもらいます。
新規参画者の名前
新規参画者の社員番号
新規参画者のメールアドレス
各アカウント作成担当チームで管理されている管理表Excelに入力した行番号
このフォームを提出すると、内製開発者がいるSlackへ通知が飛び、新規参画者Excelへ記載がされます。
新規参画者Excel
Slack
これを実現しているPower Automateはこちらになります。 各アクションの概要は図に記載しています。
依頼フェーズで少し詰まった点として、Slackアクション「メッセージを投稿(V2)」を使うときに出会ったエラーがあります。
「メッセージを投稿(V2)」のリクエストのメッセージテキストへ、Slackのメンションを入力しテストすると次のエラーが出ました。
これは、Power Automateの式関数の記法とSlackのメンションの記法が「@(アットマーク)」から始まる記法であるため、発生するエラーとなります。(Power Automateの式関数の記法は、アクションのコードビューで確認できます)
それを回避するには以下だったので、まとめておきます。
対象 | 記法 | 確認方法 |
---|---|---|
ユーザへのメンション | <@メンバーID> |
Slackアプリ > 取得したいユーザのプロフィール > 「⋮」 > メンバーIDをコピー |
グループメンション | <!subteam^グループID> |
Slackアプリ > 取得したいグループメンションをクリック > 「⋯」 > グループIDをコピーする |
チャンネルのアクティブメンバー全員 | <!here> |
ー |
チャンネルのメンバー全員 | <!channel> |
ー |
登録申請フェーズ
このフェーズでは、依頼フェーズで入力された新規参画者Excelの情報を取得し、各Backlogへチケット起票、Slack投稿とメール送信を行います。
このBacklogへチケットを起票するアクションは、Backlog APIで各Backlog分の3回POSTしますが、そのままフローに追加すると処理が同じで可読性や保守性が低くなってしまうため、Power Automateの親子フローを使って共通化しています。 親子フローについては、Power Automate公式ドキュメントの子フローの作成( https://learn.microsoft.com/ja-jp/power-automate/create-child-flows )に記載されています。
作成したPower Automateが以下となります。
小さすぎて見えないですね。細かくステップを分けると次のようになります。
- 各種データを変数に入れたりAPIを呼びだす準備をする
- API呼び出し、メール送信を実施する
- Slackに実施した結果を投稿する
それぞれ簡単に説明いたします。
1. 各種データを変数に入れたりAPIを呼びだす準備をする
新規参画者Excelの登録したいユーザの行番号をFormsに入力し提出します。 すると、Power Automate内でExcelから情報を取得します。また、あらかじめ変数にBacklogのAPIキーでBacklogのURLを作成します。
2. API呼び出し、メール送信を実施する
このステップでは、各BacklogへPOSTする処理とメール送信を並列で実施しています(順にやっても処理は動きますが見づらくなってしまうため)。 この各BacklogへPOSTする処理は、共通の処理であるため、Power Automateの子フローを使っています。
改善前の業務フローにも書きましたが、それぞれの処理をしています。
(1) 踏み台サーバアカウントの作成
- インフラチームのBacklogへ依頼チケット作成
- インフラチームへSlackで連絡
(2) AWSアカウントの作成
- AWS管理のBacklogへ依頼チケット作成
(3) New Relicアカウントの作成
- インフラチームのBacklogへ依頼チケット作成
- インフラチームへSlackで連絡
(4) Redmineのアカウント作成
- メールでアカウント作成担当者へ連絡
やっていることはほとんど同じであるため、(1)に着目して説明すると、
登録申請する/しないを判定するフラグで条件を分岐させ、登録申請する場合、BacklogのAPI呼びだしと、Slackで別チームの登録担当者へ依頼メッセージを投稿します。
POST通信に関して、BacklogのAPI呼び出し用の子フローを用意し、正常終了か異常終了かを示すステータスコードの返却をするようにしています。 これは、Formsを提出した時点で自動的に各処理が走り、正常終了か異常終了かが分からなくなってしまうため、POST通信の結果をまとめてSlackへ投稿し確認できるようにしています。
3. Slackに実施した結果を投稿する
最後は、新規参画者Excelの対象者の完了フラグを更新し、各種処理が完了したメッセージをSlackへ投稿します。
新規参画者Excel
Slack
まとめ
作成した新規参画者の半自動化フローですが、作成し導入したばかりで、 具体的にどのくらい業務効率化に繋げられたか確認できておらず、自動化により削減できた時間は計測したいと考えています。 このフロー自体も改善できるところはまだまだあるので、改善をしていきたいです。
また、大小かかわらず面倒と感じた作業は、どんどん自動化していきたいと思います。
ここまで読んでいただきありがとうございました! 以上、もりぱーでした!