← ブログ一覧
IT

Gitとは?

バージョン管理システムGitについて、必要とされる理由・基本概念・仕組みを具体的なシナリオで解説し、実際に手を動かして使えるようになるまでを丁寧にガイドします

#Git#バージョン管理#GitHub#開発環境#ブランチ#エンジニア基礎知識

この記事で学べること

  • Gitとは何か、なぜエンジニアの必須スキルになっているのか
  • 「ファイルの上書き事故」がGitでどう防げるのかを具体的な場面で理解する
  • リポジトリ・コミット・ブランチという基本概念を、実際の操作イメージとセットで理解する
  • 一人開発とチーム開発、それぞれでのGitの使い方
  • 手を動かして試すための最初のステップ
  • つまずきやすいポイントとその対処法

1. Gitとは

Gitは、ファイルの変更履歴を記録・管理するための分散型バージョン管理システムです。2005年にLinuxカーネルの開発者Linus Torvalds氏によって開発され、現在では世界中のソフトウェア開発現場で標準的に使われています。個人開発から大企業のチーム開発まで、コードを書く仕事に関わる人であれば、ほぼ確実にGitと関わることになります。

一言で言うと、Gitは「ファイルの変更を、いつ・誰が・なぜ行ったかまるごと記録してくれる、超高性能なタイムマシン」です。過去のどの時点にも自由に戻れて、誰が何を変えたのかも一目で分かり、複数人が同時に作業しても内容がぶつからないように調整してくれます。

2. なぜGitが必要なのか:よくある「あるある」から考える

Gitのありがたみは、Gitを使わずに困った経験があると一気に理解できます。まずは、Gitがない世界でよく起こる場面を想像してみてください。

シナリオ:Gitを使わずにファイルを管理していたら

あなたは1人でWebサイトのコードを書いています。ファイル名はindex.html。ある日、大きな改修をすることになり、念のためindex_backup.htmlというコピーを作ってから作業を始めました。作業が進むにつれてindex_backup2.htmlindex_backup_最新.htmlindex_backup_最新2_これ使う.html……とファイルが増えていきます。

数日後、「やっぱり3日前の状態に戻したい」と思っても、どのファイルが3日前の状態なのか分かりません。さらにチームで作業していた場合、同僚が同じファイルを別のタイミングで編集していたら、どちらの変更を残すべきか分からなくなり、最悪の場合は相手の変更を丸ごと上書きして消してしまいます。

Gitは、この「ファイル名でバージョンを管理する」という原始的で事故が起きやすいやり方を根本から解決します。ファイルをコピーして名前を変える代わりに、Gitに「この時点の状態を記録して」と指示するだけで、いつでも過去のどの時点にも正確に戻れるようになります。複数人が同時に編集しても、Gitが変更内容を自動的に統合し、衝突する部分だけを教えてくれます。

ここが重要です。 Gitは単なる「バックアップツール」ではありません。変更の経緯(なぜ・いつ・誰が変えたか)そのものを資産として蓄積し、1人でも複数人でも安全に開発を進めるための土台です。

3. Gitの基本概念を、操作イメージとセットで理解する

Gitには独特の用語がいくつか出てきますが、実際の操作イメージと結びつけると驚くほど理解しやすくなります。

リポジトリ(Repository)=プロジェクトの保管庫

リポジトリとは、ファイルとその変更履歴をまとめて管理する場所です。自分のPC上にある「ローカルリポジトリ」と、GitHubなどのサービス上に置く「リモートリポジトリ」の2種類があります。イメージとしては、自分の机の引き出し(ローカル)と、みんなでアクセスできるクラウド上の金庫(リモート)が常に同期している状態です。

コミット(Commit)=セーブポイント

コミットは、ある時点でのファイルの状態を記録する「スナップショット」です。ゲームで例えるなら、こまめにセーブポイントを作っておくイメージに近いです。1回のコミットごとに「何を・なぜ変更したか」というメッセージを添えるため、後から履歴を見返したときに、変更の意図まで追いかけられます。

git commit -m "ログイン画面のバリデーションエラー表示を修正"

