バイブコーディングのためのGit入門:まず覚える5つの操作とコンフリクト
安野貴博の自由研究「バイブコーディング超入門」第5回で、安野貴博はGitとGitHubを取り上げた。安野はこのテーマを「かなりの難関」と認めている。それでも、ここを越えればバイブコーディングでできることの幅が広がるので、ぜひ押さえてほしいと語る。講義では、本来20個ほどある操作を5つまで絞り込み、「Claude CodeやCodexのようなAIの支援があれば、ここまで削ってもGitを使いこなせるのではないか」という立場から説明を進めた。
なぜGitとGitHubが必要なのか
安野は、バイブコーディングをしていると次のような場面が出てくると話す。
- 今まで動いていた機能が壊れたので、元に戻したい
- 自分が作った機能を他の人と共有し、2人やチームで開発したい
- 作ったものを全世界に公開したい
これらはどれも、GitとGitHubを使えるようになれば実現できる。安野はこの技術を、いろいろなことの「コア」になっているものと位置づけ、これができるだけでできることがかなり広がると説明した。講義の図解は、話したい内容をChatGPTに入れて作ってもらった画像だという。
GitとGitHubの違い
安野の説明では、Gitはローカル、つまり自分のパソコン上で編集の履歴を管理する機能である。これはバージョン管理機能とも呼ばれるが、安野は要するに「セーブポイント」だと言い換える。今の状態を保存しておくのがGitの役割だ。
一方のGitHubは、Gitで作ったものをクラウド上で共有したり、公開したり、やり取りしたりする場所である。バージョン管理だけならGitだけでもできる。ただ業界標準としては、ソフトウェアエンジニアはGitのセーブポイントをGitHubに次々とアップロードし、それを通じてみんなでデータを共有している。
両方を使うと、次の一連の流れが可能になる。手元のパソコンで作業して保存し、それをGitHubに上げる。さらに、クラウド上のソースコードを別のサーバーに移してWeb上に公開する。
20個から5つへ絞った操作
安野によると、Gitの操作は本来20個くらいある。今回は「超入門講座」として削れるところを全部削り、それでも覚えてほしい5つだけを残した。本人も、世の中のGit講座の中で一番削ぎ落としているくらいだと言う。詳しい人が見れば「あの機能はどうした」「あれも必要だろう」という意見が色々あるはずだと認めている。そのうえで、AIの支援があればこの5つで足りるだろうという見立てを示した。
5つとは、ブランチ、コミット、プッシュ、プルリクエスト、プルである。
ブランチ:履歴を枝分かれさせる
安野はまずゲームのたとえを使う。ゲームでは、ボス戦の手前のようにいいところまで進んだらセーブしておき、負けたらそのセーブポイントに戻って再挑戦する。開発でも同じように、新しい機能を実装する前に今の状態をセーブしておけば、いつでもそこに戻れる。
講義の図では、時間は左から右へ流れ、線上の小さな丸がセーブポイントを表す。ゲームのセーブと違うのは、Gitでは歴史を枝分かれさせられる点だ。分かれ道で「右に行った場合」と「左に行った場合」を別々のルートとして進められる。この枝分かれを行う操作がブランチである。
ブランチした先での作業は、元のセーブポイントの状態に影響しない。安野によると、枝分かれしても元に戻せないわけではない。分岐先でいい機能ができれば、それを元の歴史に取り込める。枝分かれして試し、うまくいったものを正しい歴史として採用する、という使い方ができるわけだ。
コミット:セーブポイントを刻む
2つ目のコミットは、図の小さな丸を作ること、つまり今の状態をセーブポイントとして刻むことである。安野の説明する基本の進め方はこうだ。ブランチを切り、編集していい感じになったらコミットする。また編集して、いい感じになったらまたコミットする。こまめにコミットしてセーブポイントを作りながら前に進むのが、Gitでの作業になる。
プッシュ:手元の作業をクラウドへ送る
3つ目のプッシュは、手元のパソコンで作業したものをGitHubのクラウド上に送信する操作である。これで手元の作業をGitHubにアップロードできる。安野は「押し込む」という語の意味にも触れている。
プルリクエスト:メインの歴史への取り込みを依頼する
図の黒い線には「main」と書かれている。これはメインブランチ、名前の通りメインの歴史だ。手元で枝分かれして「こういう作業をした」「こういう機能を作った」という内容をGitHubにプッシュする。そして、それをメインの歴史に入れてほしいと依頼する。これがプルリクエストである。「プルリク」や「PR」とも呼ばれる。プルリクエストはGitHub上で内容を見たり、レビューしたりできる。
プル:最新の状態を手元に引っ張ってくる
ここまでの1〜4で、分岐を作り、セーブし、クラウドにアップロードし、メインの歴史に入れ込むことができた。次に、クラウド上で更新された新しい歴史を自分のパソコンに持ってきたい。そのときに使うのが5つ目のプル、つまり「引っ張る」操作である。
安野は、プルは複数人で開発しているときに特に大事だと説明し、例を挙げた。安野が自分のブランチ(仮に「安野」ブランチ)を作り、別の人が「山田」ブランチを作ってそれぞれ作業する。安野は自分のブランチをプッシュし、「安野の機能を作ったから入れてくれ」とプルリクエストを送る。山田さんも同じように「山田機能」のプルリクエストを送る。
両方が採用され、マージされたとする。このとき、安野の手元とクラウド上の正しい歴史には差がある。手元には自分で開発した安野の機能は入っているが、山田機能は入っていない。山田機能は山田さんのパソコンと、山田さんがプッシュしたGitHub上にしかない。だから自分の手元に山田機能を持ってくるには、プルが必要になる。
安野は全体を次のようにまとめる。クラウドへのプッシュとクラウドからのプルが対になっている。そのうえで、ブランチを切り、コミットでセーブポイントを打ち、プルリクエストを出すという一連の流れがある。
もう1つの重要概念:コンフリクト
5操作に加えて、安野は「コンフリクト(衝突)」を重要な概念として挙げた。
例として、ホームページ制作を考える。安野がブランチを切り、テーマカラーを赤にする作業をしてコミットし、プッシュしてプルリクエストを送る。その間に山田さんは「テーマカラーは青にしよう」と、青にする変更をプッシュする。すると、同じテーマカラーの項目に「赤」と書かれたブランチと「青」と書かれたブランチができ、2つが衝突する。
この状態では、プルリクエストを単純に採用することはできない。安野によると、Gitは「ここは衝突しているので、どうするか結論を出してください」とユーザーにしっかり伝えてくる。人間がそれを受けて、たとえば「青にしよう」と決めて解決する、という流れになる。
実演:ファイルを作ってコミットする
安野は、ここまでの説明だけでは「何のこっちゃよくわからん」というのが正直なところだろうと述べた。そこで、ブランチを切り、コミットし、プッシュし、プルリクエストを送り、プルしてくるという1〜5の流れを実際にやってみると予告し、AIへの指示による実演に移った。
字幕で確認できる実演は次の部分までである。まず、テキストファイルを作り「最初のセーブポイントを作るよ、コミットをするよ」と書くよう指示した。AIからはファイルを作成したという返答と、その内容が表示された。次に現在のブランチの状況を尋ねると、mainブランチにいるという答えが返ってきた。これまでのコミットを見せるよう頼むと、入っているコミットは2つで、無事作成されていることが示された。
字幕に残っている実演はここで終わっている。プッシュ、プルリクエスト、プルの手順が実際にどう進んだかは、字幕からは確認できない。
GitとGitHubについて話したいと思います。これができるだけでかなりできることが広がる技術になっております。バイブコーディングのためのGit入門という形で、まず覚える5操作って書いてあります。
超入門講座としての5つだけはちょっと覚えていて欲しいなというものをまとめました。で、今この図を見ていくと分かるんですが、左から右に時間が動いていきます。で、そこにちっちゃい丸が色々あると思うんですけど、どうもこんにちは。安野貴博です。
本日はバイブコーディング超入門の第5回目ということで、GitとGitHubについてお話ししたいと思います。このGitとGitHubは、正直ですね、かなりの難関です。難しいかもしれないですが、ここを超えるとですね、かなりそのバイブコーディングでやってることの幅も広げられるものなので、是非このちょっと難しいかもしれないけど、Gitを押さえていただけるといいと思います。
で、このGitとGitHubって何なのということなんですけど、バイブコーディングしているとなんかちょっと今まで動いてた機能が壊れちゃったとか、元に戻したいとかですね。あとはその自分が作った機能を他の人と一緒に共有しながら2人でバイブコーディングしたいってチーム戦をしたい時があると思います。チームで開発したいということ。さらにですね、その作ったものを全世界に公開したいということもあると思うんですけど、これもですね、GitとGitHubをしっかり使うことができるとできるようになります。いろんなことのコアになってると言いますか、結構これができるだけでかなりできることが広がる技術になっております。
で、今映しているのがこちら、バイブコーディングのためのGit入門という形で、ちょっとChatGPTに話したいことを入れて作ってもらった画像なんですけれども、まずですね、GitとGitHubは何かということを話していきたいと思います。
こちらのGitとGitHubの違いっていうことなんですけれども、まずGitっていうのは何かと言うと、ローカルで、ローカルっていうのは自分の持ってるパソコンですね。自分の持ってるパソコン上で編集の履歴を管理する機能、これバージョン管理機能って言ったりしますけれども、要するにセーブポイントですよ。セーブをする、今の状態を保存しておくのがGitの機能になっています。で、GitHubっていうのはこのGitで作ってるものをクラウド上で共有したり公開したりコミュニケーションしたりする場所になってます。なので、Gitだけでもバージョン管理はできるんですけれども、業界標準としてですね、ソフトウェアエンジニアの人はGitHubというサイトの上にこのGitのセーブポイントをどんどんどんどんアップロードしていって、それでですね、みんなでいろんなデータを共有しているという、そういう感じになってます。で、このですね、GitとGitHubを両方とも使うと、手元でパソコンで操作したものを保存してGitHubや、クラウド上に上げて、で、そのクラウド上にあるソースコードを他のサーバーに移して、Web上で公開するみたいなこの一連の流れができるようになります。
で、2つ目、このですね、まず覚える5操作って書いてあります。本当はですね、20個くらいあるんですけれども、これをちょっとバイブコーディング超入門なんで、超入門講座として削れるところ全部削っていった上で、でもこの5つだけはちょっと覚えておいて欲しいなというものをまとめました。これね、世の中のGit講座の中でもう1番削ぎ落としてるくらい削ぎ落としているんですけれども、なので詳しい方が見たら、あの機能はどうした?あれも必要だろうって色々あると思うんですが、多分ここまで削ぎ落としてもClaude CodeとかCodexのAIの支援があったらGitを使いこなせるんじゃないかなと思います。
で、今ですね、この右側の図のところに5つコマンドというものが書いてあります。コマンドというのは、1つの機能ですね。ブランチ、コミット、プッシュ、プルリクエスト、プル、この5つの概念を是非覚えていただければなと思います。順番に説明していきます。
まず1つ目、ブランチっていうのは履歴を枝分かれさせるという機能です。いきなり難しいこと言ってますが、例えばゲームではいいところまでプレイできたらそこでセーブをしておいて、例えばボス戦の手前とかでセーブしておいて、で、ボス戦で負けたらまたセーブポイントに戻ってもう1回チャレンジするみたいなことがありますよね。で、実はこのですね、ゲームみたいな感じで、ボス戦の手前には、新しい機能を実装する前に今の状態をセーブしておいて、いつでもそこに戻れるようにしようっていう、そういうことをしたりします。ということでGitなんですけれども、これゲームと同じようにあるところまでうまくいったらそこでセーブをしておいて、で、その先うまくいかなかった時にそこのセーブポイントにすぐ戻れるようにしようっていう、そういう感じになってます。
で、今この図を見ていただくと分かるんですが、左から右に時間が動いていってます。で、その時にこのちっちゃい丸が色々あると思うんですけど、これがある種セーブポイントみたいな感じですね。で、ゲームのセーブポイントでも似てるかもしれないんですけど、このセーブポイント、普通のソフトウェアと違ってGitを使うといろんな歴史に枝分かれをすることができます。なのであるところまで行ってセーブして、で、ゲームだったらここで右に行くか左に行くかみたいなとこで枝分かれがあったとしても、左に行った時にはこうするっていうものと右に行った時にはこうするっていうものを分けることができます。
で、このですね、枝分かれさせるっていう行動をするのがブランチということです。履歴を枝分かれして別ルートで作業をしましょうと。で、ブランチをして枝分かれした先での作業っていうのは、もう手元ですでにセーブポイントがあって、そのセーブポイントの状態には影響しないようになってます。枝分かれしちゃってですね、じゃあ元に戻せないかというと、元に戻すことができて、枝分かれした先で色々作業をしていった結果、いい機能ができたじゃないかということになったら、元の歴史のところにそれを戻してくることができますので、枝分かれしてうまくいったらその歴史を正しい歴史として採用するみたいな、そういうことができるわけですね。この枝分かれっていうのがこのブランチというコマンドになります。
で、2つ目に書いてあるのがコミットというもので、これはですね、このちっちゃい丸を作ることですね。今の状態を、セーブポイントをどんどんどんどん刻んでいこうというのがコミットになります。なのでブランチを切った上で、ブランチを切るって言って、ブランチを切った上で編集をしていい感じになったらここでセーブしよう。コミットする。で、また編集していい感じになったらコミットする。こういう風にこまめにコミットをしてセーブポイントを作りながら前に進んでいくっていうのが、Gitでの作業になります。
で、その次にこの3つ目に書いてあるのがプッシュです。プッシュっていうのは手元でパソコン上で作業しているものをGitHubのクラウド上に送信するっていうことです。これによって手元でやった作業っていうのをGitHubにアップロードすることができます。プッシュ、押し込むということですね。
で、その次に4つ目がですね、プルリクエストというものがあります。実はこのですね、黒い線、メインって書いてあるんですけど、これメインブランチと呼ばれる、その名の通りメインの歴史なんですよね。で、このメインの歴史に、新しく自分の手元で枝分かれして、こういう作業したよ、こういう機能作ったよというのをGitHub上にプッシュして、そしてそれをですね、そのメインの歴史に入れてくれっていうのをリクエストするのがプルリクエストというものになっております。よくプルリクって呼んだりするんですけど、あとPRって呼んだりしますが、これがですね、プルリクエストというものになっています。で、このプルリクエストっていうのはGitHub上で見ることができたり、レビューすることができたり、そういうことができます。
で、最後5つ目がプルと呼ばれるもので、1から4までやったことで新しく分岐を作ってセーブして、それをクラウドにアップロードして、メインのその正しい歴史、1番今メインの作業をしている歴史に入れ込むことができました。で、このクラウド上でそこまで入れ込んだ新しい歴史をまた手元に持ってきたいですよね。また自分のパソコンに持っていきたい。そういう時にはプルをすることによって、引っ張ってくることによってですね。プルって引っ張るってことですけれども、そうすること、プルすることによって自分の手元に最新のメインの状態を持ってくることができます。
これ複数人で開発してる時とか特に大事なんですが、自分はもうブランチを作って、別の人はブランチ、例えば山田とかを作ってですね。で、それぞれで作業をしていって、ブランチ安野をプッシュしてプルリクエストを送って、ブランチ安野で安野の機能作ったから入れてくれっていうことをリクエストします。で、例えば山田さんがまた同じように山田機能作ったからこれメインの中に入れてくれっていうのをリクエストします。で、両方が実際に採用されて、マージって言うんですけど、プルリクエストがマージされた時に、自分の手元にあるのとクラウド上の正しい歴史にあるものってちょっと違うんですよね。つまり手元には安野の機能は入ってるんですよ、手元のパソコンには。だって自分が開発してるからなんですけど、山田機能は入ってないわけですよね。で、山田機能は別のノートパソコンに入ってる。あるいはGitHubには山田さんがプッシュしたものが入ってる。なので自分の手元に山田機能を持ってくる時にはプルしてこないといけないんですよという感じです。
なのでクラウドにプッシュしたりクラウドからプルしてきたりするっていうプッシュとプルの関係があり、あとはブランチを切る、セーブポイントを打つのがコミット、そしてプルリクエストを出すっていう、そういうこの一連の流れがあります。
で、あともう1つだけ重要な概念がありまして、コンフリクトと呼ばれるものです。衝突ですね。コンフリクトってどういう意味かと言うと、衝突って意味なんですけれども、これどういうことかと言うと、例えばホームページを作っていた時に、安野がホームページのテーマカラーを赤にしようって言って、安野のブランチを切って、ホームページのテーマカラーを赤くする作業をしてコミットしてプッシュしてプルリクエストを送ったとしますと。で、その間に山田さんが、いや、テーマカラー青にしようとして、テーマカラーを青にする作業をして、そしてそれをプッシュしたとします。で、この時にこの2つが衝突するんですよね。テーマカラーの項目が赤って書いてある安野ブランチと青って書いてある山田ブランチがあるわけです。で、この時にはコンフリクトっていう状態になって、どっちを採用しますかっていうのを人間が決めないといけないわけですね。で、その時に、ただ単純にプルリクエストを採用することはできませんと、コンフリクト状態なので、ちゃんとここについてどういう風にするか結論出してくださいねっていうのをGitはしっかりとユーザーに言ってくるんですね。言ってきたら、あ、ここは衝突しちゃったので、じゃあ赤にするか青にするか決めて、じゃあ青にしようって言ってするみたいな、そんな感じになってます。
はい。ということで、ここまで話してきましたが、何のこっちゃよくわからんっていうのが正直なとこだと思うんで、ちょっと実際にこの1、2、3、4、5、ブランチ切ってコミットしてプッシュしてプルリクエスト送ってプルしてくるっていうこの一連の流れをやってみたいと思います。
テキストファイルを作ってください。「最初のセーブポイントを作るよ、コミットをするよ」と書いてください。作成しましたと。内容は以下の通りです、ということが出てきました。今のブランチの状況どうなってるのかを聞いてみましょう。ブランチmainにいます。今までに入れたコミットがどんな感じか見せて。出てきた。今までに入れたコミットはこの2つです。無事作成されたということです。これ見てみましょう。
本日はGitHub講座でした。面白いなと思った方はチャンネル登録と高評価を是非よろしくお願いします。では。
記事公開
