Github Codespacesでブラウザ上に自宅と同期したVSCode環境が構築できた

**[2021/08/12追記]**　ついにGithub Team / Github Enterprise Cloudで正式リリースとなりました！無料ティアはなかったのですが、まだ個人向けが発表されていないので引き続きプレビュー版が有効になっている個人プランのユーザは無料で使い続けることができます。

https://github.com/features/codespaces

以前、Visual Studio Onlineが登場したときに[一通り遊んでみた記事](https://qiita.com/ku_suke/items/172625ff41ce45abae3a)を書きましたが、今回はそのVisual Studio Onlineが統合されたGithub Codespacesのベータ版が有効になっていたので使ってみることにしました。

リモートワークがずっと続いていることもあり、最近のメイン開発環境はWindowsのデスクトップ機+WSL2の環境を使っています。時々困るのがたまに家から出ると開発ができないという点です。VPNを張って自宅とつないでもいいのですが回線速度によっては快適じゃなかったので、今回のCodespacesを使って出先とメイン環境で継続して開発ができるかチャレンジしてみようと思います。**結論：iPad Proからも使えてめっちゃ快適でした**

# まずはサインアップ

Github Codespacesは現在ベータ版ですが、申し込むと割と使えるようです。僕のアカウントもすでに使えるようになっていました。
![Codespaces - Google Chrome 2021-08-04 18.36.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8727/e77f3483-b8e0-a713-5cba-02660e0df670.png)

[ここから申し込む](https://github.com/features/codespaces)とすでに有効になっていました。

![Sign up for the Codespaces beta - Google Chrome 2021-08-04 18.36.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8727/f2542c70-3767-69a6-26d8-3f90e9cc8a5e.png)

# リポジトリを選択してスタート

Codespacesを開始するには何らかのリポジトリを選ぶ必要があります。これから作成するプロジェクトで試してみたい場合は、事前にリポジトリを作成しておきましょう。今回は手元のPHP(Docker)プロジェクトで試してみます。

![docswell [Codespaces] - Visual Studio Code - Codespaces - Google Chrome 2021-08-04 19.37.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8727/d6916c7e-91b3-451d-3030-324795dfbf39.png)

こんなかんじでサクッとCodespacesが立ち上がります。普段黒いテーマにしているのでテーマが変えられるか試します。ついでに日本語環境もできるか試してみましょう。

![docswell [Codespaces] - Visual Studio Code - Codespaces - Google Chrome 2021-08-04 19.40.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8727/bd8bb682-3bdf-a14b-7bb3-f06029812885.png)

カラーテーマは設定から変更できて（Github Dark defaultはだめだったけど、普通のDarkはできた）日本語拡張もあるのですが・・・

![Extension_ Japanese Language Pack for Visual Studio Code - docswell [Codespaces] - Visual Studio Code - Codespaces - Google Chrome 2021-08-04 19.41.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8727/d4f65b61-35c9-fc9f-6fde-e283fa2fb7ad.png)

Install in browserになってますね。インストールはできましたがまだConfigure display languageメニューがなかったので日本語UIは対応していないようです。

ちなみに、結構動作速度が速いな、と思ったのですが、今回割り当てられているインスタンスは、**vCPU 4コア、メモリ8GBのインスタンスのようでした。リージョンはシンガポール**でした。そりゃ快適ですね。なおマシンタイプは将来的に選べるようです。

# さっそくDockerを起動

さて、気を取り直して開発していきましょう。まずはDockerを起動して動作確認です。

```console
# codespace ➜ /workspaces/docswell (dev ✗) 
$ docker-compose build
$ docker-compose up -d
$ docker-compose exec web composer install
```

標準でDockerもdocker composeもインストール済みなのでスムーズに起動しました。あれ、そういえばどこで動作確認するんだろう、と思いきや右下のパネルで教えてくれます。
動作確認には専用のサブドメインを用いることで起動したコンテナのforwarded portと接続可能になるようです。すごーい

https://{username}-{reponame}-{codespaceid}-{PORT}.githubpreview.dev/

というドメインです。`-{PORT}.githubpreview.dev`以外の部分はエディタと同じなので覚えやすいですね。

そして、普通に起動しました。どーん
![スライドやPDFをかんたん共有 _ ドクセル - Google Chrome 2021-08-04 20.40.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8727/dc742c8e-b9eb-fb17-503b-bec9b69ba357.png)

# ほかのリポジトリからコードを取得する

CSSが当たってないなと思い確認すると、yarnがこけてました。フロントは別リポジトリになっていたので取得できなかったようです。

調べてみたところ、Codespacesで他のプライベートリポジトリにアクセスするには2つの方法があるようです。

## HTTP経由で取得する（かんたん）

GithubのSettingsにいって、リポジトリに許可を与えるだけです。すべてに与えることも選択することも可能です。
https://github.com/settings/codespaces

![Codespaces - Google Chrome 2021-08-04 23.10.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8727/6482cd80-612d-24ea-4505-f0f41926471d.png)

そのままだと反映されないようなので、いちど左下のCodespaceボタンからコマンドパレットを呼び出しし「現在のCodespacesを中断する」で停止し、その後再度Startすれば反映されます。

## SSH経由で取得する

SSHキーを生成して登録してみます。Codespaces上のファイルは、Githubによって認証された自分しかアクセスできない場所なので、個人利用においてはリポジトリアクセスの秘密鍵を置いても安全と考えてよいでしょう。ただし、ベータ期間中いつストレージがクリアされるかわからないので、必要に応じてバックアップを取りましょう。

```shell-session
$ ssh-keygen -t rsa -b 4096 -C "ku-suke@example.com"
$ ssh-add ~/.ssh/id_rsa
Identity added: /home/codespace/.ssh/id_rsa (ku-suke@example.com)

$ cat ~/.ssh/id_rsa.pub
# この公開鍵をgithubにセットする

# ためしにcloneしてgithubのfingerprintを受け入れる
$ git clone ssh://git@github.com/ku-suke/docswell-player.git
略
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
```

これでyarnも動きました。

# ブラウザではなくデスクトップのVSCodeからつないでみる

ここからは今回のGithub Codespacesの便利さを生かして、デスクトップ機のVSCodeで開いてみようと思います。左下のCodespacesボタンを押すと、うえのパレットからメニューが表示されます。

![.env - docswell [Codespaces] - Visual Studio Code - Codespaces - Google Chrome 2021-08-04 21.20.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8727/0e01af61-3671-48db-94b7-b5c9d777c183.png)

VSCodeで開くメニューを選びます

![.env - docswell [Codespaces] - Visual Studio Code - Codespaces - Google Chrome 2021-08-04 21.22.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8727/718411c8-f0df-ea8b-cfcb-7d50be21f479.png)

VSCodeが立ち上がって、拡張機能を入れよと指示が出るので入れます。
![Visual Studio Code 2021-08-04 21.23.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8727/eefdfd33-7903-5711-5b02-5795a27fbac9.png)

その後、再度ウィンドウをひらくと、今度はGithubにログインするよう求められるので、ログインします。

![.env - docswell [WSL_ Ubuntu] - Visual Studio Code 2021-08-04 21.24.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8727/313cda12-7621-1481-971b-05bd50b625d0.png)

無事開けました。拍子抜けするほど簡単です。

左下がCodespacesになっていたり、ターミナルがローカルではなくCodespacesのコンテナ上にいることから、確かにつながっていることが分かります。

![docswell [Codespaces] - Visual Studio Code 2021-08-04 21.27.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8727/ece216fa-2d97-c61c-9b2f-c020431fd218.png)

ここで、デスクトップ側でファイルを作成してみましょう

![docswell [Codespaces] - Visual Studio Code 2021-08-04 21.32.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8727/027e9597-0bf0-7571-c544-fd37adf42a53.png)

スクショだとわかりづらいのですが、ブラウザ側にも即座に反映されていました！内容の編集に関しても、保存するたび反映されるようです。
![testfile.txt - docswell [Codespaces] - Visual Studio Code - Codespaces - Google Chrome 2021-08-04 21.34.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8727/f70b234a-d60d-2b30-358c-9a61de3ce247.png)


# iPad Proでもためしてみる。

![iOS の画像 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8727/7d273b94-7f5f-6d1d-c6d2-08e1b3ac9aba.png)

ばっちり同期できてます。こちらはChromeで試したものですが、Safariで開いた後、「ホーム画面へ追加」すると全画面Webアプリとして起動するので、より画面を広く使うことができました。

ターミナルにカーソルが最初合わなかったのですが、タブを切り替えると利用できるようになりました。以前code-serverという製品を自分のLinuxにサーバとしてインストールしたときよりもかなり完成度が高いといえます。前も書いたけどたぶんこういう感じでつながってるんだと思います。

![プレゼンテーション2 - PowerPoint 2021-08-04 23.32.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8727/748260ac-afc5-2a20-19c7-d8088def5806.png)

現状では、VS Onlineにあったオンプレ環境含むself-hostedなVMは利用できないようですが、要望が上がっていたのでいつかロードマップに乗るのではないかと思います。

# まとめ

- UIの完成度、速度、安定性など、以前Visual Studio Onlineが初めて出た時より格段に上が
ってる
- 今回は省略したけど、Secretsやdotfileなど便利な仕組みが用意されている
- 今はベータ期間中で完全無料で、希望としてはGithub Actionのように月160時間分くらい無料枠で提供されると嬉しい、マイクロソフトさんお願いします！

追記：正式版のPricingをみると、CPU 4 core 16GB ramで160時間でストレージ込み月額6500円くらいでしょうか。割と安い。

というわけで、Githubで開発している人は一度試してみると良さそうです！

https://github.com/features/codespaces

本記事はQiitaエンジニアフェスタ2021参加記事です。

https://qiita.com/official-campaigns/engineer-festa/2021