【gitをソフト開発で使いこなそう!:第10回】GitHubにSSH接続してみよう!

次回の記事

terapotan.hatenablog.jp

前回の記事

terapotan.hatenablog.jp

連載記事一覧

  terapotan.hatenablog.jp

前回は、GitHubの概要を解説しましたが、今回は実際にGitHubを使ってソースコードを公開する手順を解説します。

Column:GitHubスクリーンショットについて

2020年6月23日、GitHubの操作方法(UI)が大きく刷新されました。
本連載第10回以降の操作方法の説明は、刷新される前に書かれたものです。大半の操作方法は同じと思われますが、実際の操作方法と異なる場合があります。

GitHubのアカウントを作成する

GitHubを使って、ソースコードを公開するには、まずGitHubのアカウントを作る必要があります。

github.co.jp

上のリンクから、GitHub公式ページに移動し、「サインアップ」をクリックしてください。

GitHubトップページ

後は、画面の指示に従えば登録出来るはずですが、上手くいかない場合は下のサイトを参考にしてみてください。

qiita.com

help.github.com

GitHubは無料で使うことも出来ますが、有料の料金プランを使うことでより機能が充実したGitHubを使うことも出来ます。

詳しくは、下のページをご覧ください。

github.co.jp

Column:個人向けFreeとプライベートリポジトリ

GitHubでは、全世界に公開するリポジトリ(パブリックリポジトリ)と非公開にするリポジトリ(プライベートリポジトリ)の2種類のリポジトリを作成することが出来ます。
以前は、個人向けFreeプラン(名前の通り、無料でGitHubを使える料金プラン)でプライベートリポジトリを作成することが出来ませんでしたが、2019年1月からFreeプランでもプライベートリポジトリを作成出来るようになりました。

古い記事だと、「Freeプランでは、プライベートリポジトリを作成することが出来ない」と書かれている場合があるため、注意が必要です。

プッシュするための設定をする

前回の説明で「ローカルリポジトリから、リモートリポジトリへ変更を反映する」という作業がありました。
この操作のことをプッシュと言います。
GitHubを使う場合、上の説明のリモートリポジトリがGitHubに当たります。

すぐにGitHub上でリポジトリを作成して、プッシュしたい所ですが、いくつか設定の手順を踏まなければなりません。

プッシュ出来る人を制限する

プッシュとは、先ほども説明した通り、リモートリポジトリに変更を反映することです。

GitHub上でリモートリポジトリを作成すると、基本的にそのリモートリポジトリは全世界に公開されてしまいます。そのため、何も考えないと誰でもあなたが作成したリモートリポジトリに、プッシュすることが出来てしまいます。(もしかしたら、コンピュータウイルスを埋め込まれるかもしれない)

そこで、あなたしかあなたが作成したリモートリポジトリにプッシュ出来ないようにしておく必要があります。
GitHubでは、いくつかこれを出来るようにする仕組みが用意されていますが、今回はSSHを使います。

SSHとは?

SSH(Secure Shell)とは、ざっくり言うと誰かに勝手にプッシュされたり、通信している内容を盗み見られないようにするために決めたプロトコル(決まり事)のことです。

今回は、SSHの仕組みについて詳しく説明しません。
詳しい仕組みが知りたい方は、下の記事をお読みください。

Column:デジタル署名とSSH

2020年現在、デジタル署名やSSHの仕組みについて検索しても正しい情報はほとんど出てきません。これは、インターネットだけでなく入門者向けの書籍も同じような状況です。
下に、デジタル署名やSSHの正しい説明が書かれた記事を載せておきました。最終的にネット検索した記事を見る場合でも、まず下の二つの記事に目を通しておいたほうが良いと思います。

terapotan.hatenablog.jp

qiita.com

秘密鍵と公開鍵

GitHubSSHの仕組みを使って、リモートリポジトリにプッシュするためには、秘密鍵公開鍵という二つの鍵を作成する必要があります。
また、公開鍵はGitHub上に登録する必要があります。
以下、具体的な手順を見ていきましょう。

鍵を作る

まずGitBashを開きます。
GitBashの開き方を忘れてしまった方は、第2回の記事をご覧ください。

そこで次のコマンドを入力します。

ssh-keygen -t rsa -b 4096 -C "GitHubで登録する時に使ったメールアドレス"

すると、次のようなメッセージが出て入力を求められますが、全て何も入力せずにEnterキーを押してください。

