# 他のユーザーのコードをプロジェクトで再利用する

既存のコードをプロジェクトに統合することで、コーディングの効率と知識が向上します。

open sourceソフトウェアに関する最も良いことの 1 つは、他のユーザーのコードを再利用する機能です。 コードを再利用すると、時間を節約し、新しい機能を見つけ、他のプログラミング スタイルを習得するのに役立ちます。 コードを再利用するには、主に 2 つの方法があります。

* **コード スニペットをコピーしてプロジェクトに直接貼り付ける。** コーディングが初めてであれば、これがコードの再利用を始める最も簡単な方法です。
* **ライブラリをプロジェクトにインポートする。** このアプローチを習得するには時間がかかりますが、最終的には、より簡単で効率的です。 これはソフトウェア開発の基礎的なスキルでもあります。

この記事では、数値の階乗を計算するPythonコードを再利用する例を使用しながら、2つのことについて学びます。

## プロジェクト内で他のユーザーのコード スニペットを使う

初めてコードを学習するときは、他のユーザーのコード スニペットをコピーし、自分のプロジェクトに貼り付けて再利用することからもあるでしょう。 これは時間を節約するには優れた方法ですが、他の開発者のコードをコピーする前に、必ず実行すべき重要な手順がいくつかあります。

### 1.コード スニペットを見つけて理解する

