Git入門:Git初学習者のための効率的な学習方法を考えてみた
本記事は,Git Advent Calendar 2014の13日目に投稿させて頂いた記事です.Gitの使い方がわからない人向けの記事です。
モチベーション
自分を成長させながらいかに効率的に技術を伝承するかが自分の中で課題になっており模索中なこの頃.試しに,社内でGitを使ったことのないエンジニアに1週間(合計7時間)で開発に必要なGitの知識を講義したので,その時に使用した教材や効率的な学習方法を初心者向けに共有する.
背景
一昔前はイケてるエンジニアはGitを使ってプログラムを管理してるみたいな感じだったが,今となってはGitはエンジニアにとって必要不可欠なツールになった.Gitがあるからコードの2重管理はなくなり,Gitがあるから継続的インテグレーションや継続的デリバリーが活きる,Gitがあるから変更に対してコメントを残せる.Gitが無いと開発が成り立たなくなって来ているのだ.特に,Githubのヒット以降,その流れは加速している.一方で,Gitを当たり前のように使いこなしている人がいる中で,そもそも使ったことがなかったり,SVNを使っていたためGitに乗り換えあぐねている技術者もいるだろう.僕の周りもそういう人が多く,チームの半分以上がGit未経験者だった.幸い彼らは学習意欲が高く,一週間お昼の時間に使い方を教えただけでGitの概念を理解し開発に足る知識を身に付けた.少しの時間を割くだけでチームの開発力は飛躍的に向上したと思う.せっかくなので,その時に考えた負担をかけずに効率的に勉強できる方法とそれをサポートする教材をGit初学習者に届けたいと思う.
効率的なGitの学習ステップ
習うより慣れろ!開発の現場に叩き込んでGitを使わせたほうが良い.エンジニアたるもの教わるのではなく,自分で学べという人もいるだろう.僕もその意見には概ね同意だが,経験や教え方次第でその後の勉強効率やチームの生産性がガラッと変わるものに関しては経験者が教える価値はあると考えている.Gitはまさにその類のツールで少しのポイントと少しのコマンドを覚えるだけですぐに使えるようになる(簡単だから世の中で普及しているのだ).今回お届けする学習方法は以下の通りだ.
- ステップ1:Gitの概念がわかる資料を読む
- ステップ2:Gitの簡単な使い方を説明した資料を読む
- ステップ3:Gitの操作パターンを学べる問題集を解く
- ステップ4:Gitを使った実践的な開発をする
何の変哲もない当たり前のことを書かせてもらった.当たり前だからかどのように勉強するべきかを言及している書籍やサイトは少ない.それらの多くはコマンドの使い方や概念を説明するのに徹しており,網羅性は高い.しかし,初学習者にそこまで教える必要があるのか?というくらい基礎から応用まで膨大な情報が書かれている.また,まとめサイトなどが散見されるがそもそも初学習者はまとめサイトに挙げられているどのサイトを読めばいいのかがわからない.途中で躓かないように,それぞれのステップで必要な情報をだけ与えるのが効率の良い学習方法だと思う.
じゃあ,何を使って勉強すればいいのか?
勉強方法は人それぞれ好みがあるので好みから外れてしまった場合は申し訳ないが,Git初心者に対してどのような書籍やドキュメントを読めばよいか各ステップでピックアップさせて頂いた.勉強教材を探す時間も惜しいので,初学習者は何も考えずに以下で推薦する資料を使って勉強して欲しい.(サイトや書籍内にあるリンクも無視して黙々とピックアップした資料を読むのがオススメ.また,提示した順番に読んで頂いた方が学習効果は高い.)
学習に必要な時間:平均15時間
本記事で提案する学習ステップをこなすに必要な学習時間は,10時間〜20時間だと見積もっている.バラつきがあるのは理解力の違いとステップ3.5をこなすかを加味した結果だ.これを少ないと見るか多いと見るかは個々人で判断して頂きたい.
ステップ1:Gitの概念がわかる資料を読む(所要時間:1hour)
はじめのステップはまずGitがなぜ流行っているのか,どれだけ便利なのか,その破壊力を感じ取れる資料を読むのが良い.そこで便利そうだと感じていただければ以降の学習も苦にせず進めるだろう.逆に良くわからなくても,めげずに次のステップに進んでもらいたい.そんなこんなで以下の2つを推薦させてもらう.
追記2015.3.3
概念理解にちょうど良いmatsukazさんの動画を見つけたのでそちらを追記させて頂きます. ちょっと長いですが,非常にわかりやすいです.
ステップ2:Gitの簡単な使い方を説明した資料を読む(所要時間:8hour)
ステップ1でなんとなくGitの雰囲気を掴んでもらえたと思う.ステップ2ではいきなり手を動かしながらGitの使い方を勉強して頂きたい.ここで,GitをサポートするGUIツールは沢山あるが,はじめは概念やコマンドを理解する意味でCUIでGitを学習するという前提で紹介させて頂いた.利用するコンテンツは以下の通りだ.
- Gitを初めからていねいに
- サルでもわかるGit入門
- 入門編
- 発展編
1つ目に挙げたGitを初めからていねいにはshinpei maruyamaさんが作られた物に僕が少しアレンジを加えたものになっている.Gitの全体の話から,実際手を動かしてGitの使い方を学べる素晴らしい教材だ.Git初心者に紹介すると好評だったので.初学習者にはとりあえずこのドキュメントを2周して欲しい.1周目でGitがどんなツールなのかを体験できるだろう.2周目は自分で空でコマンドを打てるようになってほしい.そして,覚えていないコマンドはメモって欲しい(全部メモっても使うコマンドが少ないことに気づくだろう).また,教材の5章からHEADという単語が出てくるが,Gitを使いこなす上で非常に重要な概念なので是非覚え頂きたい.
Gitを初めからていねいにが終わったら,次はサルでもわかるGit入門を読んで欲しい.この教材は少しGitを勉強した人の復習や,より深い理解の補強には向いているが全くGitを知らない初学習者にはおすすめしない.僕はサル以下だったので学生時代これを読んでもあまり使えるようにはなれなかった,だから,まずはGitを初めからていねいにを通読した上で読んで欲しい.きっと,次のステップに進む助けになるだろう.また,このサイトはePub形式の電子書籍も無料で公開しているのでそちらをダウンロードして読めるので嬉しい.
ステップ3:Gitの操作パターンを学べる問題集を解く(所要時間:2hour)
ステップ2でGitの簡単な使い方を学んだ後は,ステップ3では開発で使うであろうGitの利用パターンを問題集を使って繰り返し解いてもらう.無料で使える教材を探したが有名なものは見つけられなかった.強いて言えば,Learning Git Branchingというサイトがブランチの使い方の学習に役立ちそうだ.しかし,繰り返し解くには使いづらいし,最低限のことを覚えてもらうのに焦点を置きたいので,問題集は僕が用意した.特に4章は,初学習者が苦手とするであろうブランチの様々な使い方を学べるように構成したので繰り返し解いて頂きたい.
Git quizを見ていただくと問題が少ないのに気づくだろう.開発に入る前に必要な最低限の作法はそれだけ少ない.応用的な使い方や~ flowのような開発方針はチームで異なるのでその辺りはチームでメンバーに教えてもらうと良い.ステップ2でも述べたが,Gitを使いこなす上でHEADの概念を理解するのは非常に重要なので,それぞれの問題であるべきHEADの位置を図示させて頂いた.まだ,基本的な使い方をマスターする問題しかないけど,好評だったら応用編も作ろうと検討中.
ステップ3.5: リモートレポジトリの管理にGithubを使いたい場合(所要時間:3hour)
リモートレポジトリの管理はGithubやBitbucketなどのレポジトリホスティングサービスを利用するケースががほとんである.もし,Githubの使い方を学びたいなら以下の本をおすすめする.
この本は実践的なGithubの使い方がまとめられている書籍で非常に評価も高い.色々書籍を読んで見たが,もし,Githubの使い方を学びたいのであればこの本が一番だと思う.
ステップ4:Gitを使った実践的な開発をする(所要時間:0 ~ ∞)
ここまできたら後は実際の開発に入ってGitを使いまくろう.躓くポイントは人それぞれ違うので教材は必要ない.わからないことが出てきたらGitを使っている人やGoogle先生に聞いて都度解決していけばいい.大事なのはGitを使いまくることだ.コードを書くにも,議事録を取るにも,日々のToDoリストを管理するのにも,機会があればGitを使おう.Gitの学習をしているとブランチのマージとrebaseの違いがわかりにくいという人が多い.その場合は,こわくないgitを一読して頂きたい.mergeとrebaseの違いがわかりやすくまとめられている.
追記:2015.3.3
英語になりますがわかりやすいGitのチートシートがあったので追記しておきます. このチートシートは視覚的にもわかりやすいので一度見てみて下さい.
おわりに
本記事はQiitaのGit Advent Calendar 2014 13日目に投稿させて頂いた記事です.社内のエンジニアに短期間にいかに負担なくGitを教えるか考えた勉強方法のアウトプットとしてまとめさせて頂きました.もっと良い勉強方法がある,知ってるという人がいればぜひ初学習者にそれらを共有していただきたいです.それでは,楽しいGitライフを送って下さい!!