GitHubあれこれ | 初心者がUnity管理にGit Hubを導入しようとしてかなり苦戦する話①~Gitインストール編~

本投稿の閲覧が役に立ちそうな人

  • プログラムもそんなにやったことがない人
  • Shellとかコマンドプロンプトとかの知識がないけどGitがなんか使えるってことは聞いたからやってみたい人
  • Gitの導入になんかそのすんごい苦戦している人
  • ↑これらの人に教えようとしているけど、なんかその人がよくわからんところで詰まってて「いや、もう無理。〇〇のサイトみて自分で勉強して」って言いたくなってる人。
     なお本記事では、Windows10・11環境でのGit導入について記載しております。

はじめに~本記事を書くにあたって~

 どうも、ゲーム制作サークルのマホウビンのビンボーです。
 最近めちゃくちゃ寒くて、駅の入り口につららができていたことに感動して写メ取ってたら遅刻しました。(幸い、どこかの誰かが線路立ち入りしてたので、遅延証明がでてくれました。)
天気予報とかで「見て! 東京0℃!」とかいう声を聞くと、ちょっと布団から出るのに頑張らないといけないレベルで済んでる関西で育ってよかったなーと思います。
 北海道・東北の人、ほんと尊敬する……。


 さてこの度、新規でゲーム制作をするにあたって、メンバーのマギエル(通称マギたん)との会話で

ビンボー
別に一人で作るからバージョン管理とかそんなにしなくてもいいんかなー。でも普段と違ってWeb公開するゲームだしやっておいたほうがいいかなー。勉強にもなるし、前にデータ消えたし
マギエル
お、導入したら教えてくれ。公開リポジトリ作ろうぜ。
一人で使ってるとプルリクエストとかしないから勉強にならんだろう。
あー、でもプライベートの共用リポジトリでええのか。
プルリクエストとか理解しているならいいけど。(善意)
ビンボー
な、る、ほ……。ふ、ふーん?(震え声)

みたいなノリになったのでGitHubを導入しようと考えておりました。

 い、いや、知ってるんですよ、GitGitHub。存在は。
 ほらUnityやってるとアセットのダウンロードでGitHubのページ行ったり、Unityのオンラインマルチゲーム制作用のAPIことMLAPI(いまだとNETCODEか)の導入にGit使いますし……。
 バージョン管理システムという認識で……あってるでしょ??? 
 こんだけ使ってる人もいるし、みんな優しいからしっかりと説明してくれるページもあるし、なんなら公式リファレンスが充実してるっぽいから、まぁ、よ、余裕余裕ー。

と、思っていた自分がバカでした。

 ええ、苦戦しました。
 いや、苦戦したというか、「なにやったらいいの?」って状態で全くわかりませんでした。
 最終導入までにかかった時間、なんと2時間30分。
「やったことない人ならいいんじゃね?」
 的に思ってくれる人がいるかもしれませんが、私は仕事が社内SEなんですよね……。
 相当へこみました。

 が、これは、絶対他の人も苦しんでしまうはず! 

というか私のような「マニュアル通りに実行しているつもりでなんかやっちゃう系Git初心者」を想定しているマニュアルが少ない!!!

 そう思ったので、今回記事にしました。以上です。ご清聴ありがとうございました。

まず結論:Unityの開発環境をGitHubで管理するのに必要な作業。

色々専門用語がこの後出てきますが、専門用語を崩して説明すると……

①GitをPCにインストール。
②GitHubのアカウントを作成。
③GitHubでプロジェクトのページを作成する。
④PCのUnityプロジェクトのディレクトリ(フォルダのこと)にGitを使って「.git」という設定フォルダっぽいサムシングを作る。
(新規プロジェクトの場合は、先に⑤をやってから④やるほうがいいのかな?)
⑤GitHubのプロジェクトとPCのディレクトリをリモートまたはクローンさせる。

となります。

マギエル
ローカルに既存のUnityプロジェクトがある時は
「Init」⇒「add」⇒「commit」⇒「remote」⇒「push」。
新規の時は、先にGitHubでプロジェクト作って「Clone」ね。
ビンボー
俺でもわかるように教えてくれてるんだろうけど、専門用語多すぎてわかんねぇ……。

