ウェブエンジニア問題集

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章を通じて、以下を身につけます。

  1. Gitの初期設定とSSH鍵のセットアップ
  2. add / commit / push の基本フロー
  3. ブランチの作成と切り替え
  4. mergerebase の使い分け
  5. コンフリクトの解決
  6. reset / revert / restore による取り消し操作
  7. リモートとの同期(fetch / pull / push
  8. stash による作業の一時退避
  9. GitHubでのチーム開発(Pull Request、レビュー、マージ戦略)

コマンドを丸暗記するのではなく、なぜそのコマンドが必要なのか・何が起きているのかを理解しながら進めていきます。

ちゃんと使うためのポイント

  • Gitは「変更履歴のスナップショット」を時系列で保存するツール
  • 分散型なので、手元にも完全な履歴がある
  • Git(ツール)とGitHub(サービス)は別物
  • 現代のソフトウェア開発でGitは必須スキル

次の章では、実際にGitを使い始めるための初期設定(user.nameuser.email の設定やSSH鍵の生成)を行います。