メインコンテンツに移動

シフトライトテストとは?目的・メリット・実施方法・シフトレフトとの違いをわかりやすく解説

ソフトウェアテストというと、リリース前に開発環境やステージング環境で不具合を検出し、問題がない状態になってから本番環境へ公開する流れをイメージする人も多いでしょう。しかし、どれほど事前テストを充実させても、本番環境で発生するすべての条件を完全に再現することは困難です。

本番環境では、実際のユーザー数やアクセスパターン、通信環境、利用端末、ブラウザ、データ量、外部サービスの応答状態など、テスト環境では再現しきれない多くの要素が組み合わさります。そのため、ステージング環境では問題がなかった機能でも、本番公開後に初めて性能低下やエラーが発生することがあります。

そこで重要になるのが「シフトライトテスト」です。シフトライトテストでは、リリースを品質確認の終了地点と考えるのではなく、本番環境へリリースした後も継続的にシステムの状態を確認します。実際の利用状況を観測しながら、機能、性能、可用性、耐障害性、ユーザー体験などを検証し、そこで得られた情報を次の開発やテストへ反映していきます。

1. シフトライトテストとは

シフトライトテストを理解する際には、単純に「本番環境でテストすること」と考えるだけでは十分ではありません。重要なのは、リリース後の実環境から継続的にフィードバックを取得し、その情報を品質改善へ活用することです。

また、本番環境には実際のユーザーや業務データが存在するため、開発環境と同じ感覚で自由にテストすることはできません。影響範囲を限定し、問題発生時にすぐ元へ戻せる仕組みを整えた上で、安全に検証する必要があります。

1.1 シフトライトテストの基本的な意味

シフトライトテストとは、ソフトウェア開発ライフサイクルの後半、特にリリース後や本番運用中に品質を継続的に確認する考え方です。

開発工程を「要件定義 → 設計 → 実装 → テスト → リリース → 運用」と左から右へ並べた場合、本番環境での監視や検証は右側に位置します。このため、品質確認を右側へ拡張するという意味で「シフトライト」と呼ばれます。

確認対象は、単に「機能が動いているか」だけではありません。レスポンスタイム、エラー率、可用性、ユーザー操作の成功率、インフラの状態などを継続的に観測し、実際のサービス品質を確認します。

1.2 シフトライトが必要とされる背景

現在のWebサービスでは、短いサイクルで機能を追加し、頻繁にリリースする開発スタイルが一般的になっています。その結果、すべての条件をリリース前に完全に検証することは難しくなっています。

また、クラウドサービスや外部APIを利用するシステムでは、自社コードに変更がなくても外部環境の変化によって性能や可用性が変わることがあります。

そのため、リリース前だけで品質を保証するのではなく、運用開始後も継続的にサービス状態を確認し、問題を早期に発見する仕組みが必要になります。

2. シフトライトテストが必要な理由

シフトライトテストが注目される背景には、本番環境でしか確認できない問題が数多く存在することがあります。テスト環境を本番へ近づけても、実際のトラフィックやユーザー行動まで完全に再現することは困難です。

そのため、事前テストを十分に実施した上で、本番から得られる情報を品質保証へ活用する必要があります。

2.1 本番環境でしか発見できない問題がある

本番環境では、実際のユーザーによる予測しにくい操作や大量アクセスが発生します。特定の時間帯だけ負荷が集中したり、一部の地域や端末だけレスポンスが遅くなったりするケースもあります。

また、本番データの量や分布によって初めて発生するSQLの性能問題や、複数サービスが同時に利用されたときだけ発生する競合状態などもあります。

こうした問題は、テスト環境だけでは十分に確認できない場合があります。そのため、本番環境の状態を継続的に観測することが重要です。

2.2 システム環境は継続的に変化する

ソフトウェアをリリースした後も、システム環境は固定されているわけではありません。ユーザー数やデータ量は増加し、外部サービスの仕様やクラウドインフラの状態も変化します。

その結果、リリース直後には問題がなかったシステムでも、数か月後には性能劣化やエラー増加が発生する可能性があります。

