AWS CodeCatalystとVSCodeを連携させて、開発環境を構築する方法！

こんにちは！ふくちと申します。

当記事ではAmazon CodeCatalystの設定方法・使い方について説明していきます。
複数チームのメンバーが合同で1つのプロジェクトを作成する場合、非常に有用なサービスとなっておりますので、ぜひこの記事を読んで使ってみてください！

※サービスの解説・用語の解説は当記事ではしておりません。参考資料として以下をご覧ください。
[Amazon CodeCatalyst を使ったので概念などを整理してみた - DevelopersIO](https://dev.classmethod.jp/articles/try-amazon-codecatalyst/)
[Amazon CodeCatalyst](https://codecatalyst.aws/explore)

※また、詳細な使い方については別途記事を作成する予定です。

# Amazon CodeCatalyst(以下、CodeCatalyst)の良いところ・良さそうなところ
 - **素早くBizDevOpsのサイクルを回すための環境を迅速に構築できる**
→ソースコードやIssueの管理・ビルド・テスト・CI/CDパイプライン・統合開発環境(IDE)がCodeCatalystだけで利用可能！
従来であればCodeシリーズなどを1つ1つ準備する必要がありましたが、CodeCatalystを用いることで環境構築にかかる手間が少なくでき、アプリケーションの開発に集中できそうです。

 - **ブループリントがあるので「Small Start,Scale Fast」に適している**
→ブループリントという組み込みのテンプレートが20個以上用意されており、そこから開発を始めることができそうです。小さく始めて、そこから少しずつサービスを充実させていく、ということが容易に実現できそうです。
また、もちろん1からプロジェクトを立ち上げてソースコードを作成していくことも可能です。


# CodeCatalystを使用するための準備
下記のリンクからCodeCatalystを使用するための準備を行います。

https://codecatalyst.aws/login

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/50a299f3-b058-760a-0820-7c6f6795a95f.png)
上記の画面が開かれたら、AWS Builder IDをお持ちの方は「Sign up with AWS Builder ID」を選択し、持っていない方は「Create an AWS Builder ID」を選択します。
ここでは、持っていない方を想定して「Create an AWS Builder ID」を選択して進めます。
このAWS Builder IDを用いて、CodeCatalystにサインインしていきます。

*****

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/4e305655-f176-880b-6870-eb08bf6d5524.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/966a93a3-2c6b-ae49-845a-70cedb48bc6f.png)
続いて、ご自身のEメールと名前を入力します。名前はAWS Builder IDを使用するアプリケーションで表示させたい名前を入力します。完了したら「次へ」をクリック。

*****

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/e0b35874-366b-e494-8f54-1bd96f3d0556.png)
先ほど登録したメールに認証コードが届くので、コードを入力し、「認証」をクリックします。

*****

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/c5c18a5d-b77d-d438-b2e6-bb50a6303375.png)
続いてパスワードを設定します。英語(大文字と小文字)・数字・記号が含まれて8文字以上64文字以下であれば良いようです。入力したら、「AWS Builder IDを作成」をクリック。

*****

https://codecatalyst.aws/login

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/50a299f3-b058-760a-0820-7c6f6795a95f.png)
サインアップが完了したので、上記の画面で「Sign in with AWS Builder ID」をクリックし、先ほど登録したメールアドレスとパスワードでサインインします。

*****

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/3b65ab16-5d54-fce0-e97d-b67161fc28bf.png)
「Create your CodeCatalyst alias」のページで、CodeCatalystのユーザー識別子に使用するエイリアスを入力します。先ほど名前で入力したものを入力すると良さそうです(ただし、スペースは不要です)。
他のCodeCatalystユーザーは、このエイリアスを使用してコメントやプルリクエストであなたをメンションできるようになります。
**このエイリアスは一度決めた後、変更できませんのでご注意ください。**

*****

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/b9abb48a-0618-6a1f-7cb7-4b5630bf830e.png)
続いてあなたが作業するためのスペース名と、AWSリージョンを選択します。
このスペース名には、先ほどのエイリアスと同じものを指定することはできません。また、世界で一意の名前である必要があります。ここではsample-space-20240711とします。
また、AWSリージョンについては、オレゴンかアイルランドの2択になります。早く東京リージョンにも来てほしいですね…

*****

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/a40a526d-4ebd-98d6-3127-7adabb05d53c.png)
続いて、先ほど作成したスペースに接続するアカウントのIDを入力します。入力後、「Go to the AWS console to Verify」を選択します。

*****

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/77105cae-623f-bfac-651c-0460aaf1aa02.png)
するとAWSアカウントのサインインページが開かれるので普通にサインインします。