このように、コミットメッセージには「何をしたか」だけでなく「なぜそうしたか」まで書いておくと、半年後の自分やチームメンバーが履歴を見返したときに非常に助かります。

ブランチ(Branch)=並行世界を作る仕組み

ブランチは、リポジトリの中に独立した作業ラインを作る仕組みです。メインの開発ライン(mainブランチ)から枝分かれさせることで、「今ある動いているコードには一切手を触れず、新機能だけを試作する」ということができます。試作がうまくいけば元のラインに合流(マージ)させ、失敗すればそのブランチごと捨てれば、メインの状態には一切影響しません。

イメージとしては、RPGで「セーブデータを複製してから、今回は思い切ったルートを試してみる」感覚に近いです。本編(main)を汚さずに、いくらでも実験できます。

4. Gitの内部構造:3つの領域を理解する

Gitでは、ファイルの状態が次の3つの領域を移動しながら管理されます。この構造を理解すると、コマンドの意味がぐっと分かりやすくなります。

領域内容イメージ
ワークツリー実際にファイルを編集する作業ディレクトリ作業机の上
ステージングエリア次のコミットに含める変更を一時的に登録する場所荷造り中の段ボール
リポジトリコミットされた変更履歴が保存される場所発送済みの倉庫

ファイルを編集した後、まず変更内容をステージングエリアに「登録」し、その内容をコミットすることでリポジトリに「記録」される、という2段階の流れになっています。この仕組みのおかげで、「今回のコミットに含めたい変更だけ」を選んで記録することができます。たとえば10個のファイルを編集していても、「このうち3個だけを今回のコミットに含めて、残り7個は次回にする」といった細かい調整が可能です。

5. 実際に手を動かしてみる

概念だけを読んでも実感は湧きにくいので、実際の操作の流れを見ていきましょう。ここでは「新しいプロジェクトを作り、ファイルを編集して、履歴に記録する」という一連の流れを追ってみます。

ステップ1:リポジトリを作る

mkdir my-project
cd my-project
git init

git initを実行すると、そのフォルダがGitによって管理される「リポジトリ」になります。この時点ではまだ履歴は空っぽです。

ステップ2:ファイルを作って、変更を記録する

echo "Hello, Git" > index.html
git add index.html
git commit -m "初めてのファイルを作成"

git addでステージングエリアに登録し、git commitでその内容を履歴として記録します。この2段階の操作こそが、Gitの基本の型です。慣れてくると、このaddcommitのリズムが自然な作業習慣になります。

ステップ3:変更履歴を確認する

git log

これまでのコミット履歴が、日時・メッセージつきで一覧表示されます。「あのとき何をしたか」を後から確認できる、まさにタイムマシンの記録帳です。

ステップ4:ブランチを作って試作する

git checkout -b feature/new-button

新しいブランチを作成し、そこに切り替わります。ここから先の作業はmainブランチに一切影響を与えません。作業が終わってmainに戻したくなったら、次のように統合します。

git checkout main
git merge feature/new-button

ステップ5:リモートリポジトリと同期する

GitHubなどにリポジトリを用意しておけば、次のコマンドでローカルの変更をクラウドに反映したり、逆にクラウド側の変更を取り込んだりできます。

git push   # ローカルの変更をリモートに反映
git pull   # リモートの変更をローカルに取り込む

ここまでの5ステップを一度自分の手で実行してみると、「ファイルを編集する→ステージングする→コミットする」という感覚がつかめます。最初はコマンドを覚えることに気を取られがちですが、慣れてくると呼吸をするように自然に打てるようになります。

6. チーム開発での実際の使われ方

1人での開発ではここまでの操作で十分ですが、チームで開発する場合は、次のような流れが一般的です。

  1. mainブランチから作業用のブランチ(feature/○○)を作成する
  2. 作業用ブランチ上でコードを編集し、意味のある単位でこまめにコミットする
  3. 作業が完了したら、リモートリポジトリに変更をプッシュする
  4. GitHub上で「プルリクエスト」を作成し、チームメンバーにレビューを依頼する
  5. レビューで問題がなければ、mainブランチにマージする

