ワーキングディレクトリ・ステージングエリア・ローカルリポジトリの違い:Gitの3つのローカル領域を理解する
By Mirko Peters ·
Gitの3つのローカル領域を理解しましょう。ワーキングディレクトリ、ステージングエリア、ローカルリポジトリがどのように連携し、プロジェクトの履歴を正確に管理できるようにするのかを解説します。
Automatically translated with AI from the original post. Read the English original

Gitの3つのローカル領域(ワーキングディレクトリ、ステージングエリア、ローカルリポジトリ)を理解することは、場当たり的なファイルのコピーから、意図的なバージョン管理へと移行するうえで欠かせません。本ガイドでは、各領域がどのように機能するのかを物理的なオフィスにたとえて説明し、プロジェクトの履歴を正確に管理できるようにします。
重要なポイント
- ワーキングディレクトリはアクティブなプロジェクトフォルダーであり、ファイルを自由に編集する、散らかりがちな作業机のような役割を果たします。
- ステージングエリアは選別用のトレイのような役割を果たし、次のチェックポイントに向けて、
git addで選択した特定の変更だけを保持します。 - ローカルリポジトリは書類棚の役割を果たし、ステージングされた変更を構造化されたコミット履歴として永続的に記録します。
- git status と git diff コマンドは安全確認の手段となり、履歴を記録する前に3つのローカル領域で何が起きているかを確認できます。
- この3つの領域を理解すると、誤ったコミットを防ぎ、プロジェクトの履歴を整理された論理的な状態に保ちやすくなります。
ワーキングディレクトリ:作業中の机
コンピューター上のプロジェクトフォルダーを開いて編集を始めると、Gitの最初のローカル領域であるワーキングディレクトリで直接作業していることになります。このフォルダーは、職場の机にたとえると分かりやすいでしょう。Webサイトのコード、ドキュメント、構成ファイル、画像など、開いた、作成した、変更した、削除したすべてのファイルが含まれます。
実際の机と同じように、ワーキングディレクトリも試行錯誤の最中には散らかりがちです。サインインボタンの書き直しを始め、readme ファイルの誤字に気づき、新しいレイアウトを試すための実験的なスクリプトを作るかもしれません。Gitは、このフォルダーで行われたすべての変更を自動的に永続的な履歴へ反映させるわけではありません。アイデアを試し、ミスをし、作業を未完了のまま残しても、プロジェクトの記録が永久に変わることはありません。
前回記録したチェックポイント以降にワーキングディレクトリで何が変わったかを確認するには、git status コマンドを使います。平たく言えば、Gitにステータスを尋ねることは、机の上にあるものすべてを点検するようなものです。変更されたファイル、新規ファイル、削除されたファイルを特定し、前回のコミット以降に何が変わったかを正確に示してくれます。
ステージングエリア:選別用のトレイ
ステージングエリアは、バージョン管理を始めたばかりの開発者にとって、もっとも誤解されやすい概念かもしれません。名前だけ聞くと、正体の分からない技術的な保管場所のように感じられるためです。しかし、実際には机のすぐ横にある選別用のトレイと考えてください。次のチェックポイントに含めたい変更だけを、このトレイに置きます。
たとえば、午前中はパスワードリセットリンクの重大な不具合の修正に取り組み、同時にウェルカム画面の実験的なデザイン変更にも着手したとします。パスワードの修正は確実に記録したいものの、デザイン変更は未完成で不具合も含んでいます。この2つの変更を同じコミットにまとめたくはありません。
git add に続けてパスワードリセットのファイルを指定すると、その完成した変更を特定して、ステージングエリアに配置できます。名前に反して、git add は作業内容を永続的に保存するものでも、オンラインのサーバーに送信するものでもありません。次のチェックポイントに向けて、選んだファイルの整理された版を準備するだけです。この少しの手順によって、高い制御性が得られます。ステージングした変更を確認したり、誤って追加したものを取り除いたり、同じ論理的な作業単位に属する追加のファイルを取り込んだりできます。
ローカルリポジトリ:ファイルキャビネット
レビュー用のトレイに、保存したい変更がちょうど揃ったら、それらの編集は Git の3つ目の領域であるローカルリポジトリに移ります。作業ディレクトリが机、ステージングエリアがレビュー用のトレイだとすると、ローカルリポジトリは鍵のかかったファイルキャビネットにあたります。
ローカルリポジトリには、すべてのコミットとプロジェクト履歴が、コンピューター上の非表示のシステムフォルダーに保存されます。git commit -m "Fix password reset link" を実行すると、Git はステージングエリアから準備済みの変更を受け取り、名前付きの永続的なチェックポイントとして確定させます。
このローカルファーストの仕組みにより、インターネット接続やオンラインのホスティングサービスがなくても、追跡可能な完全なプロジェクト履歴を構築できます。すべては自分のハードウェア上で安全に行われます。日常の作業は次のような安定したリズムになります。作業ディレクトリでファイルを編集し、git status で状況を確認し、git add で対象の変更を選択し、git commit で選択内容を記録します。
まとめ
作業ディレクトリ、ステージングエリア、ローカルリポジトリの違いを理解すると、開発プロジェクトへの取り組み方が変わります。フォルダーを作業スペース、ステージングエリアをレビュー用のトレイ、ローカルリポジトリを永続的なファイルキャビネットとして捉えることで、プロジェクト履歴を完全に管理できるようになります。
バージョン管理の基礎をさらに深く学ぶには、M365 FM Podcast のエピソード全編を聴いてください。Mirko Peters が Git をわかりやすく解説し、これらのローカルでの仕組みがチーム全体の作業フローにどう組み込まれるかを紹介しています。
よくある質問
作業ディレクトリとステージングエリアの違いは何ですか?
作業ディレクトリは、ファイルを自由に編集、作成、削除する作業用のプロジェクトフォルダーです。ステージングエリアは、次のコミットに含めたい特定の変更だけを配置する選択的なレビュー用のトレイです。
git add はファイルを永続的に保存しますか?
いいえ。git add コマンドは、ファイルをステージングエリアに移動して準備しますが、プロジェクト履歴に永続的に記録したり、オンラインに送信したりはしません。永続的な記録は git commit を実行したときにのみ行われます。
オンラインのホスティングサービスを使わずに Git を利用できますか?
はい。Git はコンピューター上で完全にローカルに動作するように設計されています。GitHub やインターネットに接続することなく、ローカルリポジトリの作成、コミット、ブランチの管理、履歴の確認ができます。
誤ってファイルをステージングしてしまった場合はどうすればよいですか?
ファイルを早まってステージングした場合、Git にはステージングを取り消すコマンド(git reset など)があります。これを使うと、最新の編集内容を失うことなく、ファイルをステージングエリアから安全に取り除き、作業ディレクトリに戻せます。