スピードと自信を持ってリリースすることは、すべてのアプリ開発チームにとって一つの大きな目標ではないでしょうか。
アプリにおけるリリース・トレインは、より迅速なリリースモデルとモバイルサイクルの高速化を実現し、分散したアプリ開発チームがその規模にかかわらず、より緊密に連携することを可能にします。
リリース・トレインの手法をチームに導入してスピードとリリース品質を向上させる方法についてまとめたレポートをダウンロードしていただけます。
Lyft、Soundcloud、スカイスキャナー社といった名だたる企業では、リリース・トレインを大規模アジャイル開発フレームワークとして活用し、計画性の向上、リリースの効率化、リスクの低減、ビルド状況を視覚的にフィードバックすることを実現しています。
当ブログでは、リリース作業において固定したスケジュールを採用しているプロダクトマネージャーやエンジニアによって共有されている重要なポイントやベストプラクティスをご紹介いたします。リリースサイクルの向上や最適化や、アプリのリリースについてより多くの情報に基づいた決定を行うのに大変参考になるかと思います。
チーム間のコラボレーションを強化し、リスクを減らすためにリリース・トレインを使用する
「2週間の間隔で作業を行うことで、各アップデートをテストして準備する時間を確保し、アプリへの変更を迅速に行うことができます。また、各アップデートに含まれる変更を少なく済ませることができるため、動作しないものを追加してしまうリスクが減り、問題が発生した場合の対処も容易になります。」
Monzo Bank社、シニアプロダクトマネージャー
「リリース予定日が事前にわかることで、編集チームとのコミュニケーションがより効果的になり、新機能のプロモーションやスケジュールへの理解が深まるとともに、十分にテストされた修正プログラムをより定期的に配信できるようになりました。」
Reach PLC社、iOSデベロッパー
「リリース・トレインに従うことで、変更がいつ一般に公開されるのかなど、誰もが予測できるようになりました。その結果デザインチームやデータ分析チームは、機能開発の仕様の定義や配信にいつ援助が必要になるのかについて日程を予測することができるようになりました。その上プロダクトマネージャーは、実験や製品発表の時期を知ることができ、エンジニアリングチームは、特定のコードフリーズ日を目指して作業を計画することができます。」
Soundcloud社、ソフトウェアエンジニア
スムーズで一貫性のあるロールアウトを行うためにリリースマネージャーを特定する
「リリースマネージャーは、リリースを実行する責任と権限を持ち、組織全体でこの手法に対する信頼を築きます。通常は、エンジニアリングマネージャーやプロダクトマネージャーがこの役割をうまく果たすことができます。リリースマネージャーは、チームと組織にプロジェクトへ参画してもらい、ワークフローを微調整することに対する利点を示す必要があります。」
Lyft社、プロダクトマネージャー
「コードフリーズが発生すると、リリースの責任者は、アプリケーションの主要なユースケースと、(まだ)自動化できていないいくつかのシナリオをカバーする一連の手動リグレッションテストを実行しなければなりません。すべてが検証されリリースに自信が持てるようになったら、そのビルドをベータチャンネルにデプロイした後、プロダクションユーザーの何割かにロールアウトするという段階的なロールアウトプロセスを開始することができます。」
Soundcloud社、ソフトウェアエンジニア
リリースの信頼性を高め、段階的なロールアウトを行うために機能フラグを導入する
「機能の完成までには種類によって異なる時間を要するため、アプリに変更を加えたとしても「機能フラグ」の後ろに機能を隠しておくことがあります。このコードをユーザーに公開しても、実際にその機能にアクセスすることはできません。新機能が使えるようになれば機能フラグを削除することで、新しいアプリのアップデートをしなくても誰でも使えるようにすることができます。」
Monzo Bank社、シニアプロダクトマネージャー
「機能フラグを使用することで、ユーザーがアプリケーションを実行しているときに表示される機能を指定することができています。機能フラグはリモートで変更できるので、新しいバイナリをリリースすることなく、機能をオン/オフすることができます。開発が完了したら、機能フラグを使って全ユーザーの1%、5%、20%、50%と段階的に公開し、そして最終的には100%(全て)のユーザーにリリースします。その間、機能のパフォーマンスを継続的に監視しました。」
スカイスキャナー社、シニアソフトウェアエンジニア
マルチプラットフォームでの一貫したリリースに向けた柔軟性を向上させる
「リリース・トレインのスケジュールを固定することで、予期せぬ問題が発生したときに柔軟性を高めることができます。厳格にすることで、かえって柔軟性が増すのです。注目度の高いリクエストがあれば、それを次のトレイン(列車)に乗せることができるからです。優先度の高い変更に対応するためにすべてを中止するのではなく、現在の開発を次のリリースに延期するだけで、プロセス全体が「脱線」することはありません。」
Lyft社、プロダクトマネージャー
iOSとAndroidの両方において機能を開発している場合、リリース方法にはいくつかの選択肢があります。まず片方のプラットフォームでリリースし、その翌週にもう片方のプラットフォームでリリースする。あるいは、両方のプラットフォームで機能が完成するのを待って、すべてのユーザーに同時に提供するという方法もあります。2週間あれば、バグを見つけて修正したり、最初にリリースしたiOSのユーザーから寄せられたフィードバックに対応したりすることができます。
Monzo Bank社、シニアプロダクトマネージャー
スピードと自動化のために CI ツールを採用する
「小さな変更を繰り返してアプリをすばやく改善しようとする場合、短いリリースサイクルが不可欠です。これにより、市場に対応し、ユーザーから素早く学ぶことができます。そのためには、このスピードに対応するための適切なツールセットを用意する必要があります。」
Lyft社、プロダクトマネージャー
「多くの機能、コードの貢献、デバイスに対応すべきソフトウェアを自信を持ってリリースすることは、簡単なことではありません。そのため私たちは、リリースプロセスに多くのツールとプラクティスを導入しています。CIツールを使用することで、マスターブランチが常にデプロイ可能であることを保証しています。」
Soundcloud社、モバイルソフトウェアエンジニア
「CIツールを使用することで、マスターブランチが常にデプロイ可能であることを保証しています。これは、毎晩、毎週、または隔週で実行される時間ベースのジョブをスケジューリングするか、またはトリガーされたジョブ(例えば、プルリクエストがmasterブランチやreleaseブランチにマージされたときなど)によって達成されます。これらのCIジョブにより、難読化・縮小化されたリリースビルドがすべて設定される上、最新のローカライズされた翻訳に更新されて、反復的なタスクが自動化されることが保証されています。」
Soundcloud社、ソフトウェアエンジニア
リリース・トレインの手法をチームに導入してスピードとリリース品質を向上させる方法についてまとめたレポートをダウンロードしていただけます。