このように、mainブランチを直接編集するのではなく、必ず作業用ブランチとレビューを経由することで、「誰かの変更で本番のコードが突然壊れる」という事故を防げます。プルリクエストには変更内容の差分(diff)が自動的に表示されるため、レビュアーは「どこが・どう変わったか」を一目で確認できます。

7. GitとGitHubの違い

初心者が混同しやすい点として、GitとGitHubの違いがあります。

  • Git:バージョン管理を行うためのソフトウェアそのもの。ローカル環境だけでも完結して使える
  • GitHub:Gitのリポジトリをオンラインで保存・共有し、プルリクエストやIssue管理などのチーム開発機能を提供するWebサービス

たとえるなら、Gitは「文房具(記録の仕組みそのもの)」で、GitHubは「その文房具を使ってみんなで共同作業できるオフィスビル」のような関係です。GitLabやBitbucketなど、GitHubと同様の機能を提供する他のサービスもあります。

8. メリット・デメリット

メリット

  • 変更履歴がすべて記録されるため、過去のどの状態にもいつでも正確に戻せる
  • ブランチを使うことで、複数の作業や実験を安全に並行して進められる
  • 分散型のため、リモートリポジトリに障害が起きてもローカルの履歴は失われない
  • 「なぜその変更をしたか」まで記録に残るため、後からの調査や引き継ぎがしやすい

デメリット・注意点

  • コマンドの種類が多く、最初は操作に慣れるまで一定の学習コストがかかる
  • ブランチの運用ルールをチームで統一しないと、履歴がすぐに複雑になる
  • 強制プッシュなど一部の操作は、他のメンバーの変更履歴を意図せず消してしまうリスクがあるため注意が必要

9. つまずきやすいポイントと対処法

  • コンフリクト(競合):複数人が同じ箇所を編集した状態でマージしようとすると、Gitがどちらを採用すべきか判断できず、手動での解決を求められます。焦らず、Gitが示す競合箇所を1つずつ確認し、どちらの内容を残すか決めていけば解決できます
  • コミットの粒度:1回のコミットに変更を詰め込みすぎると、後から履歴を追いにくくなります。「1つの目的につき1コミット」を意識すると、履歴が読みやすくなります
  • .gitignoreの設定漏れ:ログファイルや環境変数ファイル(パスワードやAPIキーを含むもの)を誤ってコミットしてしまうことがあります。プロジェクトを始めた最初の段階で.gitignoreファイルを用意し、コミットに含めたくないファイルを指定しておくことが重要です
# .gitignore の例
node_modules/
.env
*.log

10. 今日からGitを試してみる

Gitは、実際に手を動かしてみるのが一番の理解の近道です。まずは次の手順で、身近な小さなプロジェクトから試してみることをおすすめします。

  1. GitがPCにインストールされているか、git --versionで確認する
  2. 適当なフォルダを1つ作り、git initしてみる
  3. 適当なテキストファイルを1つ作り、git addgit commitを実行してみる
  4. git logで、自分が今作った履歴を眺めてみる
  5. 慣れてきたら、GitHubに無料アカウントを作り、リモートリポジトリとpushpullを試してみる

この5ステップを一度体験するだけで、「ファイルの変更を記録する」という感覚が驚くほど自然に身につきます。最初のgit initからgit commitまでは、慣れれば1分もかからない作業です。

まとめ

Gitは、ファイルの変更履歴を記録し、1人でも複数人でも安全に開発を進めるための分散型バージョン管理システムです。リポジトリ・コミット・ブランチという基本概念を、実際の操作イメージと結びつけて理解すれば、決して難しいものではありません。最初はコマンドの多さに戸惑うかもしれませんが、git initgit addgit commitという基本の型さえ体に馴染めば、あとは使いながら少しずつコマンドを増やしていけば十分です。まずは小さなフォルダを1つ用意して、実際に手を動かしてみてください。

次に学びたい技術

Gitの基本操作に慣れたら、次はGitHubを使ったチーム開発の進め方(プルリクエストのレビュー文化など)や、コードの変更を自動的にテスト・デプロイするCI/CD(継続的インテグレーション・継続的デリバリー)の仕組みについて学ぶと、実務での活用の幅がさらに広がります。