*****

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/ddb1e0ef-6dde-cb1f-334a-6e2edb1741a6.png)
サインインすると、「Verify Amazon CodeCatalyst space」というページが開かれます。Verification tokenには、自動的に認証トークンが入力されます。成功バナーには、有効なトークンである旨のメッセージが表示されます。
また、同時にCodeCatalystのサポートロールが作成されます(内容については後述)。
「Verify space」をクリックします。

*****

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/6da457c5-b9e4-ce4d-678b-7060832ea993.png)
上記の画面が表示されたら、CodeCatalystのページに戻りましょう。また、上記のページは閉じないでください。

*****

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/6cb8b8b6-b820-2e65-7c05-6fd9d10f29df.png)
CodeCatalystの画面に戻ってきたら、「CodeCatalyst space verified with AWS account」と表示されているので、「Next」を選択します。

*****

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/c27a4c04-f903-6706-4684-ec44428a0224.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/3123a78f-0ab8-3c9d-5007-709a3e81bd92.png)
すると、プロジェクトを作成するかと聞かれるので、ここは「Skip for now」を選択します。プロジェクトはこの後の工程で作成します。

*****

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/09a4e736-8772-a81d-32a6-205792a2d9c8.png)
上記の画面が表示されれば、CodeCatalystを使用するための準備が整いました！
…と、言いたいところですが、最後にAWSアカウントでCodeCatalystに許可を与えましょう。

*****

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/5400b979-4fd8-d1d2-80f3-d608d0e3e0ad.png)
↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/78f4543b-9526-8fae-71d9-692261f576f4.png)
マネジメントコンソール上で「CodeCatalyst」を検索し、先ほど作成したスペースを選択します。

*****

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/911fadb1-9cdb-eb0a-43fe-ad3a4725659e.png)
↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/db737786-a799-d1e0-683a-5b33e6d580ad.png)
下へスクロールしていき、「Add IAM Role」をクリックします。

*****

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/55e37f13-477e-2351-635a-3aaadd0fe78e.png)
「Create CodeCatalyst development administrator role in IAM」を選択して「Create development role」をクリックします。
※ここで作成するdevelopment administrator roleはシンプルにAdmin権限を付与するものになっています(下記参照)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/4177297b-a012-07a7-aaf0-e6de4eec8152.png)

*****

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/99fbf2c3-8e4a-90cc-f975-be958dbd91ba.png)
上記のようになっていれば、CodeCatalystを使う準備は万全です！

*****

～閑話休題～
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/c4ae9fed-0d7e-f601-81fc-4792938497fb.png)
先ほど作成したCodeCatalystのサポートロールについてですが、「Amazon CodeCatalystがお客様に代わってAWSサポートケースを作成、更新、および解決することを許可」するためのロールになっているようです。興味がある方は以下のポリシーをご参照ください。
<details><summary>AWSRoleForCodeCatalystSupport</summary>

```AWSRoleForCodeCatalystSupport 
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "support:DescribeAttachment",
                "support:DescribeCaseAttributes",
                "support:DescribeCases",
                "support:DescribeCommunications",
                "support:DescribeIssueTypes",
                "support:DescribeServices",
                "support:DescribeSeverityLevels",
                "support:DescribeSupportLevel",
                "support:SearchForCases",
                "support:AddAttachmentsToSet",
                "support:AddCommunicationToCase",
                "support:CreateCase",
                "support:InitiateCallForCase",
                "support:InitiateChatForCase",
                "support:PutCaseAttributes",
                "support:RateCaseCommunication",
                "support:ResolveCase"
            ],
            "Resource": "*"
        }
    ]
}
```
</details>

*****

# ブループリントからサンプルプロジェクトを構築してみる
ブループリントは、開発者が容易にAWS上でソリューションを構築しデプロイできるようにする設計図のようなものです。 ブループリントを使用すると、サンプルアプリケーションコード、gitリポジトリ、テストコード、およびCI/CDワークフローが提供されます。

*****

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/75805203-7383-b7b1-b276-8dce0883a1f1.png)
上記の画面で「Create Project」をクリックします。

*****

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/a89e787c-5f98-cb08-7b9a-a9b28e0c7e7e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/cd9455c3-617a-686f-0953-ba08096a9f7a.png)
好きなブループリントを選びます。ここでは一番左上にある「Single-page application」を作成してみます。

*****

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/08864105-3465-c0ef-0ddc-99ba181e0813.png)
すると、選択したブループリントの説明が出てきます。要約すると、
>このブループリントの概要：
> - 目的：
 1.単一ページアプリケーション（SPA）プロジェクトを作成する
 2.Angular、React、Vueのいずれかのウェブアプリケーションフレームワークを選択可能
 3.AWS Amplify HostingにデプロイするためのCodeCatalyst Labsアクションを使用
