Visual Studio Codeを利用して開発したソースコードをgithubで管理するためのあれこれを記事にしてみました。
この記事では、Visual Studio Codeでgitが扱えるようにセットアップを行います。ついでにbash環境も手にはいります。
(2020年4月に試した際の手順です)
githubのアカウントを作成する
githubのアカウントを持っていない場合はアカウントを作成します。
git for windowsのインストール
git for windowsをインストールします。オプションはデフォルトのままで良いかと。インストールパスを変更するとVisual Studio Codeが自動でgit bashなどを見つけられずに面倒になるかもしれません(参考記事)。
VS Codeのターミナルをgit bashに
Visual Studio Codeのターミナルをgit bashに変更します(bashの方が慣れてるし)。
まずはCommand Palletを開きます(CTRL+SHIFT+P)。そこへ、
>select default shell
と入力します(大なり記号ははじめから入力されています)。入力後エンターキーを押してこのコマンドを実行するとシェルの一覧が表示されます。そこにgit bashが出てきているはずなのでこれを選択します。
以降ターミナルを起動(CTRL+SHIFT+@)するとgit bashが起動するようになります。
Command Palletは補完機能があるので、途中までの入力でも、>sedeshのようないい加減な入力でもコマンドが実行できるので慣れるとすごく便利ですね。
鍵ペアを作成する
githubへアクセスする場合はssh接続が便利かなと思うので、ssh接続を行うための公開鍵と秘密鍵を作成します。
VS Codeからターミナル(git bash)を起動し、ssh-keygenコマンドを実行して鍵ペアを作成します。
ssh-keygen -t rsa -b 4096 -C "comment"
-Cオプションには、鍵を識別するための任意のコメントを指定してください。コマンドを実行するとファイルパスとパスフレーズについて質問を受けます。ここではファイルパスはデフォルトのまま、パスフレーズは省略せずに入力したものとして話をすすめます。
公開鍵をgithubに登録する
ブラウザでgithubへログインし、setting > SSH and GPG keysからSSHの公開鍵を登録します。New SSH keyボタンを押して、適当なタイトルと生成した公開鍵を入力します。
windowsの場合、git bashで以下のコマンドを実行して公開鍵をクリップボードにコピーし、それをそのままペーストするのが楽です。
clip < ~/.ssh/id_rsa.pub
疎通確認
githubにアクセスできるかどうかを確認してみます。
ssh -T git@github.com
コマンドを実行します。
するとfingerprintが表示され、続行しても良いかを聞かれます。正しいfingerprintはgithubのドキュメントに掲載されているので、表示されたfingerprintがドキュメントの内容と一致するかを比較します。
一致していたらyesと入力して続行しましょう。
(fingerprintの確認、結構スルーしちゃうんですよね・・・)
次はパスフレーズの入力を求められるので正しい値を入力します(鍵を生成した際にパスフレーズを指定した場合のみ)。
最後に、
Hi! [ユーザー名]! You've successfully authenticated, but GitHub does not provide shell access.
のように表示されたら疎通OKです。
githubのドキュメントも参考になります。
ssh-agentでパスフレーズの入力を省略
疎通は成功しましたが、パスフレーズを省略しない場合はこの後sshでアクセスする都度入力を求められます
さすがにそれは面倒なので、ssh-agentを使用して秘密鍵とパスフレーズを覚えてもらいます。
手動で実行する場合は、
eval `ssh-agent`
というコマンドを打ち込みます(evalコマンドでSSH_AGENT_PIDなどの環境変数が設定されます)。
次に、
ssh-add
コマンドを実行して秘密鍵をssh-agentに追加します。その際パスフレーズを効かれるので正しい値を入力しておきます。
この状態で再び疎通確認を行うと今度はパスフレーズを聞かれることなく疎通に成功します。
ssh-agentが不要になった場合は、
ssh-agent -k
というコマンドを実行すると、ssh-agentの終了と環境変数の後始末が行われます。
面倒なので・・・
毎回手動でssh-agentを起動するのは面倒なので、.bashrcに
SSH_AGENT_OUT=$HOME/.ssh-agent test -f $SSH_AGENT_OUT && . $SSH_AGENT_OUT ssh-add -l >/dev/null 2>&1 ret=$? if [ $ret -eq 2 ] ; then ssh-agent > $SSH_AGENT_OUT . $SSH_AGENT_OUT ssh-add elif [ $ret -eq 1 ] ; then ssh-add fi ssh-add -l
みたいな適当なスクリプトを組んで、bash起動時にssh-agentの起動とssh-addの実行を行うようにしています。
VS Codeでterminalを起動した場合は初回のみパスフレーズの入力を求め、2つめ以降のterminalを起動してもパスフレーズの入力は不要です。
この方式だとssh-agentが1プロセス常駐するので、不要になったらkillが必要です。
exec ssh-agent $SHELLというやり方も試してみたのですが、VS Codeのterminalから実行するとssh-agentのプロセスが浮く問題があったのでこちらは突き詰めませんでした。
ところでパスフレーズは必要なのか
原則指定した方が良いと思います。
ただ自分の場合、セキュリティが厳重な箇所に秘密鍵が置かれており、これを外部へ持ち出すこともないのであれば、パスフレーズを省略することもあります(面倒だもん)。
コメント