実験的な機能:段階的リリース
by cmoullec on 27 August 2020
「実戦で変更されない計画はない。」これはプロイセンの陸軍元帥ヘルムート・フォン・モルトケが残したとされる有名な言葉です。この言葉はソフトウェア開発にも当てはまります。「実用で変更されないコードはない」
ミッションクリティカルな環境で運用中のアプリケーションやサービスの安定性を最大限に確保するには、段階的にソフトウェアを展開し、更新を制御することが必須です。これにより開発者はツールの新しいバージョンの普及状況を監視および観察できるのに加え、運用チームはコンプライアンスとセキュリティの目標を満たすことができます。最近まで、Snapの自動更新のタイミングは主にクライアント側の更新スケジュールにより決定されてきました。このたび、Snap開発者が新しいリビジョンの展開を微調整するための新しい実験的機能が登場しました。それが段階的リリースです。
分割による成功:段階的なリリース実装
段階的リリースの根本的なコンセプトは、特定のSnapのユーザーに少しずつ更新を配布することです。開発者は、そのバージョンが期待したように動作することを確認してから、徐々に更新を配布する人を増やすことができます。これは特に、多数のインストールベースを持つSnapのリリースを事前にテストするとき非常に有効です。
これは現在のところ実験的な機能で、一部の機能は変更される可能性があります。段階的リリースを使用するには、関連する環境変数が有効な状態でSnapcraftを実行する必要があります。
SNAPCRAFT_EXPERIMENTAL_PROGRESSIVE_RELEASES=y snapcraft ...
オプションが有効になったら、Snapのリビジョンをリリースできます。
snapcraft release <snap-name> <revision> <channel,channel,...> --progressive <percentage>
例を示します。
snapcraft release candycane 13 --stable --progressive 30
このコマンドは、「candycane」Snapのリビジョン5をデフォルト(最新)トラックの安定したチャネルに、30%の展開に設定してリリースします。新しいリリースの対象となるデバイスは、デバイスIDのハッシュなどに基づき、疑似ランダムに選択されます。
段階的リリースの背景となる概念や情報のいくつかは、最初は少しわかりにくいかもしれません。具体的な例を見てみましょう。
$ snapcraft status candycane
Track Arch Channel Version Revision Progress
latest all stable 0.6 8 73 → 70%
0.7 13 21 → 30%
candidate ↑ ↑ -
beta - - -
edge - - -
このデータの意味
「安定した」チャネルの段階的リリースは、ストアに報告するクライアントシステムの30%を目標として設定されます。「安定した」チャネルに表示される2つ目の数字は21で、リビジョン13をすでに提供されているクライアントシステムの実際の割合を示しています。この2つ目の値は、まだ進行中の開発作業によって決まりますが、今すぐこの実験的機能を使うとすれば次のように表示されます。
$ snapcraft status candycane
Track Arch Channel Version Revision Progress
latest all stable 0.6 8 70%
0.7 13 30%
candidate ↑ ↑ -
beta - - -
edge - - -
この値は現在、段階的リビジョンに更新することが(開発者の)目標であるクライアントシステムの割合を示しています。たとえば、段階的リリースを25%に設定すると、クライアントの約4台のうち1台が、次に更新を要求したときにアップデートを受けることになります。標準的な更新サイクルは6時間なので、設定された目標である25%に達するには6時間またはそれ以上が必要です。
リリースの中断とリビジョンのバグ修正
段階的リリースが非常に有用である別のシナリオを紹介しましょう。少数のクライアントシステムにリビジョンを提供することで、開発者は問題がある、またはバグ修正が必要な可能性のあるリリースもより的確にコントロールできます。
たとえば、リビジョン13(r13)をチャネルユーザーの20%にリリースした後で、ユーザーからのフィードバックまたは他の方法で、問題があることが見つかったとします。この場合、そのリビジョンの以後の展開を停止し、問題点を修正してから、新しいリビジョン(r14)をチャネルユーザーの20%にリリースします。この場合には、リビジョンr13を受け取った20%のクライアントシステムは、r14も最初に受け取ることになります。これにより開発者は、バグ修正が有効であることを検証してから、対象ベースの100%に達するまで段階的にロールアウトを続けることができます。
まとめ
段階的リリースは、ソフトウェアのバージョンを制御された段階的な方法でロールアウトする便利で柔軟な方法です。これによって開発者は、特に高リスクの環境において、新しいリリースの利用によって問題が生じることがないかどうか、慎重に監視できます。このブログでプレビューした機能は、まもなくSnapcraft 4.0でロールアウトされる予定です。段階的リリースに関する質問やご意見(または他の話題でも)は、当社フォーラムでお聞かせください。
写真提供:Andrew Ruiz、Unsplashより
ニュースレターのサインアップ
関連記事
コネクテッドカー向けのソフトウェア開発:Anbox Cloudで着実に前進
大手自動車メーカーの間で、車載インフォテイメント用のオペレーティングシステムとしてAndroid Automotive OS(AAOS)が人気です。AAOSは、車内でもAndroidスマホと同様にさまざまなアプリケーション、機能、サービスを使用するための総合的なインフォテイメントプラットフォームです。 AAOSを使えば運転を楽しく快適にする新しいアプリケーションや機能の開発が容易になるため、対応アプリやサービスのエコシステムが急速に成長しています。 しかし、安定したインフォテイメントシステムの開発は、困難に満ちた長い道のりです。ハードウェアの提供状況、ロジスティクス、システム設定にも多くの課題があります。たとえばハードウェアの依存関係が問題を引き起こし、テストを遅らせるこ […]
アプリケーションセキュリティ(AppSec)とは?
サイバーセキュリティの世界は変わりました。サイバー攻撃、マルウェア、ランサムウェアのリスク増大に加え、新しいサイバーセキュリティ規制の圧力、情報漏洩や違反にかかる高額の罰金により、もはやアプリケーションセキュリティ(AppSec)は必須です。 このブログ記事では、このような課題に対処し、基本的なセキュリティ対策を中心として業務やシステムを守る方法を紹介します。AppSecの概要と利点、AppSecの設計と実装に取り組む方法を説明した後、セキュリティに関するCanonicalチームのアドバイスとAppSecのベストプラクティスを検討しましょう。 AppSecとは アプリケーションセキュリティ(略してAppSec)とは、アプリケーションのライフサイクルを通じて脆弱性の悪用を防 […]
何でも質問できるLivechat Dayを7月11日(金)に開催
匿名でのUbuntuに関する質問にCanonicalの日本人エージェントが回答します! 当日10:00 〜 16:30の間、サーバー・組込機器担当のエージェントが特設ページに常駐し、Ubuntuを始めとしたCanonicalが提供する各種サービスに関するあらゆる質問にお答えします。(※参加登録不要) Google Calendarへの予定追加 Microsoft Office 365への予定追加 Outlookへの予定追加 ❓ 質問例 ※ 本LivechatはUbuntu及びOSSに対するテクニカルサポートを提供するものではありません。 📅 日時:2025年7月11日(金)10:00–16:30 (※入退室自由・参加登録不要) 🏟 場所: 特設ページ 💻参加・質問方法: […]