iPad Next.js GitHub Codespacesでの開発環境の構築と注意点

# iPadで開発がしたいなあ
なんてことを俺は漠然と考えていた。

<details><summary>紆余曲折はこちら</summary>
VSCodeのアプリとかないし、そもそもiPadでローカルホストとか立ち上げられんのか？
など考えていた。
そこでperplexityタソに聞いてみたところ、

> iPadでNext.jsアプリケーションを開発する場合、以下の環境構成がベストだと考えられます:
Blink + GitHub Codespaces
これが現時点で最も優れた選択肢です。
Blinkは最近大幅にアップデートされ、VSCodeライクなエディタ機能が追加されました。
GitHub Codespacesと組み合わせることで、フル機能のクラウド開発環境を利用できます。
codeコマンドでVSCodeライクなエディタを起動でき、iPad内のファイルにもアクセス可能です。

と言われてBlinkをダウンロードしてみたらそれはもう有料でもう...
[codesandbox](https://codesandbox.io/)とかでもいいやん！
とは思ったけどなんか違う。やっぱりVSCodeみたいなのがいい！
待てよ...CodespacesってあのGithubのリポジトリ上で「.」押したら使えるあれだよな...
あれはもうVSCodeですやん。ブラウザ上で開発するのが嫌じゃなければ問題なくね？？？
</details>

よっしゃGithub Codespacesでやるぞ！
※ お気づきの方もいるでしょうが別にiPadに限った話ではないです

# 事前準備
- Githubアカウント
- 最低限のコマンドライン操作
- 最低限のGit及びGithubの知識

:::note info
記事を書くにあたって全部PCでやっていますので悪しからず（iPadちゃうんかい）
:::

# 環境構築
## リポジトリを作る
今回は「codespaces-demo」という名前のリポジトリを作りました。
空っぽだあ
![スクリーンショット 2024-09-26 15.50.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147005/12b0b11b-582f-67ad-720a-733b333b88b7.png)

## Codespacesを起動させる
リポジトリの画面で「Create a codespace」ボタンを押しましょう。押して！
空では無い場合（例えばREADME.mdだけあったり）は「.」を押して起動しましょう。押して！
![スクリーンショット 2024-09-26 15.58.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147005/35a1ec2e-3ffd-82de-3c33-8fbd7ccf1f60.png)


## ターミナルを表示させる
右上の画面下に何か出しそうなボタンからターミナルを表示させましょう。
![スクリーンショット 2024-09-26 15.58.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147005/b1522d50-1c6b-7f78-1b4c-c557d76a47f8.png)

## Next.jsのプロジェクトを作成
以下のコマンドでプロジェクトを作成します。yesyesyesyes
```sh
npx create-next-app@latest
```
できました。
![スクリーンショット 2024-09-26 16.03.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147005/b2953e3b-97b9-7d2b-4815-2d3ee01c4ce5.png)
## サーバーの起動
以下のコマンドでいつものノリでサーバーを起動しようとしてみましょう。
```sh
cd my-app/
npm run dev
```
そしたら右下にlocalhost:3000はこっちだ！と言ってきます。クリックしましょう。見逃さないようにしましょう。
![スクリーンショット 2024-09-26 16.05.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147005/f338b1d9-817e-7371-65fb-8964376ab856.png)

## 環境構築完了
無事環境構築が完了しました。
![スクリーンショット 2024-09-26 16.07.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147005/d616ac9e-d773-144e-db83-757b3e8437cf.png)
codespaces側で文言などを変更したらリロードなしでちゃんと更新されますし、ローカルの環境構築と遜色なく開発ができるかと思います。

# 諸々のインスタンスはどうなっているのか
## 2回目以降はどうなるのか
こちらが本題まであるんすけど、
次の日に開発しようかなと思った時、この手順で進めるとどうなるのかなんですが、
こうなります。
※ 初回にREADME.mdとか作ってる人は初回からこんな感じ
![スクリーンショット 2024-09-26 16.12.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147005/b5608f18-391e-2d52-628c-92f29c6c5d72.png)
この場合「GitHub Codespacesで作業を続ける」ボタンを押すのですが、
こんな選択肢が出ます。
![スクリーンショット 2024-09-26 16.12.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147005/dfba238c-c940-29ea-3b84-ee7d31b9cbe2.png)
起動するインスタンスのスペックが選べるんですねえ。そうか。ほなええやつの方がええやろ。

## 全て消えている
マージしていないファイルはもちろん消えています。
拡張機能の設定とかも全部消えています。
![スクリーンショット 2024-09-26 16.21.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147005/9c678786-721c-fd22-c071-809a8b9a2517.png)

## 違うインスタンスを起動しているのだから当たり前
なんですよね。
実はこんなページがありまして。
https://github.com/codespaces
![スクリーンショット 2024-09-26 16.22.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147005/8af204fb-0988-4b09-b038-b88e17744db4.png)
作成したインスタンスが一覧で表示されています。
下が初めに作った昨日のもの、上が今日起動したものですね。
下のものをクリックしてみましょう。
![スクリーンショット 2024-09-26 16.23.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147005/03fd29c4-2436-73a3-0e5d-9209867dbc4f.png)
おー帰ってきたあ。

## どう運用するか
codespacesのページから既存のものを毎回起動するのがセオリーと言えるでしょう。

# 料金について
いいインスタンスを選択出来るってなった時に思ったんですが、絶対無料じゃ無いよねってことでこちら。
https://docs.github.com/ja/billing/managing-billing-for-github-codespaces/about-billing-for-github-codespaces
まとめるとこんな感じらしい。
> Codespacesの料金体系
2コア: $0.18/時間
4コア: $0.36/時間
8コア: $0.72/時間
16コア: $1.44/時間
32コア: $2.88/時間
つまり、コア数が増えるほど時間単価が上がります。例えば、32コアのインスタンスを1時間使用すると、2コアの16倍の料金がかかることになります。
無料枠について
個人アカウントには毎月一定の無料枠が用意されています:
2コアインスタンス: 60時間/月
4コアインスタンス: 30時間/月
8コアインスタンス: 15時間/月
無料枠を超えて使用した場合や、より高スペックのインスタンスを選択した場合は追加料金が発生します。
ストレージ料金
コンピューティング料金に加えて、使用するストレージ容量に応じた料金も発生します:
$0.07/GB/月
ただし、15GBまでは無料で使用できます。

なのでさっき起動したええやつは消しましょうね。
![スクリーンショット 2024-09-26 16.29.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147005/9a4145e1-24d2-7a85-76a3-0cbc5a9aa59a.png)

ちなみに停止している間は時間のカウントはされないそうです。
> Codespacesの正しい停止方法
ブラウザで閉じるだけでは不十分です。ブラウザタブを閉じても、Codespacesはリモートマシン上で実行され続けます。
明示的に停止する必要があります。以下のいずれかの方法で停止できます:
GitHub.com上で:
https://github.com/codespaces にアクセス
停止したいCodespaceの右側の省略記号(...)をクリック
[Stop codespace]を選択
VS Code内で:
コマンドパレットを開く(Ctrl+Shift+P または Cmd+Shift+P)
"Codespaces: Stop Codespace"を選択して実行
GitHub CLIを使用:
ターミナルでgh codespace stopコマンドを実行
停止すると、実行中のプロセスはすべて停止されますが、保存済みの変更は維持されます。
注意点
停止しないと、非アクティブ状態でもタイムアウトするまで実行され続けます(デフォルトは30分)。
実行中のCodespacesのみCPU使用料が発生します。停止したCodespacesはストレージコストのみ発生します。
長期間使用しない場合は、ストレージコストを節約するために削除することも検討してください。

![スクリーンショット 2024-09-26 16.30.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147005/d3db72c5-c430-17ad-376f-a5885c6c70db.png)

ここから止めるのが一番簡単です。一応非アクティブ30分でも切れるのであまり気にしなくていいのかも？

# まとめ
これを無料で使えるのはすごい！
でも最高で60Hしか無料は無いので本業でがっつり使うのは不可能ですね。
普段はPCで作業して休日とかにサクッとiPadで作業するというスタイルならそんなに不便はなさそうに感じました。