こんにちは。AI&ロボティクスセンターの吉田です。
4月にスマートソリューションセンターというところからAI、コミュニケーションロボを取り扱っているAI&ロボティクスセンターにRPAを抱えて異動になりました。AIや、コミュニケーションロボとRPAを掛け合わせたビジネスも加速中です。RPAについての概要を知りたい方はこちらをご覧ください。
さて、本題のRPAのシナリオ(ワークフロー)管理について話したいと思います。
RPA導入を検討する際には、どうやってロボットを管理メンテナンスしていくか、検討する必要がありますが、本記事では、シナリオ(ワークフロー)の管理について、検討したいと思います。本記事では、シナリオ(ワークフロー)は、ソースコードと同義と定義します。ソースコードと記載がある場合は、シナリオ(ワークフロー)に置き換えてください。
早速本題に入る前に、非技術者の方に向けて、ソースコード管理、ひいてはバージョン管理システムについて説明しておきます。
とあるファイルサーバを見ると、こんなファイル群があった記憶はないでしょうか。
- 20131224_集計マクロ
- 20131225_集計マクロ
- 20140114_集計マクロ
- 集計マクロ_最新
- 旧_集計マクロ_最新
逆にこういったファイル群を見たことがない人は少ないと思います。ファイルを手動でバージョン管理しようとすると、このようにファイル名で管理してしまうことが多いですが、これだと、他の人からするとどれが最新かわかりません。また他の人が変更箇所を上書きしてしまったり。ありますよね。
システム開発においては、一人で作業することは少なく、複数人での開発を前提としています。複数の人間が複数のファイルを各々編集するため、それぞれのファイルの最新の状態が分からなくなったり、同一ファイルに対する変更が競合するなどの問題を解決するために、ソースコード管理に、バージョン管理システムを使用することが非常に多いです。
バージョン管理システムとして有名なのは、Subversion(SVN)とGitです。他にもいくつかツールがあったりツール間で特徴が違ったりしますが、今回の主題ではないため、割愛します。
話をRPAに戻します。システム開発においては、ソースコード管理を行うことが多いことはわかりましたが、RPAのロボット構築において、ソースコード管理が必要なのでしょうか。別にJavaやC#などの開発言語でコーディングをしているわけではないし、何かメリットはあるのでしょうか。
私個人としては、導入することをご提案しています。いくつか理由を挙げます。
個人的に重要と思っているのが、共通部品の作成と共有です。RPA適用業務を増やしていくうえで、例えば、「自社の基幹システムにログインする部品」などを毎回手作りするか、一度作ったものを他のロボでも使えるように共通部品化するかで、生産性は大きく変わってきます。
また、自社基幹システム更改にともなって、共通部品も改修する必要が出てきた際に、古いバージョンの共通部品は、最新バージョンに更新するように仕組み化しておけば、更新漏れはなくなり、安全に運用管理ができるようになります。
バージョン管理システムでは、ブランチやタグといった機能を使用して、複数の状態を管理することができます。例えば、当社では、Git-Flowの概念を踏襲し、以下の状態を使い分けて管理しています。
- masterブランチ:本番稼働のロボを管理する
- developブランチ:開発中のロボを管理する
- featureブランチ:新機能開発を行い、単体テスト完了後、developブランチにマージする
- hotfixブランチ:不具合発生時に修正を行う
これらの状態を分けて管理することで、開発時の生産性向上や、不具合発生時の原因早期特定にも貢献します。RPAロボ構築後の運用プロセスに組みこみ、ルール化することで、スピード感をもって不具合対応にあたることができます。
Gitには、Pull Requestという機能が存在します。これは、開発者がレビュアーにレビュー依頼を出し、OKをもらったら、メインのブランチにマージされる、という機能です。もちろん「メールでレビュー依頼を投げて結果をメールで返信してもらう」、でも同様のことが実現できますが、レビュープロセスがバージョン管理システム内で仕組み化できるので、少なくともメールでのやりとりは省略できますし、差戻し履歴や、NG箇所のコメント機能など、レビューが便利になる機能が含まれています。
複雑な業務自動化の場合だと、複数人で分担してロボ構築にあたることもあります。そういった場合、機能毎にfeatureブランチを作成し、それぞれが担当する機能のみを開発し、開発完了後にdevelopブランチにマージすると、他メンバーのロボの異常や、不具合に影響されずに開発を進めることができます。
CI(継続的インテグレーション)ツールなどと組み合わせることで、以下のことができるようになります。
- 静的解析の自動化(命名規則や、コーディングルールに準じているかの機械的なチェック)
- ローカルで更新したロボをバージョン管理システムに更新登録(Push)すると、Pushをトリガーに、静的解析ツールを実行し、規約違反があれば、その旨を通知する。
- ローカルで更新したロボをバージョン管理システムに更新登録(Push)すると、Pushをトリガーに、単体テスト用/結合テストのロボ、またはプログラムを起動し、テスト結果を通知する。
- MasterブランチへのPushをトリガーに、ロボのパッケージングのプログラムを起動し、パッケージを生成、パッケージ管理ツールに更新を通知する。
RPAツールの中には、サーバー管理機能を持っているツールがありますが、パッケージ、デバイス、ライセンス、エラー、ログ監視などが主で、ソース管理機能を持っているツールはあまりありません。
しかしこれらの仕組み化を進めることで、ロボの開発、運用におけるプロセスのかなりの部分が仕組み化、自動化され、RPA導入を効果的かつスピード感をもって進めることができます。
ソースコード管理のメリットについてご理解いただけたでしょうか。
でも、RPAって、コーディングしないのに、ソースコード管理できるのでしょうか。
さらには、業務部門主体でRPA導入を進めていくにあたり、業務部門にソースコード管理をやらせるのか。どのようにして教育していくべきか。そのあたりは課題となってきます。
それ以外にも、RPAツールはフローチャートベースで、ソースコードが裏で自動生成されるが故に、レビューや、差分管理がしずらい側面があります。
長くなってきましたので、そういった課題についての見解は、また次回にします。
お楽しみに!