シフトライトテストでは、本番環境を継続的に監視することで、こうした変化を早期に検出し、大きな障害になる前に対応できる体制を整えます。

3. シフトライトテストを実施する主な目的

シフトライトテストの目的は、本番環境で大量のテストケースを実行することではありません。実際のユーザーやシステムから得られる情報を活用し、リリース後も継続的に品質を確認することが本来の目的です。

3.1 リリース後の品質を確認する

リリース前のテストですべての確認項目を通過していても、本番環境で同じ品質を維持できるとは限りません。

シフトライトテストでは、リリース直後からエラー率、レスポンスタイム、主要機能の成功率などを確認し、新しいバージョンによってサービス品質が悪化していないかを評価します。

特に高頻度でリリースするサービスでは、「本番へデプロイできた」ことではなく、「本番環境で正常に動作していること」まで確認して初めてリリース完了と考えることが重要です。

3.2 実際のユーザー体験を把握する

テスト担当者が作成したシナリオと、実際のユーザー行動は必ずしも一致しません。ユーザーは想定していなかった順番で画面を操作したり、異なる通信環境や端末からサービスを利用したりします。

実ユーザー監視を利用すれば、ページ表示速度、エラー発生率、操作完了率などを実際のユーザー単位で確認できます。

これにより、「システムとしては正常だが、一部のユーザーにとって非常に遅い」といった問題も発見しやすくなります。

3.3 障害への耐性を確認する

本番環境では、外部APIの遅延、ネットワーク障害、キャッシュ停止、サーバー障害など、さまざまな問題が発生する可能性があります。

システム設計上は代替処理や遮断機構を実装していても、それらが実際の環境で正常に機能するかを確認することが重要です。

影響範囲を限定した上で障害を意図的に発生させるカオスエンジニアリングなどを利用することで、障害が一部のサービスからシステム全体へ連鎖しないかを確認できます。

3.4 本番の情報を次の開発へ活用する

シフトライトで取得した情報は、運用チームだけのものではありません。

本番で発生したエラーや性能低下を分析し、「なぜ事前テストで検出できなかったのか」を確認することで、次の要件定義やテスト設計を改善できます。

このように、本番環境から得られたフィードバックを次の開発工程へ戻すことが、継続的な品質改善につながります。

4. シフトライトテストの主な手法

シフトライトテストには、一つの決まった方法が存在するわけではありません。本番環境の監視、段階的なリリース、実ユーザーの行動分析など、複数の手法を目的に応じて組み合わせます。

4.1 合成監視

合成監視とは、自動化されたプログラムから定期的に本番サービスへアクセスし、主要な機能が正常に動作しているかを確認する方法です。

例えば、

ログイン → 商品検索 → 商品詳細 → カート追加

といった代表的なユーザー操作を一定間隔で実行します。

実際のユーザーから問い合わせが発生する前に異常を検知できる可能性があるため、重要機能の継続監視に適しています。

4.2 カナリアリリース

カナリアリリースとは、新しいバージョンを最初からすべてのユーザーへ公開するのではなく、ごく一部のユーザーから段階的に公開する方法です。

例えば、

1% → 5% → 20% → 50% → 100%

というように対象ユーザーを増やします。

各段階でレスポンスタイムやエラー率を確認し、問題が発生した場合には公開範囲が小さいうちに停止またはロールバックできます。

4.3 A/Bテスト

A/Bテストでは、複数の画面や機能を異なるユーザーグループへ提供し、その結果を比較します。

例えば新しい購入画面を一部ユーザーだけに提供し、従来画面と購入完了率を比較することで、単に「機能が正常に動くか」だけではなく、「実際にユーザーにとって改善になっているか」を確認できます。

4.4 カオスエンジニアリング

カオスエンジニアリングでは、システムの一部へ意図的に障害を発生させ、耐障害性を確認します。

例えば、特定サービスの停止、ネットワーク遅延、外部API障害などを再現し、代替処理や自動復旧が正常に動作するかを確認します。

