エムオーテックス株式会社が運営するテックブログです。

Azure Pipelines を使用した自動ビルドの開発業務効率の改善について

こんにちは、LANSCOPE オンプレミス版開発チームの石井です。

LANSCOPE オンプレミス版の開発では継続的インテグレーション(以下、CI)ツールにAzure Pipelinesを使用しています。 今回は CI を使用した開発業務の改善事例を一つ紹介したいと思います。

Azure Pipelines について

Azure Pipelines とは - Azure Pipelines | Microsoft Docs

Azure Pipelinesは Microsoft 社が提供しているAzure DevOpsに含まれる CI/CD サービスです。 LANSCOPE オンプレミス版では開発にAzure DevOpsを使用しているため、CI/CD にはAzure Pipelinesを使っています。

なお、今回は事例を紹介することがメインであるため、他の用語や各種サービスの説明は省略します。

業務効率を改善した内容について

LANSCOPE オンプレミス版では、製品を検証するために、開発したコードを使用してモジュールをビルドし、デジタル署名を付与します。 検証用モジュールのビルド作業は専用の端末上でのみ実施できるような運用にしており、開発者は専用端末にリモート接続してからビルド作業を行っていました。 Git から最新ソースの取得、コンパイル、デジタル署名の付与などの一連の作業も手動で実施していました。

専用端末は社内に1台しかなかったため、以下のような問題がありました。

❌ 複数名が同時に作業できずリモート接続を奪う
❌ 一人が作業中の場合は、作業完了までの待ち時間が発生する
❌ 誰かが操作中にログインしてしまった場合は、チャットで連絡を取りあう

また、アクセス権限により専用端末にログインできる開発者を限定しているため、作業依頼を受けてから該当者がビルド作業を行うといった手間も発生していました。

対策

対策として、Azure Pipelinesを使用して専用端末上でビルドできるようにしました。 LANSCOPE オンプレミス版では、この一連の作業を「自動ビルド」と呼んでいます。

自動ビルドのアーキテクチャ

  1. 開発者はAzure Pipelinesからビルドするブランチの設定などを行い、ビルドを開始する。
  2. Self hosted agentからビルド時に指定したブランチをチェックアウトする。
  3. Azure Key Vaultからデジタル証明書とパスワードなどのシークレットを取得する。
  4. ビルドを実行して、生成したモジュールに署名する。
  5. 署名したモジュールをファイルサーバーへコピーする。
  6. ビルド結果をChatworkへ通知する。

現在の運用ではビルド開始時にAzure Pipelinesからブランチを指定することで、任意のブランチをビルドできるようにしています。 セキュリティの観点から、デジタル証明書や各種パスワードなどのシークレットはAzure Key Vaultで管理し、ビルド開始時に取得するようにしています。

モジュールを生成した後はChatworkから実行したユーザーへ通知することで、ビルドしたことを忘れたり完了したことを見逃したりといったことを防ぎます。 生成したモジュールはファイルサーバーの特定フォルダ配下に配置にしています。 配置先のフォルダは開発メンバー全員が権限を持っているので、いつでもビルドしたモジュールを使用することができます。

改善効果

自動ビルドを導入することで次のような改善効果がありました。

作業待ち時間が格段に減った
専用端末への接続が不要になった
作業がバッティングしないので、気軽に必要なタイミングでモジュールの生成が実行できるようになった
特定メンバーへモジュールの生成依頼がなくな無くなったことで、MOTEX社員は割り込みが減り、パートナー開発者にとっては作業依頼の待ち時間が無くなった

中でも「作業待ち時間が減った」ことが一番の改善効果と言えます。

改善効果を計測する

単純に待ち時間が削減されたと言ってもどのくらいの工数削減効果があったのでしょうか? 自動ビルドの運用開始から1年間の工数削減効果を計測してみました。

この2つの観点で実績時間を集計し、(a) < (b)であれば改善効果はあると判断するものとします。

  • (a) 自動ビルドに費やした時間
  • (b) 手動ビルドで必要だったであろう予想時間

(a)は、「自動ビルドの結果を受け取るまでの合計作業時間」「自動ビルドに必要なインフラ構築や導入のための調査」「インフラのメンテナンスと継続的な機能のアップデート」など、実際に作業した時間を集計します。 自動ビルドを使用する場合は、ブラウザ上からAzure Pipelinesを操作するものとして、ビルド中の待ち時間は作業時間に含めません。 導入に必要だった時間も自動ビルドのコストとして集計します。 実際に運用していくと改善すべき部分も見えてくるので、そのための継続的なアップデート作業も集計対象とします。

(b)は、「手動ビルドにかかるだろう合計時間」を集計します。 こちらは予想なので「手動ビルド1回に必要な時間 × 集計期間で実行された自動ビルド回数」で集計します。

それぞれの作業時間の集計結果は次のようになりました。

  • (a) 合計 72.4時間
    • 自動ビルドの結果を受け取るまでの合計作業時間: 7.6時間
    • 自動ビルドに必要なインフラ構築や導入のための調査: 49.5時間
    • インフラのメンテナンスと継続的な機能のアップデート: 15.3時間
  • (b) 合計 88.5時間
    • 手動ビルド1回に必要な時間: 5分50秒
    • 集計期間で実行された自動ビルド回数: 910回

集計結果は(a) < (b)となっているため、改善効果はあったとみなして良さそうです。 この1年間だけで16.1時間の改善効果がありました。

さらに、(a)の「自動ビルドに必要なインフラ構築や導入のための調査」は、初期段階で必要になるコストであるため、導入2年目以降はゼロです。 そのため、2年目以降は65.6時間の工数削減効果を見込むことができます。

おわりに

いかがでしたでしょうか? LANSCOPE オンプレミス版開発チームでは、自動ビルド以外にもAzure Pipelinesを利用して様々な作業を自動化しています。 今後も CI を使用して開発効率を向上させた事例を紹介できればと思います。