

これは AWS CDK v2 デベロッパーガイドです。旧版の CDK v1 は 2022 年 6 月 1 日にメンテナンスを開始し、2023 年 6 月 1 日にサポートを終了しました。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AWS CDK プロジェクト
<a name="projects"></a>

AWS Cloud Development Kit (AWS CDK) プロジェクトは、CDK コードを含むファイルおよびフォルダを表します。内容はプログラミング言語によって異なります。

AWS CDK プロジェクトは手動で作成するか、AWS CDK コマンドラインインターフェイス (AWS CDK CLI) `cdk init` コマンドを使用して作成することができます。このトピックでは、AWS CDK CLI によって作成されたファイルおよびフォルダのプロジェクト構造および命名規則について説明します。ニーズに合わせて CDK プロジェクトをカスタマイズおよび整理できます。

**注記**  
AWS CDK CLI によって作成されたプロジェクト構造は、時間の経過とともにバージョンによって異なる場合があります。

## ユニバーサルファイルとフォルダ
<a name="projects-universal"></a><a name="projects-universal-git"></a>

 `.git`   
`git` がインストールされている場合、AWS CDK CLI はプロジェクトの Git リポジトリを自動的に初期化します。`.git` ディレクトリには、リポジトリに関する情報が含まれています。<a name="projects-universal-gitignore"></a>

 `.gitignore`   
無視するファイルおよびフォルダを指定するため、Git によって使用されるテキストファイル。<a name="projects-universal-readme"></a>

 `README.md`   
AWS CDK プロジェクトを管理するため、基本的なガイダンスおよび重要な情報を提供するテキストファイル。必要に応じてこのファイルを変更し、CDK プロジェクトに関する重要な情報を文書化します。<a name="projects-universal-cdk"></a>

 `cdk.json`   
AWS CDK の設定ファイル。このファイルは、アプリの実行方法に関する AWS CDK CLI への指示を提供します。

## 言語固有のファイルとフォルダ
<a name="projects-specific"></a>

次のファイルおよびフォルダは、サポートされているプログラミング言語ごとに一意です。

**Example**  
次の内容は、`cdk init --language typescript` コマンドを使用して `my-cdk-ts-project` ディレクトリで作成されたプロジェクトの例です。  

```
my-cdk-ts-project
├── .git
├── .gitignore
├── .npmignore
├── README.md
├── bin
│   └── my-cdk-ts-project.ts
├── cdk.json
├── jest.config.js
├── lib
│   └── my-cdk-ts-project-stack.ts
├── node_modules
├── package-lock.json
├── package.json
├── test
│   └── my-cdk-ts-project.test.ts
└── tsconfig.json
```  
 `.npmignore`   
パッケージを `npm` レジストリに発行するときに無視するファイルおよびフォルダを指定するファイル。このファイルは `.gitignore` に似ていますが、`npm` パッケージに特化しています。  
 `bin/my-cdk-ts-project.ts`   
*アプリケーションファイル*は CDK アプリを定義します。CDK プロジェクトには、1 つ以上のアプリケーションファイルを含めることができます。アプリケーションファイルは `bin` フォルダに保存されます。  
次の内容は、CDK アプリを定義する基本的なアプリケーションファイルの例です。  

```
#!/usr/bin/env node
import 'source-map-support/register';
import * as cdk from 'aws-cdk-lib';
import { MyCdkTsProjectStack } from '../lib/my-cdk-ts-project-stack';

const app = new cdk.App();
new MyCdkTsProjectStack(app, 'MyCdkTsProjectStack');
```  
 `jest.config.js`   
Jest の設定ファイル。*Jest* は、一般的な JavaScript テストフレームワークです。  
 `lib/my-cdk-ts-project-stack.ts`   
*スタックファイル*は CDK スタックを定義します。スタック内では、コンストラクトを使用して AWS リソースおよびプロパティを定義します。  
次の内容は、CDK スタックを定義する基本的なスタックファイルの例です。  

```
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';

export class MyCdkTsProjectStack extends cdk.Stack {
 constructor(scope: Construct, id: string, props?: cdk.StackProps) {
  super(scope, id, props);

  // code that defines your resources and properties go here
 }
}
```  
 `node_modules`   
プロジェクトの依存関係を含む Node.js プロジェクト内の共通フォルダ。  
 `package-lock.json`   
