フューチャー技術ブログ

初心者による初心者のための Git 入門

はじめに

春の入門祭り連載 10 日目です。

はじめまして。

フューチャーアーキテクト TIG の石野です。2022/10 に IT 未経験でフューチャーに新卒入社しました。

フューチャーの新人研修ではじめて GitLab を触ったので、初心者目線で学んだことをまとめてみました。

本記事では Git についてなにも知らない人・初めて触る人向けにフューチャーの新人研修で必要になった知識という観点で説明していきます。
これからフューチャーの新人研修を受ける方はもちろん、Git についての基礎知識を学びたい方にぜひ読んでいただきたいと思います。

内容

Git はバージョン管理ツールと呼ばれるものですが、バージョン管理ツールとは一体何かというところから基本的な Git コマンドについて以下の順番で説明します。

  • バージョン管理ツールとは
  • 集中型と分散型
  • GitLab と GitHub について
  • Git 基本用語
  • プル
  • ブランチ
  • コミット
    • プッシュ
  • 基本の Git コマンド

また、私が新人研修で大変お世話になった研修リーダーも研修について技術ブログを書いています。ぜひご覧ください。

バージョン管理ツールとは

大学で卒業論文を書いた方ならきっと共感してもらえると思うのですが、私のPCでは卒論を書いたWordファイルが量産されていました。

卒業論文.docx
卒業論文_修正版.docx
卒業論文_完成.docx
卒業論文_完成2.docx
卒業論文_最終版.docx

これじゃどのファイルがどの順番でいつ作られたのか分かりませんね…

このようなファイルの変更履歴の管理をどうにかしてくれるのがバージョン管理ツールです。

ソースコードを複数人で開発するときに便利なため開発の現場でよく使われています。

集中型と分散型

バージョン管理ツールには集中型と分散型が存在します。
以下では集中型と分散型のバージョン管理ツールそれぞれについて特徴を説明します。

集中型

集中型のバージョン管理ツールでは、専用のサーバー上にあるリポジトリ(バージョン管理するファイルの保管場所)でファイルを管理します。

ファイルをバージョン管理する場合はリポジトリのあるサーバーに接続する必要があります。

集中型のバージョン管理ツールの例としては Subversion が挙げられます。

分散型

分散型のバージョン管理ツールでは、サーバー上にあるリモートリポジトリのコピーをユーザーがローカルリポジトリに持つことができます。ユーザーはローカルリポジトリで開発を進め、ある程度作業が進んだらサーバーに接続しサーバー上のリモートリポジトリに変更を反映させます。集中型に比べて、複数人で作業をする際に非常に便利です。

Git はこの分散型のバージョン管理ツールのひとつです。

GitLab と GitHub について

Git については分かったけど、GitLab とか GitHub って言葉も聞いたことがあるな。Git と何が違うんだ? と思った方もいるかも知れません。

GitLab と GitHub はどちらも Git のホスティングサービスで、リモートリポジトリを提供しています。この 2 つ以外にも Git のホスティングサービスはいろいろあります。

Git 基本用語

次に、Git の基本用語 4 つを説明します。

プル

分散型のバージョン管理ツールである Git にはリモートリポジトリとローカルリポジトリがあると説明しました。

プルはリモートリポジトリの内容をローカルリポジトリにコピーすることです。厳密には fetch と merge の 2 段階があり、単純にリモートリポジトリの内容をローカルリポジトリにコピーしているわけではないですが、慣れるまではコピーしていると考えてもよさそうです。

ブランチ

ブランチとは枝という意味であり、Git ではソースコードを枝分かれして編集できます。

たとえば、新機能である a を A さんが開発するとします。

その場合、A さんはリモートリポジトリからプルしてきたリーカルリポジトリ上で、 main ブランチから a ブランチを作って(ブランチを切るといいます)そのブランチ上で作業をします。そうすることで、A さんの作業中も main ブランチは常に安定した状態を保つことができます。

そして、機能 a の開発中に別の機能 b のバグ修正を B さんが行うことになった場合は、B さんは B さんのローカルリポジトリ上で main ブランチから fix_b ブランチを切ることで B さんは A さんとは独立して作業をできます。