> - SPAの特徴：
 1.JavaScriptAPIを使用してウェブドキュメントを更新
 2.サーバーから完全なページを読み込まずに使用可能
 3.ウェブサイトのパフォーマンス向上とより動的なユーザー体験を提供
 
とのことでした(Claude 3.5 Sonnectに聞きました)。
問題なければ「Next」をクリック。

*****

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/d2cf9b75-b72e-b52f-aa46-500dd17756c7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/c90beb9c-67dd-c1b3-3000-b0a3bd051810.png)
ブループリントによるプロジェクト作成にあたって、詳細設定が問われます。基本的には自由で良いのですが、 **IAMロールのところだけは先ほど作成したdevelopment administrator roleを選択してください。**
選択できたら、「Create project」をクリック。

*****

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/936e9350-9787-5406-6500-41cddc50a1c1.png)
↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/50a722b3-4405-b952-9f68-e342c3aa6696.png)
1分もしないうちに、プロジェクトが作成されました！
※恐らく選択したブループリントによって、作成までにかかる時間が変わります。
Issue、Code、CI/CDなど様々な要素があるので色々見てみることをおすすめします。

*****

# プロジェクトにユーザーを追加する
チームメンバーと共同作業したい場合は、以下の手順でメンバーを招待してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/8ef19dc2-46e1-17af-9d40-ef7ac8142bf5.png)
↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/7fbe188e-3189-e4e8-9248-de37acb84fe1.png)
チームメンバーを招待したいプロジェクトにおけるOverview上で、右上の「Members +」をクリックすると、メンバー招待用の画面が表示されます。ここに招待したい人のメールアドレスを入力します。

*****

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/3fb80af2-f6af-e2f3-b225-ea4d091572a0.png)
招待したい人のロールを指定します。共同でコード修正などの作業をするのであれば「Contributor」で大丈夫です。
他のロールとしては、プロジェクト管理者向けの「Project administrator」、プルリクエストにコメントしたり新しくIssueを発行したりできる「Reviewer」、見る専の「Read-only」があります。

****

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/4daa16b8-1d0b-631b-e294-be0451139dc8.png)
招待したメンバーには、上記のようなメールが届きます。Accept Invitationをクリックすると、CodeCatalystダッシュボードに同じプロジェクトが表示されるようになります。

*****

# 開発環境の構築
最後に、CodeCatalystでDev Environmentを作成し、サポートされている統合開発環境(IDE)で作業できるようにします。

Dev Environmentとは、CodeCatalystで使用できるクラウドベースの開発環境です。プロジェクトのソースリポジトリに保存されているコードを操作することができます。

プロジェクト構築時に作成された「devfile」を用いることで、Dev Environmentを標準化することができ、ローカル開発環境の構築と維持にかかる時間を最小限に抑えることができます。

*****

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/e6b27db2-eaad-6460-dc15-9bbf1eea1b5e.png)
devfileのパスとしては、以下の通りです。
`Code > source repository > spa-app(プロジェクト名) > devfile.yaml`

詳細な中身の解説は省略しますが、以下のような内容になっているようです。
>components は追加のストレージボリュームやDockerコンテナをDev Environment にアタッチする機能を提供します。
>events コマンドを自動的に実行することで、Dev Environment を完全に自動化することができます。
>commands スクリプトやコマンドを実行して、Dev Environment のセットアップを完了させる機能です。これらのスクリプトは、依存関係のインストールやファイルの作成など、Dev Environment の起動に必要なあらゆることに使用できます。

このdevfileを使用して、プロジェクトの作業を開始するためのDev Environmentを作成しましょう。
以下のサポートされている統合開発環境(IDE)でDev Environmentを使用します。
 - AWS Cloud9
 - Visual Studio Code
 - JetBrains IDEs
     - IntelliJ IDEA Ultimate
     - GoLand
     - PyCharm Professional

ここではVisual Studio Code(以下、VSCode)の環境構築を行います。
※ローカルではなく、クラウドベース開発環境のIDEとしてVSCodeを使用する場合の設定になります。
※ローカルで作業できる方法もあるようなので、そちらは別途追記します。

*****
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/1f4d27e8-5370-1c29-92d7-932f0eb260b2.png)
事前準備として、ローカルにVSCodeをインストールしておいてください。
また、拡張機能として「Remote - SSH」と「AWS Toolkit」を予めインストールしておくと、スムーズに進められます。

*****
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/7e43e987-2d9a-2f65-c9ea-5dff8e21ea28.png)
↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/be0c57d1-170c-ff06-cb61-3ee4e03a6eb3.png)
プロジェクトにおいて、Code配下にある「Dev Environment」を選択し、「Create Dev Environment」をクリックします。
すると、どのIDEで開発環境を構築するか聞かれるので、ここではVSCodeを選択します。

