feature image

2022年12月14日 | ブログ記事

Git 講習会発展編を開いた話

アドベントカレンダー20日目です!今日の担当は Takeno_hito です。

クリスマスも近いということでアイコンもサンタ帽子を被っているものにしてみました🎅(クリスマス後にはアイコンを戻しちゃうので、普通の帽子を被ってたらごめんなさい)。

今回は Git 講習会の発展編を開きました、という話をします。また、講習会のテキストも公開します。

講習会開催までの経緯

現在 traP 内のチームでゲーム製作をしているのですが、チームメンバーが Git の使い方とかで少し苦戦しているのを見て「これは教える必要がありそうだ」と思って突貫で作りました。
今年の春に Git 講習会は実施していたのですが、コミット、プッシュ、ブランチ作成 程度の最低限の知識しか教えられていない事と、GitHub Desktop を使っていて rebase 等を習得できるような感じでもなかったので、ここは traP 全体で受けれる講習会を実施するべきだと考えました。

講習会の目標

まず講習会作成時に自分が立てていた目標は以下の3つです。

  1. 自分でコンフリクトの解消が正しくできるようになる
  2. PR を建てる時にやってほしい事・コミットの整理ができるようになる
  3. そのほか自分で行いたい操作を自分で調べられる・探せるようになる

更に、講習会を建てる最中にもう1つ目標が増えました。

  1. rebase cherry-pick コマンドで起きる操作を理解する

4つ目は、traP の先輩から「traQ のリリース作業で rebase, cherry-pick を使っているので扱ってほしい」という要望を受けて追加しています。

これらの4つを目標にして、教える事を組み立てました。

講習会で教えたこと

Git と GitHub と Gitea の違い

一応入れておきましたが、混同している人を見たことがある訳ではなかったのであんまりうまく違いを説明できた気がしないです。なので、章末に「どれがどの機能か」を当てるクイズを用意しました。

Git CLI

この講座の目標は rebase と cherry-pick を理解する事だったので、その為の Git CLI の使い方を説明しました。また、CLI については実際に使ってみないとわからないと考えたので、演習用のリポジトリを作成し、これをフォークしてもらう形で演習を行いました。詳細は次章で説明します。

vim

commit 時デフォルトのエディターという事もあって、最低限の vim の使い方を説明しました。

「Git を理解する」

rebase とか merge とか色々説明する前に、前期講習会の時点でGitは「差分を保管してる」くらいの説明しかしていなかったので、Git が実際どのような仕組みで動いているかという事をもう少し深くする必要があると判断して、Git についてもう少し深く説明しました。
具体的には、mermaid でブランチの図を提示しながら以下の事項を説明しました。

  1. コミットは前のコミットのハッシュと差分しかもってない事
  2. ブランチというが、実際ブランチが保持している情報は先頭のコミットだけだということ
  3. HEAD について
  4. ステージングについて
  5. コミット自体が消える事はほぼないという事

Git サブコマンド

本講習会では、以下のコマンドを解説しました。

まぁまぁ使うコマンドを全部教える事にしました。

こうやって並べてみると壮観ですね。 merge 以降のコマンドはほぼ全て図での説明を行いました。また、 rebase -i の演習を行いました。

これらの他に、git config についても紹介しました。また、いくつかおすすめの設定も挙げました。

ところで、checkout は無いのかという話なのですが、これは2年ほど前にcheckout の機能を分割した switch restore サブコマンドが登場したので扱わない事にしました。まだ使ってるなら移行しましょう。…と言いたいですが僕も未だに checkout 使ってるしあんまり言えないです。早く卒業しなきゃなぁ…。

merge のコンフリクト解消

rebase でもコンフリクトは起きますが、prを建てるときに発生するコンフリクトは merge で解消するが多い(と勝手に思っている)ので、merge 時に発生したコンフリクトの解消方法を説明しました。ここでも、演習できるようにしました。

Git 運用について

サブコマンドについて一通り解説したあとは、Git を使う上での注意点や、覚えておいた方が良い事を解説しました。