本番環境へ直接影響する可能性があるため、対象範囲を小さくし、十分な監視と復旧手段を準備して実施することが重要です。

4.5 実ユーザー監視

実ユーザー監視では、実際のユーザーによるアクセスデータを利用し、ページ表示速度、エラー、通信環境、端末などを分析します。

合成監視が「事前に設定したシナリオを継続的に確認する」のに対し、実ユーザー監視は「実際のユーザーが何を体験しているのか」を把握できる点が特徴です。

5. シフトライトテストで確認すべき主要な指標

本番環境では非常に多くのデータを取得できますが、監視項目を無制限に増やしても品質改善につながるとは限りません。

重要なのは、ユーザー体験、システム品質、ビジネス成果と関係のある指標を優先して確認することです。

5.1 可用性と成功率

サービスが正常に利用できているかを判断する基本的な指標です。

稼働率、主要APIの成功率、正常応答率などを確認し、新しいリリース後に変化が発生していないかを監視します。

5.2 エラー率

HTTP 5xxエラー、タイムアウト、アプリケーション例外などがどの程度発生しているかを確認します。

特に新しいバージョンを公開した直後にエラー率が急増した場合、変更内容に問題がある可能性があります。

5.3 レスポンスタイム・P95・P99

平均レスポンスタイムだけでは、一部ユーザーに発生している大きな遅延が見えにくい場合があります。

そのため、P95やP99なども確認し、実際のユーザー体験に近い形で性能を評価します。

5.4 ビジネス指標

技術的なメトリクスだけでは、サービス品質を完全には判断できません。

例えばECサイトであれば、

  • ログイン成功率
  • 商品検索成功率
  • カート追加率
  • 購入完了率
  • 決済成功率

なども重要な指標です。

システム上エラーが発生していなくても、購入完了率が大幅に低下していれば、UIや操作フローに問題がある可能性があります。

5.5 主な監視項目

分類主な指標
可用性稼働率, ヘルスチェック, 成功率
性能レスポンスタイム, P95, P99, スループット
エラーHTTP 5xx, タイムアウト, 例外発生率
インフラCPU, メモリ, ネットワーク, ディスクI/O
アプリケーションキュー滞留数, DB接続数, キャッシュヒット率
ユーザー体験ページ表示時間, エラーセッション率, 操作完了率
ビジネスログイン成功率, 購入成功率, コンバージョン率

6. シフトライトテストの実施方法

シフトライトテストは本番環境を対象とするため、一般的なテスト以上に安全性を重視する必要があります。

「まず本番へ公開してから確認する」のではなく、観測、段階的公開、異常判定、停止・ロールバックまでを一つのプロセスとして設計します。

6.1 オブザーバビリティを整備する

まず、ログ、メトリクス、分散トレーシングなどを利用して、システム内部の状態を確認できる仕組みを整えます。

問題が発生しても「遅い」「エラーが増えた」という結果しか分からなければ、原因分析が困難です。

どのサービス、どのAPI、どの処理で問題が発生したのかを追跡できる状態にしておくことが重要です。

6.2 リリース前の基準値を設定する

新しいバージョンを公開する前に、現在の正常な状態を把握します。

例えば、

  • P95:1.2秒
  • エラー率:0.2%
  • 購入成功率:98.5%
  • DB CPU:55%

といった基準値を記録します。

新バージョン公開後にこれらの指標がどの程度変化した場合に停止するかを事前に決めておくことが重要です。

6.3 小さな範囲から公開する

機能フラグやカナリアリリースを利用し、新機能を最初から全ユーザーへ公開しないようにします。

例えば社内利用者、一部地域、1%のユーザーなど、小規模なグループから開始します。

問題がなければ徐々に公開範囲を拡大し、異常が確認された場合には拡大を停止します。

6.4 新旧バージョンを比較する

新しいバージョンについて、従来バージョンとの差を定量的に比較します。