*****

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/1aa91a67-c1f1-1a15-adb2-700ef7b54c24.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/37ecd531-795c-d4a8-4749-b3c2b016ef41.png)
ここではブループリントのリポジトリをそのまま使いたいので、「Clone a repository」を選択します。
ブランチ等もデフォルト設定のままで、「Create」をクリック。

*****

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/9dbcce92-1907-f39a-882b-25bd0022a8d6.png)
タブが出てくるのでクリックしてVSCodeを開きます。

*****
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/18fd5a33-f77f-6472-408d-578cfa9c1d1d.png)
「Copy Code and Proceed」をクリックします。

*****
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/08267ebe-0d08-887d-ddbc-62c111b81808.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/8af75f66-ed3c-2413-a72d-622adac654c4.png)
ブラウザでログインページが開かれるので、VSCode上に表示された認証コードをブラウザに入力する。

*****
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/57dcf876-0e1a-f395-c620-4f2f9817e55f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/86b27595-b289-c2a8-c975-8fbbfb7171e7.png)
「Allow Access」をクリックし、リクエストが認証されたら、VSCodeに戻る。

*****
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/817bea9d-ac89-773c-f964-c4c42d59540d.png)
上記のように「使用中の一部のツールがprofile:defaultで動作しません。profile:defaultを使用しながら、バックグラウンドでAWS Builder IDを使い続けますか？」と聞かれることがある。各個人の環境によってどちらの選択肢をクリックするかは異なるが、少なくとも私は「No, switch everything to authenticate with AWS Builder ID.」をクリックして、上手く動作していました。(ここは自己責任でお願いします)

*****
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/b07c48f5-4079-2f29-9e0f-c9557932dc33.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/bb1832b6-41ba-ee95-5b39-2639e6244da0.png)
どのAWSの機能と接続するか聞かれるので、「CodeCatalyst」を選択し、「Open CodeCatalyst in Toolkit」をクリックします。
*****
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/25d809b1-1f45-bda9-8676-e29e512b73ae.png)
そして左下の「Clone Repository」をクリックし、先ほど作成したリポジトリを選択します。
*****
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/3d48309a-573c-8a07-0fab-8d6b461c3d04.png)
作成者を信頼しますか？と聞かれたらYesで大丈夫です。
*****
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/ea118783-acea-6ab5-9aa7-c3e8a0e6097f.png)
無事にリポジトリが開かれました！！
これで、様々な構築を自由自在に行うことができるようになります！
※もしリポジトリに接続できない場合は、拡張機能であるRemote SSHが機能していない可能性があります。その際はVSCodeを立ち上げなおしていただくことで解消する場合があります。
*****
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/28fb0de9-f340-aa3b-720d-e965b2219c23.png)
↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/c1053188-8b7a-4ee0-11b0-48069d48f3bc.png)
一度Dev Environmentの構築と接続が完了してしまえば、次回以降はコンソール上で「IDE」をクリックし、VSCode上で「Open」をクリックすればリポジトリにアクセスできるようになります。
*****
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/8ef6f5af-5f56-5c95-fddd-37989d2ee291.png)
セッションを切断する際は、VSCode左下の「SSH～」をクリックし、画面上部に表示された「Close Remote Connection」を選択します。

*****
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/46e89f54-d4dc-4392-8f2e-cce47dd3e071.png)
↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/406e7c6c-ffba-f647-92d3-13bd210e634c.png)
作業を終了する際は、Dev Environmentの「Stop」をしておく必要があります。

以上で開発環境の構築は完了です！

## 補足：CodeCatalystの料金体系
| プラン名 | 時間 | 料金 |
|:-:|:-:|:-:|
| Free | 60時間/月 | 無料 |
| Standard | 200時間 | アクティブユーザー1人につき$4 |
| Enterprise | 160時間 | ユーザー1人につき$20 |

※アクティブユーザーとは、CodeCatalystにログインしたユーザーのことを指します。Standardプランで6人チームだった場合は月額24$になる…はずです。

## 参考資料
 - [Toolkit for VS Codeの使用を始めるには](https://docs.aws.amazon.com/ja_jp/toolkit-for-vscode/latest/userguide/codecatalyst-setup.html#codecatalyst-setup-connect)
 - [Amazon CodeCatalyst Workshop](https://catalog.workshops.aws/integrated-devops/ja-JP)
 - [AWS】検証！Amazon CodeCatalystのDev EnvironmentでVisual Studio Codeを起動してみる](https://qiita.com/ymd65536/items/d4c0f1766fcfd9f56664)
 - [開発チームが必要とするすべてのツールとインフラが5分で手に入る？期待の統合DevOpsサービス「Amazon CodeCatalyst」をご紹介します (DOP206-R1) #reinvent2022](https://dev.classmethod.jp/articles/introduce-code-catalyst-reinvent2022/)
 -