AWS上にVSCode対応の開発環境を簡単に構築できるOSSのCoderがすごい！

# はじめに
イベントや普段の業務などで開発環境をクラウド上に用意したいなと思うことはありませんか？
そんなときに使えるOSSであるCoderというサービスについて紹介します。
私もとあるイベントで利用しましたが、とても便利でした！！

https://coder.com/

これまで、私は`AWS Cloud9`を使っていましたが、**VSCodeが使えない**という点で非常に不便を感じていました。Coderは私が求めていた**AWS上**に**VSCodeが使える**環境を作りたい！という要件にぴったりでした。

Coderは以下の特徴があります。

- 好きなクラウドサービスを選択できる（AWS, GCP, Azureなど）
- IDEが選べる（VS Code, JetBrainsなど）
- Terraformでインフラを定義できる
- 無料で利用できる（クラウド利用料のみ、一部機能は有料エンタープライズ版のみ）

---

ここまで聞いて`GitHub Codespaces`使えばいいじゃん！と思った人がいると思いますが、`AWSに請求をまとめたい`、`なるべく安く済ませたい`という理由で`Coder`を選択しています。

https://github.co.jp/features/codespaces

CodespacesとEC2を利用した場合ではおよそ50%のコストで利用できるので複数の環境が必要な場合にはかなり節約できます。
\* 性能が同じとは限りません 

|Cores|RAM|Codespaces|EC2|
|-|-|-|-|
|2|4|$.18|$0.0432(t4g.medium)|
|4|8|$.36|$0.1712(c6g.xlarge)|
|8|16|$.72|$0.3424(c6g.2xlarge)|
|16|32|$1.44|$0.6848(c6g.4xlarge)|
|32|64|$2.88|$1.3696(c6g.8xlarge)|

# 使い方

Coderは様々なクラウドサービスで利用できますが、AWSでの使い方について紹介します。
詳細は公式サイトに詳しく記載されているので簡単に紹介します。

https://coder.com/docs/v2/latest/platforms/aws

## 1.Coderが提供しているAMIからインスタンス(管理サーバー)を起動する

Coderを使うためには、管理サーバーが必要になります。
ブラウザで管理サーバーに接続し、開発環境を立ち上げたりアクセスできるユーザーを管理したりすることができます。


![スクリーンショット 2023-10-09 15.58.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600358/cadd2168-8200-ce61-132f-df3832326f04.png)

## 2.管理サーバーにログインする

![スクリーンショット 2023-10-09 16.08.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600358/f8310348-9dac-af33-0198-0ccde4505790.png)

## 3.テンプレートを作成する
デフォルトでDocker,　AWS EC2, AWS ECSなどのテンプレートが用意されています。今回はEC2を選択しました。

![screencapture-vr024pd77598s-pit-1-try-coder-app-templates-2023-10-09-16_48_25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600358/3f79fc5e-cca2-00e4-2f07-0cfac0c03eb8.png)

## 4.ワークスペースを起動する。
ワークスペースが実際に開発を行うための環境になります。

![screencapture-vr024pd77598s-pit-1-try-coder-app-hirai-tomoki-test-1-2023-10-09-16_53_57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600358/77e23a73-2e3d-f97f-f545-5fb295cf7701.png)

## 5.開発環境に接続する
起動が成功すると`VSCode Desktop`と`coder-server`が選択できるようになります。
`VSCode Desktop`をクリックすると画像のようにVSCodeが起動されて開発環境に接続できます。SSHで接続されているのでセキュアに通信することができます。


![スクリーンショット 2023-10-09 17.07.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600358/419066da-3fce-dbc1-34d8-b4ab210adae8.png)

もちろん起動した開発用サーバーにも接続できます。

![スクリーンショット 2023-10-09 17.23.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600358/6a6578e9-5d28-68ba-ef92-cb7616e9da8f.png)



`coder-server`を選択するとブラウザ上でVSCodeが起動できます。一部機能制限はありますが、快適に使うことができます。
こちらはOSSの提供元が開発しているパッケージが使用されています。

https://github.com/coder/code-server

![スクリーンショット 2023-10-09 17.10.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600358/417a11e6-64a4-b01f-a15f-d778238560c1.png)



# メリット、デメリット
冒頭でも少し触れましたが、改めてCoderのメリットとデメリットについて紹介します。

## メリット

### 好きなクラウドサービスを選べる（オンプレも可）

AWS, GCP, Azureの主要なクラウドサービスに対応しており、公式サイトに詳しく使い方が紹介されています。
また、クラウドサービスではなくてもオンプレのサーバーを用意してDocker, Kubernetesで構築するなどいろいろな選択肢があります。

https://coder.com/docs/v2/latest/platforms


### 環境をterraformで自由にカスタマイズできる

今回は`AWS EC2`を利用するテンプレートを使いましたが、これらのテンプレートファイルはすべてterraformで記述されています。今回利用したテンプレートは以下のURLで閲覧できます。


https://github.com/coder/coder/blob/main/examples/templates/aws-linux/main.tf

例えば、`startup_script`（サーバー起動時に実行するスクリプト）を編集してライブラリのインストールを行ったり、EC2にIAMロールを追加してアクセス権限を増やしたりと自由にカスタマイズできます。

```sh
startup_script = <<-EOT
    set -e
    
    # install and start code-server
    curl -fsSL https://code-server.dev/install.sh | sh -s -- --method=standalone --prefix=/tmp/code-server --version 4.11.0
    /tmp/code-server/bin/code-server --auth none --port 13337 >/tmp/code-server.log 2>&1 &
    # ここにライブラリインストールを追加
EOT
```

### エディタを自由に選択できる

VSCode、JetBrainsなど複数のIDEに対応しています。

https://coder.com/docs/v2/latest/ides

### 管理画面が見やすくてわかりやすい

管理画面は非常に操作しやすく、かなり使い勝手が良い印象です。
管理画面にログインできるユーザーも追加、削除できるので非常に便利です。

![スクリーンショット 2023-10-09 17.41.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600358/057bde22-d1c8-e71d-8c38-b7d1fe1e12ac.png)


## デメリット

### 準備、設定に手間がかかる

カスタマイズがいろいろできる反面、管理用サーバーの構築、テンプレートファイルの作成などに準備が必要です。
そこまでこだわりがない場合には`AWS Cloud9`や`GitHub Codespaces`を使うのが良いと思います。

### 小規模の利用には向いていない

セルフホスト型なので、管理サーバー1台、開発用サーバーn台という構成になります。
管理用サーバーにも費用がかかるので、開発用サーバーの台数が少ないと他サービスと比べてコスト面で不利になります。
料金やカスタマイズ性のメリットは規模が大きくなってくると発揮されると思うので、小規模の利用には向いていないと思います。


# まとめ

クラウド上に開発環境を構築できるOSS、Coderの紹介でした。
テンプレートを一度作ってしまえば、同じ環境を複数立ち上げることができるのでイベントや普段の開発で活躍すると思います。

`AWS Cloud9`や`GitHub Codespaces`はイマイチだなと思っている人は使ってみてください！