Git for windows と Githubの違いのあれこれ

# はじめに
最近Git(Git for windows)とGitHubを使い、自作のコードを管理したいと思い、両者を勉強中しています。今はユーチューブやChatGPTもあり、ネットを使えばより分かりやすく情報を知ることができるのである程度までは学べますね。しかし、Git関連はまったく触れたことがないので、そもそもGitとGitHubの違いが全く分かっていないことに気づきました。
リモートリポジトリやローカルリポジトリ、分散型の管理などちょっと情報が複雑に増えてきたと思うのでここで、見知った情報を整理しておきたいと思い投稿します。

この記事では、主に以下の事を知るのを目的としていきます。
 ・Git(Git for windows)とは？
 ・GitHubとは？
 ・GitとGitHubの違い
 ・GitとGitHubの使い方

# 結論
Gitはネットがない状態での単体での可能サービスがローカルでのコード管理のみであり、ネット環境がないとリモートリポジトリは作成できない。一方GitHubはネットだけでの環境が前提でローカルリポジトというものは作成できない。よって、Gitのローカルリポジトリで作成したコード内容をネット環境という要素を使ってGitHubのリモートリポジトリへ反映させコード管理を複数人で行うことが両者の役割分担となる。
 
# Git(Git for windows)とは？
Git(Git for windows)とは、分散型のバージョン管理システムで、ソースコードやソースコードを使用したプロジェクトの変更履歴を管理するためのツールです。
各開発者がリモートリポジトリの完全なコピーを持ち、独自の変更やコミットを行うことができます。**変更作業はコマンドプロンプトでGitが提供しているコマンドを使用します！！**←大事な認識ですので覚えておいてください。

これでは全く分からないので自己解釈Maxで説明します。
前提知識として以下の認識を統一しておきます。
*ローカルリポジトリ：個人個人のPC内で完結する、コード管理をする領域。Gitのコマンドを使用して指定した任意のPC内のフォルダをローカルリポジトリとして指定することで生まれます。
*リモートリポジトリ：個人PCではなく、他の物理的に異なるハードウェアにあって、様々な人が変更を加えられるコード管理をする領域。これもGitの方で操作して管理する領域を指定できます。
*分散型のバージョン管理システム：分散とは、ローカルリポジトリとリモートリポジトリを利用していることから来ています。要は、ローカルとリモートを使ってコード管理するシステムということです。**バージョン**という単語は、変更した履歴的なものと思っています。

この上で、Gitとは、つまり、
別の保管用ハードウェアがあってその中にみんなが変更を加えられる共有のコードがあるとします。そして、みんなで協力してそのコードを手分けして理想の形に仕上げたいとします。でも常時共有している場所で複数人がタイムリーに変更してたら、変更内容の矛盾などが起こってしまいます。そこで、一旦みんなのローカルリポジトリ(個別PC)内で、割り当てられたコードを作ったり改善して、ある程度目途がついたらリモートリポジトリへ、自分の作った変更後のコードを上書きします。

こうすれば、リモートリポジトリを大元のコードとして、チームで分担したコード開発がでいます！！

**しかし、ここで重要な認識は、Git単体では共有やリモートなどというサービスを完全には提供できない**という点です。
当たり前だと言われればそうなのですが、
使用しているPCがオフラインで、他のネットや機器に接続することが一切できないなら、もはやリモートリポジトリや共有作業などということは一切できず、ローカルリポジトリ環境で開発するしかないということです。(もはやチーム開発とすら言えない状態ですが....)
言い換えれば、そういった共有可能な環境づくりは、使用者にゆだねられているということです。これは後に説明するGitHubというもののを説明する軸と異なってくる点なので覚えておいてほしいのです。

# GitHubとは？
利用目的はGitと同じです。複数人で開発するコードやプロジェクト内容を保存・管理するウェブプラットフォームで、ソフトウェア開発者が協力して開発しやすくするための場所です。プラットフォームというとしっくりこないかもしれませんが、要はGitHubの公式Webページがありまして、そこでログインして個人個人がアカウント内でコード管理を管理できる場所ということです。

GitHubの前提知識は、GitHubという公式ページにログインして、アカウントで操作できるリモートリポジトリを使ってコードを管理、開発します。**ローカルリポジトリという概念は前提として提供していません**←ここ重要です。
GitHubはGitを使用してより便利にコード管理を行うようにして生まれたものなので、Gitと**連携**して使うのが多いです。また、GitHubは専用のコマンド入力環境で専用のコマンドを使用して、Gitのような操作はできます。しかし、公式Webページにログインしてコード管理操作をことができるように、GitHubの機能は、webページ上でマウスやキーボードの操作をすることで大体のことができます。

# GitとGitHubの違い
ここまで説明してきましたが、当初私は最近まで**GitのほうがGitHubよりもローカルでコード管理が可能な点でGitHubよりも有利なのでは**という疑問？が頭にありました。

ここで、重要なのは、Gitの説明で覚えてほしいと言っていましたこと、**Git単体では共有やリモートなどというサービスを完全には提供できない**ということです。
つまり、Git単体は、ローカルでコード管理はできますがリモートリポジトリや共有作業の場所(プラットフォーム)を提供していません。一方で、GitHubはコード管理をネット環境を前提にして考えられています。
ここが、決定的な違いだと考えます。
要は、Gitはネットなどなくても最低何かしらして別の物理機器との接続を用意してそこで共有開発ができGitHubなど必要なさそうです。しかし、GitHubはネットに繋がないと利用できませんが**Gitの連携に適したプラットフォーム**なので、どうせならGitでローカル要素を担い、Gitがもつリモート開発サービスは、GitHubというプラットフォームで活用しよう！ということが全体的な総括ということを言いたいのです。
GitHubを調べるとローカルリポジトリという単語が頻出し、Gitではリモートリポジトリが当然のサービスのように現れるのでこんがらがっていました。



# GitとGitHubの使い方
ここまで、説明したので多分この部分はいらないですが、皆さんが行っている当たり前の作業手順としては、

1. GitHub上に大元の開発コードがあり、これの内容を変更したり新しい機能を追加したいのが目的。

2. Gitを使ってローカルリポジトリでGitHub上のリモートリポジトリ内のコードへ適応したいコードを作成。

3. ローカルリポジトで作成したコードをGitHubへ適応。

4. いろいろあって目標のコード完成！！
 
ですね。

# おわりに
今回の記事は書いていて、すごく当たり前すぎて投稿するのを躊躇してしまいました。
しかし、Qiitaでの記事は自身のアウトプットと、備忘録として行っておきたいので投稿します。
おそらく、知識理解の誤解や単語が統一できていなかったり、話し言葉のような書き方で読む人を困惑させることがあるかもしれませんが、コメント等でご指摘していただければ幸いです。

最後に、貴重なお時間をいただき、ここまで拝読いただきました方に感謝します。
ありがとうございました。