i Cubed Systems Engineering blog

株式会社アイキューブドシステムズの製品開発メンバーが、日頃のCLOMO開発の様子などを紹介します。

モバイル DevOps の取り組み

はじめに

みなさん、こんにちは。アイキューブドシステムズでモバイルアプリの開発を担当している tafuji-i3 です。以前、「開催実績 100 回以上の社内勉強会の様子を紹介」の記事を書いていますので、よかったらご覧ください。個人的なことですが、今年の10月でアイキューブドシステムズに入社して5年が経過しました。これまでの間に、オフィスが大橋から天神へと移転したり、会社が上場したりといろいろな変化がありました。今回の記事では、モバイルアプリの DevOps に関して、私が入社してからチームで取り組んできたことについて紹介したいと思います。

私たちのチームでは、ビルドの自動化、クラッシュログの収集の仕組みの導入、静的コード分析ツールの導入、自動単体テストの実施などに取り組んできました。現在では、以下の図に示すようなモバイル DevOps の仕組みを構築することができました。これらについて、以降に記載していきたいと思います。

i3 Mobile DevOps

1. ビルドの自動化

最初に取り組んだことは、ビルドの自動化を行うことでした。まだチームの規模が小さかったので、開発者のローカル環境でアプリをビルドし、テスト・リリース作業を行っていました。しかしながら、本番の設定ではなく開発環境の設定がアプリに混入してしまうなどのミスが、ときどき発生していました。

そのようなミスを防ぐために、CI 環境でアプリのビルドを自動化しようということになりました。様々な CI サービスが提供されていますが、Xamarin アプリの自動ビルドをサポートする機能が多く提供されている Azure DevOps というサービスの Azure Pipelines を利用することにしました。

現在では、以下のスクリーンショットに示されているように、Azure DevOps でアプリのビルドが自動化されています。

Azure Pipelines

前述のように、Auzre Pipelines でビルドを自動化したことで、開発者のローカル環境の誤った設定が混入することもなくなりました。また、モバイルチームの誰もがいつでもビルドを行うことができるようになり、これまでビルドを担当していたメンバーの作業負荷も軽減されるという二次的な効果もありました。

2. Visual Studio App Center によるクラッシュログの収集

次に実施した取り組みは、クラッシュログの収集の仕組みを導入することでした。この取り組みは、早急に実施したかったのですが、当時 Xamarin アプリのクラッシュログを収集するためのサービスとして提供されていた HockeyApp が、Visaul Studio App Center に代わる過渡期でしたので、しばらく様子を見ている状態でした。

Visaul Studio App Center が GA され、MDM Agent for iOS への Visual Studio App Center の Crash ログ収集を適用した後は、他のアプリへもこの仕組みを順次適用していっています。以下のスクリーンショットのように、アプリのクラッシュやエラーの発生状況を時系列で確認することができるようになり、不具合の解析・修正に活用することができるようになりました。

App Center Crash Log

3. 静的コード分析の適用

私たちの開発チームの環境も少しずつ変わってきました。これまでは、社員のメンバーで開発を行うことが多かったのですが、製品開発のスピードの向上やリリース可能な機能の数を増やしていくために、外部のパートナーさんに開発・保守作業をお願いするようになってきました。

そのため、これまでは社内の少人数のメンバーで、暗黙的にコーディングスタイルのルールが共有できていたのですが、外部のパートナーさんがプロジェクトに参画するようになり、人によってコードのスタイルがバラバラだと品質を保つのが難しくなってきました。

そこで、工数をかけずに継続的にコーディングスタイルをチェックする仕組みをつくるために、.NET の静的コード解析ツールを導入することになりました。静的コード解析ツールを導入したときの様子や技術的な話は、弊社のエンジニアiida-i3が書いた過去の記事「ハッピーな開発ライフを過ごすために静的解析ツールを本格導入した」に詳しく書かれています。

4. 自動単体テストの実施

アプリケーションの品質確保にはテストがかかせません。Azure DevOps でビルド・静的コード分析を実施するたけでは、アプリケーションの品質を確保していくには不十分だと考えていたので、CI のプロセスの中で、自動単体テストを実行し、品質を確保していく活動を実施していくことにしました。

Xamarin アプリの単体テストを行うときに、2種類の単体テストプロジェクトを作成する必要がありました。ひとつは、.NET Standard で実装されたクラス用の単体テスト用のプロジェクト、もうひとつは、Xamarin ネイティブ(Xamarin.iOS や Xamain.Android)で実装されたクラスの単体テスト用のプロジェクトです。

前者の単体テストプロジェクトは、Azure DevOps で提供されるテンプレートを活用すれば、CI 上で単体テストを実行することは簡単でしたが、Xamarin ネイティブの単体テストを CI 上で実行するには、CI 上で Simulator (Emulator) の起動、単体テスト用のアプリのインストール、テストの実行、テスト結果のレポートの取得を行う必要がありました。

Azure DevOps では Xamarin ネイティブの単体テストの実施することができるテンプレートは提供されていませんでしたが、幸いにも、Microsoft が提供しているクロスプラットフォームライブラリの Xamarin.Essentials でも CI 上で Xamarin ネイティブの単体テストを実行していたため、そのやり方をヒントにして、CI のプロセスの中で Xamarin ネイティブの単体テストを実行することができるようになりました。

以下のスクリーンショットは、モバイルアプリで利用しているクラスライブラリの単体テストレポートの一部です。このクラスライブラリは、.NET Standard のクラス、Xamarin ネイティブで実装されたクラスが含まれているため、上述の方法で単体テストを Azure DevOps 上で実施しています。

Run Unit Test Results

この自動単体テストの取り組みは、完全に終わったわけではなく、現在も少しづつカイゼンを加えている最中です。

おわりに

今回の記事では、アイキューブドシステムズのモバイル DevOps の取り組みを紹介いたしました。 私たちのチームでは、組織の規模や環境の変化の中で、少しづつカイゼンを積み重ねていっている様子を感じとっていただけると幸いです。

アイキューブドシステムズでは、一緒に働いてくれる仲間を募集しています。 このブログを通して興味を持たれたみなさまの応募をお待ちしております!