`package.json` ファイルと連携して依存関係のバージョンを管理するメタデータファイル。  
 `package.json`   
Node.js プロジェクトで一般的に使用されるメタデータファイル。このファイルには、プロジェクト名、スクリプト定義、依存関係、その他のインポートプロジェクトレベルの情報など、CDK プロジェクトに関する情報が含まれています。  
 `test/my-cdk-ts-project.test.ts`   
CDK プロジェクトのテストを整理するため、テストフォルダが作成されます。サンプルテストファイルも作成されます。  
テストを実行する前に TypeScript にテストを記述し、Jest を使用して TypeScript コードをコンパイルできます。  
 `tsconfig.json`   
コンパイラオプションおよびプロジェクト設定を指定する TypeScript プロジェクトで使用される設定ファイル。
次の内容は、`cdk init --language javascript` コマンドを使用して `my-cdk-js-project` ディレクトリで作成されたプロジェクトの例です。  

```
my-cdk-js-project
├── .git
├── .gitignore
├── .npmignore
├── README.md
├── bin
│   └── my-cdk-js-project.js
├── cdk.json
├── jest.config.js
├── lib
│   └── my-cdk-js-project-stack.js
├── node_modules
├── package-lock.json
├── package.json
└── test
    └── my-cdk-js-project.test.js
```  
 `.npmignore`   
パッケージを `npm` レジストリに発行するときに無視するファイルおよびフォルダを指定するファイル。このファイルは `.gitignore` に似ていますが、`npm` パッケージに特化しています。  
 `bin/my-cdk-js-project.js`   
*アプリケーションファイル*は CDK アプリを定義します。CDK プロジェクトには、1 つ以上のアプリケーションファイルを含めることができます。アプリケーションファイルは `bin` フォルダに保存されます。  
次の内容は、CDK アプリを定義する基本的なアプリケーションファイルの例です。  

```
#!/usr/bin/env node

const cdk = require('aws-cdk-lib');
const { MyCdkJsProjectStack } = require('../lib/my-cdk-js-project-stack');

const app = new cdk.App();
new MyCdkJsProjectStack(app, 'MyCdkJsProjectStack');
```  
 `jest.config.js`   
Jest の設定ファイル。*Jest* は、一般的な JavaScript テストフレームワークです。  
 `lib/my-cdk-js-project-stack.js`   
*スタックファイル*は CDK スタックを定義します。スタック内では、コンストラクトを使用して AWS リソースおよびプロパティを定義します。  
次の内容は、CDK スタックを定義する基本的なスタックファイルの例です。  

```
const { Stack, Duration } = require('aws-cdk-lib');

class MyCdkJsProjectStack extends Stack {
 constructor(scope, id, props) {
  super(scope, id, props);

  // code that defines your resources and properties go here
 }
}

module.exports = { MyCdkJsProjectStack }
```  
 `node_modules`   
プロジェクトの依存関係を含む Node.js プロジェクト内の共通フォルダ。  
 `package-lock.json`   
`package.json` ファイルと連携して依存関係のバージョンを管理するメタデータファイル。  
 `package.json`   
Node.js プロジェクトで一般的に使用されるメタデータファイル。このファイルには、プロジェクト名、スクリプト定義、依存関係、その他のインポートプロジェクトレベルの情報など、CDK プロジェクトに関する情報が含まれています。  
 `test/my-cdk-js-project.test.js`   
CDK プロジェクトのテストを整理するため、テストフォルダが作成されます。サンプルテストファイルも作成されます。  
テストを実行する前に JavaScript にテストを記述し、Jest を使用して JavaScript コードをコンパイルできます。
次の内容は、`cdk init --language python` コマンドを使用して `my-cdk-py-project` ディレクトリで作成されたプロジェクトの例です。  

```
my-cdk-py-project
├── .git
├── .gitignore
├── .venv
├── README.md
├── app.py
├── cdk.json
├── my_cdk_py_project
│   ├── __init__.py
│   └── my_cdk_py_project_stack.py
├── requirements-dev.txt
├── requirements.txt
├── source.bat
└── tests
    ├── __init__.py
    └── unit
```  
 `.venv`   
CDK CLI は、プロジェクトの仮想環境を自動的に作成します。`.venv` ディレクトリはこの仮想環境を参照します。  
 `app.py`   