指標旧バージョン新バージョン判断
P951.2秒1.3秒許容範囲
5xxエラー率0.2%0.3%要監視
購入成功率98.5%98.6%問題なし
DB CPU55%78%要調査

機能が正常に動作しているだけでなく、性能やインフラ負荷への影響も確認します。

6.5 ロールバック手段を準備する

本番環境で検証する以上、問題が発生する可能性を前提にする必要があります。

機能フラグによる即時無効化、旧バージョンへのロールバック、トラフィック切り替えなど、短時間で影響を止められる仕組みを事前に準備します。

7. シフトライトテストを成功させるポイント

シフトライトテストでは、「どれだけ多くテストするか」よりも「どれだけ安全かつ継続的に確認できるか」が重要です。

本番環境を利用する以上、テストの効果とユーザーへのリスクを常にバランスさせる必要があります。

7.1 ユーザーへの影響を最小限にする

本番環境で検証する場合でも、すべてのユーザーへ影響を与える必要はありません。

カナリアリリース、機能フラグ、対象ユーザーの限定などを利用し、最初は小さな範囲から確認することが重要です。

7.2 技術指標だけを見ない

CPUやメモリ、エラー率が正常でも、ユーザーがサービスを正常に利用できているとは限りません。

ユーザー体験や購入完了率などのビジネス指標も組み合わせて評価することが重要です。

7.3 異常検知を自動化する

高頻度でリリースするサービスでは、毎回担当者が画面を監視し続けることは現実的ではありません。

一定以上エラー率が増加した場合に警告する、P95が閾値を超えた場合に公開を停止するなど、異常検知を自動化すると運用負担を軽減できます。

8. シフトライトテストでよくある失敗

シフトライトテストは本番環境を活用できる強力な考え方ですが、導入方法を誤ると実際のユーザーへ直接影響する可能性があります。

そのため、「本番だから実際の結果が分かる」という理由だけで無計画に実施することは避ける必要があります。

8.1 事前テストを減らしてしまう

シフトライトを導入したからといって、単体テストや結合テストなどを減らしてよいわけではありません。

事前に確認できる問題は可能な限りリリース前に検出し、本番でしか分からない問題をシフトライトで補完することが基本です。

8.2 最初から全ユーザーへ公開する

新機能を100%のユーザーへ公開してから品質を確認すると、問題発生時に非常に大きな影響が出ます。

最初は小規模なユーザーだけへ公開し、段階的に拡大することが重要です。

8.3 監視項目を増やしすぎる

大量のメトリクスを収集すると、かえって重要な異常を見落とす可能性があります。

サービスレベル目標や主要ユーザーフローなどと関連する指標を優先し、「何のために監視しているのか」を明確にします。

8.4 ロールバック方法を決めていない

異常を検知できても、元の状態へ戻す方法がなければユーザーへの影響は継続します。

本番テストを設計するときは、テスト方法と同時に「異常が発生した場合の対応」を必ず決めておく必要があります。

9. シフトレフトとシフトライトの違い

シフトレフトとシフトライトは、どちらか一方を選ぶものではありません。

シフトレフトでは問題を開発初期に発見し、シフトライトでは本番環境でしか分からない問題を継続的に確認します。

9.1 シフトレフトは問題を早期に発見する

シフトレフトでは、要件レビュー、単体テスト、静的解析、APIテストなどを開発の早い段階で行います。

問題を発生源に近い場所で検出することで、手戻りを抑え、短いフィードバックサイクルを作ることが目的です。

9.2 シフトライトは実環境で品質を確認する

シフトライトでは、リリース後の実際の環境を利用して品質を確認します。

本番監視、カナリアリリース、合成監視、実ユーザー監視などを利用し、事前テストでは把握できなかった問題を検出します。

9.3 シフトレフトとシフトライトを組み合わせる

比較項目シフトレフトシフトライト
主なタイミング要件, 設計, 実装, CIリリース, 本番運用
主な環境開発環境, テスト環境本番環境
主な目的問題の早期発見実環境での品質確認
代表的な手法単体テスト, 静的解析, APIテストカナリアリリース, 本番監視, 合成監視
主なデータテストデータ実トラフィック, 本番データ
共通目的継続的な品質改善継続的な品質改善

