# きっかけ

この本はGitの実践的な使い方を解説する本です。

プログラマとして働き出して10年、多くのプログラマたちと一緒に働いてきましたが、 **効率よくGitを使えてない人がたくさんいる**という事実に気づきました。 それは、送られてくるプルリクエストを見るとわかります。 おそらく、自分でいくつか基本的なコマンドだけ覚えて、その範囲内だけで済ませてしまっているのでしょう。 チーム内での世界観の統一もできていないと思います。

さらに、今年の夏にインターンの学生たちの対応をしたところ、 彼らはコードのことはよく理解しているものの、 **Gitのことを全く分かってない**ということがはっきりしました。 学生なので、そういう機会に恵まれないのは仕方ないことですが、 彼らを戦力にするにはGitの使い方をきちんと教えなければなりません。

この2つの事例をみるに、必要なのは**新卒研修レベルでのGitの研修**であり、 そのためのテキストであり、Gitの使い方の**フレームワーク**です。

[アンケートを取ってみても](https://friends.nico/@masarakki/99029193793209339)、 Gitが簡単と答えた人は一人もいませんでした。 実際、Gitは概念が複雑で、コマンドも多く、一見難しそうに思えるでしょう。 しかし、本当に必要なコマンドは本当にごくわずかで、難しさは**運用で回避**できます。

プログラミングの世界では、**Ruby on Rails**のようなフレームワークとよばれるソフトウェアがあります。 フレームワークは、アプリケーションに必要な多くの処理を共通化し、プログラミングに一定の制約を与えます。 とくにRailsは、**CoC** (Convention over Configuration: 設定より規約)という思想により、強い制約を課すことで面倒な設定や無駄な思考を極力排除しています。 このことで、プログラマは**実現したい機能の本質的な部分に集中**することができ、 経営者目線では**開発効率や教育効率を圧倒的に高める**ことができます。

これをGitの世界にも持ち込み、本質的な開発に集中でき教育効率も高い**Gitのフレームワーク**を作ろう、というのが本書の目標です。 フレームワークを作るからには、**思想や戦略**が重要になります。 まず思想は、**Gitリポジトリはどうあるべきか**、という世界観に帰結します。 そして戦略は、その世界観を実現するために、**どのような操作をするか**、という選択を決めます。
