クーリエism クーリエのヒトとビジョンを伝える

年間100時間以上の手作業を解消!GitHub Actionsでスマホアプリのビルドを自動化した話

2024年8月26日
サムネイル

GitHubとGitHub Actionsを活用した新しい開発フロー

開発コストの削減と生産性向上を目指して

プロジェクトリーダー(PL):今回は私たちが取り組んできた「アプリビルド作業の自動化」プロジェクトについて振り返りたいと思います。

従来のアプリ開発フローは、開発者一人ひとりがリリースに係る作業を手動で行う必要があり、非常に非効率的でした。そこで私たちは、GitHubとGitHub Actionsを活用した自動ビルドシステムを実装することにしました。

エンジニア:従来のビルドプロセスでは毎回手動作業が必要でしたからね。ビルドとリリースごとに0.5時間ほどの時間が掛かっていました。

これが毎日1回以上発生するので、年間で100時間以上の工数が無駄になっていたんです。この無駄な作業時間を自動化して削減することが、このプロジェクトの主な目的でした。

PL:開発者の生産性を大幅に向上させるためには、こういった単純作業の自動化が不可欠でした。GitHubとGitHub Actionsを使えば、プッシュされたコードに対してビルドやテスト、デプロイなどの一連の作業を自動化できると考え、このプロジェクトが動き出しました。

エンジニア:GitLab+独自ビルド環境に比べ、GitHubだけで済むので環境構築の工数が削減されるとともに、インフラコストも大幅な削減が見込めました。ただし実際に導入するまでには、いくつかの課題をクリアする必要がありました。

サンプルアプリでの検証と課題の洗い出し

PL:ただし、実際の導入にあたっては、React Nativeアプリのビルド最適化やマルチ環境対応など、いくつかの技術的チャレンジがありましたね。これらの課題をどのように克服したのか、具体的に振り返ってみてください。

エンジニア:最初の大きな課題は、GitHub ActionsでReact Nativeアプリのビルドができるかどうかでした。サンプルアプリでAndroidとiOSそれぞれのビルドを試みましたが、キャッシュの設定やビルド時間の最適化など、いくつか対処すべき点がありました。

PL:具体的にはどのような対策を講じたんですか?

エンジニア:以下のように、Android側ではnpmパッケージとGradleのキャッシュを有効化し、iOS側ではPodsとxcodebuildのキャッシュを有効にしました。これによりビルド時間を大幅に短縮できました。

実プロジェクトへの適用と課題解決

求人アプリへの導入とビルド自動化の実現

PL:サンプルアプリでの検証が一通り終わったところで、次は実際の求人アプリへの適用作業に移りましたね。そこではどのような課題に直面しましたか?

エンジニア:求人アプリへの適用では、実運用を見据えた細かい設定が必要でした。まずAndroidとiOSそれぞれでビルドとアップロードができるようにする必要がありました。さらに、staging環境、本番環境といった複数の環境に対応するため、ビルドのトリガー条件を細かく設定しました。

PL:開発の効率化とともに、リリースプロセスの自動化と標準化も重要な課題でしたね。

エンジニア:はい。開発者がコミットメッセージに特定のキーワードを含めるだけで、対応する環境へのビルドとリリースが自動で行われるようにしました。本番リリースに関してはmainブランチへのマージをトリガーに設定しています。

Slack通知の実装と継続的な改善

PL:自動化の恩恵は開発者の生産性向上だけではなく、リリースプロセスの透明性と追跡性の向上にもつながりますね。ビルドの成否をSlackで通知する機能も実装しましたね。

エンジニア:はい、Slack通知機能の実装により、ビルドの状況をリアルタイムで把握できるようになりました。

Android/iOSそれぞれのビルド完了時に、成功/失敗の結果と関連情報がSlackに自動的に投稿されます。開発者は手動でビルドログをチェックする必要がなくなり、すごく便利になりました。

PL:本当に便利になりましたよね。このように一連の自動化を実現できたことで、どれくらいの効果がありましたか?

エンジニア:先にも少し言ったんですが、年間で100時間ほどの工数削減が見込めます。

厳密に言うと、ビルド作業自体がなくなったわけではなく、ローカルでビルドしてた頃よりもビルドの待ち時間をより有効に使えるようになったことが良かったです。これまではビルドが完了しているかを確認することに意識が少し向いてしまっていましたが、今はSlack通知がくるまでは完全に意識の外に置いておけます。

また、ビルド中はPCが重くなるため作業に制限がかかっていましたが、今は次の機能実装にもスムーズに着手できるようになりました。

自動化による成果と今後の展望

さらなる自動化とDevOps文化の醸成

PL:本当に素晴らしい成果ですね。私達が日々モニタリングしている開発生産に関わるKPIを見ても、この自動化の効果が良く分かります。ローカルビルドをやめるだけでここまでの効果があるとは想像以上でした。

エンジニア:そうですね。集中できるだけでなく、ストレスが減ったことも生産性が上がった要因かもしれません。

PL:本当にすばらしい成果だと思いますけど、これで満足することなく、継続的な改善を目指していきたいですね。

エンジニア:はい、そのつもりです。今回の自動化はあくまでスマホアプリのビルドとリリースプロセスに限定されています。今後は、WEBアプリ側ではすでに導入しているE2Eテストを取り入れるなど、スマホアプリのCI/CDのさらなる高度化などに取り組んでいきたいと考えています。

PL:それは楽しみですね。エンジニア組織のオペレーショナルエクセレンス(業務の磨き込み/洗練化)がどんどん向上していきますね。

エンジニア:そうですね。自動化はあくまで手段で、本当の目的はエンジニア組織発の事業インパクト創出です。エンジニアリングによって属人化を排除し、人間が本当にやるべきことだけにリソースを投下し続けてきた結果として競争優位を生み出してきたのがクーリエです。今後も継続的な改善を重ね、組織のオペレーショナルエクセレンスを推進していきたいと思います。

関連記事