【AIと学ぶ】Gitとは

「 git 」って何?

 皆さんは「git」って聞いたことありますか?wikipediaには以下のように書いてあります。

Git(ギット[2][3][4][5])は、プログラムソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムである。

https://ja.wikipedia.org/wiki/Git

・・・よくわかりませんね。かくいう私も研究を通して多少プログラミングをするのですが、全くわかっていません。おそらく多少プログラムをかじった人であれば、「github」という言葉を聞いたことあるのではないでしょうか。それと関係してるのかなぁ、くらいの知識しかありません。

 今回はこの「 git 」について、geminiに聞きながら学んでいきたいと思います。

使用するプロンプト

 今回は基本的なプロンプト手法を用いて学んでいきます。以下は最初に渡したプロンプトで、使ったのはgeminiのproです。


[タスク] あなたはソフトウェア開発の専門家です。バージョン管理システム「Git」の概念や使い方について、初心者にもわかりやすく説明してください。
[背景・文脈] 私は普段プログラムを書いていますが、ファイルの変更履歴を適切に管理し、開発や研究のプロジェクトを効率化するためにGitを基礎からしっかり学びたいと考えています。
[入力] Gitの全体像と、なぜプログラムを書く上で必要なのかを教えてください。
[出力形式] 以下の条件に厳密に従って出力してください。
・全体を5行程度(最大でも6行以内)に簡潔にまとめること。
・重要なポイントは箇条書きを用いて、視覚的にわかりやすくすること。
・専門用語はなるべく噛み砕いて説明すること。

出力結果

geminiから次のように返ってました。

Gitは、ファイルの変更履歴を記録し、いつでも過去の状態に戻せる「タイムマシン」のようなシステムです。
研究や開発においてプログラムを書く際、Gitが必要になる主な理由は以下の通りです。
安全な復元: 誤って上書きや削除をしてしまっても、すぐに元の正常な状態に戻せます。
自由な試行錯誤: 今動いているコードを壊さずに、新しいアイデアを別の分岐で安全に試せます。
履歴の見える化: 変更の理由が記録に残るため、過去の自分の振り返りや共同作業がスムーズになります。
まずは手元のパソコンにGitを準備して、最初の記録を作ってみましょうか?

gemini

平易な言葉で帰ってきましたね。おそらく「専門用語をかみ砕く」という部分が複雑な説明を避けるように働いたと思われます。続けて、これを説明するように画像を出力するように頼みました。

…急に英語が出てきましたね。それぞれの言葉を説明するように頼んでみましょう。ぱっと見で何となく理解はできますが、それぞれの内容について聞いてみましょう。

図の中に出てくるGitの重要な用語について、いくつかのグループに分けて説明しますね。

1. ローカル(自分のパソコン)での作業領域

左側のフォルダや箱のアイコンがある部分です。Gitは、変更を記録するまでに3つの段階を踏みます。

  • Working Directory (作業ディレクトリ)実際にあなたがファイルを作成したり、コードを書いたりして編集している普段のフォルダのことです。
  • Staging Area (ステージングエリア)コミット(記録)する準備ができたファイルを一時的に置いておく場所です。「荷造り前の箱」のようなイメージで、ここで次に記録したい変更だけを選んでまとめることができます。
  • Local Repository (ローカルリポジトリ)あなたのパソコン上にある、変更履歴の保管庫です。ステージングエリアから「コミット」することで、ここに履歴が永続的に保存されます。

2. 履歴とブランチ(枝分かれ)

中央の線が繋がっている部分です。Gitの強力な機能である「履歴の枝分かれ」を表しています。

  • Commits (コミット)ファイルの状態を「スナップショット(写真)」のように保存した履歴の1つ1つの点(丸いアイコン)のことです。それぞれにメッセージ(例:"Initial Commit" = 最初のコミット、"Bug Fix" = バグ修正など)を付けて管理します。
  • Main Branch (メインブランチ)青い線。プロジェクトの本流となる、一番安定した状態を保つためのメインの枝です。
  • Feature Branch (フィーチャーブランチ)緑の線。新しい機能(Feature)を追加するために、メインブランチから枝分かれさせた作業用の線です。ここでどれだけ失敗しても、メインブランチには影響しません。
  • Hotfix Branch (ホットフィックスブランチ)オレンジの線。本番環境で致命的なバグ(Critical Fix)が見つかった際などに、緊急で修正を行うために枝分かれさせる線です。
  • Merge / Pull Request (マージ / プルリクエスト)枝分かれして作業した内容(FeatureやHotfix)を、メインブランチに合流(統合)させることを「マージ」と呼びます。「プルリクエスト」は、チーム開発において「この変更をマージしていいですか?」と他の人に確認・レビューをお願いする機能のことです。

3. リモート(インターネット上)との連携

右側の雲のアイコンの部分です。チームで共有したり、バックアップを取るために使います。

  • Remote Repository (リモートリポジトリ)GitHubやGitLabなどのインターネット上のサーバーにある保管庫です。チームメンバー全員がここにアクセスしてコードを共有します。
  • Push (プッシュ)自分のパソコン(ローカルリポジトリ)で作った新しいコミット(履歴)を、インターネット上(リモートリポジトリ)にアップロードする操作です。
  • Pull (プル)他の人がインターネット上(リモートリポジトリ)にアップロードした新しい変更を、自分のパソコン(ローカルリポジトリや作業ディレクトリ)にダウンロードして取り込む操作です。

これらの用語の中で、実際にコマンド(git addgit commit など)としてどう使うのか、もっと詳しく知りたい項目はありますか?

 やはり左側の部分が作業部分、つまり自分の操作しているPCになるんですね。変更した内容やプログラムが中央の線になっており、例えば機能を追加するときは緑の線、バグを修正するときはオレンジの線に枝分かれします。この時中央の線、すなわちメインのプログラムには一切変更は加えず、保存されます。最終的に変更内容を適応させたいとき、「merge」によって中央の線に合流させるんですね。

 確かに、プログラムを書いていると、どこで変更・修正したのかわからなることが多々あります…。特に大人数で開発を行う際は、それぞれの部分で管理する必要があるため、gitが重要になるということですね。

Gitの基本的な使い方

Gitの基本的な流れは「変更を記録する → 保存する → 共有する」です。

まず、プロジェクトをGit管理下に置くには、

git init

を実行します。

次に、変更したファイルを記録対象に追加します。

git add .

その後、変更内容を履歴として保存します。

git commit -m "変更内容"

コミットした履歴は、以下のコマンドで確認できます。

git log

また、現在の変更状況は、

git status

で確認できます。

GitHubなどのリモートリポジトリと連携する場合は、

git push

で変更をアップロードし、

git pull

で最新の変更を取得します。

また、大きな変更や新機能の追加では「ブランチ」を利用します。

git branch feature-name

ブランチを使うことで、現在の安定したコードを維持しながら、新しい機能の開発や実験的な変更を安全に行うことができます。

Gitで頻繁に使う操作は、

編集 → git addgit commitgit push

という流れです。
この基本操作を理解するだけでも、プログラムの変更履歴を管理し、過去の状態へ戻ったり、複数人で開発したりすることが可能になります。

AI