シフト レフト

「シフトレフトで」リワークを減らし、効率化する!

シフトレフトとは、ソフトウェア開発の方法論の一つで、品質とセキュリティのチェックを開発サイクルの早い段階で行うことを重視します。シフトレフトは、欠陥や脆弱性をより早い段階で発見し、より迅速なフィードバックループ、やり直しの削減、そして最終的にはより高品質なソフトウェアを実現することができます。

このブログでは、シフトレフトの概念について詳しく探求し、その主な利点、アプローチ方法、およびこの視点を採用する際に注意すべき点について説明します。経験豊富な開発者でも、新人の方でも、シフトレフトを理解することで、開発プラクティスを改善し、より信頼性の高い、セキュアなソフトウェアが作成できます。

目次

シフトレフト(Shift left)とは

定義

製品の開発プロセスを図や表で表現する際、時間の経過や工程の前後関係を横方向で表現することがあります。その場合、一般的には左から右へ時間が流れるように工程を記述します。シフトレフトとは、このような時間軸において、特定の活動をより早い段階、つまり左側で実施することを意味します。

シフトレフトとは

引用元:https://prtimes.jp/

例えば、ソフトウェアのセキュリティを確保するための活動をテストや修正の後工程で行うのではなく、設計段階からセキュリティを考慮した仕様を検討する、開発・実装後にまとめてテストを行うのではなく、各工程の直後にその工程の結果に対して小出しにテストを行う(シフトレフトテスト)などが該当します。

逆に、テストを後ろ向きに行うという意味のシフトライト(Shift right)という言葉もありますが、ただ後ろ向きに行うのではなく、リリース後の継続的なテストという意味も含まれています。

アジャイル開発の台頭により、短期間でより頻繁にリリースが行われるようになり、このシフト・レフトという概念が注目されています。

ソフトウェア開発のどのような分野でシフトレフトが適用されるのか?

シフトレフトは通常、以下の分野で使用されます。

  • テスティン

シフトレフトが始まったのはテストからです。テスト駆動開発(TDD)や行動駆動開発(BDD)といったアジャイルプラクティスに合致しています。例えば、統合テストを早めに行うことで、設計の変更をより容易に行うことができます。

  • セキュリティ

セキュリティは開発段階から取り組んでいます。DevOpsと組み合わせると、DevSecOpsと呼ばれるものになります。セキュリティの標準は整備されていなければなりません。セキュリティ担当者はDevOpsと同じツールを使い、自分でコードを修正する権限を持たなければなりません。セキュリティのためのシフト・リフトは、オープンソースのコードでは特に重要です。

  • デプロイメント

アプリがクラウド上にある場合、最新の修正や機能を迅速に提供するために、継続的なデプロイが一般的になっています。テンプレート、パターン、自動化を利用することで、これを効率化することができます。ソフトウェアの構築、プロビジョニング、デプロイメントが自動化されます。実際、継続的なデプロイは継続的なテストを可能にします。

  • デザイン

要件が不十分だと、製品がビジネスニーズに合致していないことになります。要件にとどまらず、チーム全体がデザイン思考のマインドセットが採用ができます。全員が製品に関するビジョンを共有することも可能です。

「シフトレフト」と「セキュリティ・バイ・デザイン」「DevOps」「DevSecOps」との違い・関係

シフトレフト「DevOps」「DevSecOps」

引用元:https://www.sqat.jp/

シフトレフトと関連する用語として、「Security by Design(セキュリティ・バイ・デザイン)」「DevOps(デブオプス)」「DevSecOps(デブセックオプス)」などがあります。

セキュリティ・バイ・デザインとは、開発の計画・設計段階からセキュリティを考慮することを指します。

デブオプスとは、ソフトウェア開発チーム(デベロッパー)と運用チーム(オペレーション)が協力して、ソフトウェアやサービスの品質を向上させることを指します。

デブセックオプスは、開発チームと運用チームにセキュリティチームを加え、セキュリティを含めたトータルコストを削減しながら、さらに品質を向上させる仕組みです。

セキュリティ・バイ・デザインは概念、デブセックオプスは体制運用、シフトレフトはプロセス管理の考え方ですが、事故やトラブルが起きてから、あるいは脆弱性が発見されてから行うリアクティブなセキュリティ対策ではなく、プロアクティブな対策、つまり先回りして実施するという点では、いずれも一致しています。

つまり、どれも同じ観点で一致しているのです。

シフトレフトの主なメリット

シフトレフトの主なメリット

シフトレフトは、テストと品質保証のプロセスを開発サイクルの早い段階に移行するソフトウェア開発手法です。シフトレフトの背景にある考え方は、欠陥やエラーの対処に費用と時間がかかるようになる前に、できるだけ早期に発見して修正することです。

欠陥の早期発見

