はじめに
日常的にgitを使うようになって、初めは概念が難しかったが最近ちょっと分かるようになってきた(気がする)ので雑記
脱git初心者のための考え方とかを書きます。
具体的なコマンドの説明とかは出てきません。
gitはギャルゲーだ
よく出る例えですね。
「例えばギャルゲー・エロゲーでルート分岐の前でセーブする。そんな感じ」
でもこの例えはbranchにのみ有効な気がしている。
「A子ちゃんとB子ちゃんどっち攻略するか、その分岐手前でセーブ」
この場合A子ちゃんとB子ちゃんはそれぞれがブランチ
A子ちゃん攻略してる途中でB子ちゃんを攻略しに行こうとすると色々な不都合が起きる。
- A子ちゃんが嫉妬(commitせずにbranchを変えると変更点は付いてくる)
- B子ちゃんとのことがバレる(conflict)
- B子ちゃんのところに行きたいときはちゃんとA子ちゃんに断ってからいく(commitしてからbranch移動)かバレないように行く(stash)
とまぁ、当てはめてみると割としっくりくる(私だけかもしれないが)
gitはロールプレイングゲームだ
私はギャルゲーで例えるよりもRPGで例えた方が分かりやすいのではないかと思う。
大事なボス戦前のセーブポイント
ここでしっかり準備を整えないと負けてしまうかもしれない
- 宿屋に泊まって回復したか?
- パーティーのメンバーはそれで正しいか?
- メンバーそれぞれの装備はそれでいいか?
- アイテムはそれで足りるか?
etc...
この項目1つ1つがgitのcommitだと思うと分かりやすい。
プログラムの大きな変更
細かくコミットしていかないと重大なバグを生んで取り返しのつかないことになってしまうかもしれない
- 変数名を統一したコミット
- メソッドの引数を増やす対応をしたコミット
- メソッドの中のロジックを変えるコミット
- 新しいメソッドを増やしたコミット
etc...
とまぁ、こんなイメージ
細かいまとまりのあるところでコミットしてあると、何か問題が起きた時に問題のない状態まで戻しやすい。
例えばメンバーの装備が間違っていた(メソッドのロジックが間違っていた)らその直前のセーブ(commit)まで戻ればいい。
あるプロジェクトに途中参加するということは、その途中まで進めたセーブデータの続きからプレイすることとほぼ一緒
前のプレイした人が作ったウルトラサイキョーキャラを使って別のボスを倒しに行ってもいいし(既存のメソッドや機能を流用して新機能実装)、ちょっと弱いキャラをレベル上げして使いやすく(既存のバグを含むメソッドのリファクタ)しても良い。
その際、どんな変更をしてもいいが前のプレイヤーに怒らたら困るのでしっかり戻せる状態にしておく、つまりセーブデータを分けておくことが大切なのである。
ちなみに1人で作っているサービスや、そこまで機能が大きくないプログラムに関してはわざわざgitで管理しなくても良いと思っている。
ソロプレイのゲームや雑魚戦ばかりの難易度の低いゲームでセーブデータを分岐させないのと同じ理由ですね。
おわりに
ふと思ったことをつらつらと書いたのでところどころ「何言ってんだこいつ?」と思うところがあるかとは思いますが、gitが少しでも身近なものになればと思います。