TECH LEAD Blog

IT・WEBエンジニアのキャリア相談/転職支援サービス【TECH LEAD(テックリード)】が、エンジニアキャリアに関する記事やtwitterアンケート企画「エンジニア世論調査」の結果を投稿しています。

ちょっと丁寧にGitを説明する

こんにちは、TECH LEADです。

新しいサービスの開発が忙しく、久しぶりの投稿となってしまいました。

TECH LEAD Job|テックリードジョブ

TECH LEAD Job|テックリードジョブ

 

少し前にはてブで以下の記事が多くのブックマークを集めてましたね。

皆さんもご覧になりましたか?

 

anond.hatelabo.jp

 

この記事を書く私も、システム開発やプログラミングについての知識はある程度持っているものプログラマーではないため、社内で飛び交うgitやGitHub用語にもやもやした感情を持つ一人でした。

 

また、WEBデザイナーもフロントのコーディングまでを担当しているため、git・GitHubを利用しているのですが、結構頻繁に「コンフリクトしてマージできません」と言った発言が聞こえていたので、多分みんなgitやGitHubの分かりづらさに苦労しているんだろうなと日々感じてもいました。

 

そんな中、前述の「クソ簡単にgitを説明する」に出会い、一気に読み終えたわけです。

 

読んだ感想は「シンプルな説明で分かりやすい(気がする)!」だったのですが、それ以上に湧き上がった感情は「バッサリと切り捨てる物言いがカッコイイ」と言う、嫉妬にも似た感情でした。。。

「fetch - お前にはまだ早い」「コンフリクト - できてねーじゃねーか」などなど、多分gitを使い慣れたエンジニアの人が、初心者やノンエンジニアでgitに対する基本的な理解が無い人達に対して、心の中で抱くリアルな感情なのではないかと思います。

 

自社のエンジニアに「クソ簡単にgitを説明する」を読んで理解した内容が正しいか聞いてみた

 

「fetchって初心者にはやっぱり早いんですかね〜」という投げかけを皮切りに、記事に書かれていた内容について、自分なりに理解した内容やgitコマンドを使うケースについて色々と質問していきました。

やはり前提となる知識が無いためか、色々と誤認識をしている部分も多々あるようで、結局ホワイトボードを使ってローカルとリモート、リポジトリーや様々なgitコマンドなどを整理して説明をしてもらいました。

説明に対しても、色々と細かい点や実際の業務ではローカルで操作するケースやリモート側で操作するケースの違いなど、もやもやした点をぶつけたため、自分としては「もう完全に理解したな」状態になったため、自分や他の人のために理解内容を資料にまとめてみました。

 

資料に対するエンジニアからの想定外な反応

 

意気揚々と資料を作り上げ、「これは分かりやすい!」といったエンジニアや他のメンバーの反応を期待しつつ、早速Slackに資料をアップロードしてみました。

ところが、返ってきた反応は「これは違うと認識です」「これは別のコマンドが適切なのでは?」と言う感じのリアクションで、正直心が折れかけながら「え、でもそれって昨日こう言う風に説明してなかったっけ?」とか「あれリモートの差分はこのコマンドって書いてあったけど」などと、自分の理解の正当性を守るために、必死に言い訳を探していました...。

ただ、業務で毎日使いこなしているエンジニアの理解と一致していないと言うことは、gitについて自分が理解できていない部分があることは事実であり、エンジニアからの説明だけでは埋められなかったことは明白でした。

 

実際に自分でgit/GitHubを使ってやってみる事に

と言う事で、説明聞いても理解できない部分があるならば、実際にgit/GitHubを使って「クソ簡単にgitを説明する」に記載されていたgitコマンドを使ってみる事にしました。

 

【参考にさせていただいたのは以下のページ】

今日からはじめるGitHub 〜 初心者がGitをインストールして、プルリクできるようになるまでを解説 - エンジニアHub|若手Webエンジニアのキャリアを考える!

 

【実際に行った作業】

  • gitのインストール *既に入ってましたが最新版を入れてみました
  • SSH鍵の生成 
  • GitHubの登録。リポジトリー作成と公開鍵の設置
  • ローカルからリモートリポジトリーを "git clone"
  • ローカルでマスターブランチから"git branch -b" でブランチをコピー
  • マスタブランチから "git chechout work" でワークブランチに移動
  • ディベロップブランチにファイル追加。
  • "git add" でステージし、"git commit (-a)"でワークブランチに反映
  • "git push (origin work)" でリモートリポジトリーに反映
  • GitHub上で "Pull request" の作成とマスターブランチへのマージ、ワークブランチの削除
  • ローカルからマスターブランチを "git pull" して最新版を反映し、"git branch -d (work)"でローカルのワークブランチも削除

 

 操作してみて理解できたのか?

 

結論から言うと「かなり理解できた」のではないかと思います!

参考サイトの説明がかなり丁寧に記載されており、順を追って操作をしていけばほぼ迷う事なく一通りの操作ができたので、参考にする情報の精度も重要だと感じました。

また、頭で理解した内容をただ図で整理していた時と比べて、実際にファイルを操作したりgit/GitHub上で変化・操作をする事により、イメージしていた流れが実際に目に見えて形になるため、より深く理解した状態で資料が作成できるようになったと思います。

一方で、やはり順を追った一つ一つの説明は、かなりの情報量で縦長のページとなってしまい、今がローカルなのかリモートなのか、どのブランチの話をしているのかなど、整理をするフレームが無いと知識の定着化は難しいなと感じました。

 

前置きが長くなりましたが「ちょっと丁寧にgitを説明する」資料です

 

※資料を作成しておいてなんですが、そもそものバージョン管理の必要性などについては、改めて「クソ簡単にgitを説明する」をご参照ください。

 

最後に

「fetch」コマンドは、本当に「お前にはまだ早い」と言うレベルだったのかを思い返したのですが、「git pull は fetch と mergeを足したものだよ」と優しく教えてくれればいいような気がしてきました。。。

 

【TECH LEADの新しいサービスです】

IT/WEBエンジニア専門の求人スカウトサービス|TECH LEAD Job

job.techlead.jp