Gitとは何か — バージョン管理が必要な理由
Gitは、ファイルの変更履歴を記録・管理するためのバージョン管理システムです。2005年にLinux開発者のLinus Torvalds氏によって作られ、今ではソフトウェア開発の現場で事実上の標準となっています。
この章では、Gitそのものの使い方に入る前に、「なぜバージョン管理が必要なのか」「Gitは何を解決しているのか」という根本的な部分から整理していきます。
バージョン管理がない世界を想像する
Gitを使わずにチームで開発する状況を考えてみましょう。たとえば、あなたと同僚のAさんが同じ app.js を編集しているとします。
app_v1.js
app_v2.js
app_v2_fixed.js
app_v2_fixed_final.js
app_v2_fixed_final_真の最終版.js
誰もが一度は見たことがあるような、絶望的なファイル名です。これでは以下のような問題がすぐに起きます。
- どのファイルが最新なのか分からない
- 「先週の状態に戻したい」が実質不可能
- 自分の変更とAさんの変更が衝突したとき、どちらが正しいのか分からない
- 間違えて古いファイルで上書きしてしまい、数時間の作業が消える
バージョン管理システムは、これらすべてを解決するために生まれました。
Gitが解決すること
Gitを使うと、ファイルの変更履歴がすべて自動的に記録されます。やっていることを一言で言えば、「ファイルのスナップショットを時系列で保存し続ける」ことです。
Gitで管理されたプロジェクトでは、以下のことが簡単にできるようになります。
- いつ・誰が・何を変更したかがコマンド1つで分かる
- 過去の任意の時点に戻すことができる
- 複数人の変更を安全に統合できる(衝突した部分は明示的に教えてくれる)
- 実験的な変更を別の流れで試して、うまくいったら本流に取り込める
ファイル名を _final2 にするような運用から、完全に解放されるわけです。
集中型と分散型 — Gitは「分散型」
バージョン管理システムには大きく分けて2つの方式があります。
| 方式 | 代表例 | 特徴 |
|---|---|---|
| 集中型 | Subversion (SVN), CVS | 中央サーバーに履歴が集約される。サーバーに繋がらないと何もできない |
| 分散型 | Git, Mercurial | 各開発者の手元にも完全な履歴のコピーがある |
Gitは分散型です。あなたのPCにクローンしたリポジトリには、プロジェクトの全履歴が丸ごと入っています。これが意味するのは以下のようなことです。
- オフラインでもコミットや履歴確認ができる
- 中央サーバー(GitHubなど)が落ちても、手元の履歴は失われない
- ブランチ操作などがローカルで完結するので高速
この「手元にすべてがある」という性質が、Gitの柔軟さと速さの源になっています。
GitとGitHubは別物
初学者が最初に混乱しやすいポイントです。
- Git — ファイルの変更履歴を管理するツールそのもの。あなたのPCで動くソフトウェア
- GitHub — Gitリポジトリをインターネット上で共有するためのWebサービス。GitLabやBitbucketも同種のサービス
Gitは単体で完結します。GitHubがなくてもGitは使えます。ただし、チーム開発や成果物の公開にはGitHubのようなリモートホスティングサービスが実質必須です。
GitHubは「みんなが自分のGit履歴を同期するための中継地点」と考えると理解しやすいはずです。
なぜ今、Gitを学ぶべきなのか
現代のソフトウェア開発において、Gitを使わない現場はほぼありません。以下はすべてGitが前提です。
- チーム開発 — 他のエンジニアと共同作業する
- オープンソース貢献 — GitHub上のプロジェクトにPull Requestを送る
- CI/CDパイプライン — GitHubへのpushをトリガーに自動テストやデプロイを実行
- コードレビュー — Pull Requestベースのレビュー文化
- ポートフォリオ — GitHubのアカウント自体が履歴書のような役割を持つ
つまり、Gitを使えないとエンジニアとしてのスタートラインに立てない、と言っても大げさではありません。
この本で学ぶこと
本書は、駆け出しエンジニアが実務でGitを正しく使えるようになることを目標にしています。全10章を通じて、以下を身につけます。
- Gitの初期設定とSSH鍵のセットアップ
add/commit/pushの基本フロー- ブランチの作成と切り替え
mergeとrebaseの使い分け- コンフリクトの解決
reset/revert/restoreによる取り消し操作- リモートとの同期(
fetch/pull/push) stashによる作業の一時退避- GitHubでのチーム開発(Pull Request、レビュー、マージ戦略)
コマンドを丸暗記するのではなく、なぜそのコマンドが必要なのか・何が起きているのかを理解しながら進めていきます。
ちゃんと使うためのポイント
- Gitは「変更履歴のスナップショット」を時系列で保存するツール
- 分散型なので、手元にも完全な履歴がある
- Git(ツール)とGitHub(サービス)は別物
- 現代のソフトウェア開発でGitは必須スキル
次の章では、実際にGitを使い始めるための初期設定(user.name・user.email の設定やSSH鍵の生成)を行います。