以下は、最小構成の TODO API(認証なし)を TypeScript + Docker 環境です。
📁 プロジェクト構成(TypeORM対応版)
todo-api-ts/
├── Dockerfile
├── docker-compose.yml
├── .dockerignore
├── package.json
├── tsconfig.json
├── ormconfig.ts # TypeORM の設定ファイル
└── src/
├── index.ts # アプリのエントリーポイント
├── controllers/
│ └── todoController.ts
├── services/
│ └── todoService.ts
├── models/
│ └── Todo.ts # TypeORM のエンティティ
├── routes/
│ └── todoRoutes.ts
└── utils/
└── errorHandler.ts
Dockerfile- Node.jsアプリ用Docker設定ファイルdocker-compose.yml- アプリ&MySQL用のDocker Compose定義.dockerignore- Dockerビルド時に無視するファイル設定package.json- npmパッケージ定義&スクリプトtsconfig.json- TypeScriptの設定ファイルormconfig.ts- TypeORMのDB接続設定
index.ts- アプリのエントリーポイント(Expressサーバー起動)
todoController.ts- ルーティングから呼ばれるロジックを定義
todoService.ts- DB操作などのビジネスロジックを実装
Todo.ts- TypeORMのエンティティ(DBテーブルに対応)
todoRoutes.ts-/api/todosのルーティング設定
errorHandler.ts- 共通のエラーハンドリング処理
| やること | ヒント・補足 |
|---|---|
| 1. プロジェクトフォルダを作成 | mkdir todo-api-ts && cd todo-api-ts |
| 2. TypeScript プロジェクト初期化 | npm init -y → npm install typescript --save-devnpx tsc --init |
3. strict: true にする |
tsconfig.json を開いて strict: true に変更 |
| 4. 必要なディレクトリ構成を決める | 例:src/, src/controllers, src/services, src/models など。自由に考えて OK |
| 5. Express と型関連ライブラリをインストール | npm install expressnpm install @types/express --save-dev |
✅ 自分で考えるポイント:構成をどう分けるか? ファイル名・責務の分け方を意識してみよう。
| やること | ヒント・補足 |
|---|---|
1. Dockerfile を作成 |
ベースは node:18-alpine などがおすすめ |
2. docker-compose.yml を作成 |
サービスは app, db(MySQL など)を用意 |
3. .dockerignore を作成 |
node_modules, dist, .env など除外 |
| 4. コンテナ内で TypeScript をビルド・実行できるように設定 | tsc → node dist/index.js |
✅ 自分で考えるポイント:ビルドと実行の流れ、どこでやるか(ローカルか Docker 内か)
| やること | ヒント・補足 |
|---|---|
| 1. ORM のどちらかを選定 | Prisma はドキュメントが親切、TypeORM はより自由度が高い |
| 2. インストールして DB 接続設定 | DB は MySQL(Docker で立てる) |
| 3. マイグレーションでテーブル作成 | User, Todo など作ってみよう |
| 4. シーディングの方法を試す | テスト用の初期データを流してみる |
✅ 自分で考えるポイント:ER 設計、どんなフィールドが必要か?
| やること | ヒント・補足 |
|---|---|
| 1. ルーティングを設計 | /api/todos などを設計 |
| 2. 各 CRUD の Controller・Service 作成 | GET, POST, PUT, DELETE を 1 つずつ実装 |
| 3. モデルとのやり取りを実装 | Prisma なら prisma.todo.findMany() など |
| 4. Postman で確認 | Body に JSON を入れて POST してみよう |
✅ 自分で考えるポイント:Controller と Service の責務分離、バリデーションの扱い
| やること | ヒント・補足 |
|---|---|
1. try-catch を導入 |
DB 操作や Service 層で発生しうる例外を捕捉 |
| 2. ステータスコードに応じたレスポンス | 例:400, 404, 500 などを適切に返す |
✅ 自分で考えるポイント:どこでエラーをキャッチすべきか?
- TypeScript で Express サーバーを立ち上げられている
- Docker でアプリと DB が起動する
- TODO リストの CRUD API が動作する
- ORM を使った DB 操作ができている
- Postman でリクエストを確認できる
- 例外処理が最低限できている
この流れに沿って、できる限り「なぜそれをするか」を考えながら手を動かす。 「ここまでやってみたけどこれでいい?」とか「この設定ってなんのためにあるの?」常に考えていこう。 次に取り掛かりたいステップが決まったら、それを元に「次やること」をピンポイントで示すこともできますよ。