Enter a file in which to save the key (/c/Users/you/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Column:鍵の保存場所とパスフレーズ

最初の入力で求められたのは、鍵の名前です。指定しても問題ありませんが、名前を指定してしまうと鍵がある特定のフォルダに作成されません。
ある特定のフォルダに作成されないと、鍵を追加するための設定が余分に必要になります。
二つ目の入力で求められるのは、秘密鍵パスフレーズです。
秘密鍵は名前の通り、秘密にしなければいけません。もし漏れてしまうと、自分以外の誰かが勝手にリモートリポジトリにプッシュすることが出来てしまいます。
そこで、もし秘密鍵が漏れたとしても誰かに悪用されないように、秘密鍵を使うのにパスワードのようなものをかけておきます。これをパスフレーズといいます。(今回の設定では、指定していません。)

公開鍵を登録する

公開鍵をGitHub上に登録します。
次のコマンドを入力して、公開鍵の内容をクリップボードにコピーします。

clip < ~/.ssh/id_rsa.pub

続いて、先ほど作成したGitHubアカウントにログイン(サインアップのボタンの隣にサインインボタンがある。そこからログインすることが出来る。)します。

ログイン出来たら、プロフィール画像のアイコンをクリックしSettingsをクリックします。
Settingsの場所

サイドバーから、SSH and GPG keysをクリックします。
SSH and GPG keysの場所

New SSH keyもしくは、Add SSH keyをクリックします。
キー登録ボタンの場所

先ほどクリップボードにコピーした公開鍵の内容をKeyに貼り付けます。
公開鍵の貼り付け

Add SSH keyをクリックします。これで、リモートリポジトリにプッシュ出来るようにするための設定は完了しました。

設定が上手くいったか確認する

下のコマンドを入力します。

ssh -T git@github.com

設定が上手くいっていれば、次のような表示が出るはずです。

Hi <あなたのユーザネーム>! You've successfully authenticated, but GitHub does not provide shell access.

リモートリポジトリを作成する

プッシュするリモートリポジトリを作成します。
作成したGitHubのアカウントにログインし、左サイドバーのNewをクリックします。

Newボタンの位置

すると次のような画面が表示されます。

新規リポジトリ作成画面

Repository Name(リポジトリの名前)・Description(リポジトリの説明文。リポジトリ名の下に表示される。)を入力します。

その下にあるのは、作成したリポジトリを公開するか、非公開にするか選ぶボタンです。
Publicを選べば、リポジトリは公開され、Privateを選べば、リポジトリは非公開になります。
今回は、Privateにしています。

さらに下にあるのは、リポジトリを作成したときに最初から置いておくファイルを指定する欄です。今回は、何も設定しません。

全ての設定が完了したら、一番下のCreate repositoryをクリックします。

プッシュする

ローカルリポジトリを作成する

ボタンをクリックすると、次のような画面が表示されます。

リポジトリ作成画面

これで、GitHubにリモートリポジトリを作成することが出来ました。
ローカルリポジトリを作って、そこでの変更を今回作成したリモートリポジトリにプッシュしてみましょう。
適当なフォルダ(フォルダの中には、何も入れない)でGitBashを立ち上げます。

まず、新たなリポジトリを作成します。

git init

続いて、何かファイルを新たに作成してください。
ここでは、下の内容を書き込んだTest.txtというファイルを新たに作成します。

Test.txt
早くプッシュしたい

作成したファイルをステージングエリアに追加して、コミットします。

git add --all
git commit -m "firstcommit"

リモートリポジトリにプッシュする

作成したローカルリポジトリをリモートリポジトリにプッシュするには、プッシュする先の場所(アドレス)を指定する必要があります。
(……そりゃあそうですよね。どこにプッシュしていいか分からないと、プッシュしようがないですから。)

GitHub上で作成したリポジトリのアドレスは、先ほど見せた画像の青枠で囲ったところに表示されています。
今回作成したリポジトリのアドレスは、下のようになっています。

git@github.com:terapotan/BlogTestRepository.git

このアドレスを、ローカルリポジトリ側に追加します。

Column:Https

もし「https」から始まるアドレスが表示されていたら、アドレスの左隣にある「SSH」というボタンをクリックすると、「git@」から始まるアドレスが表示されます。
今回追加するのは、「git@」から始まるアドレスの方です。

リモートリポジトリのアドレスを追加するにはgit remoteコマンドを使います。
下のコマンドで、git@github.com:terapotan/BlogTestRepository.gitというアドレスをローカルリポジトリに追加します。

git remote add origin git@github.com:terapotan/BlogTestRepository.git

git remote -vと入力して、次のように表示されれば、追加されています。

origin  git@github.com:terapotan/BlogTestRepository.git (fetch)
origin  git@github.com:terapotan/BlogTestRepository.git (push)

次のコマンドを入力すると、プッシュを行うことが出来ます。

git push -u origin master

先ほど表示したリモートリポジトリのページをリロードすると、確かにTest.txtが追加されているのが分かります。

プッシュ後のリポジトリ

Column:origin?

git pushコマンドでは、プッシュする先のリモートリポジトリを指定する必要があります。
直接リポジトリのアドレスを指定しても、動作しますが、あの長いアドレスをいちいち打つのは面倒です。
そこで、「git remote add <名前> <リポジトリのアドレス>」とすることで、リポジトリのアドレスの別名を指定することが出来ます。
originと言う名前がよく使われているのは、gitがデフォルトで付けるリモート名(リポジトリのアドレスの別名)だからです。
そのため、originという名前に特別な意味があるわけではありません。
実際上の例でoriginをtestに変えても、動作します。

次回予告

次回は、git pushコマンドについて詳しく解説していきます。

う-ん、よく分からん!

この記事を読んで、疑問に思うことがあったときは、気軽にコメント欄や私のTwitterから質問してください。(すぐに答えを返せるとは限りませんが。)

参考文献

Pro Git

git,GitHubを使うにあたって必要なコマンドの使い方が詳しく解説されています。この連載を読んで分からないことや詳しく知りたいことがあったときはまずProgitを読んでみるといいでしょう。 git-scm.com

分散型と集中型バージョン管理

www.atlassian.com

分散型バージョン管理と集中型バージョン管理のデメリットとメリットについて書かれています。

次回の記事

terapotan.hatenablog.jp

前回の記事

terapotan.hatenablog.jp

連載記事一覧

terapotan.hatenablog.jp