GitHub Copilotによるパフォーマンス最適化

GitHub Copilot を使ったソフトウェア開発

Thalia Barrera

AI Engineering Curriculum Manager, DataCamp

静かな速度低下

 

nanobanana: half: 滑らかに打ち上がるロケットと回転するローディングインジケーターを対比させた、高速なアプリと低速なアプリのスプリットイラスト、フラットベクタースタイル

 

パフォーマンス問題の特徴:

  • ユニットテストでは検出されない
  • 即時のクラッシュを引き起こさない

 

📈 コードは正常に見えるが、スケールしない

GitHub Copilot を使ったソフトウェア開発

実際のボトルネック例

 

def find_common(list1, list2):
    common = []
    for item in list1:
        for item2 in list2:
            if item == item2:
                common.append(item)
    return common

 

  • 小規模な入力では正常に動作する
  • 100万件 → 1兆回の比較
  • $O(n^2)$ アルゴリズム!

 

❌ 繁忙時に本番環境をダウンさせる

GitHub Copilot を使ったソフトウェア開発

[screencast]

GitHub Copilot を使ったソフトウェア開発

[screencast]

GitHub Copilot を使ったソフトウェア開発

Copilotに最適化目標を伝える

nanobanana: half: スピードメーターのダイヤルと最適化指標を示すメトリクスゲージを備えたパフォーマンスダッシュボード、クリーンな背景のフラットベクターイラスト

 

  • 速度 → 高速アルゴリズム、キャッシュ、バッチ処理
  • メモリ → リソース解放、ストリーミング、ジェネレータ
  • 両方 → 包括的なパフォーマンスレビュー
GitHub Copilot を使ったソフトウェア開発

効果的なパフォーマンスプロンプト

 

ターゲット最適化

#selection のパフォーマンスを最適化し、時間計算量を削減する

#selection のメモリリークを調査する

 

コードベース全体のスキャン

@workspace 大規模コレクションでネストされたループを持つ関数を検索する

GitHub Copilot を使ったソフトウェア開発

[screencast]

GitHub Copilot を使ったソフトウェア開発

[screencast]

GitHub Copilot を使ったソフトウェア開発

すべての提案にパフォーマンス基準を組み込む

 

.github/copilot-instructions.md

## Performance standards
- Prefer set or dict lookups over nested loops
- Use context managers for files, connections, and sockets
- Avoid loading entire datasets into memory, use generators or streaming

✅ コードにパフォーマンスのボトルネックが生まれるのを防ぐ

GitHub Copilot を使ったソフトウェア開発

さあ、練習しましょう!

GitHub Copilot を使ったソフトウェア開発

Preparing Video For Download...