🔥

[Codespaces]開発環境を構築しなくなって早1年という話

2023/04/09に公開

概要

github codespacesは最高だから開発環境はこれで構築したらいいよ。

はじめに

仕事や趣味でコードを書いていると、複数の言語やバージョンを行き来した結果、内部状態が壊れてなぜか動かなくなったことはありますか?
プロジェクトにアサインされたときに発生する環境構築作業で1日をつぶしたことはありますか?
プロジェクトにジョインした人のために環境構築手順書を用意したが、その通りにやってもうまくいかない、時間がかかるなどの課題を抱えていますか?

このような経験をされた方は今すぐcodespacesで開発を行いましょう。
そうすれば、感動のあまり手元の高級PCを叩き壊して最安値PCを買いに走り出す事間違いなし。

codespacesとは

codespace は、クラウドでホストされている開発環境です。 構成ファイルをリポジトリにコミットすることで、GitHub Codespaces のプロジェクトをカスタマイズできます (コードとしての構成とよく呼ばれます)。これにより、プロジェクトのすべてのユーザーに対して繰り返し可能な codespace 構成が作成されます。

つまり、Dockerfiledevcontainer.jsonをgithub上にpushしておくことで、そこに定義したイメージがgithubクラウド上にホストされ、開発環境として利用できます。
ちなみに、必要なファイルがpushされていない場合はgithubのデフォルトイメージが使われます。
codespacesを使うことで、あなたの開発環境はローカルPCではなく、githubクラウド上に移動します。もはやあなたのPCにコードはなく、ビルドも実行もされません。
codespacesはvscodeやブラウザを通して利用でき、vscodeかブラウザさえあればコーディングし、実行できます。

codepsacesのここが凄い

ランキング形式で発表していきます。

第一位: 開発環境がすぐに手に入る

コンテナ上で開発環境が構築されるので、Dockerfileさえ書けば誰でも同じ環境になります。
これにはいくつかのメリットが存在しています。

  • コンテナを上げるだけで誰でも同じ環境がすぐに手に入る
    • DBなども一緒に立ち上がる
  • 全員同じ環境なので通称「おま環」がない
  • 不安定になったらコンテナ落として作り直せばよい
  • 他プロジェクトと環境が競合することが無くなる

コンテナを上げるだけで同じ環境が手に入るので、プロジェクトに新しいメンバーが参加した時は即ローカル環境構築が完了しますし、OSSであれば誰でもすぐにPRを出すことができます。
開発に必要な通信先(PostgreSQLやredisなど)もcodespacesを使えば一緒に立ち上がります。

また、全員同じ環境なので、何か変な挙動の報告が来たときに環境差分を考える必要がありません。

開発を進めていると、ローカル環境がおかしくなって環境構築をやり直したことあると思います。コンテナを落として上げなおすだけで達成できます。

他プロジェクトと環境が競合することが無くなります。pyenvgoenvで頑張ってバージョン切り替えを実行していませんか?PATHがメンテ不能になってませんか?開発環境がコンテナに閉じ込められるので気にする必要はありません。もっと言えばローカルに言語のインストールをする必要ありません。

第二位: vscodeかブラウザがあればどこでも開発できる

操作性はvscodeの方が上ですが、最悪ブラウザさえあればコーディング可能です。
iPadを持って出かけた先の空き時間で1コミット積むなんてこともできます。
本腰を入れてコードを書くならちゃんとしたPCで。ローカル環境で動かしながらPRレビューをするならiPadで。なんてこともできます。

第三位: コンテナのスペックをある程度自由に選択可能

コンテナのスペックを2coreから16coreまで自由に決められます。
ビルドを行ったり実行したりするのはcodespacesのコンテナ上なので、PCのスペックは全く影響ありません。
かろうじてブラウジングができる程度のPCで十分です。
重たい処理を行ってファンが唸りを上げることもなくなります。

codespacesのここが辛い

いくつか辛いポイントもあるので紹介します。フェアじゃないので。

第一位: 対応できない場合がある

GPUがないとダメな場合とか、16core以上の超スペックが必要な場合はどうしようもありません。
また、個人的に一番問題なのがモバイル開発ができないところです。
Androidは方法があるかもしれませんが、iOS開発は無理でしょう。Xcodeがどうしようもないので。

第二位: ネットワークが不安定だと動かない

そもそも通信環境が無いとそもそもコーディングできません。
特にWi-Fiが不安定だとかなり厳しいので、まともなネットワーク環境は必要です。

第三位: githubとvscodeが強制される

github codespacesなので、githubにホスティングしていないと使えないです。
が、昨今githubを使わないことはそんなにないと思っているので、まあ大丈夫でしょう。
セキュリティなどの規約で使えない社員の方々も居そうですが...
また、vscodeでなくブラウザを利用した場合もvscodeのUIになります。つまり、vscodeの使用が強制されます。宗教上の理由で使えない方も居るかもしれません。
私は試したことないですが、JetBrainsもcodespacesに対応しているという噂を聞いたので、JetBrainsユーザーは大丈夫かもです。

その他Q&A

  • Q: codespacesのコンテナ上にWebサーバーをデプロイしたけど、どうやって接続するの?
    A: ローカルPCのフォワードされるので、localhost:8080でデプロイしたなら、ローカルPCのlocalhost:8080にアクセスすればOK
  • Q: vscodeの拡張機能はどうなるの?
    A: devcontainer.jsonに利用する拡張機能IDを書くと、適用された状態で立ち上がります
  • Q: 文字入力に遅延があったりします?
    A: ネットワークがまともならローカルと同じです
  • Q: 共有されない自分だけの設定を使いたい場合は?環境変数とか拡張機能とか秘密鍵とか
    A: githubのdotfilesリポジトリを適用する設定をONにすることで、.bashrcなどの自動適用ができます。また、vscodeの拡張機能はローカルの物も使えるので、好きなキーボードバインドでコーディング可能です。また、githubの画面からcodespaces secretsを登録することで秘密鍵の管理も行えます
  • Q: でもお高いんでしょう?
    A: 個人利用は無料枠があります。organizationはお金がかかりますが、そんなに高くないです。詳しくはこちら
  • Q: 凄いのは分かった。使い方を教えろ
    A: 日本語で親切丁寧な公式リファレンスがあるのでそれを読んでほしい

Discussion