ドラクエ風にGitをふんわり何となく解説する

##はじめに##
技術記事というよりは一つの読み物として書いてます。
「Git？なにそれ？美味しいの？」
みたいなレベルの方に、何となくGitってどういうものか分かってもらうことを主題に置いているので、きちんとした使い方や仕組みについては技術記事を読んでください。

それでは、どうぞ。

##第一章　旅立ち

それはルビーが16歳になるたんじょう日のことであった。

母「おはようルビー、もう朝ですよ。今日はとても大切な日、ルビーが王様に旅立ちの許しをいただく日だったでしょう。」

ルビー「おはよう、母さん。とうとうこの日がやってきたんだね・・・。ゾーマを倒すため、僕行ってくるよ！」

母「あらあら、何でこの時点でバラモスじゃなくてゾーマを知ってるのかはさておき、頼もしい子・・・。旅立つお前にこれを授けます。きっとあなたの支えになってくれますよ。」

ルビー「母さん・・・これは？」

母「この子は妖精ギット。旅のマスコット、ピカチュウみたいなものと思えば良いわ・・・。」

ルビー「この世界でその名前を出すのはまずいよ母さん！ゾーマより先に任天堂が世界を滅ぼしちゃうよ！」

ギット「おっす！おいらはギット！旅に出るっていうのはお前か？」

ルビー「そうだけど・・・」

ギット「旅に出るなら最初にやることがあるぞ！まずは**冒険の書**を作るんだ！」

```コマンド:command
cd [作業フォルダ]
git init
```

ギット「これで作業フォルダ上で行ったお前の冒険をセーブしたりロードしたりできるようになるぞ！」

ルビー「フォルダとかセーブとかやたらメタい妖精だな・・・」


##第二章　旅立ちは繰り返す

ルビー「大変だ！ギット！」

ギット「どうした？ルビー！」

ルビー「枕を持ってくるの忘れちゃったよ！」

ギット「・・・・」

ルビー「どうしよー！僕、枕が変わると寝られないんだよー！」

ギット「・・・・」

ルビー「でも母さんにも王様にも『必ずや世界を救ってみせます（キリッ』って言っちゃったし、格好悪くて今から帰るなんて出来ないよーー！！何とかしてよ、ギットえも」

ギット「おっとそこまでだ。だったらセーブしたところからやり直すしかないな・・・。家を出る時セーブはしただろ？」

ルビー「うん、ギットに言われたように**コミット**ってやつをやったよ？」

```コマンド:command
git add .
git commit 
```

ギット「ならOKだ。お前の冒険はコミットした時点での状態をセーブしてある。だったら、その状態まで戻ればまた家を出るところからやり直せる。次の呪文を唱えてみな？」

```コマンド:command
git restore [ドキュメント名]
```

王様「よくぞ来た！勇敢なるオルテガの息子よ！その父の後を継ぎ」

ルビー「あ、王様！ごめんなさい！家に忘れ物しちゃったんで、取ってきますね！言ってきまーす！」

王様「あぁ・・・ほぼ唯一の出番が・・・」

ルビー「ありがとうギット！これで僕の安眠は守られたよ！」

ギット「良かったな！他にもいろんな呪文があるから覚えておきな！」

```コマンド:command
// 前回のセーブデータから変わったところ（ファイル）を教えてくれる。
git status

// 前回のセーブデータから変わったところ（ファイルの中身）を教えてくれる。
git diff

// 現在のセーブの履歴を教えてくれる。
git log
```

##第三章　運命の分かれ道

ルビー「・・・くっ！まさかこの冒険にこんなトラップがあるとは・・・！これでは先に進めない！！」

ギット「大丈夫だルビー！きっとお前なら乗り越えられる！どんな罠なんだ？！」

ルビー「金髪幼馴染と青髪お嬢様の二人から求婚されているんだ・・・！」

ギット「へ？」

ルビー「無理だ！僕には選べない！でも選ばない先に進めない・・・！」

ギット「あのー」

ルビー「そうだ、もういっそ重婚が許されている国に行って、そこで３人仲良く」

ギット「・・・試してみればいいんじゃないか？」

ルビー「へ？」

ギット「パラレルワールドに行ってまずは一人と結婚してみる。それで違うなと思ったらもう一人と結婚してみる。それでどうだ？」

ルビー「いや、パラレルワールドなんて、そんなゲームじゃあるまいし」

ギット「それが出来るのがGitって呪文さ」

```コマンド:command
git switch -c [ブランチ名]
```

ギット「さ、ここがパラレルワールド、別名ブランチさ。ここで何をやったとしても現実には影響を及ぼさない。さっさとお姫様のところへ行ってきな」

ルビー「ありがとうギット！行ってくるよ！」

ギット「・・・これでフローラを選んだら人間じゃねぇ・・・」

〜３日後〜

