このガイドは、エンジニアリング システムの改善を推進するための戦略とメトリックを推奨する GitHub の「Engineering System Success Playbook (エンジニアリング システム サクセス プレイブック)」(ESSP) からヒントを得ています。
Copilot のロールアウトを開始する場合は、目標を定義し、それに応じてロールアウトを計画し、スタッフに目標を明確に伝えることをお勧めします。 「GitHub Copilot を使って会社のエンジニアリング目標を達成する」をご覧ください。
1.成功への障壁を特定する
ESSP が推奨する最初の手順は、会社の改善を妨げている障害を明確に理解することです。 現在のベースライン、目的とする将来の状態、進歩を妨げる障壁を理解することで、的を絞った効果的な変更を行うことができます。
開発チームが新機能を提供し、アプリケーションのスムーズな実行を維持する作業を行うとき、多くの場合、その重点は速度と機能に置かれます。 しかし、時間が経つにつれて、次のような小さな問題が蓄積される可能性があります。
- 修正されていない既知のセキュリティの弱点
- 潜在的な欠陥がある古いソフトウェア コンポーネントへの依存
- 問題が検出されたときの対処の遅延
多くの組織では、未解決のセキュリティ上の問題と古くなったコンポーネントのこのような蓄積により、重大なバックログつまりセキュリティ負債が発生します。
この負債には実際のリスクが伴います。 対処しない時間が長くなるほど、それは大きく膨れ上がる可能性があり、解決にかかるコストが高くなります。 大きなセキュリティ負債があると、システムが攻撃に対して脆弱になり、機密データが暴露され、最終的に顧客の信頼が損なわれて、収益に影響を与える可能性があります。
課題は、迅速な開発の必要性と、セキュリティで保護された安定したソフトウェア環境を維持する重要な責任との、バランスを取することです。
2.オプションを評価する
次の手順は、手順 1 で特定した障壁に対処するための解決策を評価し、同意することです。 このガイドでは、GitHub Copilot で特定した目標に与える影響に焦点を当てます。 新しいツールの導入を成功させるには、カルチャやプロセスの変更も必要であることに留意してください。
パイロット グループで新しいツールとプロセスの試験を実施し、フィードバックを収集して成功を測定します。 試用版で使うトレーニング リソースとメトリックについては、「3. 変更を実装する」と「監視するメトリック」セクションを参照してください。
Copilot の活用方法
GitHub Copilot は、セキュリティへの配慮を開発ライフサイクルに直接統合することで、セキュリティ負債を軽減するのに役立ちます。 その機能により、開発者は潜在的な脆弱性を事前に特定して対処し、プロジェクトを最新の状態に保つことが容易になります。
Copilot は、ソフトウェア開発ライフサイクル全体を通してセキュリティの脆弱性を減らすのに役立ちます。
開発中
Copilot は、記述されているコードを先行してレビューし、セキュリティの一般的な欠陥とパターンに関する理解を活用して、悪用の影響を受けやすい部分にフラグを設定します。 このリアルタイム分析により、標準的な開発または初期のセキュリティ レビューの間に見逃される可能性がある隠れた脆弱性を見つけることができます。
問題が特定されると、Copilot は脆弱性を修復するために実施可能なコードの変更を即座に提案でき、開発者は開発サイクルの早い段階で弱点に対処し、セキュリティ負債の蓄積を防ぐことができます。
継続的なメンテナンス
Copilot は GitHub のコード スキャン機能と統合されて、既存のコードベースを安全に保ちます。 コード スキャンで潜在的なセキュリティ アラートが見つかると、Copilot Autofix は脆弱性をインテリジェントに分析し、それを解決するための的を絞ったコンテキスト固有の推奨事項を提供できます。
これらの具体的な修正の提案によって修復が効率化され、開発者が脆弱性の調査と対処方法の発見に費やす時間が短縮されます。 その結果、セキュリティ アラートはいっそう効率よく解決され、発生中のセキュリティ負債に残っていたり、その原因になったりする可能性が低くなります。
文化に関する考慮事項
GitHub Copilot のロールアウトに加えて、目標を達成できない可能性のある社会的または文化的要因にも対処する必要があります。
次の例は、ESSP の "アンチパターン" に関するセクションから抜粋したものです。
- チームはセキュリティ負債を無視したり先延ばしにしたりすることがあり、非効率的で脆弱なシステムを生き残らせることになります。 その原因になっている可能性があるのは、期限重視の機能や、セキュリティ負債の長期的な影響に関する教育の欠如です。
- チームは単純な問題に対して複雑すぎる解決策を作成することがあり、そのためにコードの保守やセキュリティの問題の検出がいっそう困難になります。 これは、不必要な将来的保証の願望や、複雑さを通じて価値を高める圧力が原因である可能性があります。
3.変更を実装する
障害を克服するための適切なアプローチを特定したら、特定したソリューションを拡大します。 新しいツールやプロセスのロールアウトを成功させるには、ロールアウトの各部分に所有権を割り当て、目標について率直にコミュニケーションを取り、効果的なトレーニングを提供し、成果を測定することが重要です。
このセクションでは、開発者向けのシナリオ例、ベスト プラクティス、リソースについて説明します。 このセクションを使って、従業員が目標に沿った方法で Copilot を使用できるように、コミュニケーションとトレーニング セッションを計画することをお勧めします。
セキュリティの脆弱性についてコードを分析する
コードベースのサイズによっては、Copilot は、コンテキストの制約により、開発者がコードを記述している間にプロジェクト全体を分析できない場合があります。 ただし、開発者は、安全でないコーディング手法について特定のファイルを分析するよう Copilot に要求する方法を採用できます。
-
分析対象のファイルを Visual Studio Code で開きます。
-
Copilot Chat で、
Analyze this code for potential security vulnerabilities and suggest fixesと指示しますまた、
#fileチャット変数を使ってファイルの内容をプロンプトに具体的に含めたり、プロンプト ファイルとカスタム指示を使って Copilot の応答をガイドしたりすることもできます。 -
Copilot Chat はコードを分析し、セキュリティの脆弱性を特定して、適切な修正を提案します。
-
提案された変更を検討し、必要に応じて適用します。
プロンプトのその他の例を次に示します。
Are there any security vulnerabilities in my code? If so, can you explain them and suggest fixes?Does this code follow secure code best practices? If not, what specific improvements can I make?What are the potential security risks in this code if it were deployed to production? How can I mitigate them?
code scanning のアラートに対して Copilot Autofix を使用する
Copilot Autofix は GitHub Code Security のコンポーネントであり、code scanning のアラートに対して可能な修正を提案できます。 Copilot Autofix は、パブリック リポジトリと、GitHub Code Security のライセンスを持つリポジトリで使用できます。
ユーザーがリポジトリでコード スキャンを実行すると、潜在的な問題がリポジトリの code scanning アラートとして洗い出されます。 開発者は、次のフローに従ってアラートを解決できます。
- GitHub でアラートを開きます。
- [Generate fix] をクリックします。これは、Copilot がアラートを解決できる場合に表示されます。
- Copilot Autofix がこのアラートに対して可能な修正を生成し、アラート自体でのコード変更をユーザーに示します。 その後、このコード変更を新しいブランチまたは既存のブランチにコミットするオプションが提供されます。
- この時点で、ユーザーはコードをテストし、変更をメイン ブランチに移動するための pull request を開くことができます。
- ユーザーが変更をメイン ブランチに移動し、アラートが修正されたことを code scanning が確認すると、アラートは自動的に閉じられます。
開発者向けのベスト プラクティス
開発者がすべきこと:
- Copilot Chat を定期的に使って、コード スニペットで脆弱性を分析する: 変更をコミットする前に、コードでセキュリティの問題を事前に確認することを習慣にします。
- code scanning アラートに Copilot Autofix を活用する: アラートが発生したら、最初のステップとして Copilot Autofix を使って速やかに対処します。
- Copilot Chat に明確で具体的なプロンプトを提供する: 要求が詳細であるほど、Copilot はより適切にコードを分析して関連する修正を提案できます。 たとえば、プログラミング言語と心配がある特定の部分をプロンプトに含めます。
- Copilot と既存のセキュリティ ツールを組み合わせる: 専用のセキュリティ スキャナーやプラクティスの代わりとしてではなく、セキュリティ分析の追加レイヤーとして Copilot を使います。
開発者がすべきでないこと:
- Copilot のセキュリティ提案を自動的に受け入れる: Copilot によって提案されたコード変更を常に検討してテストし、適切で効果的であることを確認します。
- 包括的なセキュリティ監査を Copilot だけに頼る: Copilot は役に立つツールですが、セキュリティ レビューと侵入テストをそれに完全に置き換えるべきではありません。
- code scanning のアラートを無視する: セキュリティ負債が溜まるのを防ぐため、小さいように見える場合でも、すべてのアラートに速やかに対処します。
- 安全なコーディング手法を学習しない口実として Copilot を使う: セキュリティのベスト プラクティスについての自分自身とチームの教育を続けます。
- Copilot がすべての脆弱性を検出すると思い込む: セキュリティは継続的なプロセスであり、警戒を怠らないようにする必要があります。
- Copilot を使ってセキュリティ ポリシーをバイパスする: Organization のセキュリティ プロトコルに従い、それを回避するのではなく強化するためのツールとして Copilot を使います。
開発者用リソース
注目すべきメトリック
新しいツールの試用版を評価し、完全なロールアウトによって一貫した改善が実現されていることを確認するには、結果を監視し、必要に応じて調整を行う必要があります。 一般に、品質、速度、開発者の満足度という主要なゾーンを考慮し、これらのゾーンがどのように連携してビジネス成果に貢献するかを検討することをお勧めします。
この特定の目標に対する Copilot の影響を評価するために、検討することをお勧めするメトリックをいくつか示します。
- セキュリティ負債比率: セキュリティの概要を使って、時間の経過に従いアラートの数が減っているかどうかを確認します。
- セキュリティの問題を修復するまでの時間: セキュリティの概要を使って、セキュリティの問題を修復するまでの時間が徐々に短くなっているかどうかを確認します。
「コードのセキュリティ リスクを評価する」をご覧ください。