# サンプル コードを検索して理解する

GitHub のサンプル コードから学び、コーディング スキルを高めましょう。

## GitHub のコードから学ぶ方法

GitHub のプロジェクトから学ぶのは、**新しい手法を学び**、自分のプロジェクトの**インスピレーションを得る**ことができるすばらしい方法です。

ただし、GitHub には何百万もの公開リポジトリがあるため、自分のプロジェクトに適用できるコードを見つけるのは大変な作業です。 ぴったりのリポジトリを見つけても、コードベースを調べて役立つサンプルを見つけるのは難しい場合があります。

プロジェクト全体を理解しようとするのではなく、1 つの機能または関数を選び、それがどのように機能するかを確認することをお勧めします。 コパイロットチャット と GitHub の検索機能を使って機能を見つけ、コードベース全体でそれを追跡することができます。 バックエンドからフロントエンドに至るまでこの機能がどのように機能するかを確認できるため、これは学習に最適な方法です。

このガイドでは、Jekyll Web サイト上のファイルからデータを読み込んで表示する方法を学ぶ**シナリオ例**に従って、両方の方法について学びます。 その後は、そのヒントや手法を他のプロジェクトやプログラミング言語に適用できるようになります。

## サンプル プロジェクトを検索する

最初の手順は、学ぶのに適したプロジェクトを見つけることです。

### コパイロットチャット を使ってリポジトリを特定する