ルビー「ギットえもーん！ダメだよー！僕にはどちらかなんて選べないよー！」

ギット「こうなる気はしてたぜ・・・」

ルビー「こうなったらやっぱりアラブの重婚が許されている国に行って、３人仲良く・・・」

ギット「待った！そんなことしなくても大丈夫！ビアンカと結婚したブランチのお前とフローラと結婚したブランチのお前を**マージ**すればいい」

ルビー「マージ？」

ギット「現実のお前とブランチのお前を一つにすることだ。『ビアンカと結婚した』ことと『フローラと結婚した』ことはどちらもの残るから事実上、重婚ができる。」

```コマンド:command
git merge [ブランチ名]
```

ギット「気分はどうだい？プレイボーイ。」

ルビー「あぁ・・・最高さ・・・。嫁たちのところへ行ってくる。」

ギット「世界のためとはいえ、本当に良かったのかなぁ・・・」


##第四章　魔王パラダイス

ルビーの攻撃
会心の一撃
ゾーマに１５０のダメージを与えた
ゾーマは倒れた

ルビー「やった！ゾーマを倒したよ！これで世界に平和が・・・！」

ギット「大変だルビー！」

ルビー「どうしたのギット？」

ギット「りゅうおうとシドーとデスピサロとエスタークとミルドラースが攻めてきたぜ！」

ルビー「えぇ！何その魔王のバーゲンセール！僕一人じゃ無理だよ！」

ギット「こうなったら、仲間の力を借りるしかないな・・・。**Github**を使おう」

ルビー「Github?何それ？！」

ギット「今までお前が使ってきたのがメモリーカードだとすると、Githubは複数人で使えるネット上の巨大なメモリーカードだ！お前以外の他の勇者にも協力してもらってバラバラに魔王を撃破してもらおう！」

ルビー「で、でも、みんなはまた旅立ちの日から始めるんでしょ？！間に合わないよ！」

ギット「大丈夫、お前の今までの冒険をgithubにあげて、みんなにはコピーしてそこから始めてもらえればいい！Gitの呪文だ！」

```コマンド:command
//github上で新規リポジトリ作成後
//冒険の記録をgithub上にあげる
git remote origin add [リポジトリのURL]
git push origin HEAD
```
ギット「上げ終わったら、みんなにコピーしてもらう！」

```コマンド:command
git clone
```

ギット「これでお前の仲間たちはお前が今までやってきた冒険から始めることが出来るようになったぞ。」

ルビー「それってなんかズルくない？」

ギット「世界のためだ!またお前の冒険が進んだら、pushすれば冒険の記録をgithubに残せるぞ！」

ルビー「あれ？なんかプッシュ出来ないよ？」

ギット「しまった！コンフリクトを起こしてるな！」

ルビー「コンフリクト・・・？あの甘くて硬いお菓子？」

ギット「それはコンペイトウだ！お前がプッシュしようとした冒険と他のやつがプッシュしようとした冒険とで対立する部分があるから、マージできないってことだ！」

ルビー「えぇ！どうしたらいいの？」

ギット「対立している部分を調べてどちらかに合わせたりするしかない・・。まずは対立している箇所を調べて・・・・、分かったぞ！」

ルビー「どこどこ？！」

ギット「お前はフローラにあぶない水着を装備させているが、向こうのやつはフローラにあみタイツを装備させているから、２つの世界線をマージしようとするとどちらを残せばいいのか分からなくてエラーになってるんだ！」

ルビー「そんなの水着に決まってるだろ！何だよ、あみタイツって！そんなマニアックなやつに世界が救えるかよ！」

ギット「いや、マニアックとかどうでもいいから、お前のフローラも水着じゃなくてあみタイツをだな・・・」

ルビー「嫌だよ！絶対！水着を脱がせるくらいなら世界なんてどうだっていいよ！」

ギット「ダメだこりゃ・・・」


##あとがき##

僕は一体何を書いているんだろうという気持ちでいっぱいなわけですが。

gitを学習していて「gitってゲームのセーブに似てるなぁ」と思ったのをきっかけに、初学者にも分かりやすくドラクエに例えて書けないかなと思って書いてみました。

git理解のきっかけの一助となれば幸いです。


##おまけ
commit：ゲーム的にはセーブ。セーブ履歴を辿ってロードすればセーブ時点の状態に戻すことが出来る。
restore：ゲーム的にはロード？リセットが近いかもしれない。最新のセーブ状態にまで戻すことが出来る。
ブランチ：ゲーム的には別のセーブデータ。本筋のセーブデータがあって、ブランチはサブデータみたいなイメージ。ゲームと違うのは本筋データと合体（merge)させることが出来る。
github：ゲーム的にはみんなでセーブできるメモリーカード。
clone：github上のデータをダウンロードする。
push：githubへセーブデータをアップロードする。