テストや品質保証のプロセスを開発サイクルの前半にシフトすることで、欠陥やエラーを早期に発見し、比較的簡単で安価な方法で修正することが可能です。これにより、開発プロセスの後半でコストのかかる手戻りや遅れを回避することができます。

市場投入までの時間を短縮

不具合を早期に発見し修正することで、全体の開発サイクルを短縮し、ソフトウェア製品の市場投入までの時間を短縮することが可能になります。

コラボレーションの向上

シフトレフトは、開発者、テスター、品質保証担当者間のコラボレーションを促進します。このコラボレーションは、開発サイクルの早い段階で欠陥やエラーを特定するのに役立ち、全員が同じ目標に向かって作業していることを保証します。

コスト削減

不具合を早期に発見し修正することで、開発サイクルの後半に発見した場合と比較して、不具合の修正にかかるコストを大幅に削減することができます。そのため、開発コスト全体を削減することができます。

シフトレフトは、コストを削減し開発サイクルを短縮しながらソフトウェア製品の品質を向上させたいと考えているソフトウェア開発チームにとって、価値あるアプローチと言えます。

シフトレフトへのアプローチ方法

シフトレフトへのアプローチ方法

ここでは、シフトレフトにアプローチするためのステップを紹介します。

テストの範囲を明確にする

ソフトウェアのどの部分にテストが必要か、どのような種類のテストを実施する必要があるかを決定する。これにより、どこに力を注ぐべきかを特定し、テスト活動の優先順位をつけることができます。

継続的なテストプロセスを確立する

シフトレフトを導入するためには、継続的なテストプロセスを確立することが重要です。これは、開発サイクルのできるだけ早い段階で、できるだけ頻繁にテスト活動を実施することであり、理想的にはユニットテストから始めることです。

テストプロセスの自動化

自動化は、シフトレフトの重要な要素です。テストをより頻繁に、より効率的に実行することができ、テスト活動に必要な時間と労力を削減することができます。ユニットテスト、統合テスト、その他の種類のテストに自動テストツールの導入を検討してください。

開発者、QA担当者との協業

シフトレフトでは、開発者と品質保証担当者のコラボレーションが必要です。開発サイクルの早い段階で欠陥やエラーを特定し、全員が同じ目標に向かって作業していることを確認するために協力します。

成果の測定と分析

テスト活動を左遷する際には、結果を測定して分析することが重要です。そうすることで、改善すべき領域を特定し、必要に応じてテストアプローチを調整することができます。

構造的かつ協調的な方法でシフトレフトに取り組むことで、ソフトウェア製品の品質を向上させるとともに、開発コストを削減し、開発サイクルを短縮すること可能です。

シフトレフト視点での開発上の注意

シフトレフト視点での開発上の注意

シフトレフトに基づく開発で実施されるセキュリティ対策の例は以下の通りです。

セキュリティ・バイ・デザイン

まず、セキュリティ・バイ・デザインの考え方に基づき、企画・設計段階からセキュリティを考慮します。

セキュアな開発環境

開発は、脆弱性が組み込まれないようなフレームワークやライブラリなど、安全な開発環境を用いて行う必要があります。

ソースコード診断

開発の各段階において、ソースコード診断を行い、プログラムコードに問題がないかを適宜検証しています。

脆弱性診断

どのようなセキュリティ要件を盛り込めばよいかわからない場合は、独立行政法人情報処理推進機構(IPA)をはじめとする専門機関が、さまざまなガイドラインを公表しています。これらのガイドラインを満たすようなソフトウェアの開発を依頼し、契約書に記載することができます。なお、ガイドラインの内容を十分に理解する必要はありません。

リリース前やリリース後の新機能追加時などには、必ず脆弱性評価を実施します。また、脆弱性を突かれた場合にどのようなインシデントが発生しうるかをより深く検証するために、ペネトレーションテストを実施することも有効です。

まとめ

結論として、「シフトレフト」とは、セキュリティ対策をソフトウェア開発プロセスに早期にテストし統合するアプローチを重視するものです。セキュリティの問題を早期に特定し解決することで、ソフトウェア開発の総費用を削減し、最終製品の品質を向上することができます。

「シフトレフト」は「セキュリティ・バイ・デザイン」、「DevOps」、「DevSecOps」と密接に関連していますが、独自のユニークなメリットと考慮事項を持つ独自のアプローチです。「シフトレフト」の考え方を採用することで、組織はセキュリティポストを向上し、セキュリティインシデントのリスクを低減することが可能です。

ただし、「シフトレフト」には専門的な知識が必要であったり、セキュリティと開発チームの間での潜在的な衝突など、潜在的な課題に対処するために注意深くアプローチすることが重要です。

全体として、「シフトレフト」は、ソフトウェア開発プロセスを改善し、セキュリティポストを強化するために取り組む価値のあるアプローチです。