GitHub Codespacesでどこでも同じ環境が使える!

## これは何?

https://github.com/features/codespaces

- GitHub Codespacesという開発用のVMをGitHub上に作成できるらしいので試してみました。
- 自分は無料枠の存在を知らなかったので，意外と知らない人がいるんじゃないかと思い，記事にしてみました。

### この記事から学べること

- GitHub Codespacesとはなにか，課金体型
- 無料枠を超えたら使用できなくなる設定方法
- 試した感想と優位点など

---

## 価格について

[GitHub Codespacesの請求について](https://docs.github.com/ja/billing/managing-billing-for-your-products/managing-billing-for-github-codespaces/about-billing-for-github-codespaces)

- 無料枠が毎月あり，超えた分が請求される(ただし，limitを設けられるため無制限に課金されることはなく，0も設定可能)
- 基本的にGB月数とコア時間数で金額が決まる。

> GB 月
> ストレージの GB/月という単位は時間ベースの測定値であり、1 GB/月は 1 GB のストレージを 1 か月間使用できます。 すべての codespace と prebuild によって使われているディスク領域が 1 時間に 1 回評価されて、現在の GB/月の使用量が再計算されます。 そのため、codespace と prebuild がある間は、GB/月の使用量が月を通して増加します。 たとえば、ストレージの合計が 15 GB で、1 か月の請求サイクルを通して変わらない場合は、半月の時点で 7.5 GB、月末の時点で 15 GB 使われます。 この記事で後述する「ストレージ使用に対する請求について」を参照してください。
> コア時間
> "コア時間" は、含まれるコンピューティング使用量に対して使われるメジャーです。 コア時間を計算するには、codespace がアクティブになっていた時間数に、この記事の後半に出てくる料金表の乗数を掛けます。 基本的なマシンの種類の場合、乗数は、codespace をホストするマシン内のプロセッサ コアの数です。 次に例を示します。
> - 2 コア マシンを 1 時間使うと、2 コア時間に相当します
> - 8 コア マシンを 1 時間使うと、8 コア時間に相当します
> - 8 コア マシンを 2 時間使うと、16 コア時間に相当します

### 使用状況の確認

[GitHub CodeSpacesの仕様状況の表示](https://docs.github.com/ja/billing/managing-billing-for-your-products/managing-billing-for-github-codespaces/viewing-your-github-codespaces-usage)

- [請求ページ](https://github.com/settings/billing/summary)で現在の使用状況を確認できる
- [請求の制限ページ](https://github.com/settings/billing/spending_limit)から上限課金額や通知の設定が行える

### コア時間を減らして使用量を減らす

- Idle timeoutは[アカウントの設定ページ](https://github.com/settings/codespaces)から設定可能。
- 停止しているCodeSpaces似関してはGB月数のみの課金になるので使用量の節約になる(ゼロになるわけではない)。

> コンピューティング使用量は、codespace を停止することで制御できます。 詳細については、「codespace の停止と開始」を参照してください。 codespace は、構成可能な非アクティブ期間後に自動的に停止されます。 タイムアウト期間は、ユーザーによって、または Organization レベルで構成できます。 「GitHub Codespaces のタイムアウト期間を設定する」と「アイドル タイムアウトの期間を制限する」を参照してください。
> [コンピューティングの使用量の課金について](https://docs.github.com/ja/billing/managing-billing-for-your-products/managing-billing-for-github-codespaces/about-billing-for-github-codespaces#about-billing-for-compute-usage)

---

## 無料で試したい人向けの設定

自分は一旦無料で試したいので，誤って課金されることのないように以下の設定を行いました。

- [個人用アカウントに含まれる月間ストレージとコア時間](https://docs.github.com/ja/billing/managing-billing-for-your-products/managing-billing-for-github-codespaces/about-billing-for-github-codespaces#monthly-included-storage-and-core-hours-for-personal-accounts)のみの使用になる。

> 個人用アカウントには、次のストレージとコア時間の使用量が無料で含まれています。
> | アカウント プラン           | 1 か月あたりのストレージ | 1 か月あたりのコア時間 |
> |------------------------------|--------------------------|------------------------|
> | 個人用アカウント用の GitHub | 15 GB/月                | 120                    |
> | GitHub Pro                  | 20 GB/月                | 180                    |

- [Spending limits](https://github.com/settings/billing/spending_limit)の設定ページから0にしておけば無料枠を超えたらCodeSpacesが使えなくなる。
- [利用上限のメール通知](https://docs.github.com/ja/billing/managing-billing-for-your-products/managing-billing-for-github-codespaces/managing-the-spending-limit-for-github-codespaces#managing-usage-and-spending-limit-email-notifications)も可能。チェックボックスをつけておくと，上限の75%，90%，100%に達するとメール通知が飛ぶ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/d629bde5-0006-f387-2def-7abe7eeba650.png)

---

## ためしてみる 

1. New codespaceで環境を作る
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/280ed981-8134-e888-af00-72f4bef96025.png)
    
    :::note warn
    空のリポジトリだとエラーになる
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/ba9953f5-e612-9c7b-5e6e-bd928796974c.png)

2. リポジトリを選択してCodeSpacesを作成する

    :::note info
    Dev Containerとdotfilesに対応している。
    ![Screenshot from 2025-01-14 20-56-42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/28115e32-18c7-8ef3-1e31-fdb8c50d76d4.png)
    dotfilesは[code spacesの設定ページ](https://github.com/settings/codespaces)から
    設定しておくと全CodeSpacesに共通のdotfilesをインストールできる。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/a18602be-bace-6c76-e953-9edd57efa766.png)

    dotfilesディレクトリは`/workspaces/.codespaces/.persistedshare/dotfiles/`にマウントされる。

3. ブラウザから開いてみる
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/76ed4571-ccc1-3aff-83ac-3adadf167d9f.png)
    ブラウザから開くとそのままVSCodeのような画面が表示される。

    :::note info
    ちなみに，[VSCodeのExtensions](https://marketplace.visualstudio.com/items?itemName=GitHub.codespaces)があり，これを使うとローカルのVSCodeから開くこともできる。
    こっちのほうがブラウザよりも若干レスポンスが早い気がする。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/31ad245a-a39e-303b-48b0-c06c09c0d629.png)

---

## 環境のクリーンアップ

[codespaceの設定ページ](https://github.com/codespaces)から削除できる。

---

## GitHub Codespacesの使いどころ

- 短期間だけ入ってくる人と開発環境を共有したい時: [GitHub Codespaceを使った開発環境のメリットをまとめてみた](https://tech.dentsusoken.com/entry/2023/07/10/GitHub_Codespace%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E3%81%AE%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88%E3%82%92%E3%81%BE%E3%81%A8%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F)に記載があったが，`git clone`や`git pull`のためにトークンやsshの公開鍵を設定するみたいな手間が省けるのが一番でかいと思う。    
- VDIの代替として: 画面は飛ばさないのでVDIよりはレイテンシが良さそう。
- 社内ネットワークの制約が厳しい: クラウド上に環境が閉じるので社内ネットワークの制約を受けずに好きなツールが使える