こんにちは、チンパンジー配属の永田です。
みなさんは「自分って、チンパンジーなんだ」と思ったことがありますか?
僕はあります。
新卒1年目のころ、「サルでもわかるgit」を読みました。
わかりませんでした。
「サルでもわかるgit」がわからないということは、サル以下ということになります。
すみません、見栄を張ってチンパンジーと偽っていましたが、実際はサル以下です。
当時は、自分がサル以下ということが受け入れられませんでした。
だから、数年前の自分を救うべく、今ここに「サル”以下”でもわかるgit」を記したいと思います。
ざっくり言うと
グループで何かを作るとき、「誰がいつ何を変えたか」を全部記録してくれる仕組みです。
間違えても前の状態に戻せるし、メンバーが別々に作業しても後からきれいに合体できます。
例えば: 実際のグループ授業で起きがちなこと
グループで協力し、一つのレポートを書いて提出すると想定してください。
よくある悲劇
田中「レポート最新版送るわ」
鈴木「え、俺も今書いてたんだけど」
山田「あれ、俺が昨日書いた部分消えてない?」
田中「ごめん、古いファイルに上書きしたかも…」
全員「どれが本当の最新版??」
「最新版.docx」「最新版(2).docx」「これが本当の最新.docx」が乱立している
こうなってたら良かった
- レポートは一箇所で管理されてて、全員がそこにアクセスする
- 編集するときはオリジナルを編集せず、それぞれ自分用のコピーを作ってから作業する
- 作業が終わったら「これでOK?」とみんなに確認してから合体
- もし何かミスっても、「昨日の状態に戻して」が一発でできる
- 誰かが編集したら「田中が第2章を追加しました」と記録が残る
レポートでさえこの混乱なのに、プログラミングの仕事ではこれを何十人で、何万行のコードでやります。
毎日何十回も更新があって、しかも一文字間違えるだけでシステムが動かなくなるかもしれない。 だから「誰がいつ何を変えたか」を完璧に記録する仕組みが必須です。
これを実現するのがGit/GitHubです。
用語の説明
各用語の意味はざっくりこんな感じです。
| 用語 | 意味 |
|---|---|
| リポジトリ | 共有フォルダ。レポート本体や資料が全部入ってる場所 |
| クローン | 共有フォルダを自分のパソコンにダウンロードすること |
| ブランチ | 自分用のコピーを作って別々に作業する仕組み |
| コミット | 「ここまでやった」という保存記録。メモ付きで残せる |
| プッシュ | 自分の作業を共有フォルダにアップすること |
| プルリクエスト | 「これで合ってる?」と確認してから合体をお願いすること |
| マージ | 別々に作業した内容を一つに合体させること |
| プル | 最新版を自分のパソコンに取り込むこと |
| コンフリクト | 同じ場所を別々に編集しちゃって、どっちを採用するか決める必要がある状態 |
さっきの例を用語で言い換えると
理想の流れ
- 共有フォルダで原本レポートを一箇所で管理する
- 各メンバーが原本をダウンロード=手元にコピーを持つ
- 田中は念のため、その原本コピーをさらにコピー。「第2章作業用」という名前に変更し、編集を始める
- 作業が終わったらどこを誰が何のために編集したか、記録を残す
- 共有フォルダにアップする
- リーダーに「確認お願いします」と申請する
- OKが出たら本体に合体
- 他のメンバーは最新版をダウンロードしなおして、元の原本コピーに上書きする
- もし同じ場所を編集してしまっていたら、どっちを採用するか決める
用語で言い換えると
- リポジトリで原本レポートを一箇所で管理する
- 各メンバーがクローンして手元にコピーを持つ
- 田中は「第2章作業」というブランチを新たに切って作業をはじめる
- 作業が終わったらコミットして記録を残す
- プッシュして共有フォルダにアップする
- プルリクエストでリーダーに確認をお願いする
- OKが出たらマージして本体に合体
- 他のメンバーはプルして最新版を取り込む
- もし同じ場所を編集してたらコンフリクトを解決する
gitとgithub
ややこしいのでここまでは一緒くたにしていましたが、gitとgithubは厳密には違います。
Gitは自分のパソコンで動く「ファイルの変更履歴を記録するツール」です。
編集記録はもちろん、元の状態に戻したり、コピーを作って作業をはじめたりができます。
GitHubはその記録をネット上に保存して、みんなで共有できる「Webサービス」です。
原本と、その変更履歴を保存しているほか、みんながどういう変更を加えたか?とか、オリジナルへの合体の申請とかができます。
まとめ
Gitは、変更履歴を記録してくれる仕組み。自分のパソコンで動く。
GitHubは、それをネット上で共有できるサービス。みんなでアクセスできる。
要するに「誰が何を変えたか全部わかる」「前の状態に戻せる」「別々に作業しても大丈夫」という、グループ作業の悲劇を防ぐ道具です。
ちなみに「GoogleドキュメントやNotionと何が違う?」と思うかもしれませんが、それらは同時編集、Gitは「各自で作業して完成したら合体」という点で違います。
作りかけの状態で他の人を巻き込まないために、プログラミングではこっちが使われています。
以上、かなりざっくりとしたgit/githubの説明でした。
あとがき
僕が学んでいた当時に一番つまづいたのは、話のピンとこなさと用語の多さでした。
もう本当に、「アプリ開発の現場では、オフチョベットしたテフをマブガッドしてリットしています。」くらいわけがわかりませんでした。
なので今回は、大学生であればイメージしやすいグループ課題を具体例として、gitでやったらこんな感じ、を書いてみました。
このイメージがあった上でもう少し詳しくgitを学ぶと、わかりやすいんじゃないかと思います。

