フィーチャーフラグと段階的ロールアウト
フィーチャーフラグでデプロイとリリースを分離し、新機能を段階的に公開して、問題が起きた場合は即座に無効化します。
「フィーチャーフラグと段階的ロールアウト」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
デプロイとリリースの違い
高度なデリバリーにおける重要な考え方として、コードをデプロイすることと、機能をリリースすることは同じではありません。
フィーチャーフラグを使うと、本番環境にコードをデプロイしておきながら、任意のタイミングで一部またはすべてのユーザーに対して機能を有効化できます。
フィーチャーフラグとは
フィーチャーフラグ(またはトグル)は、設定値を確認してコードパスを実行するかどうかを決める、コード内の条件分岐です。
if (flags.isEnabled('new-checkout')) {
renderNewCheckout();
} else {
renderOldCheckout();
}ブランチよりフラグが優れている理由
長期間維持するフィーチャーブランチは、マージを困難にします。フラグを使えば、機能を非表示にしたまま、小さな変更を継続的にmainへマージできます。
- より小さく安全なプルリクエスト
- トランクベース開発
- 再デプロイなしで即座にオン/オフを切り替え
フラグの種類
フラグにはさまざまな用途があります。
- リリースフラグ — 未完成の作業を非表示にします
- 運用フラグ — リスクのあるシステムの緊急停止スイッチとして機能します
- 実験フラグ — A/Bテストに使用します
- 権限フラグ — プレミアムユーザーに利用権限を与えます
種類を把握すると、そのフラグをどのくらいの期間維持するか判断しやすくなります。
ターゲティングルール
フラグのプラットフォームでは、ユーザーID、グループ、地域、割合などによって、機能を表示する対象を指定できます。
これにより、新しいインフラストラクチャをデプロイするのではなく、設定によって段階的ロールアウトを実行できます。
割合によるロールアウト
よくある方法は、最初に少ない割合のユーザーに対してフラグを有効にし、その後段階的に増やすことです。1%、10%、50%、100%というように進めます。
インフラストラクチャ層でトラフィックを分割するカナリアデプロイとは異なり、これはコードの設定で制御する論理的なロールアウトです。
// Pseudo targeting config
flag: new-checkout
rollout:
percentage: 10
attribute: userId緊急停止スイッチ
運用上の最大のメリットは、フラグで制御している機能に問題が発生した場合、ロールバックデプロイを行わずに即座に無効化できることです。
コードを戻して再デプロイする場合と比べて、平均復旧時間を大幅に短縮できます。
パイプラインでのフラグ利用
フラグの変更をCI/CDに統合できます。たとえば、ワークフローのステップで、デプロイが成功した後にフラグを有効化したり、段階的な拡大をスケジュールしたりできます。
- name: Enable feature
run: |
curl -X PATCH https://flags.example.com/api/flags/new-checkout \
-H "Authorization: Bearer ${{ secrets.FLAG_TOKEN }}" \
-d '{"enabled": true}'デフォルトでオフにして安全にする
フラグは必ず安全側にフォールバックするように設計してください。フラグサービスに接続できない場合、コードは既知の正常なデフォルト値(通常はオフ)にフォールバックする必要があります。
フィーチャーフラグが単一障害点になってはいけません。
const enabled = flags.isEnabled('new-checkout', { default: false });フラグの整理
フラグはコードに分岐を作ります。古いまま残ったフラグは技術的負債となり、コードを読む人を混乱させます。
リリースフラグの展開が完了して安定したら、そのフラグを削除し、古いコードパスも削除します。フラグの有効期間は意識して管理してください。
フラグとデプロイパターンの組み合わせ
フィーチャーフラグは、ブルー/グリーンデプロイやカナリアデプロイを補完します。インフラストラクチャのパターンはトラフィックを切り替え、フラグは機能を切り替えます。
両方を使うことで、静かにデプロイし、段階的に公開し、必要なら即座に停止するという、最も安全なリリースを実現できます。
理解度チェック
フィーチャーフラグの理解度を確認しましょう。
まとめ
フィーチャーフラグを使って、デプロイとリリースを分離する方法を学びました。
- フラグによって、設定で制御する条件分岐の背後にコードを隠します
- ターゲティングによって、割合を指定した段階的ロールアウトが可能になります
- 緊急停止スイッチによって、再デプロイなしで即座に復旧できます
- 安全側にフォールバックするように設計し、負債を避けるために不要になったフラグを整理します
ブルー/グリーンデプロイやカナリアデプロイと組み合わせることで、フラグは高度なデリバリーのツールセットを完成させます。
よくある質問
「フィーチャーフラグと段階的ロールアウト」レッスンは無料ですか?
はい。「フィーチャーフラグと段階的ロールアウト」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「フィーチャーフラグと段階的ロールアウト」で何を学びますか?
フィーチャーフラグでデプロイとリリースを分離し、新機能を段階的に公開して、問題が起きた場合は即座に無効化します。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「フィーチャーフラグと段階的ロールアウト」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Blue/Green デプロイ
- Actions によるカナリアリリース
- ロールバックとディザスタリカバリ
- フィーチャーフラグと段階的ロールアウト