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

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

Dan Radigan Dan Radigan
トピック一覧

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

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

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

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

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

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

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

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

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

  • 各リリースの部品表を明確にしましょう。運用チームと開発チームで、リリースのコンテキストレベルが同じであるとは限りません。
  • そのリリースにおいて解決された各課題について課題管理システムおよびソースコード管理システムへのリンクを用意し、デプロイメント中に問題が発生した場合に運用チームが同レベルのコンテキストを把握できるようにします。
  • 開発環境からステージング環境にコードを移行した段階で課題が表面化することもあります。本番でも問題が起こる可能性があるため、このような課題には別途対応しましょう。
  • デプロイメント時には不具合が発生するものです。問題をスムーズに解決できるよう、運用チームにエスカレーションパスを明確に伝えておきましょう。

運用チームは開発チームに次のような提案を行うことができます。

  • 本番で問題が発生した場合、時間をとって原因と解決策を探りましょう。将来の問題を回避 (あるいは適切に対応) するためです。
  • 設定の混乱を防止するために、設定データを本番環境からステージングおよびデプロイメント環境に移行しましょう。

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

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

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

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

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

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

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

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

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

私たちの方法

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

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