GitHubの使い方|手元のフォルダから始めて迷わない順番
「github 使い方」で検索して最初に詰まるのは、コマンドの覚え方ではありません。GitHubとGitのどちらの話をしているのか、手元のMacで何を用意すればよいのか、認証をどちらに決めるのかという3点です。ここを先に片付けると、あとに出てくる操作はほとんど同じ形の繰り返しになります。手元のフォルダを1つ送るまでの順番で整理します。
GitHubとGitは別物。先に関係を押さえる
提供元の説明では、GitHubの核となるのはGitと呼ばれるオープンソースのバージョン管理システム(VCS)で、Gitはコンピューター上でローカルに発生する処理を担当するとされています。つまり、手元での記録はGitが担い、その記録の置き場と、人が集まって議論する場をGitHubが担います。この分担が分かっていないと、手元で解決すべき問題を画面上で探し続けることになります。
Gitがそういう作り方になった理由は、生まれた背景にあります。
Linuxは1500万行にも及ぶコードから構成されるとても大規模なプロジェクトです。そのため、Linuxのためのバージョン管理システムであるGitには動作速度に非常に優れていて、また大人数で取り扱うことができるようにプロジェクトの枝分かれさせた「ブランチ」の並列開発が可能になっています。 出典: qiita.com
1500万行という規模を大人数で扱うために作られたので、記録は手元で完結し、必要なときだけ送り合う形になっています。手元だけで履歴を積めるという性質は、1人で使う場合にも効きます。ネットワークに繋がっていなくても記録は残り、あとで送れます。
初心者が最初に決める3つのこと
同じことをするのに、経路が3つ用意されています。どれを選ぶかを先に決めると、読む資料が絞れます。
- ブラウザだけで済ませる。ファイルを手元で扱う必要がなければ、リポジトリの作成、フォーク、ファイルの編集はブラウザから行えます
- コマンドラインを使う。手元にGitを用意して、ターミナルから操作します。GitHub側の操作もコマンドから行いたい場合は、GitHub CLIを入れる道があります
- 画面のあるアプリを使う。コマンドラインを使いたくない場合は、GitHub Desktopという専用のアプリが用意されています
Macでファイルを扱いながら仕事をしている人には、2つ目が向いています。ファイルの置き場と履歴の操作が同じ場所で完結するためです。ただし、共同作業の議論や差分の読み比べは、ブラウザの側が見やすい場面が多くあります。どちらかに決め切らず、記録は手元、議論はブラウザという分け方にするのが現実的です。
手順1:手元のMacにGitを用意して、名前とメールを設定する
セットアップとして案内されているのは3つです。最新バージョンのGitをダウンロードしてインストールすること、Gitでユーザー名を設定すること、そしてコミットに使うメールアドレスを設定することです。この2つの設定は、記録の1件ごとに書き込まれる署名にあたります。あとから変えても、それまでの記録は書き換わりません。
git config --global user.name "あなたの名前"
git config --global user.email "あなたのメールアドレス"
ここを飛ばして始めると、履歴に別人の名前や古いアドレスが残ります。仕事で使うリポジトリと個人のリポジトリでアドレスを分けたい場合は、全体の設定を個人用にしておき、仕事用のフォルダの中だけで上書きする形が扱いやすくなります。
設定が入ったかどうかは、設定の一覧を出して確かめます。画面に何も出ないときは、設定が入っていないか、書き込み先のファイルが別の場所になっています。最初の1回だけの作業なので、ここで時間をかけても後には効きません。
手順2:認証をHTTPSとSSHのどちらかに決める
GitからGitHubのリポジトリに繋ぐときは、HTTPSかSSHのどちらかで認証します。提供元の案内ではHTTPSでの接続が推奨とされ、その場合は資格情報を保存する仕組みを使って、繰り返しの入力を省けます。SSHを選ぶ場合は、送信や取得に使う各コンピューターでSSHキーを生成する必要があります。
SSHの考え方は、サーバーに入るときの鍵の運用とまったく同じです。秘密鍵は手元に置き、公開鍵をGitHubのアカウントに登録します。鍵にはパスフレーズを付けられ、エージェントに預けておけば毎回の入力は要りません。ハードウェアの鍵を使う形も用意されていて、その場合は接続のたびに物理的な鍵を挿す必要があります。SSHキーでコミットに署名することもできます。
運用で見落としやすい決まりが1つあります。
SSH キーを 1 年間使用していない場合、 GitHub は、セキュリティ上の予防措置として非アクティブな SSH キーを自動的に削除します。 出典: docs.github.com
年に数回しか触らないリポジトリのために鍵を登録したまま放置すると、次に使うときには消えています。使う頻度が低いなら、HTTPSに寄せておくほうが手が止まりません。組織のリポジトリでシングルサインオンが使われている場合は、鍵を承認する手順が別に必要になります。
手順3:手元のフォルダをリポジトリにして、GitHubへ送る
手元にすでにフォルダがある状態から始めるのが、いちばん詰まりにくい順番です。空のリポジトリをGitHubで先に作って、そこにファイルを入れていく形でも構いませんが、手元にあるものを記録する形のほうが、何が起きているかを追いやすくなります。
流れは4段階です。フォルダを記録の対象にする、記録に含めるファイルを選ぶ、選んだものを1件の記録にする、その記録を置き場へ送る。最初の3つは手元での作業で、ネットワークは要りません。4つ目で初めてGitHubに繋がります。
GitHub側では、先に空のリポジトリを1つ作っておきます。このとき、説明のファイルや無視の設定を自動で入れる選択をすると、手元と置き場の両方に別々の記録ができて、最初の送信が弾かれます。空のまま作るのが安全です。送る先の指定には、リポジトリの画面に表示されるURLをそのまま使います。HTTPSとSSHで文字列が違うので、手順2で決めた側を選びます。
記録に含めないファイルは、無視の設定を書いたファイルで指定します。書き出したファイル、依存関係のフォルダ、鍵や接続情報を含むファイルは、最初から対象外にします。一度記録に入ったファイルは、あとから設定を書いても履歴からは消えません。最初の1回で決めておく価値があるのは、この部分です。
手順4:日々の流れは、枝を作って戻すだけ
日常の操作は同じ形の繰り返しです。作業の単位ごとに枝を作り、そこで記録を積み、置き場へ送り、画面上で取り込みの依頼を出して、内容の確認を経て元の枝に戻す。1人で使う場合でも、この形にしておくと、途中でやめた作業を切り離しやすくなります。
- 枝を作る。何のための作業かが名前で分かるようにする
- 記録を積む。1件の記録に1つの意味だけを入れる
- 置き場へ送る。送ってから画面で差分を読み直す
- 取り込みの依頼を出す。自分1人でも、差分を読む場として使える
- 確認して戻す。戻したあとに枝を消す
複数人で扱うときに揃えておくと揉めないのは、記録の単位と、取り込みの前に何を確認するかの2点です。人によって記録の粒度が大きく違うと、あとから履歴を追えなくなります。自動の検査を置き場の側で走らせる仕組みも用意されていて、これは無料の範囲でも使えます。
料金は、無料の範囲がどこまでかで判断する
料金は公式の料金ページで確かめられます。無料のプランは月額0ドルで、公開リポジトリと非公開リポジトリの両方が無制限に作れます。依存関係の脆弱性を見つけて更新の依頼を自動で出す仕組み、月2,000分の自動実行の時間、500MBのパッケージの保存領域、課題と計画の管理機能、コミュニティでのサポートが含まれます。自動実行の時間と保存領域は、公開リポジトリでは無料です。
有料のプランは2つあります。Teamは1ユーザーあたり月額4ドル、Enterpriseは1ユーザーあたり月額21ドルからで、どちらも最初の12か月の価格として表示されています。Teamで増えるのは、コードの所有者の指定、複数の確認者の設定、確認者の必須化、リポジトリ単位の規則など、複数人で扱うための管理機能です。Enterpriseは保管場所の地域指定やアカウントの一元管理といった、組織の要件に応えるものです。
1人で使う、あるいは数人の受注仕事で使う範囲なら、無料のプランで足ります。有料に移る判断は、機能が足りないからではなく、人の出入りを管理する必要が出てからです。
メリットとデメリットを並べる
利点は3つに整理できます。1つ目は、履歴が手元に残ることです。いつ何を変えたかが記録に残るので、戻す判断ができます。2つ目は、置き場が手元の外にあることです。Macが壊れても、送ってあるところまでは残ります。3つ目は、他人に見せる形が決まっていることです。差分と議論が同じ場所に並ぶので、口頭の説明が要りません。
短所も3つあります。1つ目は、最初の設定の段落が長いことです。認証、無視の設定、枝の運用と、覚えることが前半に集まっています。2つ目は、大きなファイルに向かないことです。動画や書き出した成果物を履歴に入れると、置き場が膨らみます。3つ目は、非公開のつもりで公開にしてしまう事故が起こりうることです。作成時の選択と、鍵や接続情報を含むファイルの扱いは、毎回確かめる対象になります。
受注の仕事で使う場合は、先に相手の運用を聞いてください。置き場を相手が持つのか自分が持つのか、納品の形が履歴なのか成果物なのか、非公開の条件があるのか。ここを決めずに始めると、あとで移す作業が発生します。
手元の側でつまずく場所は、窓の数にある
GitHubの操作でつまずく場所は、実はGitHubの中ではありません。どのファイルを記録に含めるかを決める作業はフォルダの一覧を見る側にあり、コマンドはターミナルの側にあり、エラーの意味を調べる作業はAIやブラウザの側にあります。3つの窓を行き来しながら1件の記録を作っていることになります。
窓と窓の間で、状態は渡りません。フォルダの一覧で選んだファイルは、ターミナルに移すときに手で打ち直すことになり、エラーの文面はまた別の窓に貼り直すことになります。最初の1回で詰まるのは、コマンドを知らないからではなく、この持ち替えが1件ごとに入るからです。フォルダとターミナルとAIが同じ窓にある形なら、この持ち替えそのものが起きません。
ファイル管理アプリごとに、どこまでを1つの窓に収めるかの考え方は違います。その設計の差は他のファイル管理との比較に並べてあり、実際に扱える範囲はできることで確認できます。手元を離れているときに作業の続きを引き取れるかどうかはiPhone・iPadから続きをにまとまっています。費用の考え方は料金にあり、細かい疑問はよくある質問に集めてあります。
よくある質問
GitとGitHubは何が違いますか?
Gitは手元のコンピューターで履歴を記録するバージョン管理システムで、GitHubはその記録を置く場所と、人が集まって差分を読み合う場所です。手元での記録はGitが担い、共有と議論をGitHubが担います。手元の問題を画面上で探しても解決しません。
認証はHTTPSとSSHのどちらを選べばよいですか?
提供元はHTTPSでの接続を推奨しています。資格情報を保存する仕組みで入力を省けるため、手数は少なくなります。SSHは使う機械ごとに鍵を作る必要があり、1年使っていない鍵は自動で削除されるため、触る頻度が低い用途には向きません。
無料のプランでどこまでできますか?
月額0ドルのプランで、公開と非公開の両方のリポジトリが無制限に作れます。依存関係の更新の自動化、月2,000分の自動実行、500MBのパッケージの保存領域、課題と計画の管理が含まれます。1人や数人での利用なら、この範囲で足ります。
最初の送信が弾かれるのはなぜですか?
GitHub側で空ではないリポジトリを作ったことが原因の場合が多いです。説明のファイルや無視の設定を自動で入れる選択をすると、手元と置き場に別々の記録ができます。空のまま作り直すか、置き場の側の記録を先に手元へ取り込んでから送ります。