Gitの導入

①Gitとはなんぞや。GitHubとの違いってなに?

 Gitとは「ソースコードのバージョンを管理するツール」またはそのコマンドのことである!!!
 GitHubとは「Gitを利用した、開発者を支援するWebサービス」である!!!

と、下記引用サイトでそんな感じのことが書いてました!!!!(本項に関してはこんなくそ雑魚サイト見るよりも下記サイト見たほうがいいよ!!! かなりわかりやすい。)

『システム開発では複数の開発者によってソースコードが書き換わります。いつ誰がどこを変えたのか? 最新のバージョンはどれか? など、ソースコードのバージョンを把握する必要があります。このバージョン管理をするツールの1つが「Git」です。』
(引用サイト: i3DESIGN Co.:https://www.i3design.jp/in-pocket/3111)

 なるほど。GitHubがバージョン管理ツールかと思ってましたが、そもそもそこから間違ってましたね。

……あれ、じゃあ個人利用ならGitで終わりじゃない? GitHubにすることでいいことあるの? 教えてマギたん!!

マギエル
GUIベースだからGitより変更点がわかりやすい。
クラウド管理だから、PCのロールバックの影響を受けない。
ソースでわからないところとかあったら人に聞きやすい。
あとソースだけじゃなくてデザインや文書管理にも使える。
名前が売れやすい。などなど。
ビンボー
利用者の声たすかるー

 ということらしいです。WebサービスなのでGitを管理するツールはたくさんあるようでした。
 職場の人に聞いたところ、うちの職場でも「AzureDevOps」を使っているようです。なんでもGitHubと違って「AzureはAD認証での利用ができ会社管理で利用しやすいので、そのプロジェクトの管理者が蒸発したとかあっても割と簡単に対応できる」とのことでした。色々あるんですねー。
 ……あれ、使ってたなら誰かGitの使い方教えてくれてもよいのではなかろうか。え、もしかして私、ハブ(ry

②Gitの導入

 GitやGitHubとはなんぞや、色々あるんだなーということが前回で大雑把にわかったので、早速利用を開始してみよう。
 まずは大元のGit(ソース管理ツール)の導入から。

 ダウンロードが終わったので、早速インストールを開始!!

Git2.35
Information: Please read the following important information before continuing.
ビンボー
Oh! Stop speaking English.

 英語かー。まぁ仕事でSEやってる以上、ある程度の英語はなんとかなりますけど、ちょっと日本人には敷居が高いっすー。
 色んなサイト見ても教え方バラバラなのと、インストーラーのバージョンや現環境によって内容違うみたいなので、とりあえず「Git2.35.1.2Setup」の内容をご案内。

Git①
Git①「Information」ライセンスについての情報。こちらはそのまま「NEXT」

補足:一応ざっと内容案内しますと、「GitのGNUGPL(GNUのプロジェクトで開発されたソフトウェアライセンス)は内容の改変・共有OKで、ソフトウェアのコピーを配布する/ダウンロードするのは自由だよ。ただ配布した際の貴方の権利は有料だろうが無料だろうが配布した相手にも権利が付与されるよー。要はこのソフトウェアには保証というものがないよー」というものです。

Git②
Git②「Select Destination Location」インストール先のフォルダの参照画面。
基本そのままで「NEXT」
Git③
Git③「Select Components」機能選択画面。これもそのまま「Next」。
※初めにチェックがついてるやつは外さない。特に「GitBashHere」は絶対いるので注意。
デスクトップにアイコンを追加したい場合は「Additional icons」下の「On the Desktop」を選択しておく。
Git④
Git④「SelectStartMenuFolder」Gitのスタートメニューフォルダ名設定。別のフォルダに入れたい時は変更。
それ以外はそのまま「Next」でOK。

 ここまではなんとなくわかる。問題はここから。

Git⑤
Git⑤「Choosing the default editor used by Git(Gitで使う初期エディッター何にするか選んでや)」
Git2.35.1
今選んでるVimエディタ、動きいいんだけど結構使いづらいよ。UIもわかりづらいから、慣れてないと微妙じゃない?タイピングも特殊だし。
ビンボー
すっごいVim下げるやん……

 Linuxとかを触ったことある人は使ったことあるとは思いますが、確かにちょっと使いづらいです。特にUnityで作業する方は別のにしたほうがいいかもしれませんね。さて……

Git⑤-2
Git⑤-2 ドロップダウンを開くと、こんな感じ。

……いっぱいあるなー。
 まぁUnity使っている人なら「VisualStudio」か「VisualStudioCode」を利用していると思いますので「Use Visual Studio Code as Git's default editor」を選択しましょう。
 って選んだら、なんかでてきましたよ。

Git2.35.1
お、自分VisualStudioCode選ぶん? ええなぁ、軽いしオープンソースやしデスクトップアプリとして動いてくれるエディターやん。JSとかC#とかC++とかPython・PHPとかの言語もそうやけど、.NetとかUnityとかのランタイムの拡張機能もあるでなー。
ビンボー
めっちゃ早口で語ってくるやん……。
Git2.35.1
あ、でもこれ選ぶとき注意してなー。PCで色んなアカウントあったとしても、このGitオプション使えるユーザーは君だけやで。他の人が使うんなら、また設定してなー。VSCodeをデフォルトエディターにできるからなー。
ビンボー
あ、はい。

 とりあえず別に困るところがないので、VSCodeのまま「NEXT」を押しました。

補足:Gitのインストール前にVisualStudioCodeのインストール・アップデートをしておきましょう。

Git⑥
Git⑥「Adjusting the name of the initial branch in new repositories(新規リポジトリの初期ブランチ名の設定)」

 リポジトリ……? ブランチ……? え、何それ。
 いや待てよ、リポジトリってどこかで聞いたような……。

マギエル
公開リポジトリ作ろうぜ。

 あああああ---!「はじめに」で言ってたやつうううう!!!!

 リポジトリを調べたら「開発プロジェクトに関連するデータの貯蔵庫」的なものらしい。
……でもブランチってなに? え、何? 教えてマギえもん。

マギエル
ブランチ? あー、枝分かれ・分岐ってこと。
例えば「サイトの運営」プロジェクトにて「①広告機能」「②Youtube動画の表示編集」「③サイドバー編集」「④バグ対応」という作業があった場合、Gitでは「どこで何をやったか」っていう作業履歴をそれぞれ別々に名前を付けて管理することができるんだ。これが「ブランチ」。
ビンボー
それぞれの作業をそれぞれで管理できるってこと?
マギエル
そうそう。最終的に「マージ」っていうコマンドでそれぞれの変更を合流させる感じ。
ここで聞かれてるのは、一番初め「マスターブランチ」っていうプロジェクトの本筋につける名前をどうするかということ。
Git上でリポジトリを作るときに「git init」っていうコマンドを作るんだけど、それで設定されるマスターブランチ名を設定してねって言ってるんだ。
ビンボー
なるほど!!!

 さすがマギえもんだぜ。
 ということは、さっきの画面ではこういうことを言っているんだな。

Git2.35.1
「git init」コマンド使った後につけるマスターブランチ名、どんな名前をつけます?
「Let Git decide」を選ぶと、とりあえず新しいリポジトリ作成した時は「master」ってブランチ名にするけど(その内変えるかもだけど)。
「Override the default branch name for new repositories(デフォルトのブランチ名を書き換える)」で、別の名前にすることもできっけど。どうする?

 ああ、読める!読めるぞ!!(byムスカ)

 でもさっきも出てたけど、「git init」ってのがこういうコマンドだっていうのを知らないと……っていうか、Gitのシステム知らないとココ突破できなくない!?

補足:「git init」コマンドは、Git上でリポジトリを作成する際に実行するコマンドです。Gitでこのコマンドを打つと、そのディレクトリに「.git」というリポジトリ設定フォルダができます。設定フォルダはGitHubとのリモートなどに利用するのでかなり大事なコマンドです。別関連記事でまた出てきますが、軽く覚えておくとよいかもしれません。

 ということで、とりあえず「Let Git decide」で進めることにしました。

Git⑦
Git⑦「Adjusting your PATH environment(環境設定)」Gitコマンドを利用するコマンドラインの選択
Git2.35.1
さっき(Git③の画面で)GitBashってコマンドラインツールをインストールするように設定してるけど、それでいいの? Windows標準のコマンドプロンプトとかPowershellとかでもつかえるけど。
ビンボー
え、そうなん?
Git2.35.1
推奨してるのは真ん中の「Git from the command line and also from 3rd-party software」っていうGitBashの他にコマンドプロンプトとかWindowsPowerShellとかでもGitコマンドが使えるようにする選択肢。
Git使うときはGitBashしか使わん!っていうなら、上の「Use Git from Git Bash only」でいいけど。
ビンボー
悩ましいな。ちなみに下の「Use Git and optional Unix tools from the Command Prompt.(コマンドプロンプトからGitおよびオプションのUnixツールを使用します。)」は? これGitBash入れなくてもよさそうで便利そうやけど。
Git2.35.1
あー……それなぁ、Windowsのコマンドプロンプト標準のコマンドの一部書き換えちゃうのよねー……。検索とか並び替えとか。
ビンボー
げ、まじか。じゃあ2番目のにしとくわ……。(Recommended)って書いてるし。

 ということで、「Git from the command line and also from 3rd-party software.」を選択。後で気付いたけど、大体Powershellでやっちゃってる人間なので、これは自分には必須だった。Powershellやサードパーティー製のコマンドラインツールを使わない人は上の「Use Git from Git Bash only」でいいと思います。この記事内では、GitBashしか使いませんのでご安心を。

Git⑧
Git⑧「Choosing the SSH executable」セキュアシェル(SSH.exe)ファイルの選択。
独自で設定している外部OpenSSHがある人は下を。「なんじゃそりゃ」っていう人は上を選ぼう。

 ここ、新しくなっているせいかなかなか最新の説明ページがなくて少し焦りました。
 幸いSSHについては仕事である程度どういうものか理解していたので、スルー出来ました。

【コラム:OpenSSHって何? そもそもSSHって?】
SSHとは、サーバーとの間でやり取りをする際に使われる「暗号化された通信方式」のことで、私たちがGitHubなどのクラウドサーバーとの通信でやり取りを暗号化することで安全に利用することができます。GitHubに接続するときにサインインパスとか隠さずに送るのは危ないので、これを利用します。
OpenSSHとは、そのSSH.exeのオープンソースのことです。
ちなみに、Webページにアクセスするときに使うSSLとは似て非なる物です。
Git⑨「Choosing HTTPS transport backend」HTTPS接続に使用するSSL/TLSライブラリの選択。
GitHubを利用するのであれば上で大丈夫です。会社でUnityをチームで作ってます!っていう人で、会社がリポジトリサーバを運用していて、AD認証を推奨しているようであれば下を選びましょう。

 実はここ結構大事な項目です。ただ大抵の人は上になるかと思います。
 何をいっているのか、というと……

Git2.35.1
GitHubとかのサーバにあるリポジトリをリモートしたりクローンしたりする時、HTTPS接続でやり取りすることもあるんだけど、その時のサーバー証明書どうする?
上はGitのOpenSSHに入ってる「ca-bundle.crt」っていう証明書ファイル使うんだけど、もし使ってるPCが会社利用でActiveDirectoryに入ってる場合だと、たぶんプロジェクト管理で別のルート証明書ファイルあるかもしんないのよね。
一回システム管理者に聞いてみて、使ってるなら下選んで。

 とのこと。
「いや、Gitがどういうものか現段階で大雑把でしかわかってないのに、こんな質問されても……。」とは思いますが、これGit単体でみるとかなり大事なポイントだったりします。
 まぁGitHubの場合はほぼ上なので、気にしなくてもいいと言われればそうなんですが、あまりにもあっさり流してるサイトが多いので一応念のため。(今回も上を選んでNextしてます)

Git⑩「Configuring the line ending conversions」行末変換の構成について
これもWindowsなら上でいいと思います。

 ……ん??? チェックアウトってなに? また新用語??
 あ、あった。「Checkout:ターゲット エンティティの異なるバージョン間の切り替え」???

マギエル
いや、ここのチェックアウトってGitのチェックアウトのことじゃなくて「データを取り出す」っていうIT的な意味。リポジトリからデータを取り出すときに、行末の「改行」をどういう変換するかってこと。
ビンボー
改行変換か……。すごい偏りのある知識だけど、たしか改行コードはOSごとに違ってて、
・WindowsOSはCRLF(「\r\n」=行の一番左に行って、改行する)方式
・Macの古いOSはCR(「\r」=行の一番左に移動するだけ)方式
・他のUNIXはLF(「\n」=下方向に移動するだけ)方式
だったよね? 端末ごとに変換してくれるってことかな?
具体的にどういうことしてくれるんだい、Git君。
Git2.35.1
プロジェクトの作業するときって基本PC上でやると思うんやけど、例えばMacとWindowsで共同作業してる場合、方式を変えておかないとやり取りの際にテキストの内容がおかしくなったりするんよね。
それを変換する機能がここで言ってるやつなんすわ。
ビンボー
え、すごいなー自分! 
俺はWindowsやねんけどどれ選んだらいいの?
Git2.35.1
上選んだら、Windows向けに変更するよー。Unixの変換は真ん中な。
これらの設定は「core.autocrlf」の値かえたら変更できるから「なんかおかしいな」思ったら後でここの数値かえてやー。
ビンボー
あいよー。おおきになー!
マギエル
え、ツールに向かって話しかけてる……。こわっ。

補足:具体的にいうと、上を選ぶとチェックアウト時に改行がLF方式(UNIX方式)の時はCRLF方式(Windows方式)に変換し、また入れる時にLF方式(UNIX方式)に戻します。真ん中を選ぶとチェックアウト時に改行がCRLF方式(Windows方式)の時はLF方式(UNIX方式)に変換して、再度入れる時はCRLF方式(Windows方式)に戻します。下を選ぶと何もしません。

Git⑪「Configuring the terminal emulator to use with Git Bash」GitBashで使うターミナルエミュレーターの構成設定。
上を選ぶのが無難ではあるが、「MinTTY上でWindows用dockerなどのWindowsコンソールコマンドを使う場合、頭に『winpty』と付ける必要がある」ことを留意しておこう。

……そろそろ読むのが面倒になってきた。
 今度は何だろう? TTY? テレタイプライター(ほかの端末と通信するタイプライター)のことだっけ。

Git2.35.1
えっとね、MinTTYっていうWindowsでLinuxみたく動かせる仮想ターミナルがあるんやけど、これ使ってGitBash動かすか、もしくはWindows標準のターミナル(cmd.exe)で動かすか選べるんやけどどっちがいい?
ビンボー
??? え、何が違うんや……?
Git2.35.1
WndowsのコマンドプロンプトをつかってGitBash動かすと、Win32系のコンソールプログラムとかnode.jsとかはそりゃ動くんだけど、cmd.exeって仮想ターミナルとして動かすと画面のサイズ変更できないわASCII文字以外はUnicode使わないと表示できないわで使いづらいのよね。
ビンボー
そう……なの??
たしかにPowerShellとかでVIMエディタ動かしてる時に画面サイズ変更すると落ちることあるけど……。
Git2.35.1
その点、MinTTYはサイズ変更できるウィンドウだし、Windowsコンソールと違ってコマンドの履歴(スクロールバック)は結構残るし、元々Unicode兼ね備えてるから楽よー。
ビンボー
はえー、知らんかったわ。
Git2.35.1
あ、でも注意点があって、MinTTYって仮想ターミナルだから一部Windowsコンソール系のコマンドプログラム動かすときは、頭に仮想変換を示す「winpty」という文字を打たないと「the input device is not a TTY. If you are using mintty, try prefixing the command with 'winpty'」って言われて使えないから気を付けてやー。
ビンボー
えっと、「入力デバイスが物理端末(TTY)じゃないぞ。もしMinTTYつかってるんやったら頭に『winpty』(Windows上で動いてる仮想ターミナルのコマンドやぞこれは)ってつけてみて」てか。覚えとくわ。

 ということで、今回は「MinTTY」を選択します。

Git⑫「Choose the default behavior of ’git pull’」[git pull]コマンドの挙動設定
基本的には、デフォルトでOK
Git2.35.1
git pullコマンドを使った時の挙動どうする?
デフォだと「pullできる時は今のbranch状況をfetchしたbranchにfast-forward Margeして、できない時はMarge commitする」になってるけど。
「fetchしたbranchにrebaseする」設定もできるし、「fetchしたbranchへのfast-forward Margeだけ試す」設定にもできるよ。
ビンボー
うそでしょ……。急に優しくなくなるやん……。
まだ知識が追い付いてないのに、詰んだわ……。
マギエル
……Gitのコマンドで「pull」っていうのがあるんだけど、これはGitHubとかにあるリポジトリのコミット(追加・変更されたデータをリポジトリに記録すること)の内容を自分のリポジトリに持ってくるコマンドなんだ。
で、プルした際に「fetchしたブランチ(マスターからの枝分かれしてる最新の履歴データ)でコミットされてるのがあると、これがマスターブランチの最新版から繋がっているデータかどうか判別して、もしそうだったらそのままMarge(マスターブランチに統合すること)して使い、もし違ったら現状を全てコミットしてマージする」っていうのがデフォルトの設定なんだ。
ビンボー
???
マスターよりも最新の履歴があったら常に最新バージョンを取ってくるってこと?
マギエル
「pull」というコマンドは基本最新版を取ってくるコマンドなんだ。
問題はその取り方の違い。
まぁ大体の企業がデフォルトの設定でやってるし、デフォルトでいいと思うよ。
ビンボー
オッケー

 ということで「Default」設定で。

補足:「git pull」コマンドはGitHubのプロジェクト管理ではよく利用するコマンドです。GitHubに置いているプロジェクトから自分のGit内に置いているプロジェクトの状態を更新するコマンドで、誰かが更新した内容を取得する時などで利用します。

Git⑬「Choose a credential helper」認証補助の設定
上を選ぶとGitの資格情報マネージャーを利用してGitHubなどへの接続方法を記録することができます。ブラウザのパスワード記憶みたいなものですね。
Git⑭「Configuring extra options」追加オプションの選択
A.「Enable file system caching.」ファイルシステムのキャッシュを有効
B.「Enable symbolic Links.」シンボリックリンク(特定のファイル・ディレクトリへの参照を別ファイルを使ってリンクする方法)
とりあえずデフォルトでOK。Bのシンボリックリンクは便利なのですが、設定内容が多いので無しで。
Git⑮「Configuring experimental options」試験的なオプション追加。
正直、ここはバグがあったりするとめんどくさいので、チェックを外すことに。

……うん、そろそろいってもいいよね。

なっが!!!!

 察している方もおられたかと思いますが、ええ、ここまで超調べました。
「わけのわからないものをPCに入れたくない」という心情があり、頑張って調べておりましたがまぁ内容がややこしいですし公式のドキュメントはインストールをさっと流すし、でかなり心配になりながらインストールしてましたよ。
 Nextを押すたびに「なんか厄介なマルウェア的なソフト入ったらどうしよう」と思いながら進めること既に1時間が経過しております。

 が、ついにきました!!「Install」の文字!!!

 うおおおおおお、とうとう俺もGitが使えるんだ――――!!!!

Git⑯「GitBashを起動」
ビンボー
……あれ、ところで「Git」ってどうやって使うん???
マギエル
前途多難だな……

「GitHubあれこれ | 初心者がUnity管理にGit Hubを導入しようとしてかなり苦戦する話②~Gitとはなんぞや~」に続く。