*アプリケーションファイル*は CDK アプリを定義します。CDK プロジェクトには、1 つ以上のアプリケーションファイルを含めることができます。  
次の内容は、CDK アプリを定義する基本的なアプリケーションファイルの例です。  

```
#!/usr/bin/env python3
import os

import aws_cdk as cdk

from my_cdk_py_project.my_cdk_py_project_stack import MyCdkPyProjectStack

app = cdk.App()
MyCdkPyProjectStack(app, "MyCdkPyProjectStack")

app.synth()
```  
 `my_cdk_py_project`   
スタックファイルが含まれまる*スタックファイル*。CDK CLI はこちらで次のものを作成します。  
+ \$1\$1init\$1\$1.py – 空の Python パッケージ定義ファイル。
+  `my_cdk_py_project` – CDK スタックを定義するファイル。次に、コンストラクトを使用してスタック内の AWS リソースおよびプロパティを定義します。
次の内容はスタックファイルの例です。  

```
from aws_cdk import Stack

from constructs import Construct

class MyCdkPyProjectStack(Stack):
 def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
  super().__init__(scope, construct_id, **kwargs)

  # code that defines your resources and properties go here
```  
 `requirements-dev.txt`   
`requirements.txt` に似ていますが、本番ではなくて開発目的専用に依存関係を管理するために使用されます。  
 `requirements.txt`   
プロジェクトの依存関係を指定および管理するため、Python プロジェクトで使用される一般的なファイル。  
 `source.bat`   
Python 仮想環境のセットアップに使用される Windows のバッチファイル。  
 `tests`   
CDK プロジェクト用のテストを含むディレクトリ。  
次の内容はユニットテストの例です。  

```
import aws_cdk as core
import aws_cdk.assertions as assertions

from my_cdk_py_project.my_cdk_py_project_stack import MyCdkPyProjectStack

def test_sqs_queue_created():
 app = core.App()
 stack = MyCdkPyProjectStack(app, "my-cdk-py-project")
 template = assertions.Template.from_stack(stack)

 template.has_resource_properties("AWS::SQS::Queue", {
  "VisibilityTimeout": 300
 })
```
次の内容は、`cdk init --language java` コマンドを使用して `my-cdk-java-project` ディレクトリで作成されたプロジェクトの例です。  

```
my-cdk-java-project
├── .git
├── .gitignore
├── README.md
├── cdk.json
├── pom.xml
└── src
    ├── main
    └── test
```  
 `pom.xml`   
CDK プロジェクトに関する設定情報とメタデータを含むファイル。このファイルは Maven の一部です。  
 `src/main`   
*アプリケーション*および*スタック*ファイルを含むディレクトリ。  
次の内容は、アプリケーションファイルの例です。  

```
package com.myorg;

import software.amazon.awscdk.App;
import software.amazon.awscdk.Environment;
import software.amazon.awscdk.StackProps;

import java.util.Arrays;

public class MyCdkJavaProjectApp {
 public static void main(final String[] args) {
  App app = new App();

  new MyCdkJavaProjectStack(app, "MyCdkJavaProjectStack", StackProps.builder()
   .build());

  app.synth();
 }
}
```
次の内容は、スタックファイルの例です。  

```
package com.myorg;

import software.constructs.Construct;
import software.amazon.awscdk.Stack;
import software.amazon.awscdk.StackProps;

public class MyCdkJavaProjectStack extends Stack {
 public MyCdkJavaProjectStack(final Construct scope, final String id) {
  this(scope, id, null);
 }

 public MyCdkJavaProjectStack(final Construct scope, final String id, final StackProps props) {
  super(scope, id, props);

  // code that defines your resources and properties go here
 }
}
```  
 `src/test`   
テストファイルを含むディレクトリ。以下に例を示します。  

```
package com.myorg;

import software.amazon.awscdk.App;
import software.amazon.awscdk.assertions.Template;
import java.io.IOException;

import java.util.HashMap;

import org.junit.jupiter.api.Test;

public class MyCdkJavaProjectTest {

 @Test
 public void testStack() throws IOException {
  App app = new App();
  MyCdkJavaProjectStack stack = new MyCdkJavaProjectStack(app, "test");

  Template template = Template.fromStack(stack);

  template.hasResourceProperties("AWS::SQS::Queue", new HashMap<String, Number>() {{
   put("VisibilityTimeout", 300);
  }});
 }
}
```
次の内容は、`cdk init --language csharp` コマンドを使用して `my-cdk-csharp-project` ディレクトリで作成されたプロジェクトの例です。  

