{"meta":{"title":"パフォーマンスの最適化のためのリファクタリング","intro":"コパイロットチャット は、実行の遅いコードを高速化する方法を提案できます。","product":"GitHub Copilot","breadcrumbs":[{"href":"/ja/copilot","title":"GitHub Copilot"},{"href":"/ja/copilot/tutorials","title":"チュートリアル"},{"href":"/ja/copilot/tutorials/copilot-chat-cookbook","title":"GitHub Copilot チャットクックブック"},{"href":"/ja/copilot/tutorials/copilot-chat-cookbook/refactor-code","title":"コードのリファクタリング"},{"href":"/ja/copilot/tutorials/copilot-chat-cookbook/refactor-code/refactor-for-optimization","title":"最適化を目的としてリファクタリングする"}],"documentType":"article"},"body":"# パフォーマンスの最適化のためのリファクタリング\n\nコパイロットチャット は、実行の遅いコードを高速化する方法を提案できます。\n\n既存のコードが、正しく機能するものの非効率的で、パフォーマンスのボトルネックになっていることがあります。 パフォーマンスに悪影響を与える可能性があるコーディングの例としては、効率の悪いループ、不要な計算、過剰なメモリ割り当てなどがあります。\n\nコパイロットチャット は、パフォーマンスのホットスポットを特定して、データ構造の最適化 (たとえば、配列の代わりにハッシュマップを使う)、冗長な計算の削減、アルゴリズムの効率の向上などのリファクタリング戦略を提案できます。 また、パフォーマンスを向上させるために、キャッシュ メカニズムや並列化操作を推奨することもできます。\n\n## サンプル シナリオ\n\n次の Python コードでは、10,000 番目の素数まで、1,000 番目ごとの素数が出力されます。 これにはタイマーが含まれており、コードの実行にかかった時間が出力の最後の行として出力されます。 プログラムの完了には数秒かかります。\n\n```python id=slow-prime\nimport time\n\ndef is_prime(n):\n    if n <= 1:\n        return False\n    for i in range(2, n):\n        if n % i == 0:\n            return False\n    return True\n\ndef every_1000th_prime():\n    primes = []\n    num = 2\n    while len(primes) < 10000:\n        if is_prime(num):\n            primes.append(num)\n        num += 1\n    return [primes[i] for i in range(999, 10000, 1000)]\n\nif __name__ == \"__main__\":\n    start_time = time.time()\n    primes = every_1000th_prime()\n    for prime in primes:\n        print(prime)\n    end_time = time.time()\n    elapsed_time = end_time - start_time\n    print(f\"Time taken: {elapsed_time:.10f} seconds\")\n```\n\n## プロンプトの例\n\n```copilot copy prompt ref=slow-prime\nOptimize this code for performance\n```\n\n## 応答の例\n\nCopilot は、ふるい関数を使って素数をより効率的に生成することを提案します。 このプログラムを実行すると、ほんの一瞬で完了します。\n\n> \\[!NOTE] コパイロットチャット の応答は決定論的ではないため、ここで示したものとは異なる応答を受け取る可能性があります。\n\n```python\nimport time\n\ndef sieve_of_eratosthenes(limit):\n    sieve = [True] * (limit + 1)\n    sieve[0] = sieve[1] = False\n    for start in range(2, int(limit**0.5) + 1):\n        if sieve[start]:\n            for multiple in range(start*start, limit + 1, start):\n                sieve[multiple] = False\n    return [num for num, is_prime in enumerate(sieve) if is_prime]\n\ndef every_1000th_prime():\n    limit = 105000  # Higher than needed to ensure 10,000 primes\n    primes = sieve_of_eratosthenes(limit)\n    return [primes[i] for i in range(999, 10000, 1000)]\n\nif __name__ == \"__main__\":\n    start_time = time.time()\n    primes = every_1000th_prime()\n    for prime in primes:\n        print(prime)\n    end_time = time.time()\n    elapsed_time = end_time - start_time\n    print(f\"Time taken: {elapsed_time:.10f} seconds\")\n```\n\n## 参考資料\n\n* [GitHub Copilot Chat のプロンプト エンジニアリング](/ja/copilot/using-github-copilot/prompt-engineering-for-github-copilot)\n* [GitHub Copilot の使用に関するベスト プラクティス](/ja/copilot/using-github-copilot/best-practices-for-using-github-copilot)"}