第5章 GitHub とリモート
GitHub は何をしてくれる場所か
Git は分散型なので、原理的にはサーバーがなくても個人で完結する。 一方で複数人で同じコードベースを育てたり、他人のリポジトリに貢献したりするには「みんなが接続しに行ける共通の置き場所」が欲しい。 GitHub はその置き場所をホストしてくれるサービスである。
GitHub 自体は Git のラッパーではなく、Git プロトコルで通信する単なるサーバー + 便利な Web UI の組み合わせだと思っておけばよい。 Issues・Pull Request・Actions などの追加機能は魅力的だが、この章ではまず「リモートの Git リポジトリとしての GitHub」に集中する。
GitHub 以外にも、GitLab・Bitbucket・Gitea・Codeberg など同種のホスティングサービスはたくさんある。Git の使い方としてはどれもほぼ同じである。 会社によって使う場所が違う可能性は高いので、ここでの手順は他のサービスにもだいたい応用できると思ってよい。
アカウントと認証
GitHub を使うには、まず github.com でアカウントを作る。ここは Web 上でポチポチやるだけなので省略。 そのあと、ローカルの Git から GitHub へ安全に接続するための認証方式を選ぶ必要がある。大きく 2 択。
- SSH: SSH 鍵を使う。本教材ではこちらを推奨
- HTTPS: パスワードの代わりに Personal Access Token (PAT) を使う
どちらも動くが、SSH は一度設定すれば push のたびにパスワードを聞かれないので日常運用が楽である。ここでは SSH で進める。
SSH 鍵を作って GitHub に登録する
鍵ペアを生成する
まだ SSH 鍵を持っていないなら、ローカルで生成する。ed25519 は現在推奨されているアルゴリズム。
ssh-keygen -t ed25519 -C "you@example.com"
# 保存先: <Enter> でデフォルト (~/.ssh/id_ed25519) のまま
# パスフレーズ: 任意。空でも動くが、つけるとより安全
~/.ssh/ 配下に秘密鍵 id_ed25519 と公開鍵 id_ed25519.pub ができる。
これから GitHub に渡すのは公開鍵の方 (.pub) だけ。秘密鍵は絶対に他人に渡さない。
公開鍵の中身を取り出す
cat ~/.ssh/id_ed25519.pub
# => ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... you@example.com
出力されたこの 1 行をまるごとコピーする。
GitHub 側に貼り付ける
GitHub の画面右上アバター → Settings → SSH and GPG keys → New SSH key。
Title は自分が後で見て分かる名前 (例: my-laptop)、Key に先ほどコピーした公開鍵を貼り付けて Add。
接続確認
鍵が通っていれば、GitHub へ SSH でつないだときに「Hi <username>!」と挨拶される。
ssh -T git@github.com
# => Hi your-username! You've successfully authenticated,
# but GitHub does not provide shell access.
初回は「The authenticity of host 'github.com' can't be established」と聞かれるので yes を返す。
これで ~/.ssh/known_hosts に GitHub のホスト鍵が記録され、以降は聞かれなくなる。
SSH が難しい場合の代替 — HTTPS + Personal Access Token
次のような状況では SSH が使いづらいことがある。
- 会社・学校のネットワークで SSH 通信 (22 番 / 443 番) がブロックされている
- Windows や慣れない端末で鍵の生成・管理にハードルを感じる
- 公共 PC や一時利用マシンに秘密鍵を置きたくない
このような場合は、https:// で始まる URL を使って HTTPS 接続にし、認証には Personal Access Token (PAT) を使う。
かつては GitHub の Web ログインパスワードで push できたが、2021 年以降は HTTPS でも PAT 必須になっている。
PAT を発行する
GitHub 画面右上のアバター → Settings → Developer settings → Personal access tokens → Fine-grained tokens → Generate new token から発行する。 従来の Tokens (classic) でも動くが、新規で作るなら細かい権限指定ができる Fine-grained のほうを推奨する。
- Token name: あとで見て分かる名前 (例:
my-laptop) - Expiration: 有効期限 (90 日 / 1 年など。無期限は非推奨)
- Repository access: 「Only select repositories」で必要なリポジトリだけに限定
- Permissions:
ContentsをRead and write、必要ならPull requestsも許可
生成された PAT はこの画面を閉じると二度と表示されない。控え忘れたら作り直すことになるので、生成直後にパスワードマネージャ等へ保管しておくこと。 また、PAT はパスワードと同じ機密情報なので、チャットや Issue に貼り付けない・公開リポジトリに混入させないよう気をつける。
HTTPS で remote を設定する
# 新規に紐づける場合
git remote add origin https://github.com/your-username/my-project.git
# 既存の SSH 設定を HTTPS に切り替える場合
git remote set-url origin https://github.com/your-username/my-project.git
# HTTPS で clone する場合
git clone https://github.com/owner/repo.git
push 時の認証と credential helper
初回 push の際に username / password を聞かれる。
- Username: GitHub のユーザー名
- Password: 発行した PAT (Web ログインパスワードではない)
毎回 PAT を貼り付けるのは面倒なので、credential helper で OS のセキュアストレージにキャッシュするのが実用的である。
# macOS (Keychain)
git config --global credential.helper osxkeychain
# Windows (Git Credential Manager。Git for Windows 同梱で通常は設定済み)
git config --global credential.helper manager
# Linux (libsecret / GNOME Keyring 経由)
git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret
手軽な git config --global credential.helper store は PAT をホームディレクトリ直下に平文で保存するので推奨しない。
可能な限り OS のキーチェーン系 (上記) を使うか、最低でも credential.helper cache --timeout=3600 でメモリ上の一時キャッシュに留めること。
リポジトリを GitHub に紐づける
GitHub 側で新しい空リポジトリを作る (Web の New → Repository name を入れて Create。README・.gitignore・ライセンスは今回は付けない)。
作成後の画面に git@github.com:your-username/my-project.git のような SSH URL が表示されるので控えておく。
既存のローカルリポジトリにリモートを追加する
前章までに作った my-project を、この GitHub リポジトリと紐づける。
origin はリモートにつける慣習的な名前だ (技術的には自由に決められるが、無理に変える理由はない)。
git remote add origin git@github.com:your-username/my-project.git
# 追加されたリモートを確認
git remote -v
# => origin git@github.com:your-username/my-project.git (fetch)
# origin git@github.com:your-username/my-project.git (push)
この時点ではまだ手元のコミットは GitHub に送られていない。実際に送るのは git push で、これは次の章のテーマである。
既存のリポジトリを手元に持ってくる — clone
自分で新規に作るのとは逆パターン。誰かが GitHub にすでに置いているリポジトリを、手元にまるごと複製するのが git clone。
# SSH URL を使う場合
git clone git@github.com:owner/repo.git
# フォルダ名を指定したい場合 (デフォルトはリポジトリ名)
git clone git@github.com:owner/repo.git my-local-name
clone はコミット履歴を含めた完全なコピーを作る。
.git/ も自動で引っ張ってくるので、手元に落ちた直後からすぐ git log や git branch が使える。
origin も自動で設定済みである。
SSH URL ではなく HTTPS URL (https://github.com/owner/repo.git) も clone できる。
個人 PC で SSH を通してあるなら SSH、公共 PC や一時的な clone なら HTTPS、という使い分けで問題ない。
途中で URL を変えたくなったら git remote set-url origin <new-url> で差し替えられる。
まとめ
- GitHub は「Git プロトコルで話せる共有サーバー + 便利な Web UI」。本質は Git の外側にあるサービス
- SSH 鍵を作って公開鍵を GitHub に登録しておくと、認証の悩みがだいぶ減る
- SSH が難しい環境では HTTPS + Personal Access Token (PAT) で代替可能。credential helper で OS のキーチェーンに保存するのが実用的
- 既存ローカル → GitHub は
git remote add originで紐づける - 既存 GitHub → ローカルは
git clone一発で完全コピー