【gitをソフト開発で使いこなそう!:第10回】GitHubにSSH接続してみよう!
前回は、GitHubの概要を解説しましたが、今回は実際にGitHubを使ってソースコードを公開する手順を解説します。
2020年6月23日、GitHubの操作方法(UI)が大きく刷新されました。
本連載第10回以降の操作方法の説明は、刷新される前に書かれたものです。大半の操作方法は同じと思われますが、実際の操作方法と異なる場合があります。
GitHubのアカウントを作成する
GitHubを使って、ソースコードを公開するには、まずGitHubのアカウントを作る必要があります。
上のリンクから、GitHub公式ページに移動し、「サインアップ」をクリックしてください。
後は、画面の指示に従えば登録出来るはずですが、上手くいかない場合は下のサイトを参考にしてみてください。
GitHubは無料で使うことも出来ますが、有料の料金プランを使うことでより機能が充実したGitHubを使うことも出来ます。
詳しくは、下のページをご覧ください。
GitHubでは、全世界に公開するリポジトリ(パブリックリポジトリ)と非公開にするリポジトリ(プライベートリポジトリ)の2種類のリポジトリを作成することが出来ます。
以前は、個人向けFreeプラン(名前の通り、無料でGitHubを使える料金プラン)でプライベートリポジトリを作成することが出来ませんでしたが、2019年1月からFreeプランでもプライベートリポジトリを作成出来るようになりました。
古い記事だと、「Freeプランでは、プライベートリポジトリを作成することが出来ない」と書かれている場合があるため、注意が必要です。
プッシュするための設定をする
前回の説明で「ローカルリポジトリから、リモートリポジトリへ変更を反映する」という作業がありました。
この操作のことをプッシュと言います。
GitHubを使う場合、上の説明のリモートリポジトリがGitHubに当たります。
すぐにGitHub上でリポジトリを作成して、プッシュしたい所ですが、いくつか設定の手順を踏まなければなりません。
プッシュ出来る人を制限する
プッシュとは、先ほども説明した通り、リモートリポジトリに変更を反映することです。
GitHub上でリモートリポジトリを作成すると、基本的にそのリモートリポジトリは全世界に公開されてしまいます。そのため、何も考えないと誰でもあなたが作成したリモートリポジトリに、プッシュすることが出来てしまいます。(もしかしたら、コンピュータウイルスを埋め込まれるかもしれない)
そこで、あなたしかあなたが作成したリモートリポジトリにプッシュ出来ないようにしておく必要があります。
GitHubでは、いくつかこれを出来るようにする仕組みが用意されていますが、今回はSSHを使います。
SSHとは?
SSH(Secure Shell)とは、ざっくり言うと誰かに勝手にプッシュされたり、通信している内容を盗み見られないようにするために決めたプロトコル(決まり事)のことです。
今回は、SSHの仕組みについて詳しく説明しません。
詳しい仕組みが知りたい方は、下の記事をお読みください。
2020年現在、デジタル署名やSSHの仕組みについて検索しても正しい情報はほとんど出てきません。これは、インターネットだけでなく入門者向けの書籍も同じような状況です。
下に、デジタル署名やSSHの正しい説明が書かれた記事を載せておきました。最終的にネット検索した記事を見る場合でも、まず下の二つの記事に目を通しておいたほうが良いと思います。
秘密鍵と公開鍵
GitHubでSSHの仕組みを使って、リモートリポジトリにプッシュするためには、秘密鍵と公開鍵という二つの鍵を作成する必要があります。
また、公開鍵は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:
最初の入力で求められたのは、鍵の名前です。指定しても問題ありませんが、名前を指定してしまうと鍵がある特定のフォルダに作成されません。
ある特定のフォルダに作成されないと、鍵を追加するための設定が余分に必要になります。
二つ目の入力で求められるのは、秘密鍵のパスフレーズです。
秘密鍵は名前の通り、秘密にしなければいけません。もし漏れてしまうと、自分以外の誰かが勝手にリモートリポジトリにプッシュすることが出来てしまいます。
そこで、もし秘密鍵が漏れたとしても誰かに悪用されないように、秘密鍵を使うのにパスワードのようなものをかけておきます。これをパスフレーズといいます。(今回の設定では、指定していません。)
公開鍵を登録する
公開鍵をGitHub上に登録します。
次のコマンドを入力して、公開鍵の内容をクリップボードにコピーします。
clip < ~/.ssh/id_rsa.pub
続いて、先ほど作成したGitHubアカウントにログイン(サインアップのボタンの隣にサインインボタンがある。そこからログインすることが出来る。)します。
ログイン出来たら、プロフィール画像のアイコンをクリックしSettings
をクリックします。
サイドバーから、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
をクリックします。
すると次のような画面が表示されます。
Repository Name(リポジトリの名前)・Description(リポジトリの説明文。リポジトリ名の下に表示される。)を入力します。
その下にあるのは、作成したリポジトリを公開するか、非公開にするか選ぶボタンです。
Publicを選べば、リポジトリは公開され、Privateを選べば、リポジトリは非公開になります。
今回は、Privateにしています。
さらに下にあるのは、リポジトリを作成したときに最初から置いておくファイルを指定する欄です。今回は、何も設定しません。
全ての設定が完了したら、一番下のCreate repository
をクリックします。
プッシュする
ローカルリポジトリを作成する
ボタンをクリックすると、次のような画面が表示されます。
これで、GitHubにリモートリポジトリを作成することが出来ました。
ローカルリポジトリを作って、そこでの変更を今回作成したリモートリポジトリにプッシュしてみましょう。
適当なフォルダ(フォルダの中には、何も入れない)でGitBashを立ち上げます。
まず、新たなリポジトリを作成します。
git init
続いて、何かファイルを新たに作成してください。
ここでは、下の内容を書き込んだTest.txtというファイルを新たに作成します。
早くプッシュしたい
作成したファイルをステージングエリアに追加して、コミットします。
git add --all git commit -m "firstcommit"
リモートリポジトリにプッシュする
作成したローカルリポジトリをリモートリポジトリにプッシュするには、プッシュする先の場所(アドレス)を指定する必要があります。
(……そりゃあそうですよね。どこにプッシュしていいか分からないと、プッシュしようがないですから。)
GitHub上で作成したリポジトリのアドレスは、先ほど見せた画像の青枠で囲ったところに表示されています。
今回作成したリポジトリのアドレスは、下のようになっています。
git@github.com:terapotan/BlogTestRepository.git
このアドレスを、ローカルリポジトリ側に追加します。
もし「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が追加されているのが分かります。
git pushコマンドでは、プッシュする先のリモートリポジトリを指定する必要があります。
直接リポジトリのアドレスを指定しても、動作しますが、あの長いアドレスをいちいち打つのは面倒です。
そこで、「git remote add <名前> <リポジトリのアドレス>」とすることで、リポジトリのアドレスの別名を指定することが出来ます。
originと言う名前がよく使われているのは、gitがデフォルトで付けるリモート名(リポジトリのアドレスの別名)だからです。
そのため、originという名前に特別な意味があるわけではありません。
実際上の例でoriginをtestに変えても、動作します。
次回予告
次回は、git push
コマンドについて詳しく解説していきます。
う-ん、よく分からん!
この記事を読んで、疑問に思うことがあったときは、気軽にコメント欄や私のTwitterから質問してください。(すぐに答えを返せるとは限りませんが。)
参考文献
Pro Git
git,GitHubを使うにあたって必要なコマンドの使い方が詳しく解説されています。この連載を読んで分からないことや詳しく知りたいことがあったときはまずProgitを読んでみるといいでしょう。 git-scm.com
分散型と集中型バージョン管理
分散型バージョン管理と集中型バージョン管理のデメリットとメリットについて書かれています。