【書評】『ゼロから学ぶGit/GitHub 現代的なソフトウェア開発のために』を読んでみた
目次
はじめに
こんにちは、CloudBuildersのsugawaraです。今月は「Git/GitHub強化月間」と決め、基礎から改めて学習を進めています。
本記事では、Git/GitHubの基礎を学ぶために読了した『ゼロから学ぶGit/GitHub 現代的なソフトウェア開発のために』をご紹介します。
これからGit/GitHubを初めて学ぶ方や、再入門したい方にとって、本書はとても参考になる一冊だと思います!
目次
下記は出版社サイトからの引用となります。ひと目見て初学者用の書籍だとわかると思います。
第1章 バージョン管理システムとは
1.1 バージョン管理の必要性
1.2 バージョン管理システムの歴史
1.3 できる人、できない人
1.4 まとめ
コラム CEOからメッセージ第2章 Gitの仕組みと用語
2.1 リポジトリとコミット
2.2 ブランチとマージ
2.3 まとめ第3章 Gitの基本的な使い方
3.1 初期設定
3.2 Gitの一連の操作
3.3 よく使うコマンドとファイル
3.4 まとめ
3.5 演習問題第4章 ブランチ操作
4.1 なぜブランチを分けるか
4.2 ブランチの基本
4.3 マージと衝突の解消
4.4 まとめ
4.5 演習問題
コラム 枝は切るのか生やすのか第5章 リベース
5.1 リベースの仕組み
5.2 リベースとマージ
5.3 対話的リベース
5.4 リベース中の衝突
5.5 まとめ
5.6 演習問題第6章 Gitの便利な使い方
6.1 トラブルシューティング
6.2 便利なコマンドや知っておいた方がよいこと
6.3 まとめ
6.4 演習問題第7章 GitHubのアカウント作成と認証
7.1 認証とは
7.2 SSH公開鍵認証
7.3 多要素認証
7.4 まとめ
7.5 演習問題
コラム 天空の城のセキュリティ第8章 リモートリポジトリの操作
8.1 リモートリポジトリ
8.2 リモートリポジトリに関する操作
8.3 上流ブランチとリモート追跡ブランチ
8.4 その他の知っておいたほうがよいこと
8.5 まとめ
8.6 演習問題第9章 GitHub Pagesへのデプロイ
9.1 ウェブサーバとは
9.2 GitHub Pagesとは
9.3 GitHub Pagesの種類
9.4 公開ディレクトリとブランチ
9.5 まとめ
9.6 演習問題第10章 GitHubにおける多人数開発
10.1 課題管理システム
10.2 プルリクエスト
10.3 まとめ
10.4 演習問題
コラム データベース”ふっとばし”スペシャリスト第11章 Gitの中身
11.1 .gitの中身
11.2 Gitのオブジェクト
11.3 Gitの参照
11.4 インデックス
11.5 まとめ付録
1 Gitのインストール
2 Visual Studio Codeのインストール
3 コマンドラインの使い方
4 Vimの使い方
なお、本書は2024年4月と比較的最近出版されています。そのため、Git/GitHubの最新情報が得られるかと思います!
特徴
下記は本書の特徴となります。
大学の講義が基になっている
本書は、慶應義塾大学理工学部の講義をもとに構成されており、Gitの基礎からチーム開発に必要な知識とスキルまでを網羅しています。具体的には、なぜGitのようなバージョン管理システムが必要なのか?という背景から、過去に使われていたツールの歴史、Gitの仕組みや用語、さらにチームでの実践的な利用方法まで、幅広く学ぶことができます。まさに、大学で情報系の科目を学んでいるような疑似体験ができる一冊です!
演習で手を動かせる
本書は大学の講義を基にしているため、各章の最後には実際に自分で手を動かして学べる演習が用意されています。読むだけで理解したつもりになりがちですが、実際にGitを操作してみることで、より実践的なスキルを身につけることができます。演習の内容は各章で学んだことを実際に操作する形式なので、難易度も高くなく、初学者にも取り組みやすい構成となっています。
図表が豊富である
本書は全体を通して図表が豊富に使われており、言葉だけでは理解が難しいGitの概念も視覚的に把握することができます。特に、初心者がつまづきやすいマージの仕組みやコミットの流れなど、基本的な機能も図解で学べるため、直感的に理解しやすい構成となっています。また、書籍自体がそれほど分厚くなく、図表も多いため、比較的スムーズに読了できるでしょう。
学んだこと
自分が本書を読んで知らなかったことやちゃんと理解できていなかったことのメモです。
- HEADは「いま見ているブランチ」を指すラベルであり、detached HEADは「ブランチではなく直接コミットを指している状態」のこと
- マージにはFast-ForwardとNon Fast-Forwardの2種類がある。Fast-Forwardの場合、マージ元ブランチがどのコミットから分岐したかわからなくなるため注意。基本はこれまで通りNon Fast-Forwardマージで良さそう。
- gitコマンドのエイリアスの設定
→普段VSCode上での操作が多いのであまりコマンドを使わないが、いくつか設定してみる! - フィーチャーブランチの修正を取り込むには、mergeか、rebaseか、merge –squashか、merge –no-ffか、色々と種類がある。どれを利用するかはチームの規約を確認する。
- コミットメッセージを間違えたときには–amendで修正可能。
※git pushしたあとには行わない!
$ git commit --amend
- 作業するブランチが間違っていたらstashで変更を退避できる。退避後、ブランチを変えてからpopすることで退避した変更を新しいブランチに適用できる。
# 変更の退避
$ git stash
# 退避した修正のリストを表示
$ git stash
# 変更の適用
$ git stash pop
- いつ、誰によって修正されたかを確認するにはblameコマンドを実行する。
$ git blame
- いつバグが入ったのかを確認するにはbisectコマンドを実行する(二分探索モード)
$ git bisect start {問題のあるブランチやコミットハッシュ} {問題のないはずのブランチやコミットハッシュ}
# 後者にも問題がある場合
$ git bisect bad
# 後者には問題がない場合
$ git bisect good
- 現在、git checkoutとgit resetは非推奨(git version 2.23.0以降)。これまでcheckoutコマンドに色々と役割を負わせすぎていたため、現在はコマンドが細分化されている。
# 下記は同じ意味
$ git checkout feature
$ git switch feature
# 下記は同じ意味
$ git checkout test.txt
$ git restore test.txt
- git fetchはリモートリポジトリから更新分をローカルに持ってきてくれるが、ローカルのブランチの状態はそのまま。リモートの修正を取り込むにはgit mergeを行う。両者のコマンドを一度に行うのがgit pull。
- GitHub Pagesで静的ウェブサイトを公開できる。プロジェクト、ユーザ、Organizationの3種類がある。https://{username}.github.io/{project}/でプロジェクトのリポジトリごとに作成が可能。また、https://{username}.github.ioでユーザページを作成もできる。
- GitHubのissueはTodoリストとして利用するだけでなく、Gitのブランチとの紐づけも可能。
おわりに
今回は『ゼロから学ぶGit/GitHub 現代的なソフトウェア開発のために』を紹介しました。
X(旧Twitter)で「Gitは業務で学ぶもの」という投稿を見ました。確かにそれが理想的な学習方法かもしれませんが、自分のようにインフラ/クラウドを主に扱う業務では、Gitに触れる機会がそれほど多くはないです。
業務で最低限必要なことは業務を進めながら学ぎますが、さらにスキルアップを図るには、業務とは別に書籍などで体系的に学ぶことが大切だと考えています。
今後もこういった学習を通して、少しずつGit/GitHubと仲良くなっていきたいと思います!