両者を組み合わせることで、開発開始から本番運用まで途切れない品質保証を実現しやすくなります。

10. シフトライトテストとDevOps・オブザーバビリティの関係

シフトライトテストは、DevOpsやオブザーバビリティと密接に関係しています。特に短いサイクルで継続的にリリースする環境では、リリース後のフィードバックを素早く開発チームへ返す仕組みが重要です。

10.1 DevOpsではリリース後も品質を確認する

DevOpsでは、開発と運用を完全に分離するのではなく、サービス提供までを一つの継続的なプロセスとして扱います。

そのため、「コードを書いてテストしたら開発チームの仕事は終了」という形ではなく、本番環境で発生した問題も開発へフィードバックします。

シフトライトは、この継続的なフィードバックループを品質保証の面から支える考え方です。

10.2 オブザーバビリティがシフトライトを支える

本番環境で問題が発生した場合、「エラーが出ている」という情報だけでは原因を特定できません。

ログ、メトリクス、分散トレーシングなどを利用し、

どのサービスで → どの処理が → いつ → なぜ失敗したのか

を追跡できる仕組みが必要です。

オブザーバビリティを整備することで、シフトライトテストによって発見した問題を具体的な改善へつなげやすくなります。

11. シフトライトテストを継続的な品質改善へつなげる

シフトライトテストの最終的な目的は、本番障害を監視することだけではありません。

本番から得られたデータを次の開発へ戻し、同じ問題をより早い段階で検出できるよう改善していくことが重要です。

11.1 本番で発見された問題を分析する

本番で問題が発生した場合には、単に修正して終了するのではなく、「なぜ事前に発見できなかったのか」を分析します。

例えば、本来は単体テストで検出できた不具合なのか、本番データ量でしか発生しない問題なのか、想定外のユーザー操作が原因だったのかを整理します。

11.2 次のシフトレフトへフィードバックする

本番環境で発見した問題のうち、開発段階で再現可能なものについては、単体テストや結合テスト、レビュー項目として追加します。

これにより、

シフトレフト → リリース → シフトライト → 本番フィードバック → 次のシフトレフト

という継続的な品質改善サイクルを形成できます。

11.3 開発・QA・SRE・事業部門で情報を共有する

本番品質は、QA担当者だけの問題ではありません。

開発チーム、QA、SRE、インフラ担当者、事業部門などで情報を共有し、技術的な指標だけでなくユーザー体験や事業指標まで含めて品質を評価することが重要です。

例えば、エラー率が正常でも購入完了率が大幅に低下している場合には、サービスとしては問題が発生している可能性があります。このように複数の観点から品質を確認することで、本番環境における問題をより正確に把握できます。

おわりに

シフトライトテストとは、ソフトウェアを本番環境へリリースした後も、実際のトラフィックや運用データを活用して機能、性能、可用性、耐障害性、ユーザー体験などを継続的に確認する考え方です。

代表的な手法には、合成監視、実ユーザー監視、カナリアリリース、A/Bテスト、カオスエンジニアリングなどがあります。ただし、本番環境を対象とする以上、ユーザーへの影響を最小限に抑えることが最優先です。そのため、機能フラグ、段階的リリース、監視、異常検知、ロールバックなどを組み合わせ、安全に検証できる仕組みを整える必要があります。

また、シフトライトはシフトレフトの代替ではありません。開発段階で検出可能な問題はシフトレフトによって早期に発見し、本番環境でしか確認できない問題をシフトライトによって補完することが重要です。

「開発初期で品質を作り込む → リリースする → 本番環境で品質を確認する → 得られた情報を再び開発へ戻す」という継続的なフィードバックループを構築することが重要です。シフトライトテストを単なる本番テストとしてではなく、DevOpsやオブザーバビリティと連携した継続的な品質改善の仕組みとして活用することで、より安定したサービス提供につなげることができます。

LINE Chat