fix_b ブランチでの修正が完了し、機能 b が問題なく動くことを確認できたら、 fix_bブランチを main ブランチに統合(マージ)することで main ブランチが更新されます。

コミット

コミットするとはゲームでセーブデータを作るようなものです。

と先輩社員に教わったのですが、私はゲームに疎いのでちょっと理解に苦しみました。私のようにゲームに疎い人向けに説明すると、”コミットする”とは「あとあとこの時点に戻れたらうれしいな」というポイントに名前をつけて記録することです。

コミットした時点には後から戻ったり、コミット同士の違いを参照したりすることもできるのでうまく活用できると非常に便利です。

コミットはあとから消すこともできるので、いつコミットすれば分からないという方は迷ったらコミットしましょう。

コミットの頻度についてはいろいろ流派があるみたいなので、気になったら調べてみてください。私はまだ模索中です。

プッシュ

プッシュとはプルとは逆にローカルリポジトリでの変更内容をリモートリポジトリに反映させることです。

リモートリポジトリにプッシュすることで自分が変更した内容を他の人も見ることができます。

基本の Git コマンド

今紹介した、プル、ブランチ、コミット、プッシュを CLI (マウスなどではなくキーボードから入力するコマンドで PC を操作すること)で行う際の Git コマンドを紹介していきます。

  • git pull origin <ブランチ名>
    • リモートリポジトリにある指定したブランチをローカルリポジトリ上の現在のブランチにプルできます
    • origin はリモートリポジトリの意味です
  • git pull
    • ブランチを指定しなかった場合は、現在のブランチに紐づいたブランチをプルします
    • あるブランチに紐づいたブランチを upstream branch と言い、明示的に設定できます
    • 設定せずに git pull を実行するとプルはできません

git pull は前述の通り git fetch と git merge の 2 つのコマンドの組み合わせですが、新人研修のレベルではここまでの理解は必要ないので説明は割愛します。
本格的に Git を使うことになったら調べてみてください。

  • git switch <ブランチ名>
    • 変更を加えるブランチが指定したブランチに切り替わります
    • 他にもブランチを切り替えるコマンドとして git checkout というコマンドも存在します
    • 私は、新人研修で最初に使ったのが git switch だったため git checkout はよく分かっていないですがどっちを使っても大丈夫です
  • git switch -c <ブランチ名>
    • 指定したブランチ名のブランチを新しく作ります
    • このコマンドを実行した後は、変更を加えるブランチが作成されたブランチに切り替わります
  • git add <ファイルパス>
    • ステージエリアにファイルを追加します
    • ステージエリアがよく分からない方は、コミットの前に、git add コマンドでコミットするファイルを選んでると考えたら良いと思います
  • git add --all
    • --all オプションを指定することで、変更した全てのファイルをコミットの対象とできます
    • いちいちファイルパスを指定するより楽ですが関係ないファイルも含まれてしまうので注意が必要です
  • git add -u
    • -u オプションを指定することで、すでにバージョン管理されているファイルの中で変更があったもののみをコミットの対象とできます
    • 新規に作成したファイルはコミットの対象となりません
  • git commit -m <コミットメッセージ>
    • ステージエリアにあるファイルをコミットメッセージを指定して、コミットできます
  • git commit
    • オプションを省略するとコミットメッセージを入力するためのテキストエディタが開きます
    • この際に開くテキストエディタは設定できるので使い慣れたものを設定するのがおすすめです
    • よく分からんという方は -m でメッセージを指定しておきましょう
  • git status
    • ファイルの状態が確認できるので、git add する前後に使うことが多いコマンドです
    • 確認できるのは
      • 変更された/新規作成されたファイル一覧
      • git add 済みのファイル一覧 です
  • git push origin <ブランチ名>
    • 指定したブランチに現在のブランチをプッシュします

さいごに

バージョン管理ツールに馴染みがない方は、このような記事を読んでもなかなか理解が進まないと思うので、実際に手元で動かしてみるのが一番良い習得方法だと思います。

また、本記事ではフューチャーの新人研修で必要になる知識という観点で絞って説明しましたが、開発の現場で使うとなるともちろんこれらの知識だけでは足りないので、他のコマンドやブランチ運用なども調べてみてください(私は絶賛勉強中です)。

次は伊藤さんのcf-terraformingで入門するCloudflareです。