# GitおよびGitHub概要

## バージョン管理とは

プログラムであれ文書であれ、何か変更を加えるときには元の状態も残しておきたい、あるいは過去のバージョンとの差分を確認したいという事はままあることです。

こうした変更を行うときに、ファイルをコピーしてファイル名に番号を付けたりして管理するという事は一つの手段です。しかしながら、そのやり方ではコピーを作る度に容量が無駄に増えていき、数が増えるほどに過去に遡ったり、過去との差分を確認することが困難になります。

1人の手元で自分だけが使うファイルの管理であればどんなやり方をしてもいいかもしれませんが、チームで開発するソフトウェアでそのようなやり方をしていたら、生産性が上がらないどころか誰がいつどんなコピーを取って差分を作ったかが追えなくなります。

そんな問題を解決するためのツールが、Gitに代表されるバージョン管理システムです。

## Gitとは

Gitは、バージョン管理システムの一種です。ソフトウェア開発において、ソースコードや関連するファイルの変更履歴を管理するために使用されます。Gitは分散型バージョン管理システムであり、複数の開発者が同じプロジェクトを共同で作業する際に役立ちます。

Gitを使用すると、ファイルの変更を追跡し、異なるバージョンのファイルを比較したり、変更を元に戻したりできます。また、ブランチと呼ばれる分岐を作成し、同時に複数の開発作業を進めることも可能です。さらに、リモートリポジトリとの同期を行うことで、複数の開発者が変更を共有し、統合することもできます。

Gitは非常に人気のあるバージョン管理システムであり、多くのプロジェクトや開発者によって広く利用されています。GitHubやGitLabなどのホスティングサービスを通じて、リモートリポジトリを管理し、他の開発者との協力作業を円滑に行うことができます。

### Gitを始める

Gitを始めるには、以下の手順を実施してください。

