WSLでVSCodeをつかってGithubにリポジトリを上げる

ちゃお

塩ハム(d)と申します

この記事は[みすてむず いず みすきーしすてむず (3) Advent Calendar 2023](https://adventar.org/calendars/8615 "あどかれ")　9日目の記事です。
私が入っているMisskeyインスタンスの[みすてむず　いず　みすきーしすてむず](https://misskey.systems/ "みすてむず")でアドベントカレンダーを書くということで、なんやめんどくさいなぁと思いながらキーボードカチャカチャしてみました

ということですので本題に入るぜ

# __WSLでVSCodeを使ってGithubにリポジトリを上げる方法__

WSLからVSCodeをつかってGithubにリポジトリを上げるのに失敗を何度もしたんですよね
なんでかな～こわいな～と思っていたので、いろいろ調べて解決しました

簡単に説明すると、ssh-agentがWSLでは自動起動しないようでしたので

- ssh-agentを自動起動するようにする
- ssh-keyを生成、ssh-addでssh-agentに追加する
- Githubにパブリックキーを登録する
- VSCodeでGithub接続protocolをsshに変更する

の手順が必要になりました
順に説明していきます

### __ssh-agentの自動起動__

やはり公式の用意したページは見るものですね……
まずは自分のWSLに入ってください……入りましたね？
その後[こちらのページ](https://docs.github.com/ja/authentication/connecting-to-github-with-ssh/working-with-ssh-key-passphrases?platform=windows#auto-launching-ssh-agent-on-git-for-windows "SSH キーのパスフレーズを使う")に書けばいい内容が用意されていますので、`vim ~/.bashrc`などでファイル末尾に追記してください

……えっGit for Windowsで～～が気になるって？
よく見てみるといい、これはShell Commandです

```vim:.bashrc
env=~/.ssh/agent.env

agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }

agent_start () {
    (umask 077; ssh-agent >| "$env")
    . "$env" >| /dev/null ; }

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2=agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
    ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
    ssh-add
fi

unset env
```

その後`source ~/.bashrc`で有効化されます

### __ssh-key生成とssh-agent登録__

次はssh-keyを生成します
これも[このページ](https://docs.github.com/ja/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent#generating-a-new-ssh-key "新しい SSH キーを生成して ssh-agent に追加する")に書いてあるやつですね
秘密鍵公開鍵暗号の奴です、さっそく作っていきましょう


```bash
ssh-keygen -t ed25519 -C "your_email@example.com"
> Generating public/private ALGORITHM key pair
# 次のコマンドで場所とファイル名を決めてください、めんどくさければデフォルトいいです
> Enter a file in which to save the key (/home/YOU/.ssh/ALGORITHM):[Press enter]
# パスフレーズを入れて下さい、忘れないようにしましょう
> Enter passphrase (empty for no passphrase): [Type a passphrase]
> Enter same passphrase again: [Type passphrase again]
```

まずこれでssh-keyが生成されます
何も変更しなければ`/home/YOU/.ssh/id_ed25519`と`/home/YOU/.ssh/id_ed25519.pub`ができているはずです
次はssh-agentへの登録ですが、一つ前の手順でssh-agentは起動できているはずです
なので次のコマンドで登録しましょう

```bash
ssh-add ~/.ssh/id_ed25519
```

### __Githubにパブリックキーを登録する__

これは簡単です
まずGithubのアカウントは持っていると思うので、Githubにログインし __Setting > SSH and GPG keys__ に行きます

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668804/b4b1e898-d83c-9b42-76c6-f0a4834f2d11.png)

__New SSH key__ を押してください

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668804/02d59487-d037-a239-e102-34c6935b9dcb.png)

Titleは自分の好きなわかりやすいものを付けるといいでしょう、「ちわーWSLでーす」とか
そしてKeyには先ほど作った`id_ed25519.pub`の中身をコピペしてください

以上で登録完了です

### __VSCodeでGithub接続protocolをsshに変更する__

ここまで来たらあとは簡単です
再びWSLに戻り、`code .`でVSCodeを開きましょう

そうしたら設定を開き、検索欄に`git protocol`を入力します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668804/a1b8131a-cb0b-b653-0f6b-7ec15c7faf24.png)

この項目をsshに変更します
リモートでも忘れずにsshに変更しましょう

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668804/4a2ad89a-cd65-97d7-5728-492bab3f3308.png)

以上にて設定は終了です
お疲れ様でした

最後にテストをしてみますね

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668804/b8f91070-2791-8ba2-f21f-945ebc354e20.png)　　　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668804/9821966e-1bbe-a40e-b67f-4f1164a0029d.png)

この状態でGithubに公開を押します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668804/3e27b47d-0d27-270e-619b-20c5172fc534.png)

privateかpublicを選択(今回はprivate)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668804/e43aa4fa-8d74-3a64-bc31-35684f956c54.png)

OKを押し、しばらく待ちます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668804/b5782eba-9bf5-e988-79c6-bfd29ebb3b09.png)

Githubに行くと

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668804/d91f12db-95c8-f425-6b3d-106087fcd0e9.png)

リポジトリを初期化し、プッシュすることができました

# __最後に__

これだけのことに結構な労力を使いましたわたし()
しかし、直接Githubをいじれるようにできるのはかなりのメリットとなりましたので、誰かの参考になればなぁと思います

以上、ありがとうございました
明日の記事はCanonさんです