優れたソフトウェアリリースの 3 つの要素

アーキテクチャ 1 に対して、チームワーク 2、それに自動化を追加すればできあがりです。

Dan Radigan Dan Radigan
トピック一覧

キャリアのどこかで、モノリシックなソフトウェアリリースに遭遇します。つまり、扱いにくいバグや相互依存関係があり、チーム全体が 24 時間かかりきりにならなければならないようなソフトウェアリリースです。本番環境に移行すれば複数のパッチが必要になることは言うまでもありません。

コードの出荷、つまりリリースは、ソフトウェア開発者のアジリティの優れた指標です。リリースプロセスがスムーズではないと、計画、コーディング、テストをすばやく行おうとするあらゆる努力が水の泡となります。アジャイルにリリースするためには、自動デプロイは重要であり、コード製作者と運用者が開発の初期段階からコミュニケーションをとり、継続的インテグレーションを実践し、不具合に即座に対応することも大事です。

コードをリリース可能な状態で維持できることは、アジャイル開発の特長です。準備ができたと判断した瞬間にコードを出荷できなければ、リーン計画や反復型開発の意味がまったくありません。

優れたソフトウェアリリースは、モジュールアーキテクチャから始まる

ソフトウェアプログラムにおいては、リリースを容易かつ頻繁に行えることが一番です。モジュールアーキテクチャを構築 (あるいはモジュールアーキテクチャを目指したリファクタリング) することで、アジャイル文化の一環としてリリースを行うことができます。(前述のモノリシックな) 大規模アプリケーションを 1 つ開発するのではなく、プログラム初期に複数のモジュールに分割します。類似するフィーチャーを小規模アプリケーションまたはコンポーネントにグループ化し、それぞれのアプリケーションまたはコンポーネント間で明確な API 規約を定めます。これらの API をビルドごとに自動的にテストすることで、互換性を確保するとともに、ソフトウェアリリースにおけるリスクを低減します。

モジュールアーキテクチャでは、ソフトウェアスタック全体を「ビッグバン」式でリリースする必要がありません。API 規約により、コンポーネントの更新が簡単になり、バージョン間の互換性を確保できます。つまりモジュール式リリースの方が可動部が少なく、リリースがシンプルになります。

優れたソフトウェアリリースは、良好な関係によって実現される

ソフトウェア開発は単独作業ではありません。むしろ、優れたソフトウェア開発には、プロダクトマネジメントから運用までチーム全体の協力が必要です。たとえば、オペレーションチームはエンドユーザーとの接点として、ソフトウェアを本稼働させるうえで重要な役割を果たします。

開発チームは運用チームに次のテクニックを伝えることができます。

  • 各リリースにおける素材の明確化。開発チームが保有しているリリース関連の情報と同レベルの情報を、運用チームが常に入手できているとは限りません。
  • リリースで解決された課題ごとの、課題トラッカーとソース管理システムへのリンクの提供。デプロイ中に問題が生じた場合、運用チームも同レベルの情報を入手できていることになります。
  • 開発環境からステージング環境にコードを移行している際に問題が発生することもあります。本番環境への移行中に再発する可能性もあるため、これらの問題に対する注意を呼びかけます。
  • デプロイに障害はつきものです。問題を迅速に解決するための明確なエスカレーションパスを、常に運用チームと共有します。

オペレーションチームは開発チームに次のような提案を行うことができます。

  • 本稼働環境において問題が発生した場合、根本的原因と解決策を理解する時間を設けましょう。今後はこの問題を避ける (またはより良く対処する) ことができます。
  • 構成データを本稼働環境からステージングと開発環境に戻し、構成のドリフトを防ぎます。

コードを開発からステージング、本番へと移行すると同時に、重要な設定およびユーザーデータは本番からステージング、開発へと逆方向に移行します。双方向の関係を持たせることで、開発環境に本番環境を緊密に反映させることができます。これはリリース日のバグや不測の事態の減少につながります。

優れたソフトウェアリリース|アトラシアンアジャイルコーチ

優れたソフトウェアリリースは、簡単にプッシュできる

自動化! 自動化! 自動化!

リリース文化を改善する最適な方法は、リリースの自動化です。リリースをまだ自動化していないのであれば、まずステージング環境へのリリースを自動化しましょう。そのシンプルさを体験すれば、自然と本番展開の自動化へと進むでしょう。

リリースが困難な場合は、リリース頻度を上げるようにしましょう。ステージングへのリリースでもかまいません。開発チームにリリースの問題点を感じてもらうことが、もっと簡単にする (そして自動化する) ためのイノベーションのきっかけとなります。

自動化テストと継続的インテグレーションは、優れたリリースの重要な要素です。ビルド時間とテスト時間はできるだけ短くしましょう。検証が容易なビルドはリリースも容易です。検証サイクルはチームの活動に沿っているからです。

優れたソフトウェアリリースはすばらしい!

コードをリリース可能な状態で維持できることは、アジャイル開発の特長です。

私たちの方法

SaaS の特性から、小規模リリースを頻繁に行うのが最も管理しやすいという結論に至りました。ダウンロード型の製品では、開発チーム、運用チーム、ビルドエンジニアリングチームの間での緊密な協力が大きな意味を持っています。これらのグループが連携してリリースを自動化し、その後の製品の変更に合わせて自動化を積極的に適応させます。アトラシアンでは、たくさんのチームが成功した master のビルドをテスト環境に自動的にデプロイしています。リリースをステージングに昇格する時、または顧客にリリースすべき時がくると、ボタンを押して自動デプロイを開始します。

ソフトウェア開発者にとって、リリースはイノベーションサイクルのハイライトであるべきです。作成したコードを顧客がどのように使用しているかを観察し、フィードバックを得ることができます。リリースを日常化すれば、本番環境でのコード展開が容易になり、自分のコードが使用されているという充実感が得られます!