まず、再利用するコード スニペットを見つけて理解する必要があります。 この例では、[`new2code/python-factorial`](https://github.com/new2code/python-factorial) リポジトリを選びます。

まず、ループを使って計算ツールを実装する \*\*\*\* を`factorial_finder.py`。

```python
# Initialize the factorial result to 1
factorial = 1

# Initialize the input number to 6
number = 6

# Loop from 1 to number (inclusive) and multiply factorial by each number
for i in range(1, number + 1):
    factorial *= i

print(f"The factorial of {number} is {factorial}")
```

次に、ファイルの上部にあるメニュー バーの \[ <svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-copilot" aria-label="Ask Copilot about this file" role="img"><path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path></svg> ] をクリックして、 Copilotとの会話を開始します。

![ファイル ビューの上部にある Copilot ボタンのスクリーンショット。濃いオレンジ色の枠線で囲まれています。](/assets/images/help/copilot/factorial-finder-copilot-button.png)

チャット ウィンドウで、次の Copilotを要求します。

```text copy
Explain this program.
```

### 2.プロジェクトのライセンスを理解する

見つけたコードを再利用する前に、そのライセンスを理解する必要があります。 ライセンスには、コードをコピー、変更、配布できるかどうかなど、プロジェクト内でコードを使う方法が規定されています。

[new2code/python-factorial](https://github.com/new2code/python-factorial) のライセンスを確認するには、リポジトリのメイン ページの \[About] セクションを見つけます。 ここで、リポジトリが MIT ライセンスに基づいてライセンスされていることがわかります。 ライセンスを読むには、 <svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-law" aria-label="law" role="img"><path d="M8.75.75V2h.985c.304 0 .603.08.867.231l1.29.736c.038.022.08.033.124.033h2.234a.75.75 0 0 1 0 1.5h-.427l2.111 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.006.005-.01.01-.045.04c-.21.176-.441.327-.686.45C14.556 10.78 13.88 11 13 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L12.178 4.5h-.162c-.305 0-.604-.079-.868-.231l-1.29-.736a.245.245 0 0 0-.124-.033H8.75V13h2.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1 0-1.5h2.5V3.5h-.984a.245.245 0 0 0-.124.033l-1.289.737c-.265.15-.564.23-.869.23h-.162l2.112 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.016.015-.045.04c-.21.176-.441.327-.686.45C4.556 10.78 3.88 11 3 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L2.178 4.5H1.75a.75.75 0 0 1 0-1.5h2.234a.249.249 0 0 0 .125-.033l1.288-.737c.265-.15.564-.23.869-.23h.984V.75a.75.75 0 0 1 1.5 0Zm2.945 8.477c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L13 6.327Zm-10 0c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L3 6.327Z"></path></svg>**MIT ライセンス**をクリックします。

![new2code/python-factorial リポジトリのメイン ページのスクリーンショット。 右側のサイドバーにある \[MIT license\] が濃いオレンジ色の枠線で囲まれています。](/assets/images/help/repository/license-info-python-factorial.png)

ここでは `factorial_finder.py` ファイル全体をコピーするので、MIT ライセンスによると、このプロジェクトにはライセンスのコピーを含める必要があります。 Python ファイルの上部に、ライセンスをコメントとして貼り付けます。

> \[!TIP]
> [\[Choose a license\]](https://choosealicense.com/licenses/) ツールを使うと、他の一般的なライセンスで許可されている内容を確認できます。

### コードスニペットの使用と変更

これで、コード スニペットをプロジェクトに貼り付ける準備が整いました。 コード スニペットをそのまま使用できる場合もありますが、特定のユース ケースに合わせてコード スニペットの**変更**が必要になることもよくあります。 さっそく実践してみましょう。

たとえば、5、7、9、10 の階乗をすばやく計算したいとします。 数値ごとにプログラム全体をコピーして貼り付けるのではなく、数値を引数として受け取る**関数**へと計算ツールを移行できます。

[
コパイロットチャット
](https://github.com/copilot)を使用して、実装の提案と説明を行います。 現在のコードをチャット ウィンドウに貼り付けると、次のプロンプトが表示されます。

```text copy
Wrap the Python code above in a function.
```

Copilot は、次のようなコードを生成します。

```python copy
def calculate_factorial(number):
    # Initialize the factorial result to 1
    factorial = 1

    # Loop from 1 to number (inclusive) and multiply factorial by each number
    for i in range(1, number + 1):
        factorial *= i

    return factorial
```

新しい関数を使用すると、次のコードをプロジェクトに追加し、Python プログラムを実行することで、数値の階乗を簡単に見つけることができます。

```python copy
print(calculate_factorial(5))
print(calculate_factorial(7))
print(calculate_factorial(9))
print(calculate_factorial(10))
```

お疲れさまでした。 これで、コード スニペットの例を見つけ、理解し、変更することができました。

## プロジェクト内でライブラリのコードを使う

次は、開発者にとっての**標準の方法**であるライブラリの使用方法を学びましょう。 ライブラリとは、基本的に、特定のタスクを実行するために他の開発者によって書かれたコードのコレクションです。 ライブラリをプロジェクトにインポートして、作成済みのコードを使用できるため、時間と労力を節約できます。

このセクションでは、前のセクションのPython階乗計算ツールの例を引き続き使用します。 参考までに、現在のコードを次に示します。

```python copy
def calculate_factorial(number):
    # Initialize the factorial result to 1
    factorial = 1

    # Loop from 1 to number (inclusive) and multiply factorial by each number
    for i in range(1, number + 1):
        factorial *= i

    return factorial

print(calculate_factorial(5))
print(calculate_factorial(7))
print(calculate_factorial(9))
print(calculate_factorial(10))
```

### 1.ライブラリを見つける

プロジェクトに追加する機能がわかったら、関連するコードを含むライブラリを検索できます。
コパイロットチャット は、自然言語を使用して探しているものを正確に記述できるため、ライブラリを検索する簡単な方法です。

階乗を求めることは非常に一般的な関数であり、誰かがその関数を既存のライブラリに組み込んでいる可能性が十分にあります。
[
コパイロットチャット
](https://github.com/copilot)を開いて、次のように尋ねます。

```text copy
Is there a Python library with a function for calculating a factorial?
```

Copilot は、標準の Python ライブラリの [`math`](https://docs.python.org/3/library/math.html) モジュールに含まれている階乗関数を示します。

### 2.プロジェクトのセキュリティを優先する

ライブラリまたはモジュールをプロジェクトに追加すると、いわゆる**依存関係**が生じます。 依存関係とは、プロジェクトが正しく機能するために依存する、事前作成済みコード バンドルです。 作成または保守を慎重に行っていない場合は、作業にセキュリティの脆弱性が生じる可能性があります。

幸い、プロジェクトを最大限に保護するために実行できる手順がいくつかあります。 さっそく実践してみましょう。

#### 人気のあるライブラリを使う

人気のあるライブラリは、多くの開発者が積極的に保守し、使用しているため、安全である可能性が高くなります。 人気を示す良い指標の 1 つは、リポジトリに付いた **star** の数です。 依存関係の GitHub リポジトリが見つからない場合は、 Copilot にヘルプを依頼できます。

[
コパイロットチャット
](https://github.com/copilot)を開き、次に質問してください。

```text copy
Find the GitHub repository containing the code for the math module in Python.
```

Copilot は、 `math` モジュールが 64,000 以上の星を持つ [`python/cpython`](https://github.com/python/cpython) で定義されていることを示します。

#### プロジェクトの Dependabot alerts を有効にする

有効にすると、Dependabot alertsが依存関係のセキュリティの問題を検出すると、Dependabotが自動的に生成され、脆弱性をすばやく修正できます。
Dependabotは、すべてのオープン ソース \*\*\*\* リポジトリでGitHubで利用できます。

今すぐリポジトリの Dependabot alerts をオンにします。 プロジェクトの<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-shield" aria-label="shield" role="img"><path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg> Security and quality リポジトリの \[GitHub] タブをクリックします。
Dependabot alertsの横にある \[**Dependabot alertsを有効にする**] をクリックします。 サイドバーのDependabotタブから\*\*\*\* にアクセスできます。

### 3.ライブラリからコードを実装する

これで、ライブラリをプロジェクトにインポートし、その内容をコードで使う準備は完了です。 ライブラリのドキュメントを読んで自分で行う方法を学習したり、 Copilot に実装の提案と説明を依頼したりできます。

[
コパイロットチャット
](https://github.com/copilot)を開いて、次に聞いてください。

```text copy
How do I use the factorial function of the math module in my Python project?
```

Copilot では、次のコードのバージョンが提案されます。

```python copy
import math

# Calculate the factorial of a number
number = 5
result = math.factorial(number)

print(f"The factorial of {number} is {result}")
```

プロジェクト内の既存のコードを上記の実装に置き換えたら、サンプル プロジェクトでライブラリのコードを使用する作業は完了です。

## 作業の共有

このチュートリアルでは、他のユーザーのコードを自分の作業で安全に再利用する方法を学習しました。 記念に、サンプル プロジェクトでどのようにコードを再利用し、構築したかを[コミュニティ ディスカッション](https://github.com/orgs/community/discussions/153140)で共有しましょう。

## 参考資料

* [サンプル コードを検索して理解する](/ja/get-started/learning-to-code/finding-and-understanding-example-code)