見出し画像

【#2】そもそもなぜGitは生まれたのか|仕組みで学ぶGitチュートリアル

目次はこちら


はじめに


はじめに、私が新しい技術を学ぶ時に、最初にリサーチすることが2つあります。

(1) その技術は何を目的として作られたものなのか?
(2) その技術がなぜ普及しているのか?

(1) は当たり前だよって思われるかも知れませんが、意外と私たちの思考回路は反射的に出来ていて、

「これからはAIの時代だ」 → 「機械学習勉強しなきゃ!」「まずはpththonから始めよう」

なんてざら何ですよね。


(2) について、最低限のリサーチを行うことも大切です。

その技術が既存の技術(システム)のどこの課題を解決しているか、なぜ流行っているかを把握しないと、正しい技術選定は出来ません。


「これからはAIの時代だ」という情報に対して、私たちは以下のような論点で思考することが大切です。

AIは既存の技術と比べて、何がすごいのか?どんな課題を解決できるのか?
AIが今出来ること、研究段階の境目はどこか?
AI(機械学習)が取り入れられている領域と、これからの領域はどこか?


「新しい技術を使いたい」というのは、テック好きのエゴです。

エンジニアの仕事は

解くべき問題に対して、適切な技術を選定し、最短で解決することです。


ちょっと、熱がこもりすぎちゃいました。

以上の理由でGitを学ぶ前に、なぜGitなのか?を確認してから学習に入っていきましょう!


バージョン管理の目的を再確認


バージョン管理の目的は、変更履歴を記録を残すことでプロジェクト管理を効率的に行うことです。

具体的には、以下のようなメリットがあります。

・「だれが、いつ、何のために」変更したかを情報をすぐ確認できる
・複数の開発者が効率的に共同開発できるようにする
・簡単に元に戻せることで、安定したサービスを提供する



Gitが登場するまでのバージョン管理システム


システム開発の分野では、Git以外にも様々なバージョン管理システムが使われてきました。

そんなバージョン管理システムがどのような、進化や変化をとげてきたかをおさらいしましょう。


アナログ時代(バージョン管理システムなし)

バージョン毎にフォルダにまとめて、フォルダ名にバージョンの情報を記載するアナログな管理方法ですね。

ProjectA/
┗ xxxxxx_20190111
┗ xxxxxx_20190111
┗ xxxxxx_20190110
┗ xxxxxx_20190108

この方法の問題点は明確ですよね。人による確認ミスが起きてしまうんです。

・更新ファイルの見落とし
・フォルダの命名規則などのルールを統制しずらい
・余計なファイルが混ざっていた


バージョン管理システムの誕生

大きいシステムや組織になると、アナログな手法はが限界がきます。

そこでバージョン管理システム(CVS、Subversion)が登場することになります。

リポジトリという仕組みを利用して、システムでバージョン管理ができるようになりました。

リポジトリとは
「いつ」「誰が」「どんな変更を行った」等の情報をファイルの各バージョン毎に保存されているデータベース


しかし、初期に出たバージョン管理システムにはいくつか問題がありました。

・本番環境(ユーザーが実際に利用するサーバー環境)にデプロイは、ローカル環境から手動で頑張るため、本番とリポジトリのコードが一致していないことが多々
・サイズの大きいファイルをリポジトリに保存しようとすると、半日以上時間がかかる
・複数人で共同開発すると、リポジトリに保存する際に衝突(コンフリクト)が起きる


ついにGitの登場


そんななか、ついにGitの登場です。

Gitが既存のシステムと比較して優れている点は主に以下の3つです。

・検索が高速、動作が軽量
・リポジトリを複製が容易でネットにアクセス出来ない環境でも、履歴の調査や変更の記録といったほとんどの作業を行うことができる
→ 分散開発しやすい

またgit flowという共同開発を行うためのルールを適切に定めて、チームに浸透させることで、本番とリポジトリのコードの不一致問題やコンフリクト問題を解決しました。


まとめ


今回はそもそもなぜバージョン管理が必要なんだっけ? なんでGitを採用するんだっけというところを解説しました。

Gitはチーム開発を前提に作られているということを意識して学習すると理解がしやすいと思います。

次回からはGitを実際に使いながら、学習するパートに移ります。

2日に一回のペースで投稿しようと思いますので、興味ある方はフォローしてお待ちください!

それでは、また会いましょう!


この記事が気に入ったらサポートをしてみませんか?