2022年3月17日
Feature Flags
Continuous Integration
Continuous Delivery
CI/CDとフィーチャーフラグは、バットマンとロビンのような関係です。単独でも強く、力を合わせれば向かうところ敵なしです。統合パイプラインの価値について見ていきましょう。
ソフトウェアをより速くより安全に提供する必要性は、当然の帰結です。エンジニアリングチームは、以前より速くソフトウェアを提供し、かつシステムにそれ以上のリスクをもたらさないよう常に努めています。
この進化の一環として、ソフトウェアデリバリーパイプラインが生まれました。特にCI/CDが有名です。しかし、チームがCI/CDの境界を押し広げるにつれて、プロセスの最後尾で新たな問題に遭遇することが分かってきました。古典的ですね。
このブログ記事では、この問題の最後尾であるデプロイメントについて探っていきます。フィーチャーフラグがどこに関係するかも見ていきましょう。
パイプライン、プロセス、ライフサイクルなど、呼び方はさまざまですが、その考え方は同じです。常に変化と新機能が開発され、それらがお客様の手に渡る必要があります。
特に規模が大きくなると、ソフトウェアを提供するための標準的な方法、つまりパイプラインが必要になります。パイプラインは、あなたが出荷するものが一貫して合格することを保証し、またリスク(もちろん、手直しや障害シミュレーションの可能性)を最小限に抑えることができます。
より速く、より安全にソフトウェアを提供することが、チームがCI/CDを採用する理由です。そして今、チームはそのソフトウェアデリバリーパイプラインをさらに拡張するために、フィーチャーフラグも採用しつつあります。CIの最終結果であるアーティファクトがCDパイプラインで消費されるのと同じように、CDの最終結果であるデプロイは、次の段階に進むためにフィーチャーフラグシステムで消費されるのです。
しかし、なぜチームはフィーチャーフラグを採用する必要があるのでしょうか。コードが本番環 境にデプロイされた後で良いのではないでしょうか。その通り!そこで問題になるのが、本番環境に移った後のことです。
まずは、当たり前の話から始めましょう。CDは、コードが本番環境にデプロイされた時点で終了します。デプロイメントが稼動した後にできる制御は、デプロイメント全体をロールバックすることに限定されます。デプロイの中身を制御することはできませんし、単一障害点を解決するにもデプロイメント全体を本番環境から引き離さなければなりません。大事なことなのでもう一度言います。本番環境に移行した瞬間に制御不能になるのです。本番稼働後に何か起きてしまったらと思うだけでひやっとしますね。
デプロイ後は無事でありますように。
しかし、現実には、多くのチームが日々このような状況に置かれています。本番環境に移行する前のスピードと制御は必要ですが、本番環境に移行した後の制御は限定的です。このため、デプロイメントの前後で興味 深い問題が発生することがあります。
しかし、現実には、多くのチームが日々このような状況に置かれています。本番環境に移行する前のスピードと制御は必要ですが、本番環境に移行した後の制御は限定的です。このため、デプロイメントの前後で興味深い問題が発生することがあります。
ここで重要なのは、このようなことがすべて終わった後でも、配備は信じられないほどストレスの多いものであり、ゴーサインを出すのは、映画で大きな赤いボタンを押すのと同じくらい劇的なことなのです。ここで最も重要な ことは、何か問題が発生した場合、総出で対応しなければならないことです。これはDevOpsにとってストレスになるだけでなく、開発チームが手直しをしなければならないため、新機能の開発速度が遅くなります。
それ以上に、顧客プロファイル(無料ユーザーと有料ユーザーなど)に基づいた複数のエクスペリエンスを作成することは負担が大きく、常に期待通りに動作するとは限りません。しかし、その制御はデプロイ後、エンジニアリングチームだけでなく、プロダクト、セールス、カスタマーサクセスのチームにも必要なのです。
最善を尽くしているつもりでも、本番環境では本当にひどい状態になってしまうことがよくあります。不便なカスタマーエクスペリエンスコントロールはしばしば壊れ、長期間の機能ブランチは奇妙なマージ問題を引き起こし、もし何かが壊れたら…ストレスと怒りを抱えたエンジニアのみなさん、よろしくお願いします。本番環境で何が起こるべきかは分かっていても、制御して本来の目標を達成することは非常に困難です。本番環境で制御可能かつこれらの障害をすべて取り除けるような適切なシステムを構築できなければ。
CDの限界を解決するために必要なのは、フィーチャーフラグ管理システムだと言っても驚かれないでしょう。そして、それは理にかなっていると思いませんか?チームは既に、今あるツールでFeature Flagsを実装しようとしているのです。
フィーチャーフラグ+CD=ソフトウェアデリバリーの速度と制御
デプロイ後に制御できないのは恐ろしいことであり、リスクでもあります。開発者のストレスレベルが上がるだけでなく、本番環境で制御できないことは、特に何か問題が発生したときに、ビジネスへの具体的な影響が出ます!そして、これがフィーチャフラグの最初の役割です。
フィーチャーフラグシステムを導入している場合は、すぐに多くの価値を実感できます。 新しい変更や機能がデプロイされた後、それらの制御を失うことがないことを知っていることは、開発チームとDevOpsチームにとって大きな意味があります。 フィーチャーフラグを使用して本番環境で制御できるようにすることの利点をリストにしてみます。
ソフトウェアデリバリーにおける速度
一方、フィーチャーフラグは、ソフトウェアデリバリープロセスの速度を向上させることができます。まず、CDは速度を向上させますが、デプロイメントが大きくなるにつれ、1)リスクが増える、2)完成させる必要のある機能/変更が増える、という理由から、収穫が少なくなる傾向があること を思い出してください。では、フィーチャーフラグにはどのような効果があるのでしょうか。
フィーチャーフラグはCDにとって、CIにとってのCDのような関係性です。CI/CDではなく、CI/CD/FFとなるのは自然な流れです。CIを適切に行うにはCDが必要であり、CDを適切に行うにはFFが必要なのです。実際、CDとFFを一緒にやらない理由は何でしょうか?
バットマンとロビンのように、この2つの組み合わせこそが、ソフトウェアデリバリーの速度と制御という目標にふさわしいものなのです。CDは可能な限り速く出荷することですが、その速度は、出荷する製品の信頼性と品質によって制限されます。
フィーチャーフラ グは、一貫して出荷を安全にすることでこの上限をなくし、エンジニアはソフトウェアデリバリーのストレスではなく、最も重要なことに集中できるようにします。
実際、フィーチャーフラグを使用したチームは、DORAの指標においてCDのみを使用したチームよりも常に高いパフォーマンスを示しています。
チームは、真の速度と真の制御を求め、途中で行き詰まることを望んでいません。リスクとストレスを最小化し、新機能の質と量を最大化したいのです。フィーチャーフラグやCDは、それ自体でチームをそのビジョンに近づけるものですが、バットマンとロビンが一緒に働くことによって、この未来が本当に実現されるのです。
しかし、ほとんどのフィーチャーフラグを実装すると、CDとの接続が切れ、不必要なリスクが発生し、管理と可視性が断片化されます - これは、ミッションクリティカルなシステムにとって望ましいものではありません。また、メトリクス、監査ログ、ガバナンス、セキュリティの面でも問題があります。
そこで、Harnessの出番です。Harness CDとHarness Feature Flagsは、あらゆる形態の継続的デリバリーを完成させるために必要な、企業共通の要件を満たします。もちろん、両方を導入する必要はありません。しかし、バットマンとロビンが一緒にいることは、完璧な意味を持ちます。
この時点で、CDとフィーチャーフラグを独立させておくことの大まかな意味と、なぜ そうすることに意味がないのかについて、かなり理解できたと思われます。はっきり言って、CDとフィーチャーフラグを一緒に使うことを考えなければ、CDやフィーチャーフラグソリューションの価値を十分に発揮できないことになります。そして実際、どちらか一方を使用して、もう一方を使用しないのは、より多くの頭痛の種を作り出していることになるでしょう。
Harnessは、CDやフィーチャーフラグなどの製品を揃え、ソフトウェアデリバリーライフサイクルの各段階でお客様に対応します。私たちのビジネスを確認したい場合は、永久無料のサインアップをするか、正式なデモをご依頼ください。
この記事はHarness社のウェブサイトで公開されているものをDigital Stacksが日本語に訳したものです。無断複製を禁じます。原文はこちらです。