概要
GitHubは、Gitをベースにしたクラウド型のソースコード管理プラットフォームである。
Gitはローカルコンピュータ上でファイルの変更履歴を追跡・管理するための分散バージョン管理システムであり、GitHubはそのGitをWebインターフェース経由で操作できるようにしたサービスである。
GitHubが提供する主な機能は以下の通りである。
- ソースコードのホスティングとバージョン管理
- Gitリポジトリをクラウド上に保存・公開できる。
- コードレビューとコラボレーション
- Pull Requestを通じてチームでのコードレビューが行える。
- Issue管理
- バグ報告・機能要望・タスク管理をIssueで一元管理できる。
- CI/CDの自動化
- GitHub Actionsによりビルド・テスト・デプロイを自動化できる。
- コミュニティとオープンソース
- 世界中の開発者がオープンソースプロジェクトを公開・貢献できる場を提供している。
2018年にMicrosoftに買収されており、現在も世界最大規模の開発者プラットフォームとして広く利用されている。
GitHubアカウント
アカウントの種類
GitHubのアカウントには、個人が使用するPersonal Accountとチームや組織向けのOrganization、大規模企業向けのEnterpriseの3種類がある。
利用プランの概要は以下の通りである。
| プラン | 対象 | 主な特徴 |
|---|---|---|
| Free | 個人 | パブリック・プライベートリポジトリ無制限、GitHub Actions 2,000分/月、Pagesとストレージ500[MB] |
| Pro | 個人 | GitHub Actions 3,000分/月、ストレージ2[GB]、高度なインサイト、必須レビュアー設定 |
| Team | 組織 | GitHub Actions 3,000分/月、ストレージ2[GB]、チーム管理機能、ドラフトPR |
| Enterprise | 大規模組織 | SSO / SAML対応、監査ログ、高度なセキュリティ機能、SLAサポート |
組織 (Organization) アカウントは個人アカウントとは別に作成して、チームメンバーを招待してリポジトリを共同管理するために使用する。
アカウントの作成
GitHubアカウントの作成手順を以下に示す。
- github.comにアクセスして、[Sign up]ボタンを押下する。
- ユーザ名・メールアドレス・パスワードを入力する。
- GitHubから送信されたメール認証を完了させる。
- プランを選択する。(無料のFreeプランから開始可能)
ユーザ名はGitHub上での識別子となり、プロフィールURL https://github.com/<ユーザ名> に使用される。
後から変更することは可能だが、既存のリンクに影響が出るため慎重に決定することを推奨する。
プロフィール設定
アカウント作成後は、プロフィールページを設定することで他の開発者に自己紹介できる。
下表に、プロフィールで設定できる主な項目を示す。
| 項目 | 説明 |
|---|---|
| アバター画像 | 自分の写真やアイコン画像をアップロードできる。 |
| Bio(自己紹介) | 簡潔な自己紹介文を記載できる。 |
| 所属組織・会社名・場所・ウェブサイトURL | 連絡先や所属情報を公開できる。 |
| Pinned リポジトリ | 最大6つのリポジトリをプロフィールページにピン留めして強調表示できる。 |
| README プロフィール | ユーザ名と同名のリポジトリを作成して、 README.md を配置することにより、 プロフィールページにカスタムコンテンツを表示できる。 |
2要素認証 (2FA)
二要素認証 (2FA) はアカウントのセキュリティを強化するための重要な設定である。
GitHubでは2FAの有効化を強く推奨しており、一部の組織では必須となっている。
下表に、対応している認証方法を示す。
| 方式 | 説明 |
|---|---|
| TOTP(時間ベースのワンタイムパスワード) | Google Authenticator、Authy、1Password等の認証アプリを使用する。 最も一般的な2FA方式であり、推奨される方法である。 |
| WebAuthn セキュリティキー | YubiKey等の物理セキュリティキーまたはパスキーを使用する。 最も強固な認証方法である。 |
| SMS(限定的) | 携帯電話番号への SMS でコードを受信する。 フィッシング攻撃に脆弱なため、可能であればTOTP または セキュリティキーの使用を推奨する。 |
2FAの設定手順を以下に示す。
- [Settings] - [Password and authentication] - [Two-factor authentication]に移動する。
- [Enable two-factor authentication]を選択する。
- 認証アプリでQRコードをスキャンする。
- 表示されたコードを入力して設定を完了する。
- リカバリーコードを安全な場所に保存する。
リカバリーコードは認証デバイスを紛失した際にアカウントへアクセスするための緊急手段であり、必ずダウンロードして安全な場所に保管すること。
リカバリーコードは1度使用すると無効になるため、使用後は新しいコードを生成することを推奨する。
基本的なUI操作
ダッシュボード
ダッシュボードはGitHubにログイン後に表示されるトップページであり、開発活動の概要を確認できる。
下表に、ダッシュボードで確認できる主な情報を示す。
| 項目 | 説明 |
|---|---|
| フィード(アクティビティストリーム) | フォローしているユーザや組織の活動 (コミット、PR、Issue、スター等) が表示される。 |
| スターしたリポジトリ | 自分がスターを付けたリポジトリの一覧 |
| おすすめリポジトリ | GitHubのアルゴリズムが推薦するリポジトリ |
| 最近のアクティビティ | 自分が最近操作したリポジトリへのクイックアクセス |
ナビゲーション
GitHubのUIには、作業効率を高めるための各種ナビゲーション機能が用意されている。
下表に、主なナビゲーション機能を以下に示す。
| 機能 | 説明 |
|---|---|
| コマンドパレット | [Ctrl] + [K]キー (Windows / Linux) または [Cmd] + [K]キーで呼び出せる。 リポジトリ、Issue、PR、設定ページへの高速アクセスや各種コマンドの実行が可能 |
| グローバルサーチ | ページ上部の検索バーからリポジトリ、ユーザ、コード、Issue、PR等を検索できる。 リポジトリ名 in:name のような高度な検索クエリも使用可能 |
| キーボードショートカット | [?]キーを押下することにより、現在のページで利用できるショートカット一覧を表示できる。 主なショートカット: [G] > [C] (コードタブ)、[G] > [I] (Issueタブ)、[G] > [P] (PRタブ) |
基本用語
下表に、GitHubを使用する上で理解しておく必要がある基本用語を示す。
| 用語 | 説明 |
|---|---|
| リポジトリ (Repository) | プロジェクトのコード・ファイル・変更履歴を保存する場所 略称: repo |
| コミット (Commit) | ファイルの変更を記録するスナップショット 変更履歴の1単位 |
| ブランチ (Branch) | コミット履歴から分岐した独立した開発ライン 機能開発・バグ修正等に使用する。 |
| フォーク (Fork) | 他のユーザのリポジトリを自分のアカウントにコピーすること。 |
| プルリクエスト (Pull Request / PR) | ブランチへの変更を別のブランチにマージするための提案 コードレビューの場として機能する。 |
| マージ (Merge) | あるブランチの変更を別のブランチに統合すること |
| スター (Star) | リポジトリへのブックマーク兼いいね機能 後から見返したいリポジトリに付ける。 |
| ウォッチ (Watch) | リポジトリの活動通知を受け取る設定 Issue、PR、リリース等の通知を制御できる。 |
| コラボレータ (Collaborator) | リポジトリへの書き込み権限を付与されたユーザ |
| Issue | バグ報告、機能要望、議論等のタスク管理ツール |
| クローン (Clone) | リモートリポジトリをローカルにコピーすること。 |
リポジトリ
リポジトリとは
リポジトリはプロジェクトのコード、ファイル、変更履歴を保存・管理する場所であり、GitHubの中心的な概念である。
1つのリポジトリには以下に示す情報が含まれる。
- ソースコードおよび全てのファイル
- コミット履歴 (誰が・いつ・何を変更したかの記録)
- ブランチ
- タグ、リリース
- Issue、Pull Request
- Wiki (有効にした場合)
- GitHub Actionsワークフロー
リポジトリはプロジェクトの単位として使用されることが多いが、1つのリポジトリに複数のサービスやモジュールを含めるモノレポ (monorepo) 構成を採用するプロジェクトも存在する。
パブリックリポジトリとプライベートリポジトリ
GitHubのリポジトリには、公開範囲に応じてパブリックとプライベートの2種類がある。
| 種別 | アクセス | 用途 |
|---|---|---|
| パブリック (Public) | 誰でも閲覧・フォーク可能 | オープンソースプロジェクト、ポートフォリオ、公開ドキュメント |
| プライベート (Private) | 招待されたコラボレータのみアクセス可能 | 商用プロジェクト、個人的なコード、機密情報を含む開発 |
パブリックリポジトリは検索エンジンにもインデックスされるため、オープンソース活動やポートフォリオの公開に適している。
プライベートリポジトリはFreeプランでも作成可能だが、一部の高度な機能 (必須レビュアー、コードオーナー等) はPro以上のプランが必要な場合がある。
リポジトリの作成
Web UIでの作成
Web UIからリポジトリを作成する手順は以下の通りである。
- GitHubにログインして、右上の[+]ボタン - [New repository]を選択する。
- 以下の設定項目を入力・選択する。
- Repository name
- リポジトリ名を入力する。英数字・ハイフン・アンダースコアが使用可能。
- Description (任意)
- リポジトリの説明を入力する。
- [About]セクションに表示される。
- Public / Private
- リポジトリの公開範囲を選択する。
- Add a README file
- チェックを入れると README.md が自動生成される。
- Add .gitignore
- 使用言語、フレームワークに合わせたテンプレートを選択できる。
- Choose a license
- オープンソースプロジェクトの場合は、ライセンスを選択することを推奨する。
- Repository name
- [Create repository]ボタンを押下して完了する。
GitHub CLIでの作成
GitHub CLI (gh コマンド) を使用してコマンドラインからリポジトリを作成できる。
# パブリックリポジトリを作成する gh repo create <リポジトリ名> --public # プライベートリポジトリを作成する gh repo create <リポジトリ名> --private # 説明を付けて作成する gh repo create <リポジトリ名> --public --description "<リポジトリの説明>" # カレントディレクトリからリポジトリを作成してプッシュする gh repo create <リポジトリ名> --public --source=. --push
リポジトリのクローン
クローンはリモートリポジトリをローカルのコンピュータにコピーする操作である。
クローン後はローカルで編集して、変更をリモートにプッシュして反映させるワークフローが基本となる。
HTTPS
最も一般的なクローン方法である。
GitHubの認証情報 (ユーザ名、パスワード / トークン) を使用する。
git clone https://github.com/<ユーザ名>/<リポジトリ名>.git
SSH
SSH鍵を事前に設定することで、パスワード入力なしにプッシュ・プルが可能になる方法である。
定期的に作業するリポジトリにはSSHの使用を推奨する。
git clone git@github.com:<ユーザ名>/<リポジトリ名>.git
GitHub CLI
GitHub CLIを使用すると、リポジトリ名のみを指定して簡単にクローンできる。
gh repo clone <ユーザ名>/<リポジトリ名>
GitHub Desktop
GUIツールのGitHub Desktopを使用してクローンする方法である。
コマンドラインに不慣れなユーザや視覚的に操作したい場合に適している。
- リポジトリページの[Code]ボタンを押下して、[Open with GitHub Desktop]を選択する。
- または、GitHub Desktopアプリケーション内から、[File]メニューバー - [Clone repository]を選択する。
リポジトリの管理と設定
README.md
README.md はリポジトリの顔となるMarkdownファイルであり、リポジトリのトップページに自動表示される。
下表に、README.mdに記載する主なセクションおよび内容を示す。
| 項目 | 説明 |
|---|---|
| プロジェクトの概要・目的 | 何を作っているのか、どのような問題を解決するかを説明する。 |
| インストール手順 | 環境構築・依存関係のインストール方法を記載する。 |
| 使用方法 | 基本的な使い方・コマンド例を示す。 |
| コントリビューションガイド | 外部から貢献する際のルール・手順を説明する。 |
| ライセンス情報 | 使用しているライセンスを明記する。 |
リポジトリ作成時において、[Add a README file]チェックボックスを有効にすることで自動生成される。
また、後からWeb UIのファイル作成機能 または git コマンドで追加することも可能である。
.gitignore
.gitignore ファイルはGitのバージョン管理対象から除外するファイル・ディレクトリを定義するファイルである。
.gitignore に記述する主な対象は以下の通りである。
- ビルド生成物
- build/、dist/、*.o 等
- 依存パッケージディレクトリ
- node_modules/、venv/ 等
- IDEの設定ファイル
- .idea/、.vscode/ 等
- 機密情報を含むファイル
- .env、*.key 等
- OSが自動生成するファイル
- .DS_Store、Thumbs.db 等
リポジトリ作成時に使用する言語・フレームワーク向けのテンプレートを選択することで自動生成できる。
github/gitignore リポジトリにも多数のテンプレートが公開されている。
.gitignoreの記述例は以下に示す。
# ビルド生成物 build/ dist/ # 依存パッケージ node_modules/ # 環境変数ファイル .env .env.local # IDEの設定 .idea/ .vscode/ # OSファイル .DS_Store Thumbs.db
ライセンス
ライセンスはリポジトリのコードをどのように使用・配布・改変できるかを定義する法的文書である。
オープンソースプロジェクトでは必ずライセンスを明記することを推奨する。
下表に、主要なオープンソースライセンスの概要を示す。
| ライセンス | 特徴 | 主な用途 |
|---|---|---|
| MIT License | 最も制限が少ない。 商用利用・改変・再配布が自由。著作権表示のみ必須 |
広く使われるライブラリ・ツール |
| Apache License 2.0 | MITに加えて特許権の明確な付与・免除条項あり。 大規模プロジェクトに適する。 |
企業・大規模OSSプロジェクト |
| GPL v3 | コピーレフト型 派生物も同じライセンスで公開しなければならない。 |
フリーソフトウェアの保護 |
| LGPL | GPLを緩和 ライブラリとしてリンクする場合は同ライセンスを要求しない。 |
共有ライブラリ |
| BSD (2/3 Clause) | MITに近い制限の少ないライセンス 条項の数で種類が異なる。 |
BSDプロジェクト由来のソフトウェア |
| ISC | MITと機能的に同等のシンプルなライセンス | Node.jsエコシステム |
ライセンスを選択する時は、choosealicense.comを参照することを推奨する。
CODEOWNERS
CODEOWNERS ファイルを使用することにより、特定のファイルやディレクトリに対する責任者 (コードオーナー) を指定できる。
配置場所は以下のいずれかに CODEOWNERS ファイルを作成する。
- .github/CODEOWNERS
- CODEOWNERS (ルートディレクトリ)
- docs/CODEOWNERS
CODEOWNERSファイルの記述例を以下に示す。
# リポジトリ全体のオーナー * @username # docs/ディレクトリのオーナー docs/ @doc-team # JavaScriptファイルのオーナー *.js @js-team # 特定のファイルのオーナー .github/workflows/ @devops-team
CODEOWNERSを設定すると、対象ファイルを変更するPull Requestが作成された時に指定したオーナーが自動的にレビュアーとして追加される。
ブランチ保護ルールと組み合わせることにより、コードオーナーのレビュー承認を必須にする設定も可能である。
リポジトリの設定 (Settings)
リポジトリの[Settings]ページからは、リポジトリの動作に関する各種設定を変更できる。
下表に、主な設定カテゴリを示す。
| 項目 | 説明 |
|---|---|
| General | リポジトリ名、説明、WebサイトのURLの変更 マージ方法 (Merge commit / Squash / Rebase) の選択 Issues、Projects、Wiki、Discussions等の機能の有効化 / 無効化 |
| Access (Collaborators & teams) | コラボレータや組織チームのアクセス権限を管理する。 |
| Branches | ブランチ保護ルールの設定 デフォルトブランチの変更 |
| Secrets and variables | GitHub Actionsで使用する環境変数、シークレットを管理する。 |
| Pages | GitHub Pagesの公開設定 |
| Webhooks | 外部サービスへのイベント通知設定 |
| Security | Dependabot、コードスキャン、シークレットスキャン等のセキュリティ機能の設定 |
可視性の変更
リポジトリの公開範囲 (パブリック / プライベート) は作成後でも変更可能である。
変更手順は以下の通りである。
- [Settings] - [General] - [Danger Zone]に移動する。
- [Change repository visibility]を選択する。
- 確認ダイアログでリポジトリ名を入力して変更を確定する。
可視性変更時の注意事項は以下の通りである。
- パブリック --> プライベートへの変更
- [GitHub Pages]が無効化される。(Freeプランの場合)
- フォークしているユーザのフォークには影響しない。
- プライベート --> パブリックへの変更
- 全てのコミット履歴、Issue、PRが公開される。
- 機密情報が含まれていないか事前に確認すること。
転送 / アーカイブ / 削除
リポジトリの転送・アーカイブ・削除は、全て[Settings] - [General] - [Danger Zone]から実行できる。
転送 (Transfer)
リポジトリを別のユーザまたは組織に転送する操作である。
- 全てのデータ (コード、Issue、PR、Wiki、リリース、スター) が移動する。
- 旧URLは1年間リダイレクトされるが、その後は無効になる。
- 転送後は元のリポジトリへのアクセス権を失う場合がある。
アーカイブ (Archive)
リポジトリを読み取り専用状態にする操作である。
- アーカイブ後はコード、Issue、PR等の変更が不可能になる。
- クローン、フォーク、スターは引き続き可能である。
- アーカイブの解除 (Unarchive) も可能である。
- 開発を終了したプロジェクトの保存に適している。
削除 (Delete)
リポジトリを完全に削除する操作である。
- 削除されたリポジトリは復旧できないため、事前にバックアップを取得すること。
- 全てのデータ (コード、Issue、PR、Wiki、GitHub Pages) が完全に削除される。
- フォークされているリポジトリを削除した場合、フォークは独立したリポジトリとして残る。
トピック
トピックはリポジトリにカテゴリーを示すタグを付ける機能であり、GitHubの検索やExploreページでの発見性を高める。
トピックの設定方法を以下に示す。
- リポジトリページの[About]セクション右側の歯車アイコンを選択する。
- [Topics]フィールドにタグを入力して、[Add topic]を選択する。
- [Save changes]で保存する。
トピックに関する仕様は以下の通りである。
- 1つのリポジトリに最大30個まで設定可能である。
- 英小文字・数字・ハイフンのみ使用可能。
- https://github.com/topics/<トピック名> から同じトピックのリポジトリ一覧を閲覧できる。
コラボレーション
コラボレータの管理
コラボレータはリポジトリへのアクセス権限を付与されたユーザであり、チームでの開発に不可欠な概念である。
コラボレータの追加手順は以下の通りである。
- [Settings] - [Access] - [Collaborators and teams]に移動する。
- [Add people]ボタンを選択する。
- ユーザ名 または メールアドレスを入力して検索する。
- 権限ロールを選択して招待を送信する。
下表に、権限ロールの詳細を示す。
| ロール | 主な権限 |
|---|---|
| Read | コードの閲覧、クローン、Issue、PRの閲覧 |
| Triage | Readに加えてIssue、PRの管理 (ラベル付け、クローズ等) コードの変更は不可 |
| Write | Triageに加えてコードのプッシュ、ブランチの作成、PRのマージ |
| Maintain | Writeに加えてリポジトリ設定の一部変更 (保護ブランチを除く) |
| Admin | 全ての権限 リポジトリの削除、メンバー管理を含む。 |
組織 (Organization) のリポジトリでは、上記ロールに加えてOwnerロールが存在し、組織全体の管理権限を持つ。
フォーク
フォークは他のユーザのリポジトリを自分のアカウントに完全にコピーする操作である。
オープンソースプロジェクトへの貢献は、"フォーク" --> "変更" --> "Pull Request" という流れで行われる。
フォークとクローンの違い
| 操作 | 場所 | 用途 |
|---|---|---|
| フォーク (Fork) | GitHubサーバー上 | 他人のリポジトリを自分のアカウントにコピーしてPRを送る。 |
| クローン (Clone) | ローカルコンピュータ | リポジトリをローカルにダウンロードして作業する。 |
フォークの作成
フォークの作成手順は以下の通りである。
- フォークしたいリポジトリのページを開く。
- 右上の[Fork]ボタンを選択する。
- フォーク先のアカウント または 組織を選択して、[Create fork]を選択する。
Upstream との同期
フォーク元のリポジトリ (Upstream) で変更が加えられた場合、フォークを最新の状態に同期する必要がある。
Web UIからの同期する場合は、フォークリポジトリページの[Sync fork]ボタンを押下する。
コマンドラインからの同期手順は以下の通りである。
# Upstreamリモートを追加する (初回のみ) git remote add upstream https://github.com/元のユーザ名/リポジトリ名.git # Upstreamの変更を取得する git fetch upstream # Upstreamのmainブランチをローカルのmainブランチにマージする git checkout main git merge upstream/main # フォーク (origin) に反映する git push origin main
スターとウォッチ
スター (Star)
スターはリポジトリへのブックマーク 兼 いいね機能である。
- リポジトリページ右上の[Star]ボタンを選択することにより、付与・解除できる。
- スターしたリポジトリは自分のプロフィールページの[Stars]タブから一覧できる。
- スター数はリポジトリの人気度の指標として参照されることが多い。
- スターしたリポジトリはダッシュボードのフィードにも表示される。
ウォッチ (Watch)
ウォッチはリポジトリの活動に対する通知設定を行う機能である。
通知レベルの種類を以下に示す。
- Participating and @mentions (デフォルト)
- 自分が参加しているIssue/PR や @メンションのみ通知する。
- All Activity
- Issue、PR、コミット、リリース等全ての活動を通知する。
- Releases only
- 新しいリリースのみ通知する。
- Ignoring
- 全ての通知を無効にする。
ファイル操作
Web UIでのファイル操作
GitHubのWeb UIからリポジトリ内のファイルを直接作成・編集・削除できる。
主な操作方法は以下の通りである。
- ファイルの作成
- リポジトリページの[Add file] - [Create new file]を選択して、ファイル名と内容を入力してコミットする。
- ファイルの編集
- ファイルページを開き、右上の鉛筆アイコン (Edit this file) をクリックして編集・コミットする。
- ファイルの削除
- ファイルページを開き、右上のメニュー [...] - [Delete file]を選択してコミットする。
- ファイルの閲覧
- リポジトリトップから任意のファイルをクリックして内容を表示できる。
- [Raw]ボタンでプレーンテキストを表示できる。
また、ファイルを開いた状態で . キーを押下すると、Webブラウザ上でVS Codeライクなエディタ (github.dev) が起動して、より高度な編集が可能である。
ファイルのアップロード
既存のファイルをWeb UIからアップロードする手順を以下に示す。
- リポジトリページの[Add file] - [Upload files]を選択する。
- ファイルをドラッグ&ドロップする または [choose your files]からファイルを選択する。
- コミットメッセージを入力してコミットする。
アップロード制限は以下の通りである。
- Webブラウザからのアップロード
- 1ファイルあたり25[MB]まで
- コマンドライン (git push) 経由
- 1ファイルあたり100[MB]まで
- 1回の操作で最大100ファイルまで同時アップロード可能
100[MB]を超える大きなファイルを扱う場合は、Git LFSの使用を検討すること。
Git LFS
Git LFS (Large File Storage) は、画像・動画・データセット等の大規模ファイルをGitリポジトリで効率的に管理するための拡張機能である。
Git LFSの動作仕組みを以下に示す。
- Gitには実際のファイルデータではなく、LFSストレージへのポインターファイルのみが保存される。
- 実際のファイルデータはGitHub LFSストレージに分離して保存される。
- これによりリポジトリのサイズを抑えつつ、大きなファイルを管理できる。
LFSストレージ容量のプラン別の制限を以下に示す。
- Free
- 1[GB]ストレージ、1[GB]/月 の帯域
- Pro / Team / Enterprise
- 50[GB]ストレージ、50[GB]/月の帯域 (追加購入も可能)
Git LFS のセットアップ手順を以下に示す。
# Git LFSをインストールして初期化する git lfs install # 追跡するファイルパターンを指定する (例: PSDファイル) git lfs track "*.psd" # 動画ファイルを追跡対象に追加する git lfs track "*.mp4" # .gitattributesを必ずコミットする git add .gitattributes git commit -m "Add Git LFS tracking" # 通常通りファイルをコミット・プッシュする git add 大きいファイル.psd git commit -m "Add large file" git push origin main # 追跡中のファイルパターンを確認する git lfs track
Git LFSを有効にする前にコミット済みのファイルをLFS管理下に移行するには、git lfs migrate コマンドを使用する。