1. Gitのインストール: 最初に、使用しているオペレーティングシステムに合わせてGitをインストールする必要があります。[Gitの公式ウェブサイト](https://git-scm.com/)から入手できます。
2. リポジトリの作成: Gitを使用してバージョン管理を始めるには、まずリポジトリ（repository）を作成する必要があります。リポジトリは、プロジェクトのファイルとその変更履歴を保存する場所です。新しいディレクトリを作成し、その中でGitのコマンドを使用してリポジトリを初期化します。

```sh
$ git init
```

3. ファイルの追加とコミット: リポジトリを作成したら、ファイルを追加し、変更をコミットすることができます。ファイルの追加は、次のコマンドを使用します。

```sh
$ git add ファイル名
```

変更をコミットするには、次のコマンドを使用します。

```sh
$ git commit -m "コミットメッセージ"
```

4. ブランチの作成と切り替え: Gitでは、複数のブランチを作成して同時に複数の開発作業を進めることができます。新しいブランチを作成するには、次のコマンドを使用します。

```sh
$ git branch 新しいブランチ名
```

ブランチを切り替えるには、次のコマンドを使用します。

```sh
$ git checkout ブランチ名
```

5. リモートリポジトリとの連携: プロジェクトを他の開発者と共有するためには、リモートリポジトリを使用します。GitHubやGitLabなどのホスティングサービスでリモートリポジトリを作成し、ローカルのリポジトリと連携させる必要があります。リモートリポジトリのURLを追加するには、次のコマンドを使用します。

```sh
$ git remote add origin リモートリポジトリのURL
```

6. 変更のプッシュとプル: ローカルリポジトリの変更をリモートリポジトリに反映するためには、変更をプッシュ（push）する必要があります。変更をプッシュするには、次のコマンドを使用します。

```sh
$ git push origin ブランチ名
```

他の開発者がリモートリポジトリに変更を加えた場合、変更をプル（pull）してローカルリポジトリに反映させることができます。変更をプルするには、次のコマンドを使用します。

```sh
$ git pull origin ブランチ名
```

これらの基本的な手順を実行することで、Gitを始めることができます。Gitの使い方については[推奨書籍・Webサイト](https://engineer.toggle.co.jp/chapter-1-toggle-holdings-engineer-101/ji-chu-yan-xiu/websaito)などから辿れるドキュメントや学習サイトも参考にしてください。

## GitHubとは

GitHubは、ソフトウェア開発プロジェクトのホスティングプラットフォームであり、Gitを使用してバージョン管理されたコードの共有と協力作業を行うためのサービスです。社内で開発するプロダクトはすべて、GitHubを用いて管理します。

以下は、GitHubの主な特徴と利点で、会社としてもその利点を享受するため利用しています。

1. リポジトリのホスティング: GitHubは、Gitリポジトリをホスティングするためのクラウドベースのプラットフォームです。リモートリポジトリを作成し、他の開発者と共有することができます。
2. コラボレーション: 複数の開発者が同じプロジェクトに参加し、コードの変更や問題の追跡、ディスカッションを行うことができます。コードレビュー、プルリクエスト、イシュートラッキングなどの機能により、効果的なコラボレーションが可能です。
3. バージョン管理と履歴の追跡: Gitの強力なバージョン管理機能を活用し、コードの変更履歴や差分を追跡できます。バージョン管理により、誤ってコードを破壊するリスクを軽減し、変更の追跡やバージョン間の比較を容易にします。
4. ウェブベースのインターフェース: GitHubは、使いやすいウェブベースのユーザーインターフェースを提供しています。リポジトリの閲覧、ファイルの編集、プルリクエストの作成、コードのマージなど、多くの開発タスクを直感的に行えます。

### GitHub Issues

GitHub Issuesは、GitHubプラットフォーム上で提供される、ソフトウェア開発プロジェクトの問題追跡機能です。プロジェクトの進行中や修正すべき課題、バグ、提案などを管理するためのツールで、以下の目的で使用します。

1. 問題の作成と管理: 開発者やプロジェクトメンバーは、問題を作成してトラッキングすることができます。問題にはタイトルや説明、ラベル、優先度、割り当てられた担当者などの情報を含めることができます。また、問題をオープン、クローズ、リポジトリ内の特定のブランチに関連付けるなど、タスクとソースコードを密に結び付けて管理します。
2. コメントとディスカッション: 問題に対してコメントを追加することができます。関係者や利害関係者とのディスカッションや情報共有に使用されます。コメントはタイムスタンプ付きで表示され、やりとりが追跡されます。
3. ラベルとフィルタリング: 問題にはカスタムラベルを追加することができます。ラベルは、問題のカテゴリや重要度などを示すために使用され、フィルタリングや整理に役立ちます。さまざまな条件に基づいて問題をフィルタリングし、特定の問題を見つけることもできます。
4. マイルストーン: プロジェクトの進捗を追跡するために、マイルストーンを設定することができます。マイルストーンは、関連する問題やタスクをグループ化し、特定の目標やリリースに関連付けるのに役立ちます。
5. リンクと参照: Issuesは、他の問題やプルリクエスト、コミットなどのGitHubの要素とも関連付けることができます。これにより、異なる要素間の関係性や依存関係を明確にすることができます。

### GitHub Actions

GitHub Actionsは、GitHubプラットフォーム上で提供される、自動化および継続的インテグレーション/デリバリー（CI/CD）のためのワークフロー管理ツールです。GitHub Actionsを使用して、ソフトウェア開発プロジェクトのビルド、テスト、デプロイなどのタスクを自動化しています。

1. ワークフローの作成: GitHub Actionsでは、ワークフローと呼ばれる手続きを定義することができます。ワークフローは、特定のイベント（例: コードのプッシュ、プルリクエストの作成）がトリガーとして設定され、実行されるタスクのシーケンスです。
2. 自動化: ワークフローは、ビルド、テスト、デプロイ、リリースなどのタスクを自動化するために使用されます。GitHub Actionsは、これらのタスクを実行するための環境やランナーを提供し、カスタムスクリプトやコマンドを実行できます。
3. 柔軟なカスタマイズ: GitHub Actionsでは、さまざまなアクションやツールを組み合わせてカスタムワークフローを作成できます。GitHubが提供する公式のアクションや、コミュニティから提供されるサードパーティのアクションを使用することもできます。
4. イベント駆動: ワークフローは、特定のイベントが発生したときにトリガーされます。例えば、コードがプッシュされた場合やプルリクエストが作成された場合などです。これにより、特定のアクションが自動的に実行されるように設定することができます。
5. 可視性と監視: GitHub Actionsでは、実行中のワークフローやタスクの状態を監視し、結果やログを確認することができます。また、通知やアラートを設定して、ワークフローの状態に関する情報を受け取ることもできます。

### GitHub Wiki

GitHub Wikiは、GitHubプラットフォーム上で提供されるウィキ（Wiki）機能です。ウィキは、プロジェクトやリポジトリに関連するドキュメントや情報を共有・編集するためのツールで、プロダクトごとに以下のような目的で利用しています。

1. ドキュメントの作成と編集: ユーザーは、マークアップ言語（Markdown）を使用してドキュメントを作成および編集することができます。Markdownは、シンプルな文法を使用して見やすいフォーマットでドキュメントを作成できるため、技術的な情報や説明文を記述するのに便利です。
2. ページの整理とカテゴリ化: ドキュメントを論理的に整理するために、ページをカテゴリやサブページに分けることができます。これにより、ドキュメントのナビゲーションや構造を管理しやすくなります。
3. バージョン管理と履歴の追跡: GitHub Wikiは、Gitを使用してバージョン管理されています。したがって、ドキュメントの変更履歴を追跡し、過去のバージョンに戻すことができます。
4. コラボレーション: 複数のユーザーがドキュメントを編集できます。GitHubのコラボレーション機能を使用して、チームメンバーやコミュニティの他の開発者と共同でドキュメントを作成・編集することができます。
5. ページの表示と検索: ドキュメントはウェブブラウザで表示され、ユーザーは簡単に閲覧できます。また、GitHub Wikiは検索機能を提供しており、特定のキーワードやフレーズでドキュメントを検索することができます。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://engineer.toggle.co.jp/chapter-1-toggle-holdings-engineer-101/ji-chu-yan-xiu/gitoyobigithub.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
