# ローカルとリモート

<!-- prev/next navigation -->
[< Previous: GitHubってなに？](01-what-is-github.md) | [Back to Index](../../../README.md) | [Next: GitHubアカウントを作ろう >](03-account-setup.md)

## What & Why

「ローカル」と「リモート」という言葉は、これからGitHubを使う上でずっと出てくる基本概念。  
2つのリポジトリがどんな関係にあって、どうやって同期するのかを理解しておくと、  
`git push` や `git pull` が怖くなくなるよ。

## Content

### ローカルとリモートの正体

[前のページ](01-what-is-github.md)で「ローカルリポジトリ」と「リモートリポジトリ」という言葉が出てきたね。  
もう少し具体的に見てみよう。

- **ローカルリポジトリ** — あなたのパソコンの中にある `.git` フォルダを含むリポジトリ。  
  Part 1でずっと使ってきたのがこれ。ファイルを編集して、`git add`、`git commit` するのは全部ここで行う。  
- **リモートリポジトリ** — GitHubのサーバー上にある同じリポジトリのコピー。  
  インターネット経由でアクセスする。

大事なことを1つ：**この2つはお互いに「コピー」であり、独立しているよ**。  
ローカルで変更しても、自動的にリモートには反映されない。  
リモートで誰かが変更しても、自動的にローカルには入ってこない。  
**同期は常に自分で明示的に行う**必要がある。

### 同期の流れ

ローカルとリモートを同期するときに使うコマンドが、大きく2つある。

```
[ あなたのPC ]                      [ GitHub ]

  ローカルリポジトリ                リモートリポジトリ
  ┌─────────────────┐               ┌─────────────────┐
  │  commit A       │  git push →   │  commit A       │
  │  commit B       │  ← git pull   │  commit B       │
  │  commit C       │               │  commit C       │
  └─────────────────┘               └─────────────────┘
       (自分のPC)                       (GitHubサーバー)
```

- **`git push`** — ローカルの変更をリモートに送る（ローカル → リモート）。  
  「自分が書いた内容を図書館の棚に置く」イメージ。  
- **`git pull`** — リモートの変更をローカルに取り込む（リモート → ローカル）。  
  「図書館の棚の最新版を自分のノートに写す」イメージ。

これだけ覚えておけば、基本的な使い方は十分。  
くわしいコマンドの使い方は後のページで実際に手を動かしながら学んでいくよ。

### `origin` という名前

リモートリポジトリには**名前**をつけて管理する。  
GitHubと連携するとき、そのリモートの名前は慣習的に **`origin`** と呼ぶ。

「origin」は英語で「起源・出どころ」という意味。  
「このリポジトリの本家はoriginだよ」という感覚で使われている。

1つのローカルリポジトリに複数のリモートを登録することも技術的には可能。  
でも通常は `origin` が1つあれば十分。

### 現在のリモート設定を確認する

`git remote -v` というコマンドで、ローカルリポジトリにどんなリモートが登録されているか確認できる。

```bash
git remote -v
```

GitHubと連携済みのリポジトリでは、こんな出力が出る：

```text
origin  git@github.com:あなたのユーザー名/リポジトリ名.git (fetch)
origin  git@github.com:あなたのユーザー名/リポジトリ名.git (push)
```

- `fetch` — `git pull` するときに使うURL。
- `push` — `git push` するときに使うURL。

まだGitHubリポジトリを作っていないので、今は出力がなくても大丈夫。  
アカウント設定とSSH設定が終わったら、実際に使ってみよう。

### コミット・ブランチもちゃんと同期される

「ファイルが同期される」と思いがちだけど、正確には**コミット（履歴）とブランチが同期される**よ。

ローカルで `git commit` を重ねると、ローカルの履歴だけが進む。  
`git push` することで初めてその履歴がリモートにも反映される。  
ブランチも同様で、ローカルで作ったブランチは明示的にpushしないとリモートには現れない。

これを理解しておくと、「pushし忘れた！」というミスを防ぎやすくなる。

## Summary

- ローカルリポジトリは自分のPC上、リモートリポジトリはGitHubサーバー上にある。
- 2つは独立しており、同期は自分で明示的に行う必要がある。
- `git push` でローカル → リモート、`git pull` でリモート → ローカルに同期する。
- リモートの名前は慣習的に `origin` を使う。
- `git remote -v` で登録済みのリモートURLを確認できる。
- コミット履歴とブランチが同期の単位になっている。

## Exercises

まだGitHubアカウントがない状態なので、今回は概念の確認と準備が中心。

**確認クイズ**

1. `git push` と `git pull` の方向（どちらからどちらへ）を言葉で説明してみよう。
2. ローカルで `git commit` を3回した。GitHubに反映するには何をすればいい？
3. リモートの名前として慣習的に使われる文字列はなに？

**コマンドを試してみよう**

Part 1で作ったローカルリポジトリがあれば、その中で次のコマンドを実行してみよう：

<div class="code-input">

```bash
git remote -v
```

</div>

まだGitHubと連携していないので、何も表示されないか、空行が返るはず。
これが「リモートが登録されていない状態」。

<div class="code-input">

```bash
git log --oneline
```

</div>

ローカルのコミット履歴を確認しておこう。
GitHubにpushしたとき、この履歴がそのままリモートにも現れる。

### Reset & Retry

このページには操作がないので、リセットは不要。  
クイズに答えてから次のページへ進もう。

<!-- prev/next navigation -->
[< Previous: GitHubってなに？](01-what-is-github.md) | [Back to Index](../../../README.md) | [Next: GitHubアカウントを作ろう >](03-account-setup.md)