学習に役立つコードを含むプロジェクトを見つける最も簡単な方法は、[コパイロットチャット](https://github.com/copilot) に、条件と一致するリポジトリを検索するよう依頼することです。

[コパイロットチャット](https://github.com/copilot) を開いて、汎用チャットを開始します。 次に、次のように質問します。

> Jekyll を使ってリポジトリ内のファイルのデータを表示するという、人気のリポジトリをいくつか見つけることはできますか?

関連するリポジトリへのリンクが Copilot から返されたら、リポジトリに関するフォローアップの質問をすることができます。

多くの場合、Copilot からは、最後の回答としてその他の結果を含む GitHub 検索へのリンクが返されます。 次に、これらの結果をレビューします。

### 検索を使ってその他のオプションを特定する

Copilot により、検索結果へのリンクが表示された場合は、そのリンクをクリックします。 それ以外の場合は、以下の手順に従って独自の検索クエリを作成します。

1. [\[Advanced search\]](https://github.com/search/advanced) に移動します。
2. \[Advanced options] セクションで、\[Written in this language] ドロップダウンを使ってプログラミング言語を選びます。 Jekyll サイトの場合は、\[HTML] を選びます。
3. オプションとして、\[Repositories options] の \[With this many stars] の横に「`>150`」と入力します。 これは、適切に管理され、人気があるリポジトリを見つけるのに役立ちます。
4. ページの上部に戻り、**\[Search]** をクリックします。

> \[!TIP]
> 検索クエリにトピックとテキストを追加することで、検索結果をさらに絞り込むことができます。 たとえば、`topic:jekyll "blog"`、所有者が Jekyll に関連するものとして分類し、リポジトリ名または説明に "blog" という単語が含まれるリポジトリが返されます。 人気のあるトピックの一覧については、[GitHub に関するトピック](https://github.com/topics)を参照してください。

### プロジェクトを選ぶ

Copilot と検索の結果を確認したら、[`github/choosealicense.com`](https://github.com/github/choosealicense.com) リポジトリを使います。 このリポジトリには、ライセンスに関する情報を共有する Jekyll Web サイトである [Choose a License](https://choosealicense.com/) のソース コードopen source含まれています。

特に、[Licenses](https://choosealicense.com/licenses/) ページに関心があります。このページには、データ ファイルからの一般的なopen source ライセンスが表示されます。 <!-- markdownlint-disable-line search-replace -->

## プロジェクト内での方向性を決める

データ ファイルを表示するコードを掘り下げる前に、リポジトリの概要について確認しておきましょう。

初めてリポジトリにアクセスする場合、どこから始めればよいのか判断するのが難しい場合があります。 各プロジェクトはそれぞれ独自の方法で編成されていますが、共通の文書化手法があるため、通常は方向性を把握する際に利用できます。

### README.md ファイル

**README.md** ファイルを読むことを常にお勧めします。これはリポジトリのフロント ページであり、ファイル一覧の下に自動的に表示されます。 メンテナによって含まれる情報は異なりますが、多くの場合、プロジェクトに関する情報、ローカル コンピューター上でのビルド方法、ドキュメントへのリンクが記載されています。

[
`github/choosealicense.com`
](https://github.com/github/choosealicense.com) リポジトリの README.md ファイルには、ライセンス ファイルの保存場所 (`/_licenses`)、各ライセンスが持つことができる属性、コンピューター上で Web サイトを実行する方法が説明されています。

### コパイロットチャット の使用

README.md ファイルで不明な点がある場合は、Copilot に質問して、リポジトリ内を調べて機能を見つけることができます。

コパイロットチャット を開くには、検索バーの横にある **<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-copilot" aria-label="Copilot" 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>** アイコンをクリックし、質問を入力してください。 次に例を示します。

> この Jekyll Web サイトのメイン ランディング ページは何ですか?

リポジトリについて Copilot に質問すると、関連するファイルを取得し、機能内でそれらが果たす役割の説明と、リンクを表示することができます。

### リポジトリの wiki

もう 1 つの考えられる情報源は、リポジトリの **wiki** です。これは、ドキュメントをホストするリポジトリのセクションです。 GitHub のすべてのリポジトリには Wiki を使う機能が備わっていますが、すべてのリポジトリで使われているわけではありません。 Wiki にアクセスするには、リポジトリの **<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-book" aria-label="book" role="img"><path d="M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.743 3.743 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574ZM8.755 4.75l-.004 7.322a3.752 3.752 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25Z"></path></svg> \[Wiki]** タブをクリックします。

### リリース

リポジトリのソース コードが実行可能ファイルに組み込まれている場合、リポジトリ メンテナによっては、リポジトリの**リリース**を使ってバイナリ ファイルを公開する場合があります。 このようなバイナリ ファイルをダウンロードして実行すると、自分でプロジェクトをビルドしなくても、コードベースを調べながらアプリケーションがどのように機能するかを確認できます。

リポジトリのリリースは、ファイル一覧と README.md の右側のサイドバーに表示されます。

### 内部ドキュメント

リポジトリのコンテンツで内部ドキュメントを検索することもできます。 これは、1 つの Markdown ファイル、または Markdown ファイルが多数あるディレクトリの場合があります。 検索する際によく使う名前として、"docs"、"documentation"、"wiki"、"resources"、"help"、"manual" などがあります。

## ソース コード内を調べる

リポジトリの全体的な構造を理解したら、次は、GitHub の検索を使って、探している特定の機能を見つけましょう。

リポジトリ内でページの上部にある検索フィールドをクリックすると、GitHub によって自動的に `repo` 検索修飾子が追加されるため、検索結果は表示しているリポジトリに限定されます。

まず、検索する対象が必要です。 たとえば、調べている機能に固有のテキストの文字列です。また、ページの HTML ソースを見て、特定の `class` または `id` 属性を見つけることもできます。

この例では、「[](https://choosealicense.com/licenses/)」というクエリを使って、`repo:github/choosealicense "If you’re looking for a reference table?"`の上部にあるテキストを検索します。 これにより、1 つの結果 (`licenses.html` というファイル) が返されます。

結果をクリックして、さらに深く掘り下げましょう。
[
`licenses.html`
](https://github.com/github/choosealicense.com/blob/gh-pages/licenses.html) は、探していた「Licenses」(ライセンス) ページのソースです。 検索した文字列と、各ライセンスが以下のコードに含まれていることがわかります。

```markdown
{% include license-overview.html license-id="agpl-3.0" %}
```

## ソース コードを理解する

関心のある特定のコードが見つかったら、そのコードの理解に進むことができます。

### コードについて コパイロットチャット に質問する

Copilot を使うと、ファイルや特定のコード行についてさらに詳しく知ることができます。 Copilot は、プログラミング言語に関する情報とリポジトリのコンテキストを組み合わせて、質問に詳しく回答します。

`{% include %}` タグの 11 行目で何が起こっているかを Copilot に説明してもらいましょう。 行番号をクリックします。 次に、行の右側にある <svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-copilot" aria-label="Ask Copilot about this snippet" 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 により、この行に `license-overview.html` ファイルが含まれていること、表示する `"agpl-3.0"` として `license-id` を渡していることが説明されます。

> \[!TIP]
> コパイロットチャット からの回答を理解できない場合は、回答を簡単にすることや、特定の部分についてさらに詳しく説明することをいつでも依頼できます。

### コメントを読む

コメントは人間が判読できる注釈であり、コードを理解するために使用できますが、実行されることはありません。 通常、これらは `//` や `/*` などの文字で区切られます。

注目すべきコメントの種類をいくつか紹介します。

* **行**: 特定の行の動作を説明する 1 行のコメント
* **ブロック**: 関数またはファイル全体が行っている内容を説明する複数行のコメント
* **ファイル**: ファイルの先頭にあるブロック コメント。コードベースの特定の部分の概要が記載されています

### プログラミング言語リファレンスで関数を検索する

すべてのプログラミング言語には、その言語のあらゆる側面を説明するオンラインのリファレンスがあります。

検索エンジンを使ってプログラミング言語と関数を検索すると、その関数のリファレンス ページへのリンクが見つかるはずです。

この例では、検索エンジンで「`jekyll include`」を検索すると、Jekyll ドキュメントの[「includes」に関するドキュメント](https://jekyllrb.com/docs/includes/)が返されます。 Jekyll のドキュメントをさらに詳しく読むと、ライセンス自体が [](https://jekyllrb.com/docs/collections/) ディレクトリ内の`_licenses`であることがわかります。

> \[!TIP] プログラミング言語リファレンスで関数が見つからない場合は、その関数がコードベース自体で定義されている可能性があります。 それを見つけることを [GitHub Copilot](https://github.com/copilot) に依頼します。

これまでに学んだ内容を要約すると、[`licenses.html`](https://github.com/github/choosealicense.com/blob/gh-pages/licenses.html) ファイルには、表示されている各ライセンスの [`/_includes/license-overview.html`](https://github.com/github/choosealicense.com/blob/gh-pages/_includes/license-overview.html) が含まれています。
[
`/_includes/license-overview.html`
](https://github.com/github/choosealicense.com/blob/gh-pages/_includes/license-overview.html) ファイルは、`license-id` コレクション内のライセンスに提供されている `/_licenses` と同じ内容であり、詳細が記載されています。

### 少し変更を加えて試してみる

コンピューター上でローカルにプロジェクトを実行できる場合は、少し変更を加えて何が起こるかを確認するのがお勧めの学習方法です。

まずテキストの変更から始めて、関数とファイルがどのように相互作用するかを実験するなど、より大きな変更に進むことができます。

`license-overview.html` ディレクトリ内の [](https://github.com/github/choosealicense.com/blob/gh-pages/_includes/license-overview.html) ファイルを見つけて、ライセンスの表示方法を変更したり、コレクションからライセンスを読み込む方法を試してみたりしてください。

いずれかのライセンス ファイルの先頭にあるメタデータを変更する、`license-overview.html` に表示される属性を変更する、さらには独自の属性を追加してみることができます。 変更を加えたら、README.md の指示に従ってブラウザーで表示してテストできます。

### 学んだことを応用する

[
`github/choosealicense.com`
](https://github.com/github/choosealicense.com) リポジトリは大規模な Jekyll プロジェクトの好例であり、Jekyll と GitHub Pages を使ってどれほどのことを実現できるかを示しています。 リポジトリの構造、コレクションの使用方法、ライセンス データを含める方法から学んだことを応用して、自分のプロジェクトをビルドできますか?

## 次のステップ

サンプル コードがどのように機能するかを理解したら、それを自分のプロジェクトで再利用できます。 コードの再利用はソフトウェア開発の強力な要素ですが、それを正しく合法的に行うには、重要な手順に従う必要があります。 詳細なチュートリアルについては、「[他のユーザーのコードをプロジェクトで再利用する](/ja/get-started/learning-to-code/reusing-other-peoples-code-in-your-projects)」を参照してください。