話すか迷って話さなかったこと

以下の事項は扱うか悩みましたが、今回は扱いませんでした。

これらは、共通して"プロジェクトのリーダーが行う事"だと判断したために、割愛しました。1つ1つが軽ければ良いのですが、中には重いトピックもありますし…。

これは traP 内で「講習会で扱ってほしいこと」のアンケートの回答にあったものです。多分OSSの貢献の事を指しているのかと思ったのですが、申し訳ないけど自分にはよくわかりませんでした。大体 readme とかにやり方が書いてあってそれに従えば良い、くらいの事しかわからないです。

テキスト作成時に気をつけたこと

一番気をつけていたのは、できる事を知って、そして覚えられなくても後で見返しやすいものにすること です。

このテキストの存在だけは覚えておいて、「そういや講習会で Git にこんな操作あったよな」ってときにテキストを引っ張り出して思い出す、のような逆引き辞典みたいなものを作ろうとしていました。

演習について

演習についてですが、色々考えたのですが全員がすぐに実行できて勉強もしやすいというプログラミング言語を用意するのは結構面倒くさかったので、Markdown ファイルをいじって体感してもらう事にしました。
いじる Markdown もそんなに思いつかなかったので、traP の規約(公開されてます)をひっぱてきて好き勝手改造して遊ぶリポジトリを用意しました。せっかくなので結構ネタを仕込んだのですが、自分で仕込んだのにネタを拾いきれなかったです。

講習会用に用意したリポジトリ(のミラー):https://github.com/Takeno-hito/git-lecture-advanced

仕込んだ変更点:

反省点

実施してからしばらく経ってしまったのであまり覚えてないのですが、一番の反省点は講習会の告知が甘かった事だと思います。しっかり講習会の告知が出来てなかったので、人が集まらずほぼオンデマンド講習会になってしまいました。

講習会のテキスト自体は結構練れてたかなと思っています。ここの反省点はあまりないです。

講習会当日は、まぁまぁテンポ良く進められたかなと思っています。
ただ、講習会内で最初の「Git,GitHub,Giteaの違い」を説明だけは、やり方を全く考えてなかったのでかなり説明に詰まりました。誰も集まらなくてテンパってたのもちょっとあります。
ちょっとカンペを用意した方がよかったかも……。

テキスト公開

Git 講習会のテキスト自体はかなり良く纏まっているので、折角の機会ですし公開しようと思います。録画は公開しないですが、テキストだけでも十分学習できるようになっています。(録画を見たい traP 部員は、wiki から後期講習会のページを確認してください。)

https://md.trap.jp/yWiEe1JrQ0adcpcExl34QQ?both

最後に

他にも話したりテキストとして残したい事は色々あるので、(先輩と内容がかぶらなければ!)来年の春の講習会でなにか建てられたら良いなと思っています。それと、この記事を見ててGitを使いこなせてない、って方はぜひテキストを見ながら勉強して頂けると嬉しいです!!!

明日の担当者は @mera さんです!

Takeno_hito icon
この記事を書いた人
Takeno_hito

22B 「たけ」 基本的にゲームばっかりやってる怠け者です。SysAd班とゲーム制作が主

この記事をシェア

このエントリーをはてなブックマークに追加
共有

関連する記事

2022年11月27日
Chromebook&VSCode Server(プレビューアクセスなし)で開発環境を作る
oribe icon oribe
2022年8月30日
【競プロer向け】母関数を習得しよう!
tatyam icon tatyam
2024年10月29日
2024 年度 Web エンジニアになろう講習会を開催しました!
Pugma icon Pugma
2023年8月22日
2023年度Webエンジニアになろう講習会 講師ブログ
ikura-hamu icon ikura-hamu
2023年5月5日
部内SNSのVimクライアントもどきを作ってVim†完全に理解した†話
kamecha icon kamecha
2022年12月19日
2020春ハッカソン参加記 4班『外郎集め』【AdC 2022 25日目】
kashiwade icon kashiwade
記事一覧 タグ一覧 Google アナリティクスについて 特定商取引法に基づく表記