※本記事は、AWS re:Invent 2024で行われたGitHubによるプレゼンテーション「Leading in the age of AI: How Copilot empowers digital transformation (AIM387)」の内容を基に作成されています。このプレゼンテーションでは、GitHubのCopilotがいかに開発者の生産性を向上させ、ソフトウェア開発を加速し、AIによるイノベーション文化を促進するかについて解説しています。また、Copilotの今後のアップデートについても紹介されています。詳細情報はAWS re:Inventの公式サイト(https://go.aws/reinvent )でご覧いただけます。本記事の内容は発表内容を要約したものであり、正確な情報や文脈については、オリジナルの動画(https://www.youtube.com/watch?v=eZj4JxVZxPs )をご視聴いただくことをお勧めいたします。なお、このプレゼンテーションはAWSパートナーであるGitHubによって提供されています。
1. イントロダクション
1.1. GitHubの紹介とポジショニング
おはようございます。今日はこの時間を私と一緒に過ごし、GitHubとCopilotについて少しお話しする機会をいただき、誠にありがとうございます。このカンファレンスでは多くのセッションがあるので、この1時間または可能な限りのお時間を私と共有していただけることに感謝します。
私はBritney O'Sheaと申します。GitHubのプロダクトチームで、開発者が必要とする次世代ツールの構築について考えています。もしGitHubを少し使っていなかったり、GitHubに初めて触れる方がいらっしゃるなら、私たちは自分たちのことを「世界のソフトウェアのホーム」と愛情を込めて呼んでいます。これはオープンソースとソースコード管理におけるルーツへの敬意を示すと同時に、この10年間でコードをアイデアから本番環境まで運ぶために必要なすべてのものをGitHub内に持つように進化してきたことを反映しています。
私たちが製品を構築する際に常に考えているのは、開発者の心と精神、そしてユーザーとその体験です。過去2年間、他のベンダーと同様に、AIをどのように活用し、特に私たちの愛するユーザーの体験を向上させ、ソフトウェア開発における生産性を高めるために、それを製品にどう取り入れるかに本当に注力してきました。
1.2. AIツールと開発への活用状況調査
簡単なウォームアップとして、皆さんの状況を把握したいと思います。今日、組織内でソフトウェア開発を支援するAIパワードツールを何らかの形で使用している方はどれくらいいらっしゃいますか?かなりの数ですね。では、主にチャットで使用している方は?多くの手が挙がっていますね。インラインコンテキストではどうでしょうか?こちらも多くの方々ですね。
ワークストリームの前半や後半、つまりアイデア出しの段階やPR(プルリクエスト)などの段階ではどうでしょう?まだ導入し始めている段階のようですね。
今日は多くのデモと実践的な内容をお見せします。百聞は一見に如かずですので、すべてがうまく動くことを祈っています。また、CopilotをIDEの段階だけでなく、プラットフォーム全体にどのように取り入れているかについてもお話しします。とても楽しみにしています。
2. Copilotの基本機能と開発支援
2.1. Copilotの実演(Snakeゲームの作成)
まずはCopilotの紹介から始めましょう。今日、何百万人もの開発者がCopilotを使って開発していますが、実際に見て試すのが一番楽しい方法だと思います。ベガスにいるので少しゲーム気分になっていますから、Copilotを使って楽しいゲームを作ってみましょう。スネークゲームをご存知の方はいますか?かなりの方がご存知のようですね。
開発者としてCopilotを使う場合、お気に入りのIDEをすべてサポートしており、ここにあるCopilotチャットから始めるか、インラインで始めることができます。私はスネークゲームに少し慣れていないので、Copilotに「スネークゲームとは何か説明してください」と尋ねることから始めます。Copilotは応答を生成し、そのゲームが何であるか、どこにあるかを教えてくれます。私のように失読症がある場合、いくつかのタイプミスがあるかもしれませんが、もちろんそれを避けて回答することができます。また、音声テキスト変換を使ったり、プロンプトを開始して作業を始めるためにアタッチメントをアップロードすることもできます。
Copilotに「HTML でレンダリングするスネークゲームを作ってください」とお願いします。今日はGPT 4.0を使用していますが、ClaudeやGemini、あるいは他の利用可能なモデルに切り替えることもできます。後ほどそれをお見せします。
今、Copilotは提案された構造を示しているようです。「HTMLでレンダリングするスネークゲームを構築するためのコードを提供してください」と言います。Copilotがコードを生成するのを待ちましょう。そのコードをIDEにコピーしたり、ここに切り替えて実際に使い始めることができます。
このコードをここに持ってきます。Copilotのコードブロックをここに適用し、編集したりコメントを加えたり、さらに質問をしたりすることができます。一度ここに入れば、戻ってきてこれが実行され、私のために機能するかどうかを確認します。
これは少しかわいらしいと思われるかもしれません。確かに楽しくて軽量なものですが、エンタープライズアプリケーションを構築している場合、これは便利だと思うかもしれません。これを保存して、うまく動作するか確認しましょう。ウェブブラウザに移動して更新します。以前にもここで少し遊んでいました。そして、スネークゲームが動作していますね。
2.2. 複数モデル対応(GPT 4.0、Claude、Gemini等)
しかし、私が考えていることは、皆さんも考えていることだと思いますが、私たちにはより大きなエンタープライズの目標や規模があります。何もないところから始めて、そのゲームを開発する開発者を考えるのは良いことです。しかし、私たちの開発者はコーディング以外にもやらなければならないことがたくさんあり、彼らに課す責任も多くあります。また、私たちのエンタープライズコードに対応することを確認する必要があります。
コーディングにより多くの時間を費やし、他の責任を果たすためのスループットを向上させる必要があります。そこで、Copilotをただのアイデアや説明のためのツールとしてだけでなく、開発者がアイデアを本番環境に持っていくために必要なすべてのステップにどのように組み込んでいるかについてお話ししたいと思います。
先ほどデモでは、GPT 4.0を使用していますが、必要に応じてClaudeやGemini、あるいは他の利用可能なモデルに切り替えることができます。これにより、特定のタスクや要件に最適なモデルを選択する柔軟性が提供されます。後ほど、この機能についても詳しくご紹介します。
3. 開発者の生産性向上
3.1. 日常的な開発タスクの加速
私たちは、構築する機能を3つのカテゴリーに分けて考えています。一つ目は、日常的なタスクにおける速度をどのように向上させるか。二つ目は、エンタープライズ向けに開発する際に、コードが安全で高品質であり、出荷準備ができていることをどのように確認するか。そして三つ目は、ユーザーが構築したいアプリケーションの次世代でどのように作業できるようにするか、あるいはそれらのアプリケーションを構築するための次世代のビルダーをどのように迎え入れるかということです。
最初のカテゴリー「速度の加速」のために、Copilotを全体に組み込むのに役立つ3つの異なるソリューションがあります。まず、先ほど見ていただいたCopilot。次に、ブレインストーミングやアイデア出し、計画段階から実際の構築段階へどのように移行するかを理解するのに役立つ、最近ベータ版でリリースしたCopilot Workspace。そして最後に、PRの作成、コメントへの返信、キャッチアップ、拡張機能との連携など、プラットフォーム全体に組み込むことで、必要なすべてのサポートを提供します。
3.2. Copilot Workspaceの活用
それではデモに移って、これがどのように機能するかを見てみましょう。自分の書店を構築していると想像してみましょう。私はこの会社の新しい開発者で、ここで最初の仕事を始めなければなりません。コードに飛び込んで、それを調べたいと思うかもしれません。Copilotに説明を求めたり、より多くのコンテキストを得たりすることができます。あるいは、最初に任されている仕事を振り返ってみることもできるでしょう。
これが読み込まれている間に、デモに戻ってリポジトリに戻ります。課題から始めて、期待されていることすべてを読み、キャッチアップすることができます。そこには何百ものコメントがあるかもしれません。Copilotに要約を依頼するだけで、実際に何をすべきか、重要なポイントは何かを理解し始めることができます。これは追いつくのに非常に役立ちます。
コードスペースがバックグラウンドで実行されるのを待っている間に、これは良い出発点になります。Copilotにこのコードを説明してもらい、コードベースとその動作について理解を深めることができます。メインモデルに入って「このコードを説明してください」と言うことができます。コードの目的や何が起きているかについて理解するための説明が提供されます。
しかし、どこから始めたらいいか分からず、ブレインストーミングやアイデア出しの段階から始めたい場合、今はワークスペースを使用することができます。ワークスペースを開くと、Copilotと一緒に計画を作成することができます。この課題に取り組み、現在私のアプリケーションで何が起きているのか、提案されている解決策は何か、そして実際にこのような機能を実装する場合に尋ねたいと思う追加の質問を理解することができます。Web アプリケーションで星評価システムを実装することについてもっと学ぶ必要があるか、それらを視覚的に表示する方法についてのアイデアを得る必要があるかもしれません。このブレインストーミングフェーズで重要かもしれないアイデアを理解し、始めるのに役立つよう、行ったり来たりすることができます。
準備ができたら、Copilotに実際に計画の生成を依頼できます。これを実現するためにどのようなコード変更が必要かを考える手助けをしてくれます。編集する必要のある異なるファイル、それをどのように達成するかを教えてくれます。計画が完了したら、確認して項目を追加したり、選択したファイルを実装するよう依頼することもできます。
3.3. コード理解と説明機能
Copilotはバックグラウンドで作業し、実際にそのコード変更を開発します。これにより、このコードが何をしているのか分からなかった新しい開発者が、おそらく同僚と時間を過ごしてスタートアップし稼働するために必要だったところから、数分でコードスペースからコードにすぐに飛び込み、コードに基づいて選んだモデルを使って、Copilotと相互にやり取りして質問できるようになります。
さらに詳しい説明を得ることもできます。その課題を取り上げ、要点を自分に要約してもらいます。ブレインストーミングに入り、行ったり来たりして調査し、計画を立て、その計画を反復し、そしてCopilotに実際にこれらのコード変更を実装するよう依頼します。どのようなコード変更が推奨されるかを確認する能力も得られます。
この段階でコードをより理解するために、Copilotに「このコードを説明してください」と尋ねることができます。Copilotは、コードの目的や構造、機能の仕組みなど、詳細な説明を提供します。これは特に大規模なコードベースや複雑なロジックを扱う場合に非常に有効です。
また、特定の関数やメソッドについてより詳細な説明を求めることもできます。たとえば「この関数が何をしているのか説明してください」と尋ねると、Copilotはその機能の目的、入力パラメータ、出力、そして内部ロジックについて分かりやすく説明してくれます。
このコード理解機能は、新しいプロジェクトに参加したときや、長期間触れていなかったコードを再び扱う場合など、学習曲線を大幅に短縮するのに役立ちます。
3.4. 課題の要約と計画立案支援
おそらくこのコードを取り入れ、さらに自分で編集したり、質問するために同僚を呼んだりするかもしれません。しかし、これにより、単に追いつき学習している状態から、実際にチームへの貢献を始め、変更を加えることができる状態へと迅速に移行できます。そしてそのプルリクエストを作成する際、もしこのコードに近く、「これは本当に良さそうだ」と感じるなら、面倒な作業を手伝ってもらうためにCopilotに依頼することもできます。それは説明文の生成、組織やプロジェクトマネージャー、下流チームに対して行いたい変更を伝えるための支援です。そして、その内容を送信できます。
Copilotは課題を要約するのに非常に優れています。課題の長いリストや詳細な説明があっても、「この課題を要約してください」と尋ねるだけで、主要なポイントと期待されるアクションを明確にまとめてくれます。これにより、新しいタスクに迅速に取り組めるようになります。
また、計画立案においてもCopilotは強力なパートナーとなります。ワークスペース内で「この機能を実装するための計画を立ててください」と指示すると、必要なステップの概要、修正すべきファイル、考慮すべき潜在的な課題などを含む詳細な実装計画を提供してくれます。この計画はインタラクティブに調整できるため、特定の要件や制約に合わせてカスタマイズすることが可能です。
さらに、要件が変更された場合や新しい情報が出てきた場合には、「この計画を更新して以下の新しい要件を含めてください」と依頼することで、既存の計画を迅速に更新することができます。これにより、開発プロセス全体を通して一貫した計画立案と実行が可能になります。
4. エンタープライズ向けカスタマイズ
4.1. コードベースに合わせた微調整
これらすべては開発者が選択したポイントから行うことができます。先ほど述べたように、お気に入りのIDEをすべてサポートしているので、どこでどのようなシステムでコーディングしたいかに関わらず使用することができます。GitHubのCode Spacesを直接使用して、ローカルマシンをセットアップする必要なく数分で起動して開始することができます。
そして、これをカスタマイズすることができます。Copilotに入力したくない特定のコードがある場合、IPに基づいて除外を設定することができます。Copilotからより強力な機能とより強力な提案を得るために参照したいコードの種類を決めることができます。
さらに、独自の微調整モデルを作成するところまで進むこともできます。自分のコードを取り込み、組織に固有のCopilotを、組織のコードに最も関連性があると思われるものだけでトレーニングすることができます。これは、トレーニングしたいリポジトリを設定し、要件を設定して適用するだけのシンプルな作業です。
そして、組織とエンタープライズのコードに固有の、そしてあなただけのリアルなコンテキストベースの提案を得始めることができます。
4.2. 独自モデルのトレーニング
自分のコードを取り込み、組織専用のCopilotをトレーニングするプロセスについてもう少し詳しくお話ししましょう。これにより、あなたの組織のコードに最も関連性が高いと思われるもののみを使って、Copilotの機能を強化することができます。
この仕組みは非常にシンプルです。トレーニングに使用したいリポジトリを設定し、要件を設定して適用するだけです。これにより、組織特有のコードパターン、命名規則、アーキテクチャに基づいた、より的確で関連性の高い提案をCopilotから得ることができるようになります。
このようにしてカスタマイズしたモデルは、一般的なモデルでは検出できない可能性のあるニュアンスや特定のコーディングパターンを理解するようになります。例えば、社内で使用される独自ライブラリやフレームワーク、特定のコードスタイルガイドラインなどを学習します。
このプロセスにより、リアルなコンテキストに基づく提案を受け取り始めることができます。これらの提案は組織とエンタープライズのコードに固有のもので、あなたの組織だけのために用意されています。その結果、開発者はより速く、より正確に、組織の標準に沿ったコードを書くことができるようになります。
4.3. サードパーティツール連携(拡張機能)
もちろん、私たちは常に拡張性を重視してきました。ソフトウェア開発は真空の中で行われるわけではありません。Jiraを使用しているかもしれませんし、開発者が操作したり質問したりできるようにしたい他の下流ツールを使用しているかもしれません。
Copilot拡張機能を使用すると、プラグインして、おそらく本番環境への移行を妨げているバグや、発生している異なるエラーについて考えることができます。Copilotから直接、今日のGitHubワークフローに統合している可能性のあるすべてのサードパーティツールを呼び出し始めることができます。
これにより、開発者はフロー状態を維持し、アイデアから出荷までスムーズに開始でき、実際にそのフロー状態から離れる必要がなくなります。単に彼らにより多くの速度を与えるだけでなく、ワークフローを中断することなくより多くのことを達成する能力を提供します。
4.4. 使用状況の測定とAPI
もちろん、私たちは「私たちの言葉を鵜呑みにしないでください」と知っています。これを測定できるようにし、エンタープライズとして組織にとって重要なことは何か、どれだけの提案が受け入れられているかを理解できるようにしたいと思います。そこで、メトリクスを含むAPIをリリースし、組織で近いうちに活用できるようになるより強力なレポート機能を開発しています。
これにより、開発者がCopilotをどのように使用しているかをより深く理解できるようになります。そしてその情報をモデルの微調整方法や、接続して活用を検討している拡張機能について考える際に活かすことができます。すべては体験を最適化し、このツールから最大限の価値を引き出すためです。
これらのAPIとレポート機能を使用することで、組織内でのCopilotの採用率、使用頻度、生産性向上の指標など、重要なメトリクスを追跡することができます。たとえば、開発者がどのような種類の提案を最も頻繁に受け入れているか、どのファイルタイプやプログラミング言語でCopilotが最も役立っているか、各開発者やチームがどの程度Copilotを活用しているかなどを把握できるようになります。
これらのインサイトは、組織の投資対効果(ROI)を測定するだけでなく、開発者体験を向上させるためのさらなる改善点を特定するのにも役立ちます。データに基づいて、最も効果的な使用パターンを特定し、それを組織全体で共有することができるのです。
5. セキュリティとコード品質
5.1. GitHub Secret Scanningの強化
しかし、セキュリティバックグラウンドを持つ私としては、「すべてがセキュアで問題ないことをどのように確認するか」について話さなければ不十分でしょう。特に、システム内でAI生成コードがより多く使われるようになった場合、あるいは増強ツールでの作業に慣れていない若手開発者がより多く参加し、チームが以前行っていたような古典的なトレーニングをすべて受けていない場合はなおさらです。
それについても取り組んでいます。提案がセキュアであることを確実にする方法について考えるだけでなく、コードをセキュアにし、そのプロセスをより迅速に、自動化し、コード品質も確保してチームのセキュリティとスケーリングを支援する方法についても考えています。
ランチタイムが近づいているので、デザートについて考えているかもしれません。少し活気を出すために、「発見されたものは修正された」という私たちのマントラについて少しゲームをしたいと思います。業界を「多くのアラートがある」という状態から「見つけたときに即座に修正できる」という状態に移行できると信じているからです。
「実物 vs ケーキ」というゲームを見たことがある人はいますか?AIよりも秘密の認証情報漏洩を検出できるかどうかのゲームをしましょう。秘密の認証情報漏洩を前兆として考えると、GitHubではGitHub Secret Scanningを持っており、過去約6ヶ月間だけでも320万件以上の秘密がコードにプッシュされようとしているのを検出しました。これは業界に影響を与える巨大な問題です。
私たちはAWSのようなトークンプロバイダーと協力して、高い精度で検出できる標準化されたキーを作成してきました。しかし、業界はまだ一般的な秘密に関する大きな問題を抱えています。一般的な秘密とは何でしょうか?パスワード、「catlover!1」のようなものです。3ヶ月ごとに変更する必要がありますが、これらのパスワードをすべて覚えられる人はいないので、1文字だけ変更します。これらは伝統的に大規模に検出するのが非常に困難でした。そして、開発者にこれらの結果を渡して実際に停止するようにすると、非常にノイズが多くなることが想像できます。
そこで、最近取り組んでいるプロジェクトの一つは、AIを活用して秘密の検出を強化し、それを大規模に行うことです。
5.2. AI活用による機密情報検出(パスワード検出デモ)
先ほど言ったように、ゲームをしましょう。コードでリークされた本物のパスワードがどれかわかる方は手を挙げてください。誰も答えませんか?私もわかりません。
どちらも本物のように見えます。大文字があり、適切な文字列の長さで、特殊文字もあります。どちらも可能性がありますが、実は一つは実際の例です。もう少し引いてみましょう。これでどうでしょう?パスワードがどれかわかりますか?まだ決められませんか?私にもまだ本物に見えるので、責めません。
一つには「Auth_Token」とあります。パスワードかもしれません。もう一つには「string pass」とあります。これもパスワードかもしれません。もう少し引いてみて、ギャンブル気分になって何が思われるかを見てみましょう。これではどうですか?誰かいますか?2つ目?2つ目と言っていますか?遠い方のP6、それとも他の方?M1、M1ですか。
みなさんはセキュリティで新しい仕事を得るかもしれませんね。私たちは安全ではないかもしれません。それが本物のパスワードですが、これらのパスワードのようなものを単に文字列としてスキャンしていると、どれほどノイズが多くなるかが想像できます。しかし、AIを活用することで、Secret Scanningを使ってこれらを大規模に高精度で検出できるようになりました。
また、従来の静的スキャンやオープンソーススキャンにもAI検出を適用しています。コード内にある可能性のある脆弱性や漏洩した秘密をより強力に検出し、それを正確に行うのを支援します。数分後にデモに戻ると、それがどのように見えるかをお見せしますが、「これは素晴らしく、秘密漏洩に非常に役立ちますし、より多くのものを検出するのにも非常に役立ちます」と考えていることはわかっています。
「Brittany、私はもっと多くのものを検出したくありません。すでに検出するものはたくさんあります。それを修正する必要があります」と。そこで、Copilot Autofixでもお手伝いしています。これはCode QLで見つかったものを検出し、開発者が編集したり、直接コードにマージして脆弱性をパッチすることができるコード提案で実際に修正するのを支援します。
5.3. 脆弱性検出の自動修正(Copilot Autofix)
アプリケーションがどれほどリスクにさらされているかを考えると、これは非常に強力です。年々、アプリケーションは最も多い攻撃要因となっています。これは私たちのコード、サードパーティのコード、あるいは秘密情報の脆弱性に起因します。多くの場合、問題は私たちが何を持っているかわからないことではなく、セキュリティ負債の山があり、それをどのように乗り越え、開発者の時間に対するさまざまな要求とどのように優先順位をつけるかがわからないことです。
率直に言って、あのチャートを思い出すと、開発者はすでにバグの修正に多くの時間を費やしています。1日に約40分です。彼らにもっと修正させたいでしょうか?私たちはチームでソフトウェアを構築しており、単にセキュリティソフトウェアを構築しているわけではありません。では、セキュリティに関する開発者体験をどのように変えているかを見てみましょう。
開発者として、同僚のNickのように新しいサーバーを導入した場合、GitHub Advanced Securityがバックグラウンドで動作して、Code QLが検出したレート制限の欠如などのセキュリティ脆弱性を検出します。そして、Copilot Autofixエージェントが実際にこの脆弱性が何であるか、なぜそこにあるのかを要約し、直接編集したり、提案をコミットしたり、またはワークスペース体験に戻って、修正リクエストを確信を持って行う前に情報を編集したり、より多くの情報を求めたりすることができるコードが提供されます。
これは脆弱性の実際の修正にかかる時間を変革しています。平均的な脆弱性を修正するのにかかる時間は、1時間半以上から30分未満に短縮されています。そして、クロスサイトスクリプティングやSQLインジェクションのような特定の一般的な脆弱性クラスでは、検出している何百、何千、何百万もの脆弱性にわたって、7倍と12倍の時間改善を見ています。
5.4. 依存関係の管理と修正(Dependabotの強化)
しかし、私たちが考えていることは理解できます。GitHub以外にも、脆弱性を発見する他のツールや他のリスクもあります。エコシステムへの情熱と、エコシステムのサポートに沿って、私たちはサードパーティ検出をサポートするためにAutofixを拡張しています。例えば、ここにESLintがあり、修正が必要な場合や、別のタイプのスキャンツールがある場合、新しいパートナープログラムでは、開発者は何を検出しているかに関わらず、同じ体験を得ることができます。同じ情報を得て、それを修正するのに役立つAutofixも提供されます。
SEAにおける元々のAutofixと考えられるものに戻ると、今日の組織でDependabotや同様のソリューションを使用している方はどれくらいいますか?かなりの数の手が挙がっていますね。これがしばらくの間、Autofixの一種だったことはわかっています。そして、それはかなりうまく機能しています。ほとんどの場合、新しいバージョンにアップグレードするだけで問題ありません。
しかし、そのバージョン更新が壊れ、コードが破損して再構築が必要になった場合はどうでしょうか?これは非常に痛みを伴う可能性があることがわかっています。特に、サプライチェーン攻撃の性質と、自分たちだけでプライベートに脆弱性を発見することが多くなく、業界全体として同時に発見し、組織内のこのような脆弱性があるすべての場所を急いで修復する必要があることを考えると、なおさらです。そして、再構築が必要な場合、これは数週間にわたる会社全体のイニシアチブとなり、戻って修正する必要があります。
今、Dependabot用のAutofixがあれば、最新バージョンや最も安全なバージョンにアップグレードする際に破壊的変更が発生することを検出し、なぜ機能が壊れるのかを理解するのを助け、その破損が発生している場所を修復するためのコードスニペットも提供します。これにより、手動での再構築を行う必要がなくなります。
6. セキュリティキャンペーンと管理
6.1. キャンペーン機能によるセキュリティ管理
まだ納得していない場合、これは素晴らしいけれど誰かが手動でこれをクリックする必要があり、何を優先すべきか、何が重要かをどうやって知るのかと思うかもしれません。そして、もし私のような過去のセキュリティ担当者であれば、このようなダッシュボードに多くの時間を費やしていることでしょう。
多くのチームにわたって開いているアラートがたくさんあるようなダッシュボードです。そして、私のように10万63件のアラートを持っているかもしれませんし、重要なアプリケーションに取り組んでいるチームについての情報や、リスク軽減の観点からチームが処理することが重要な特定の項目に基づいて、どれが最も重要かを開発者に伝える必要があります。
今、GitHubの中でシームレスにそれをすべて大規模に行うことができます。新しいキャンペーン機能を使用すると、リポジトリ、ルールタイプ、重要度でフィルタリングでき、それを絞り込んだら、キャンペーンを作成できます。どこから始めるべきか確信が持てない場合、最も重要なアラート、MITRE Top 10の既知の悪用可能な脆弱性、SQLインジェクションやクロスサイトスクリプティングのような特定のクラスに焦点を当てた、GitHubが推奨する標準のキャンペーンを使用することもできます。
実際にこのキャンペーンを作成するためにクリックすると、例えばSQLインジェクションに関するものを行うとします。タイトルと、説明を提供する場所がサポートされます。私たちはあなたのために作成を手伝いましたが、内部のセキュリティ問題に関するドキュメントやリンク、実行したい異なるキャンペーン、開発者を導きたい場所など、独自の情報を入れることもできます。なぜそれが重要なのか、おそらく特定のイニシアチブを実行しており、チームが自分自身を教育できるようにそのドキュメントにそれを結びつけたいのかもしれません。
SLAの観点からいつ完了させたいかという期限を設定できます。異なるキャンペーンマネージャーを割り当てることもできます。それはあなた自身かもしれませんし、その領域でテクニカルデータリスクを軽減するために密接に協力している開発チームのセキュリティチャンピオンかもしれません。また、リポジトリタイプでこれをフィルタリングすることもできます。ここに示されているように、キャンペーン全体で1000件のアラートを許可していますので、「そんなに多くのアラートから始めたくない、小さく始めたい」と言うこともできます。特定のリポジトリを除外したり、特定のグループやチームに焦点を当てたりすることができます。
6.2. アラートのフィルタリングとグループ化
キャンペーンを立ち上げた後の様子を見てみましょう。私たちが持っているものを見てみると、キャンペーン全体の進捗状況を追跡するための素晴らしいダッシュボードが表示されます。ここで進捗を達成するためにあと何日残っているかを確認できます。そして、リポジトリ別、異なるチームグループ別に、彼らがどのように進んでいるかを見ることができます。もちろん、キャンペーン全体でサポートされているAutofixの数も知ることができます。
Autofixは、Code QLでサポートしているすべての言語で利用可能です。最初から90%以上のアラートタイプをサポートしています。そのため、キャンペーンを作成する際には、ほとんどの場合、すべてがAutofixでサポートされているのを見ることができるでしょう。
これは開発者体験にとって非常に良いことになります。なぜなら、「特定のキャンペーンで修正する必要のある脆弱性があります」と通知されるからです。ここにあるアラートのいくつかを見てみると、例えばこちらをクリックすると、Autofixが開発者が今いる場所で彼らをサポートしていることがわかります。
6.3. 進捗追跡ダッシュボード
キャンペンを立ち上げると、キャンペーン全体の進捗状況を追跡するための素晴らしいダッシュボードが提供されます。このダッシュボードでは、キャンペーンの残り日数を確認することができます。また、リポジトリ別、チームグループ別に進捗状況を確認することも可能です。
このダッシュボードでは、キャンペーンがどのように進行しているかを一目で把握できるよう、視覚的に情報が整理されています。例えば、全体の修正率、残りのアラート数、特に注意が必要なリポジトリなどが直感的に理解できるようになっています。
さらに、このダッシュボードでは、キャンペーン全体でAutofixがサポートしているアラートの数も確認できます。Autofixは、Code QLでサポートしているすべての言語で利用可能であり、最初から90%以上のアラートタイプをカバーしています。そのため、キャンペーンを作成すると、ほとんどの場合、すべてのアラートがAutofixでサポートされているのを確認できるでしょう。
このような包括的な進捗追跡機能により、セキュリティチームはリスク軽減の全体像を把握し、必要に応じてリソースを再配分したり、特定のチームに追加サポートを提供したりすることができます。これにより、キャンペーンの効果的な管理と目標達成が可能になります。
6.4. 開発者への通知と情報提供
この脆弱性について説明を提供し、その同じコードスニペットを開発者が活用できるようにし、さらにこの脆弱性について何が起きているのか、なぜそうなのか、そしてその違った例など、より多くの情報も提供しています。彼らが自信を持って感じ、おそらく彼らが作成していない、そして彼らが会社に入る前から存在していたかもしれない脆弱性を修正することに良い気持ちを持つために重要かもしれない項目も提供します。
これを大規模に行い、今日GitHub Advanced Securityを使用しているなら、すぐに使ってみることができます。
私は少し飛び回っていますが、Secret Scanningについても約束しました。これらのアラートがどこに表示されるかを見る前に、品質について話に戻りましょう。Secret Scanningのアラートも見てみます。また、Secret Scanningのためのこのような修復機能の構築にも取り組んでいます。
Secret Scanningの観点からは、2種類のアラートタイプがあります。開発者にスパムを送らないことがいかに重要かについて話しました。そのため、Secret Scanningアラートに移動すると、そのジェネリックまたはAIベースの検出をオンにするオプションがあります。標準の認証情報キーなどに対する任意の種類の秘密漏洩を開いているアラートで確認できます。また、この実験的なタブに切り替えることもでき、そこでは検出したと思われるパスワード強度を確認できます。そしてこれらのアラートを見るときに、コードのどこにあったか、そしてそこで修復、取り消し、ローテーションするために使用できるより多くの情報を見つけることができます。
7. コードレビューの効率化
7.1. Copilotによるコードレビュー
GitHubでは、開発者がより効率的にコードレビューを行えるようにCopilotを活用したレビュー機能を導入しています。開発者は多くの時間をコードレビューに費やしており、特に新しい領域のコードをレビューする際には、シニアエンジニアに依頼する前に予備的なレビューを受けられると便利です。
Copilotのコードレビュー機能を有効にすると、セキュリティの問題と同様のインターフェースでコードの品質に関するフィードバックが表示されます。デモで示されたように、開発者のSaminaのケースでは、セキュリティ結果とともにCopilotからのフィードバックが表示され、同じスタイルでコード品質の問題に対するAutofixも提供されます。
この機能の重要な特徴は、単に問題を指摘するだけでなく、自動的に修正案を提示してくれる点です。これにより、開発者はコードの品質向上に必要な変更を迅速に適用できます。Copilotによるレビューは、人間のレビュアーが行う前の予備的なチェックとして機能し、基本的な問題を事前に解決することで、人間のレビュアーがより価値の高いフィードバックに集中できるようにします。
7.2. カスタムコーディング基準の適用
品質は主観的なものだと考えているかもしれません。私たち全員が組織全体に適用したい異なる基準と異なるコーディングプラクティスを持っています。そこで、あなたは完全にそれをコントロールすることができます。Copilotが特別にレビューするよう、独自のコーディングガイドラインを作成することができます。それは私たちが提供する標準的なアイスブレーカーを使うか、あるいは組織にとって重要な独自のコーディング基準を設定することで可能です。
例えば、「SQLクエリでSELECT *を使用しない」というルールを考えてみましょう。ルールの名前を作成し、アイスブレーカーの説明を作成します。これを再度編集することができ、私の組織で見た、発生してほしくないサンプルコードの使用例を入れることもできます。しかし、そのサンプルコードがない場合でも、Copilotに説明の生成を手伝ってもらい、組織で設定したい異なるルールに燃料を供給する例を提供してもらうこともできます。
これを事前に実行して、組織でどのように機能するかを確認し、すべてが期待通りに見えることを確認してから、そのルールを保存して大規模に適用することができます。これにより、開発者が手動で入り込んで細かくチェックし、すべてのレビューを行うことを要求することなく、コード全体で一貫した品質と標準化を確保するのに役立ちます。彼らは、この種の管理的またはより退屈なフィードバックではなく、主要な品質フィードバックに時間を集中することができます。私たちはいつも「このレビューでどこまで詳しく入るべきか?どれだけ細かく指摘すべきか?」というトレードオフをしています。そのような判断を彼らから取り除きました。Copilotに彼らを助けてもらいます。
7.3. レビュールールの作成と管理
私たちはGitHubで実践主義者なので、実際にベータ版でリリースする前に、Copilot Reviewを自社で試してみました。そこでGitHubのすべてのPRで見つけたのは、コード品質改善の提案の採用率が60%に達したということでした。また、PRのピアレビュー時間が「時間単位」から「分単位」に短縮され、チームに信じられないほどの時間を返すことができました。
これにより、彼らは新機能の開発、意味のある方法での同僚との交流、品質に関するあれこれの細かい点ではなく、本当に重要な議論に集中することができるようになりました。
カスタムレビュールールを作成するプロセスはシンプルで直感的です。例えば、SQLクエリで「SELECT *」を使わないようにするルールを作成する場合、以下のようなステップで設定できます:
- ルールの名前を決め、問題を明確に説明する説明文を作成します
- 違反例となるコードサンプルを提供するか、Copilotに生成してもらいます
- 代替となる推奨パターンを示します
- ルールを事前に実行してテストし、期待通りに機能することを確認します
- ルールを保存し、組織全体に適用します
このようなルールを作成することで、コードレビュープロセスが標準化され、一貫性のあるフィードバックが提供されるようになります。また、新しいチームメンバーにとっては、これらのルールが暗黙的な組織の知識やベストプラクティスを学ぶ良い機会となります。
7.4. GitHubでの実装結果(60%の提案採用率、レビュー時間の短縮)
私たちはGitHubで実践主義者なので、実際にベータ版でリリースする前に、Copilot Reviewを自社で試してみました。GitHubのPR全体にわたって発見したのは、コード品質改善の提案の採用率が60%に達したということです。また、PRのピアレビュー時間が「時間単位」から「分単位」に短縮され、チームに信じられないほどの時間を返すことができました。
これにより、彼らは新機能の開発、意味のある方法での同僚との交流、そして品質に関する細かい点ではなく、本当に重要な議論に集中することができるようになりました。このような時間の節約により、開発者はより創造的な作業や複雑な問題解決に集中できるようになり、全体的な生産性が向上しました。
実際の数字で見ると、Copilot Reviewの導入前はPRの平均レビュー時間が数時間かかっていましたが、導入後は同じ品質レベルを維持しながら数分に短縮されました。また、自動化されたレビューにより、人間のレビュアーがより高度な側面に集中できるようになりました。コードの構造やアーキテクチャの問題、ビジネスロジックの正確性など、AIが簡単に評価できない領域に注力できるようになったのです。
このような結果から、Copilot Reviewは単なる便利ツールではなく、開発ワークフロー全体を変革する可能性を持っていることが証明されました。
8. 次世代AI開発ツール
8.1. GitHub Copilot Modelsの紹介
最後に、開発ライフサイクル全体でCopilotがどのように組み込まれ、あらゆるステップをサポートしているかについて多くの話をしてきました。単にIDEやチャットだけでなく、実際に作業の中で、そして取り組むかもしれないどんなタスクでもサポートします。
また、コードのセキュリティと品質を向上させたいこと、そしてCopilotがより多くのことを検出して見つけるだけでなく、実際にそれらを修正し、大規模に修正し、組織全体で調整するのにどのように役立つかについても話しました。
しかし、皆さんの組織の多くはGitHubのようなものかもしれません。同じ価値を顧客に還元し、AIをどのように活用して顧客体験を向上させたり、目標達成を支援したりできるかを考えています。ここで、最新の取り組みであるGitHub Copilot ModelsとCopilot Sparkが登場します。これらは、組織内で新しいビルダーを見つけるのを助けるためのものです。
Copilot Modelsでは、AIアプリを構築し始めるときに、通常、どのモデルを使用すべきかを理解することから始めます。最近、さまざまなモデルコミュニティを見てみると、活用できる選択肢がたくさんあることがわかります。
私たちは、既知のGitHubマーケットプレイス内にさまざまなモデルを提供することで、これを簡単にしようとしています。今日、選択できる40のモデルが利用可能です。Copilot拡張機能を見つけたり、実行する可能性のあるさまざまなアクションを見つけたりするのと同じ場所で、GitHub内で活用できるさまざまなモデルについても見つけることができます。
8.2. 40種類のモデル選択と比較
ここでは、さまざまなモデルプロバイダーをスクロールして確認することができます。それぞれについて詳しく読み、理解し、どのようなライセンス、どのような言語をサポートしているか、必要なものは何でも知ることができます。あるいは、さらに良いことに、プレイグラウンドに移動して、実際にモデル自体をテストし始めることができます。
そして、異なるタイプのプロンプトにどのように応答するかを見始めることができます。さらに良いのは、互いに比較してモデルを比較し始め、「Mistralを使いたいのか、OpenAIを使いたいのか」、「どちらがこのプロンプトにより良く応答するか」を理解し始めることができることです。
このアイスブレーカーを使用します:「機械学習の基本を説明できますか?」両方のモデルがそのプロンプトに対して、または選択した入力するプロンプトに対して応答を生成し、どちらがあなたが望む情報を提供するか評価することができます。どのようなトレードオフを好むでしょうか?そして、コードスペースでこれを開いて、このモデルを使った構築の探索を始めることができます。
これは非常に新しく、10月に発表したばかりです。ここへの投資と開発を継続する多くの計画があります。AIベースのアプリを構築する上で最も重要なタイプの一つは、プロンプトエンジニアリングと評価からのプロンプトの洗練にあります。そのため、これらの評価ツールを大規模に構築することも支援します。また、これらのモデルの評価とユースケースやニーズを満たしているかどうかの判断をさらに進めるために、すべてGitHub内でプロンプトツールを大規模に提供します。
ここで選ぶとしたら、おそらくOpenAIによる簡潔さのオプションが好きかもしれませんが、詳細レベルと情報についてはいくつかのトレードオフがあります。必要に応じて、パラメータを変更し、異なるシステムプロンプトを入れたり、トークンリクエストを制限したり、温度を変更したりすることができます。また、コードを見て、それを取得し、前述のように開くこともできます。
8.3. プレイグラウンドによるモデル評価
GitHub Copilot Modelsでは、AIモデルの実践的な評価を容易にするプレイグラウンド機能が提供されています。このプレイグラウンドでは、選択したモデルを実際にテストし、そのパフォーマンスを直接確認することができます。
プレイグラウンドにアクセスすると、様々なプロンプトを入力してモデルの反応を確認できます。さらに便利な機能として、異なるモデル同士を比較する機能も搭載されています。例えば「Can you explain the basics of machine learning?」といったプロンプトを入力すると、Mistral系とOpenAI系のモデルがそれぞれどのように応答するかを並べて確認できます。
この比較機能により、どのモデルが特定のユースケースに最適かを効率的に判断することができます。例えば、Brittney自身が比較を行った例では「OpenAIの簡潔な回答スタイルが好ましい点もあるが、情報の詳細さではトレードオフがある」と評価しています。
プレイグラウンドではさらに、システムプロンプトの調整、トークン制限の設定、温度パラメータの変更など、詳細な設定も可能です。評価後はそのコードを直接コードスペースで開いて、さらなる開発に進むことができます。
GitHub Copilot Modelsプレイグラウンドは2024年10月に発表された比較的新しい機能ですが、今後も継続的な機能拡張が予定されています。特に、プロンプトエンジニアリングとモデル評価のためのツールが強化される予定で、より大規模で高度な評価を可能にし、特定のユースケースに対するモデルの適合性をさらに詳細に分析できるようになる見込みです。
現在、ユーザーは無料の利用枠内でマーケットプレイスからこの機能を利用できます。
8.4. GitHub Sparkによる自然言語プログラミング
GitHub Sparkは、プログラミングの知識がなくても自然言語だけでアプリケーション開発ができる革新的なツールです。このツールは、ソフトウェア開発教育を受けていない人々や、若い世代がコーディングに興味を持つための入り口として設計されています。
デモで示されたように、GitHub Sparkでは「Can you help me build a Black Jack card game?」といった自然言語の指示だけで、実際に動作するアプリケーションが生成されます。ユーザーはコード構造やインフラストラクチャについての知識がなくても、アイデアを実現するアプリケーション開発を楽しむことができます。
Sparkの重要な特徴は、反復的な改善が可能な点です。初回の生成結果に満足できない場合、追加の説明や要望を自然言語で指示することで、アプリケーションを洗練させていくことができます。例えば、色の変更やカスタマイズの要望も、コードを書くことなく実現可能です。
デモでは、Black Jackゲームが自動生成され、実際にプレイできる状態になりました。ユーザーはカードを引く(「hit me」)、勝負を決める(「stand」)などのアクションを実行し、ゲームを楽しむことができます。これはカードゲームに限らず、旅行アプリなど、ユーザーの想像力の範囲内であらゆるアプリケーションを開発できる可能性を示しています。
GitHub Sparkは、「コードを書くことなく開発する」という新しいパラダイムを提供し、プログラミングの敷居を大幅に下げることで、より多くの人々がソフトウェア開発の世界に参加できるようにすることを目指しています。
9. まとめと成果
9.1. 主要機能のまとめ
プレゼンテーションで紹介した多くの機能は、すでにコミュニティに公開されており、すぐに活用できる状態にあります。特に注目すべきは、Copilot Autofixのような機能で、これを使えば組織のセキュリティ目標を達成するためのソリューションをすぐに試すことができます。
Copilotは単なるコード補完ツールではなく、開発サイクル全体をサポートする総合的なソリューションとして進化しています。基本的なIDEサポートから、Workspaceによる計画立案、プラットフォーム全体への組み込み、そして拡張機能による外部ツール連携まで、開発者の生産性を様々な角度から高めています。
セキュリティとコード品質の面では、GitHub Secret Scanningの強化やAutofix機能による自動修正が大きな進展です。特にAIを活用した機密情報検出は、従来難しかった汎用的なパスワード検知を高精度で実現しています。また、セキュリティキャンペーン機能により、組織全体のセキュリティ管理も効率化されています。
コードレビューの分野では、Copilotによる自動レビューとカスタムコーディング基準の適用が、レビュー時間の短縮と品質向上に貢献しています。GitHubの社内実装では、60%の提案採用率とレビュー時間の大幅短縮という顕著な成果が出ています。
さらに、次世代の開発をサポートするために、GitHubは40種類以上のAIモデル選択を提供し、プレイグラウンドでの比較評価を可能にしています。GitHub Sparkによる自然言語プログラミングは、コーディングの知識がなくても開発を体験できる革新的なアプローチを提供しています。
これらの機能は、開発者がより効率的に、より高品質なソフトウェアを構築するための強力なツールセットとなっています。GitHubのビジョンは、AIを活用して開発プロセスを変革し、次世代のデジタル世界の構築を支援することにあります。
9.2. コミュニティへの提供状況
発表で紹介された多くの機能はすでにコミュニティに公開されており、すぐに利用することができます。特にCopilot Autofixのような機能は、今すぐ試すことができ、組織内でどのように活用できるか、目標達成にどう貢献できるかを実際に体験することが可能です。
GitHub Copilot Modelsは2024年10月に発表された比較的新しい機能ですが、現在は無料の利用枠内でマーケットプレイスから利用できます。ユーザーはさまざまなAIモデルを探索し、自分のユースケースに最適なモデルを見つけることができます。
また、GitHubは継続的な機能拡張を計画しており、特にプロンプトエンジニアリングと評価ツールの領域での強化を予定しています。これにより、より大規模で高度なモデル評価が可能になり、特定のユースケースに対するモデルの適合性をさらに詳細に分析できるようになる見込みです。
コミュニティメンバーは、これらの機能を自分の組織内で試し、実験し、探索することによって、どのように自分たちの目標に適合するかを理解し、デジタル世界で次に何を構築するかについての洞察を得ることが推奨されています。
さらに詳しい情報や専門家のサポートが必要な場合は、GitHubブースを訪れることで、特定の質問や組織のニーズに関する詳細な情報を得ることができます。