※本記事は、AWS re:Invent 2024で開催されたセッション「Leading in the age of AI: How Copilot empowers digital transformation (AIM387)」の内容を基に作成されています。このプレゼンテーションはAWSパートナーであるGitHubによって提供されました。本記事では、GitHubのプロダクトチームで働くBritney O'Sheaによる発表内容を要約しております。発表では、GitHubのネイティブAIペアプログラマーであるCopilotを活用した開発者生産性の向上方法、AIによるソフトウェア開発の加速方法、AIによるイノベーション文化の促進方法、そしてCopilotの今後のアップデートについて解説されています。詳細情報はAWS re:Inventのウェブサイト(https://go.aws/reinvent )でご覧いただけます。また、より多くのAWSイベント情報は https://go.aws/3kss9CP から、AWSビデオコンテンツは http://bit.ly/2O3zS75 および http://bit.ly/316g9t4 からアクセスできます。
1. イントロダクション
1.1. GitHubの紹介と位置づけ
皆さん、おはようございます。本日はお時間を割いてご参加いただき、ありがとうございます。多くのセッションが並行して行われている中、この時間をGitHubとCopilotについてお話するために取っていただき、本当に感謝しています。
私はBritney O'Sheaと申します。GitHubのプロダクトチームで働いており、開発者が必要とする次世代ツールの構築について考えています。もしGitHubを最近使っていない、あるいは初めてGitHubをご利用される方がいらっしゃれば、私たちは「世界のソフトウェアのホーム」と愛情を込めて自分たちを呼んでいます。これはオープンソースとソースコード管理におけるルーツに敬意を払うとともに、この10年間でどのように進化してきたかを反映しています。現在ではコードをアイデアから本番環境まで導くために必要なものすべてをGitHub内で提供しています。
私たちがプロダクトを構築する際に常に考えているのは、開発者の心と気持ち、つまりユーザーとその体験です。過去2年間、おそらく他のベンダーと同様に、AIをどのように活用し、製品に組み込むかに本当に注力してきました。特に、私たちが愛するユーザーの体験を向上させ、ソフトウェア開発における生産性を高めるためにAIをどう活用するかを考えてきました。
1.2. AIツールの現状と利用状況の確認
まず簡単なウォームアップとして、皆さんの状況を確認したいと思います。現在、組織内でソフトウェア開発を支援するためにAIパワードツールを何らかの形で使用している方はどれくらいいらっしゃいますか?かなりの数の方がいらっしゃいますね。
では、主にチャットで利用されている方はどれくらいですか?多くの手が挙がっていますね。インラインコンテキストで使用している方は?こちらもかなりの数です。
ワークストリームの前後、つまりアイデア出しやPR、その他の段階で使用している方は?まだ導入し始めた段階のようですね。
本日は多くのデモをお見せし、実践的な内容をお届けします。百聞は一見にしかず、すべてうまく動作することを祈っています。また、CopilotをIDEの段階だけでなく、プラットフォーム全体にどのように組み込んでいるかについてもお話しします。とても楽しみにしています。
2. GitHub Copilotの基本機能
2.1. Copilotの基本的な使い方
Copilotを紹介していきましょう。現在、何百万人もの開発者がCopilotを利用して開発を行っていますが、実際に見て試してみるのが一番わかりやすいと思います。ベガスにいることもあり、ちょっとゲーム気分なので、Copilotを使って楽しいゲームを作ってみたいと思います。スネークゲームをご存知の方はいらっしゃいますか?多くの方がご存知のようですね。
開発者としてCopilotを使う場合、お好みのIDEで利用できますが、ここに表示されているCopilotチャットから始めるか、インラインで始めることができます。私はスネークゲームに少し慣れていないので、まずCopilotに「スネークゲームとは何か説明してください」と尋ねてみましょう。Copilotはそのゲームが何か、どこにあるかを教えてくれます。私のように失読症があると誤字があるかもしれませんが、もちろんそれは気にせず回答してくれます。また、音声テキスト変換を使用したり、プロンプトを始めるために添付ファイルをアップロードしたりすることもできます。
ここでCopilotに「HTMLでレンダリングするスネークゲームを作成して」と頼んでみます。今日はGPT-4.0を使用していますが、モデルを切り替えてClaudeやGemini、0.1などの利用可能なモデルを使うこともできます。後ほどそれも見ていきましょう。いま表示されているのは提案される構造ですが、「HTMLでレンダリングするスネークゲームを作成するコードを教えて」と具体的に要求してみましょう。Copilotがコードを生成し、それをIDEにコピーしたり、実際に使い始めたりすることができます。
このコードを取り込んでみましょう。Copilotコードブロックをここに適用して、編集したりコメントしたり、さらに質問したりすることができます。ここに入れたら、このコードが実行されるかどうか確認してみましょう。少しかわいらしい例かもしれませんが、軽量で楽しい例です。しかし、エンタープライズアプリケーションを構築している場合は、これを保存して動作するかどうか見てみましょう。ウェブブラウザに移動して更新すると...先ほど少し遊んでいましたが、スネークゲームが動作しています!
2.2. デモ:Snakeゲームの作成
私が思うに、皆さんは「これは可愛らしいデモだけど、私たちはもっと大規模なエンタープライズアプリケーションを構築しているんだけど...」と考えているかもしれません。確かにこれは楽しく軽量なデモですが、エンタープライズ目標やスケールを持つ場合、初めからゲームを開発する開発者を想像するのは良いことです。でも実際には、私たちの開発者はコーディング以上の多くのことを行わなければならず、様々なタスクが課せられています。
私たちは開発者がエンタープライズコードに対応できるようにする必要があり、コーディングに多くの時間を取り戻し、他の責任をこなすための作業効率を向上させる必要があります。そこで、Copilotがただ単にIDEでの説明だけでなく、開発者がアイデアから本番環境へと移行するために必要な各ステップにどのように組み込まれているかについて詳しく説明していきます。
これらを3つの異なるワークフローに分けて説明します。私たちが構築する機能を3つのカテゴリで考えると良いでしょう。1つ目は、日常的なタスクでの速度をどのように向上させるか。2つ目は、エンタープライズ向けに開発する際、コードが安全で高品質かつリリース可能であることをどのように確保するか。そして3つ目は、ユーザーが次世代のアプリケーションを構築できるようにするか、または次世代の開発者がそれらのアプリケーションを構築できるようにする方法です。
2.3. 支援される開発環境(IDE)
開発者の視点からすると、Copilotは様々な環境での開発をサポートしています。私たちはお気に入りのIDEをすべてサポートしていますので、どこでコーディングしたいか、どのシステムでコーディングしたいかに関わらず、Copilotを使用することができます。
GitHub内で直接Code Spacesを使用することもできます。これにより、ローカルマシンのセットアップをすることなく、数分で開発環境を立ち上げて作業を始めることができます。そして、これをカスタマイズすることも可能です。IPに基づいて特定のコードをCopilotに送信したくない場合は、除外設定を行うことができます。Copilotからより強力な提案を得るために、どのようなコードを参照したいかを決めることができます。
さらに、独自の微調整(ファインチューン)モデルを作成することまでできます。組織のコードを取り込み、そのコードのみに基づいてCopilotを特別にトレーニングすることができるのです。どのリポジトリでトレーニングするかを設定し、要件を設定して適用するだけの簡単な操作です。そうすることで、組織固有のコードに基づいたリアルタイムのコンテキスト提案を得ることができます。しかも、それは組織のためだけにカスタマイズされています。
3. 開発者の生産性向上
3.1. Copilotのコード生成機能
速度を加速させるための最初のカテゴリでは、GitHubを通じてCopilotを組み込む3つの異なるソリューションを用意しています。1つ目は先ほど見ていただいたCopilot自体、2つ目は計画段階から実際の構築段階へどのように移行できるかを理解するためにベータ版でリリースしたばかりのCopilot workspace、そして最後にプラットフォーム全体への組み込みです。PRの作成、コメントへの返信、キャッチアップ、拡張機能の操作など、あらゆる場面で必要なサポートを受けることができます。
デモを見て、どのように機能するか確認してみましょう。自分の書店を作っているところを想像してみてください。私は会社の新しい開発者で、最初の仕事に取り掛かる必要があります。まずコードを見て、Copilotに説明を求めたり、より多くのコンテキストを得たりすることができます。あるいは、最初に取り組むべき作業を振り返ってみるかもしれません。
これが読み込まれている間に、デモに戻ってリポジトリに戻りましょう。まずその課題から始めて、やるべきことをすべて読み、追いつくことができます。数百のコメントがあるかもしれません。そこでCopilotに何をすべきか、重要なポイントは何かを要約してもらうことで、理解し始めることができます。これは追いつく際に非常に役立ちます。バックグラウンドでCode Spacesが実行されるのを待っている間に、これが開始点として役立ちます。
また、Copilotにコードを説明してもらい、コードベースとその動作について理解を深めることができます。メインモデルに移動して「このコードを説明して」と言うと、目的や何が起きているかなど、速やかに理解するための説明を提供してくれます。
3.2. Copilot workspaceの活用
もし何から始めればいいのか分からず、ブレインストーミングやアイデア出しの段階から始めたい場合は、新しくリリースしたworkspaceを使用できます。workspaceを開くと、Copilotと一緒に計画を作成することができます。
この課題に取り組むために、現在のアプリケーションでどんな動作が起きているのか、提案されている解決策は何か、そして実際に何かを実装する場合に尋ねたいフォローアップの質問などを理解することができます。ウェブアプリケーションでの星評価システムの実装方法についてもっと学びたいのか、あるいは視覚的な表示方法についてアイデアが欲しいのかもしれません。このブレインストーミング段階で行ったり来たりしながら、重要かもしれないアイデアを理解し、始めるのに役立てることができます。
準備ができたら、Copilotに実際に計画を生成してもらうことができます。これにより、どのようなコード変更が必要になるかを考えるのに役立ちます。どのファイルを編集する必要があるか、どのように達成できるかを教えてくれます。計画が完成したら、それを確認し、場合によってはアイテムを追加したり変更したりして、選択したファイルの実装を依頼することができます。
Copilotはバックグラウンドで作業し、それらのコード変更を実際に開発します。これにより、このコードが何をしているのか全く分からなかった新しい開発者が、おそらく同僚と時間を過ごして立ち上げる必要があったところから、数分でCode Spaceからコードにすぐに飛び込み、コードに基づいて自分が最適と判断したモデルを選択して、Copilotと質問を行ったり来たりできるようになります。
さらに詳しい説明を得たり、その課題の要点を要約してもらったり、ブレインストーミングに入って調査を行ったり来たりしたり、計画を立てて反復したりしてから、実際にそのコード変更を実装するようCopilotに頼むこともできます。どのようなコード変更が推奨されるかを見る能力を持つことができます。
これを取り入れて自分でさらに編集したり、質問するために同僚を呼んだりするかもしれません。しかし、「学習中で慣れている段階」から「実際にチームに貢献し、変更を加え始める」段階へと素早く移行する助けになります。そして、プルリクエストを作成する際には、もしコードに詳しく「これは本当に良さそうだ」と感じるなら、Copilotに面倒な作業、つまり説明文を生成してもらい、組織、プロジェクトマネージャー、下流のチームに自分が行いたい変更を伝えるのを手伝ってもらうこともできます。そして、それを送信することができます。
3.3. プラットフォーム全体への統合
もちろん、開発者は自分の選んだ場所から全てのことを行うことができます。先ほど申し上げたように、私たちはお気に入りのIDE全てをサポートしているので、どこでコーディングしたいか、どのシステムでコーディングしたいかに関わらず利用できます。GitHub内で直接Code Spacesを使えば、ローカルマシンをセットアップすることなく数分で立ち上げて開始できます。
これをカスタマイズすることも可能です。IPに基づいて特定のコードをCopilotに送信したくない場合は、除外設定を行えます。より強力な機能や提案をCopilotから得るために、参照したいコードの種類を決めることもできます。さらに進んで、独自のファインチューンモデルを作成することさえ可能です。つまり、自社のコードを取り込み、組織にとって最も関連性が高いと思われるコードだけに特化してCopilotをトレーニングできるのです。
これは非常にシンプルで、トレーニングしたいリポジトリを設定し、要件を設定して適用するだけです。そうすれば、組織独自のエンタープライズコードに基づいたリアルタイムのコンテキスト提案を得ることができ、それは組織だけのために特別にカスタマイズされています。
もちろん、私たちは拡張性を常に重視してきました。ソフトウェア開発は真空の中で行われるものではありません。Jiraを使用しているかもしれませんし、他のダウンストリームツールを使用していて、開発者がそれらと対話したり質問したりできるようにしたいかもしれません。本番環境へのリリースを妨げているバグや、見ている異なるエラーについて考えるかもしれません。
Copilot拡張機能を使えば、Copilotから直接、今日のGitHubワークフローに統合されている可能性のあるすべてのサードパーティツールを呼び出し始めることができます。これにより、開発者はフローの中に留まり、アイデアから出荷までスムーズに進むことができ、実際にそのフロー状態を離れる必要がなくなります。速度を上げるだけでなく、ワークフローを中断することなくより多くのことを行う能力を得ることができます。
もちろん、私たちの言葉だけを信じる必要はないと理解しています。これを測定し、企業として組織にとって重要なことを理解できるようにしたいでしょう。どれだけの提案が採用されているのか?そこで、メトリクスAPIをリリースし、組織が近いうちに活用できるようなより堅牢なレポーティングを開発しています。これにより、開発者がCopilotをどのように使用しているかをより良く理解できるようになります。そしてそれをモデルのファインチューニングの考え方や、プラグインして活用したい拡張機能の検討に活かすことができます。すべては体験を最適化し、このツールを最大限に活用するためです。
4. エンタープライズでのセキュリティとコード品質
4.1. AIを活用したセキュリティ検出(秘密情報検出)
私のバックグラウンドはセキュリティなので、「AIによって生成されるコードが増えるなかで、すべてが安全で問題ないことをどう確認するか」について触れないわけにはいきません。特に、AIツールを活用することに慣れている若手開発者が増える中で、チームがかつて行っていた典型的なトレーニングをすべて経験していない可能性があります。
私たちはこの課題にも取り組んでいます。単に提案が安全であることを確認するだけでなく、コードを安全にし、そのプロセスを高速化・自動化し、コードの品質を確保することでチームをより良く保護し、スケーリングする方法についても考えています。
ここで少しゲームをして、私たちのマントラである「Found Means Fixed(見つけたら修正する)」について説明したいと思います。なぜなら私たちは業界を「多くのアラートがある」状態から「見つけた瞬間に修正できる」状態へと移行できると信じているからです。
「リアルvsケーキ」というゲームを見たことがある方はいますか?それに似たゲームをやってみましょう。AIよりも秘密認証情報のリークを検出できるかどうか見てみましょう。GitHubでは「GitHub Secret Scanning」を提供していて、過去約6ヶ月間だけでも320万以上の秘密情報がコードにプッシュされようとしているのを検出しています。これは業界全体に影響を与える大きな問題です。
私たちはAWSのようなトークンプロバイダーと協力して、高い精度で検出できる標準化されたキーを作成してきました。しかし、業界ではまだジェネリックな秘密情報に関して大きな問題を抱えています。ジェネリックな秘密情報とは何でしょうか?例えばパスワード、「catlover!1」のようなものです。3ヶ月ごとに変更する必要がありますが、すべてのパスワードを覚えられるわけではないので、一文字だけ変更したりします。このような情報は従来、大規模に検出するのが非常に難しいものでした。開発者にこれらの結果を渡して実際に対応してもらおうとすると、ノイズが多くなってしまうことは想像に難くありません。
そこで私たちが最近取り組んでいるプロジェクトの一つが、AIを活用して秘密情報の検出を強化し、大規模に実行できるようにすることです。先ほど言ったように、ゲームをしています。コードに漏洩した本物のパスワードがどちらかを当てられるか、手を挙げて教えてください。どなたか?挑戦者はいませんか?私もわかりません。
両方とも本物に見えますね。大文字があり、長さも適切で、特殊文字も含まれています。どちらも本物である可能性がありますが、実際には一方が実際の例です。もう少し画面を広げましょう。今ならパスワードがどちらかわかりますか?まだ挑戦者がいないようですね。賭け気分ではないのかもしれませんね。
私にもまだ本物に見えます。一方は「Auth_Token」、パスワードかもしれません。もう一方は「string pass」、これもパスワードかもしれません。もう少し画面を広げて、誰かが賭けたい気分になるか見てみましょう。どうでしょうか?誰か?「2番目」と言っている方がいますね。遠い方のP6の方ですか、それともこちら側?M1ですか、M1ですね。
皆さん、セキュリティの新しい仕事を得られるかもしれませんね、安全ではないかもしれません。それが実際のパスワードです。しかし、これらのパスワードのように見える文字列をスキャンするとどれだけノイズが多くなるか想像できますね。AIを活用することで、秘密情報のスキャンを大規模に高精度で検出できるようになりました。
そして、AI検出を従来の静的スキャンやオープンソーススキャンにも適用しています。コード内の脆弱性や漏洩した秘密情報をより堅牢に検出し、正確に行うためです。数分後にデモに戻ったときにそれがどのように見えるか確認してみましょう。
4.2. Copilot Autofixによる脆弱性修正
皆さんはこう考えているかもしれません。「これはいいね、秘密情報のリークに対してとても役立つし、AIでもっと多くのものを検出できるのはわかった。でもBrittany、私はもっと多くのものを検出したいわけじゃない。すでに検出すべきものはたくさんあるし、それを修正しなければならないんだ」と。
そこで私たちは、Copilot Autofixでそのお手伝いもしています。これはコードQLで見つかった問題を検出し、開発者が編集したり直接コードにマージしたりできるコード提案を行い、脆弱性を修正する機能です。
これは、アプリケーションがどれだけリスクにさらされているかを考えると、非常に強力です。私たちのアプリケーションは毎年、攻撃の要因のナンバーワンであり続けています。これはコード内の脆弱性、サードパーティコードの脆弱性、あるいは秘密情報の漏洩のいずれかから発生します。多くの場合、問題は何があるかわからないことではなく、セキュリティの負債が山のようにあり、それをどう解決するか、開発者の時間に対するさまざまな要求とどのように優先順位をつけるかがわからないことです。
率直に言って、先ほどのチャートを思い出すと、開発者はすでにバグの修正に多くの時間、1日あたり40分を費やしています。私たちはソフトウェアを構築しているのであって、チーム内でセキュリティソフトウェアだけを構築しているわけではありません。では、セキュリティに関して開発者体験がどのように変化しているか見てみましょう。
開発者として、同僚のNickのように新しいサーバーを設置した場合、バックグラウンドでGitHub Advanced Securityが動作し、コードQLが検出したこの「レート制限の欠如」のようなセキュリティ脆弱性を検出します。そして、Copilot Autofixエージェントがこの脆弱性が何であるか、なぜそれが存在するのかを要約し、直接編集したり、提案をコミットしたり、あるいはworkspace体験に戻ってより詳しい情報を尋ねたりしてからプルリクエストを作成できるようなコードを提供します。
これにより、脆弱性の修正にかかる時間が大幅に変わります。平均的な脆弱性を修正するのに1時間半以上かかっていたものが、30分未満に短縮されています。そして、クロスサイトスクリプティングやSQLインジェクションなどの特定の一般的な脆弱性クラスでは、何百、何千、何百万もの検出される脆弱性において7倍から12倍の時間改善を実現しています。
しかし、皆さんはこう考えているでしょう、「私にはGitHubだけでなく、他のツールで見つかる脆弱性リスクもあります」。エコシステムへの情熱とエコシステムのサポートに沿って、サードパーティの検出にもAutofixを拡張しています。例えば、ESLintの修正や別の種類のスキャンツールが必要な場合、新しいパートナープログラムを通じて、開発者は検出方法に関係なく同じ体験を得ることができます。同じ説明と、修正を手助けするAutofixを提供します。
4.3. 第三者検出ツールとの連携
エコシステムへの情熱とエコシステムのサポートに沿って、私たちは第三者の検出ツールにもAutofixを拡張しています。例えば、ESLintを使用していて修正が必要な場合や、別のタイプのスキャンツールを使用している場合、新しいパートナープログラムを通じて、開発者は検出方法に関わらず同じ体験を得ることができます。
つまり、どのようなツールで脆弱性が検出されたとしても、開発者には同じインターフェースで情報が提供され、同じように説明が表示され、修正を支援するAutofixが提供されます。これにより、開発チーム全体で一貫した体験を維持することができます。
サードパーティとの連携により、GitHub内だけでなく、組織が使用している他のセキュリティツールやコード品質ツールとシームレスに統合することが可能になります。これは開発者がツールの違いを意識することなく、セキュリティやコード品質の問題に対処するための統一されたワークフローを持つことができるということを意味しています。
4.4. Dependabotの改良版
私が考えるに、SEAにおける元祖Autofixとも言えるのがDependabotです。皆さんの中でDependabotや同様のソリューションを組織内で使用している方はどれくらいいますか?かなりの数の手が挙がっていますね。これがしばらくの間、Autofixの一種として機能していることを私たちは知っています。
ほとんどの場合、新しいバージョンにアップグレードするだけで問題なく動作します。しかし、そのバージョンアップデートが破壊的変更をもたらし、コードが壊れてリファクタリングが必要になった場合はどうでしょうか?これは非常に苦痛な作業になることがあります。特にサプライチェーン攻撃の性質を考えると、自分たちだけでプライベートに脆弱性を発見するという贅沢はなく、業界全体が同時に発見し、組織内のあらゆる場所でこの脆弱性を修正するために猛ダッシュすることになります。
リファクタリングが必要な場合、これは会社全体で何週間もかかるイニシアチブになることがあります。そこで、Dependabot用のAutofixを導入しました。最新または最も安全なバージョンにアップグレードする際に破壊的変更が発生することを検出し、その関数がなぜ壊れるのかを理解するのを助け、さらにその破壊箇所を修復するためのコードスニペットも提供します。これにより、手動でのリファクタリングを自分で行う必要がなくなります。
5. セキュリティキャンペーン管理
5.1. 大規模なセキュリティアラート管理
もしこれまでの内容でまだ納得していないのであれば、「これはいいね、でも誰かが手動でクリックしないといけないし、何を優先すべきか、何が重要なのかをどうやって知ればいいの?」と思っているかもしれません。もし過去の私のように、セキュリティ担当者として多くの時間をこのようなダッシュボードに費やしているなら、戻りましょう。
たくさんのチームにまたがって多くのアラートが開いているようなダッシュボードです。私のように10万63個ものアラートを抱えていることもあるでしょう。そして、重要なアプリケーションに取り組んでいるチームや、リスク軽減の観点からチームが優先的に対処すべき特定の事項について持っている情報に基づいて、どのアラートが最も重要かを開発者に伝える必要があります。
今ではGitHub内で大規模にそれをシームレスに行うことができます。新しいキャンペーン機能を使えば、リポジトリ、ルールタイプ、重要度でフィルタリングし、それに基づいてキャンペーンを作成できます。どこから始めるか迷っている場合は、GitHubが推奨する既製のキャンペーンを使用することもできます。これらは最も重要なアラート、MITRE Top 10の既知の悪用可能な脆弱性、SQLインジェクションやクロスサイトスクリプティングなどの特定のクラスに焦点を当てています。
実際にキャンペーンを作成するときには、タイトルとともに説明を提供する場所が用意されています。私たちがあなたのために作成を手伝いますが、独自の組織内情報、セキュリティ問題に関する内部ドキュメントへのリンク、開発者が教育するために向かうべき場所への異なるキャンペーンなどを入れることもできます。
なぜそれが重要なのか、特定のイニシアチブを実行していて、チームがその文書にリンクしたいのかもしれません。SLAの観点から完了すべき期日を設定することができます。キャンペーンマネージャーを割り当てることもできます。それはあなた自身かもしれませんし、その開発チームのセキュリティチャンピオンで、あなたがその領域の技術的負債リスクを軽減するために密接に連携している人かもしれません。
また、リポジトリタイプでフィルタリングすることもできます。ご覧のように、キャンペーンでは1000のアラートまで扱うことができるので、「そんなに多くのアラートから始めたくない、小さく始めたい」と言うことができます。特定のリポジトリを除外したり、特定のグループやチームに焦点を当てたりすることができます。
キャンペーンを立ち上げた後の様子を見てみましょう。キャンペーンの進行状況を追跡するための素晴らしいダッシュボードが得られます。進行状況を確認したり、残り時間を確認したりすることができます。また、リポジトリやチームグループ別にどのような進捗があるかを見ることができます。もちろん、キャンペーン全体でどれだけのAutofixがサポートされているかも知ることができます。
Autofixは、コードQLでサポートしているすべての言語で利用可能です。すぐに使えるアラートタイプの90%以上をサポートしています。そのため、キャンペーンを作成する際には、ほとんどすべてがAutofixによってサポートされているはずです。
これは開発者体験にとって非常に良いことです。なぜなら、「特定のキャンペーンで修正が必要な脆弱性がある」と通知されるからです。ここにあるアラートのいくつかを見てみましょう。例として、これをクリックすると、Autofixが開発者を助けていることがわかります。
脆弱性についての説明が提供され、活用できるコードスニペットが与えられ、さらにこの脆弱性が何であるか、なぜそうなのか、その他の例について学べる追加情報も提供されています。これにより、おそらく自分が作成したわけではなく、会社に入る前から存在していたかもしれない脆弱性を修正することに自信を持ち、良い気分で大規模にコードをマージすることができます。
現在GitHub Advanced Securityを使用している場合は、すぐにこれを試すことができます。
5.2. キャンペーン機能による優先順位付け
キャンペーンを作成するプロセスを詳しく見ていきましょう。GitHub内でこれらのキャンペーンを作成する際には、さまざまな方法でアラートをフィルタリングし、優先順位を付けることができます。
例えばSQLインジェクションに関するキャンペーンを行うとしましょう。キャンペーンをクリックして作成すると、タイトルの入力欄と説明を提供する場所が表示されます。この説明はすでに私たちがあなたのために作成したものがありますが、独自の組織情報、セキュリティ問題に関する内部ドキュメントへのリンク、または実行している別のキャンペーンへのリンクなど、開発者が自己教育するために向かうべき場所を入れることもできます。
なぜこれが重要なのかを説明できます。特定のイニシアチブを実行していて、そのドキュメントにチームをリンクさせたいかもしれません。SLAの観点から完了期限を設定することもできます。さらに異なるキャンペーンマネージャーを割り当てることができます。それはあなた自身かもしれませんし、開発チームのセキュリティチャンピオンかもしれません。この人は技術的負債のリスクを軽減するためにあなたが密接に協力している相手です。
また、リポジトリタイプでフィルタリングすることもできます。キャンペーンでは1000件のアラートまで処理できることがわかりますので、「そんなに多くのアラートから始めたくない、小さく始めたい」と考えることもできるでしょう。特定のリポジトリを除外したり、特定のグループやチームに焦点を当てたりすることができます。
このようにキャンペーン機能を通じて、組織のニーズに合わせた優先順位付けが可能になります。最も重要なセキュリティリスクに集中し、それらを段階的に、組織的に、そして効率的に解決していくことができるのです。
5.3. 進捗管理ダッシュボード
キャンペーンを立ち上げた後の様子を見てみましょう。既存のキャンペーンの一つを見てみると、キャンペーンの進行状況を追跡するための素晴らしいダッシュボードが用意されています。このダッシュボードでは、進捗状況を確認したり、目標達成までの残り日数を把握したりできます。
さらに、リポジトリ別やチームグループ別にどのように進捗しているかを確認することができます。もちろん、キャンペーン全体でどれだけのAutofixがサポートされているかも知ることができます。Autofixは、コードQLでサポートしているすべての言語で利用可能です。すぐに使えるアラートタイプの90%以上をサポートしています。そのため、キャンペーンを作成すると、ほとんどすべてがAutofixによってサポートされているはずです。
このダッシュボードにより、開発者体験も向上します。なぜなら開発者は「特定のキャンペーンで修正が必要な脆弱性がある」と通知され、ここに表示されるアラートを確認できるからです。例えば、このアラートをクリックすると、Autofixが開発者をどのようにサポートしているかがわかります。脆弱性についての説明が提供され、活用できるコードスニペットが与えられ、さらにこの脆弱性について学べる追加情報も提供されています。
これにより、開発者はおそらく自分が作成したわけではなく、会社に入る前から存在していたかもしれない脆弱性を修正することに自信を持ち、良い気分で大規模にコードをマージすることができます。現在GitHub Advanced Securityを使用している場合は、すぐにこれを試すことができます。
6. コード品質向上
6.1. Copilotによるコードレビュー
先ほど秘密スキャニングについて話しましたが、これらのアラートがどこに表示されるか確認する前に、品質について説明を戻します。
セキュリティについて多くの時間を費やしましたが、それはコード品質という大きな体験の一部に過ぎません。もう一つ考えるべきことは、開発者が他の人のコードをレビューするのに多くの時間を費やしているということです。新しい分野に足を踏み入れたとき、シニアエンジニアに送る前や、彼らの時間を取る前に、誰かに手伝ってもらってレビューしてもらいたいと思うことがあります。
現在、Copilotに自分のコードをレビューしてもらい、組織全体で標準的で一貫した実践を適用するのを手伝うレビュアーの一人になってもらうことができます。その様子を見てみましょう。
Saminaのような開発者なら、先ほど多くの時間を費やして説明したセキュリティ結果が表示され、フィードバックが得られます。同じスタイリスティックなビューで、Copilotをレビュアーの一人として選択している場合は、Copilotからのフィードバックも表示され始めます。また、同じAutofixで、コードの品質を向上させるための修正を実際に作成するのに役立ちます。
品質は主観的なものだと思うかもしれません。私たち全員が異なる基準と、組織全体で適用したいさまざまなコーディングプラクティスを持っています。そのため、完全にコントロールできるようになっています。私たちが提供する既製のアイスブレイカーを使用するか、組織にとって重要な独自のコーディング基準を使用して、Copilotに特別にレビューしてもらうことができます。
6.2. カスタマイズ可能なコーディング基準
例えば、「SQLクエリでSELECT *を使用しない」というルールを取り上げてみましょう。これを設定すると、ルールの名前と説明が作成されます。これを私が編集して、組織内で見てきたサンプルコード使用例を追加することもできます。もしサンプルコードがない場合でも、Copilotに頼って説明を生成したり、私たちが探すものの例を提供してもらうことができます。
これは私が組織内に配置したい異なるルールに燃料を与えるのに役立ちます。このルールを事前に実行して、組織内でどのように機能するかを確認し、すべてが期待通りに見えるようにすることができます。その後、そのルールを保存して大規模に適用することができます。
これにより、開発者が手動で入って細かく確認したり、すべてのレビューを行ったりする必要なく、コード全体で一貫した品質と標準化を確保することができます。開発者は、このような管理的なフィードバックや退屈なフィードバックではなく、より重要な品質のフィードバックに時間を集中させることができます。いつも悩むトレードオフ、「このレビューでどれだけ細かく見るべきか?どれだけ細かいことを言うべきか?」という部分を開発者から取り除くことができます。
Copilotが彼らを助け、私たちはGitHubでこれを大規模に実践しています。Copilot Reviewを実際にベータ版で公開する前に、自分たちで試してみました。GitHub全体のPRで発見したのは、コード品質改善の提案の受け入れ率が60%あったことと、PRでのピアレビュー時間が「時間単位」から「分単位」に短縮されたということです。これにより、チームに大量の時間が戻り、新機能の開発、意味のある方法での同僚との交流、品質についての細かい部分ではなく、意味のある議論に集中できるようになりました。
6.3. GitHub内部での効果測定結果
私たちはGitHubで実践を大切にしているので、Copilot Reviewをベータ版として外部に出す前に、まず自分たちで試してみました。GitHub全体のPRで実際に何を発見したかというと、コード品質改善の提案の受け入れ率が60%あったということです。また、PRでのピアレビュー時間を「時間単位」から「分単位」に短縮することができました。
これにより、チームに信じられないほどの時間が戻ってきました。彼らは最も重要なことに集中できるようになりました。それは新機能の開発であり、意味のある方法での同僚との交流であり、コード品質のあちこちを細かく指摘するのではなく、意味のある議論を行うことです。
この実際の効果測定結果は、Copilot Reviewがただのツールではなく、開発チーム全体のワークフローを変革する可能性を示しています。60%という高い受け入れ率は、AIが提供する提案が本当に価値があり、実用的であることを示しています。さらに、レビュー時間が大幅に短縮されたことで、組織全体の効率が向上しただけでなく、開発者がより創造的な作業や協力作業に集中できるようになりました。
7. 次世代の開発環境
7.1. GitHub Copilot models
最後に、Copilotが開発ライフサイクル全体にどのように組み込まれているか、つまりIDEやチャットだけでなく、実際にはインラインや実行する可能性のあるあらゆるタスクでどのように支援するかについて多くお話してきました。また、コードのセキュリティと品質を向上させる方法、そしてCopilotがより多くのものを検出するだけでなく、実際に修正し、それを大規模に修正し、組織全体で調整する方法についても説明しました。
しかし、皆さんの多くの組織はGitHubと同じかもしれません。同じ価値をお客様に還元し、AIを活用して顧客体験をどのように向上させるか、または目標達成をどのように支援するかを考えようとしています。ここで、GitHub Copilot modelsとCopilot Sparkに関する最新の介入が、組織内の新しいビルダーを見つける助けとなります。
まず、AIアプリを構築するときに何を構築するかを考え始める際には、通常、どのモデルを使うべきかを理解することから始めます。最近の異なるモデルコミュニティを見れば、活用できる選択肢がたくさんあることがわかります。
私たちはこれを簡単にするために、今日は40種類の異なるモデルを提供しており、すべて既知のGitHubマーケットプレイス内で入手できます。Copilot拡張機能や実行するさまざまなアクションを見つける場所と同じところで、GitHubで活用できるさまざまなモデルについても知ることができるようになりました。
ここでは、様々なモデルプロバイダーをスクロールして見ることができます。それらについて理解し、詳細を読み、重要なこと、どのようなライセンス、どの言語をサポートしているかなど、必要なことを理解できます。あるいは、もっと良いことには、プレイグラウンドに入って実際にモデルを自分でテストし始めることができます。それがどのように応答するかを見始めることができます。
さらに良いことには、モデル同士を比較し始めることもできます。「MistralとOpen AIのどちらを使いたいですか?どちらがこのプロンプトにより良く応答するでしょうか?」といった比較ができます。このアイスブレーカー「機械学習の基本を説明できますか?」を使用します。両方のモデルがそのプロンプト、または自分が入力したプロンプトに対して応答を生成し、どちらの情報が自分に合っているか、どのようなトレードオフが好みかを評価できます。そして、コードスペースでこれを開いて、このモデルを使った構築の探索を始めることができます。
7.2. 様々なAIモデルの評価と比較
これは非常に新しい機能で、10月に発表したばかりです。今後もこれに投資し、開発を続けていく計画がたくさんあります。AIベースのアプリを構築する際に最も重要なことの一つは、プロンプトエンジニアリングと評価による調整です。そのため、これらの評価ツールと大規模なプロンプトツールの構築も支援し、これらのモデルの評価や、ユースケースとニーズを満たしているかどうかの判断をさらに進められるよう、すべてGitHub内で行えるようにしていきます。
ここで選択するとしたら、Open AIの簡潔さのオプションが好きかもしれませんが、詳細度と情報のレベルに関してはトレードオフがあると思います。もし望むなら、パラメータを変更して、異なるシステムプロンプトを入れたり、トークンリクエストを制限したり、温度を変更したりすることもできます。また、コードを見て、それを取得し、先ほど言ったように開くこともできます。
今日、無料の制限があるので、これに興味があれば、マーケットプレイスに行って探索を始めてみてください。様々なモデルを比較し、どれが自分のニーズに最適かを判断できます。これにより、自分のAIアプリケーション開発における最初のステップがより簡単になります。
7.3. GitHub Sparkによる自然言語からのコード生成
ここで今日お話を終える前に、AIの他のユースケースについてお話したいと思います。単に独自のAIアプリを構築するだけでなく、ソフトウェア開発の教育を受ける特権を持たなかった人々もコーディングや開発ができるように、テーブルにより多くの人々を招き入れるにはどうすれば良いでしょうか?若い世代をコーディングとテクノロジーに興奮させるにはどうすれば良いでしょうか?自然言語を通じてコーディングをどのように利用可能にするか?それがGitHub Sparkの登場する理由です。家族内、家庭内、あるいは会社内で次世代のビルダーを育成するのに役立ちます。
GitHub Sparkに入ると、小さなプロンプトを始めることができます。以前に遊んでいたのが見えるかもしれません。自然言語で何を作りたいかを伝えることができます。少しベガスのテーマにしたいので、「ブラックジャックカードゲームの構築を手伝ってくれますか?」と言ってみましょう。Sparkは作業を始めます。
これはバックグラウンドで動作して実際にコードを開発しますが、私はユーザーとして、アプリケーションの開発に必要なコンテキスト、必要なインフラやシステムについて知る必要はありません。プロジェクトを始めることや、ソフトウェア開発の専門家になる必要なく開発するという体験の楽しさに集中できます。
これはバックグラウンドで数分間動作します。そうすれば、遊んだり実験したりできるブラックジャックゲームができているはずです。待っている間に、他の機能についてお話しましょう。もし出来上がったものが気に入らなければ、これはよくあることですが、反復して構築を続けるよう依頼できます。最初の試みで常にうまくいくとは限りません。色や見た目を変えたり、自分の好みやプロファイルに合わせてカスタマイズしたりすることもできます。
異なるプロンプト機能を取り入れて、調整に役立てることもできます。オンラインで検索して、ブログやさまざまな考え方、アイデアで見たことを試してみたいかもしれません。これらはすべて自然言語で行えるため、実際にコードを一行も書く必要はありません。
これがバックグラウンドで動作し続けるのを待つ間に、他のプロンプトの一つを見てみましょう。今日の早い段階で、ブラックジャックの新しいゲームも作成しました。ここには私がプレイできるかわいいアプリが作成されています。自分の手札を見て、ヒットを求めたり、スタンドしたりして、誰が勝つか、ディーラーが勝つかを確認し、また遊ぶことができます。カードゲームでも、次の旅行アプリでも、あなたの心が思い描くものであれば何でも、開発することなく開発できるアプリケーションを生成し始めることができます。
8. まとめと質疑応答
8.1. 利用可能な機能のまとめ
最後の部分に移る前に、先ほど話したSparkで作成した別のブラックジャックゲームを見てみましょう。しかし、締めくくる前に、本日学んだことをまとめておきましょう。
私たちが話した機能の多くはコミュニティで利用可能です。Copilot Autofixを例に取ると、今日からこれを使い始め、組織の目標にどう合うか、理解し始めることができます。
私の希望は、ここで何かを学び、それを持ち帰って次に構築したいもの、新しく構築したいものを作り始めるのに役立てることです。そうすれば、私たち全員がデジタル世界でコミュニティとして成長し、発展し続けることができます。
本日はお時間をいただき、ありがとうございました。ここで質問を受け付けたいと思います。できる限りお答えしますが、もし難しい場合はGitHubブースに立ち寄っていただければ、皆さんの分野や組織に基づいた質問に対応できる専門家と繋げることができます。
8.2. 組織への導入方法
質問がある場合は、いつでもGitHubブースに立ち寄ってください。そこでは皆さんの分野や組織の状況に基づいた質問について、専門家と繋がることができます。
私たちが提供している多くの機能は、すでにコミュニティで利用可能です。例えばCopilot Autofixのようなツールは今日からすぐに使い始めることができ、組織の目標にどのように適合するか探索することができます。
本日お話した内容が、皆さんがこれから次に取り組むもの、新しく構築したいものの助けになれば幸いです。そうすれば私たち全員がデジタル世界におけるコミュニティとして成長し、発展し続けることができます。
皆さんの貴重なお時間をいただき、ありがとうございました。