```
my-cdk-csharp-project
├── .git
├── .gitignore
├── README.md
├── cdk.json
└── src
    ├── MyCdkCsharpProject
    └── MyCdkCsharpProject.sln
```  
 `src/MyCdkCsharpProject`   
*アプリケーション*および*スタック*ファイルを含むディレクトリ。  
次の内容は、アプリケーションファイルの例です。  

```
using Amazon.CDK;
using System;
using System.Collections.Generic;
using System.Linq;

namespace MyCdkCsharpProject
{
 sealed class Program
 {
  public static void Main(string[] args)
  {
   var app = new App();
   new MyCdkCsharpProjectStack(app, "MyCdkCsharpProjectStack", new StackProps{});
   app.Synth();
  }
 }
}
```
次の内容は、スタックファイルの例です。  

```
using Amazon.CDK;
using Constructs;

namespace MyCdkCsharpProject
{
 public class MyCdkCsharpProjectStack : Stack
 {
  internal MyCdkCsharpProjectStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props)
  {
   // code that defines your resources and properties go here
  }
 }
}
```
このディレクトリには、次のものも含まれています。  
  
+  `GlobalSuppressions.cs` – プロジェクト全体で特定のコンパイラ警告やエラーを抑制するために使用されるファイル。
+  `.csproj` – プロジェクト設定、依存関係、ビルド設定の定義に使用される XML ベースのファイル。---  
 `src/MyCdkCsharpProject.sln`   
 関連プロジェクトの整理および管理に使用される Microsoft Visual Studio Solution File。
次の内容は、`cdk init --language go` コマンドを使用して `my-cdk-go-project` ディレクトリで作成されたプロジェクトの例です。  

```
my-cdk-go-project
├── .git
├── .gitignore
├── README.md
├── cdk.json
├── go.mod
├── my-cdk-go-project.go
└── my-cdk-go-project_test.go
```  
 `go.mod`   
モジュール情報を含めて、Go プロジェクトの依存関係およびバージョニングを管理するために使用されるファイル。  
 `my-cdk-go-project.go`   
CDK アプリケーションおよびスタックを定義するファイル。  
以下に例を示します。  

```
package main
import (
 "github.com/aws/aws-cdk-go/awscdk/v2"
 "github.com/aws/constructs-go/constructs/v10"
 "github.com/aws/jsii-runtime-go"
)

type MyCdkGoProjectStackProps struct {
 awscdk.StackProps
}

func NewMyCdkGoProjectStack(scope constructs.Construct, id string, props *MyCdkGoProjectStackProps) awscdk.Stack {
 var sprops awscdk.StackProps
 if props != nil {
  sprops = props.StackProps
 }
 stack := awscdk.NewStack(scope, &id, &sprops)
 // The code that defines your resources and properties go here

  return stack
}

func main() {
 defer jsii.Close()
 app := awscdk.NewApp(nil)
 NewMyCdkGoProjectStack(app, "MyCdkGoProjectStack", &MyCdkGoProjectStackProps{
  awscdk.StackProps{
   Env: env(),
  },
 })
 app.Synth(nil)
}

func env() *awscdk.Environment {

 return nil
}
```  
 `my-cdk-go-project_test.go`   
サンプルテストを定義するファイル。  
以下に例を示します。  

```
package main

import (
 "testing"

 "github.com/aws/aws-cdk-go/awscdk/v2"
 "github.com/aws/aws-cdk-go/awscdk/v2/assertions"
 "github.com/aws/jsii-runtime-go"
)

func TestMyCdkGoProjectStack(t *testing.T) {

 // GIVEN
 app := awscdk.NewApp(nil)

 // WHEN
 stack := NewMyCdkGoProjectStack(app, "MyStack", nil)

 // THEN
 template := assertions.Template_FromStack(stack, nil)
 template.HasResourceProperties(jsii.String("AWS::SQS::Queue"), map[string]interface{}{
  "VisibilityTimeout": 300,
 })
}
```