Skip to content

ogi-091/kan

Repository files navigation

📋 カンバンボード - タスク管理アプリケーション

Docker Composeで動作する、モダンなカンバン式TODOタスク管理アプリケーションです。

✨ 特徴

  • 🎯 3カラムのカンバンボード: Todo / In Progress / Done
  • 🖱️ ドラッグ&ドロップ: タスクを直感的に移動
  • 💾 データ永続化: SQLiteでデータを安全に保存
  • 🐳 Docker完結: ホストOSに依存しない環境
  • 🎨 モダンなUI: Tailwind CSSによる美しいデザイン
  • 高速開発: Vite + TypeScriptで快適な開発体験

🛠️ 技術スタック

フロントエンド

  • Vite + React (TypeScript)
  • Tailwind CSS - スタイリング
  • Zustand - 状態管理
  • @dnd-kit - ドラッグ&ドロップ機能
  • Zod - スキーマバリデーション

バックエンド

  • Node.js + Express (TypeScript)
  • Prisma - ORM
  • SQLite - データベース
  • Zod - スキーマバリデーション

共有型定義

  • 共有型パッケージ (@kanban/shared) - バックエンドとフロントエンドで型定義を共有
  • TypeScript Strict Mode - 完全な型安全性を実現(any型ゼロ)

🚀 セットアップと起動

必要な環境

  • Docker
  • Docker Compose

起動手順

  1. リポジトリをクローン (または、プロジェクトディレクトリに移動)

    cd /Users/ogiharakouhei/.cursor/worktrees/kanban/HFDG7
  2. データディレクトリを作成

    mkdir -p data
  3. Docker Composeで起動

    docker compose up --build
  4. ブラウザでアクセス

停止方法

docker compose down

データを削除したい場合:

docker compose down -v
rm -rf data/*.db

📂 プロジェクト構成

.
├── docker-compose.yml          # Docker Compose設定
├── README.md                   # このファイル
├── TYPE_SAFETY_IMPROVEMENTS.md # 型安全性向上の実施内容
├── data/                       # SQLiteデータベース(永続化)
│   └── kanban.db
├── shared/                     # 共有型定義パッケージ
│   ├── package.json
│   ├── tsconfig.json
│   ├── index.ts
│   ├── types.ts               # 共通型定義
│   ├── schemas/               # Zodスキーマ
│   │   ├── taskSchema.ts
│   │   └── memoSchema.ts
│   └── utils/                 # 型ガードとバリデーション
│       ├── typeGuards.ts
│       └── validators.ts
├── backend/                    # バックエンド
│   ├── Dockerfile
│   ├── package.json
│   ├── tsconfig.json
│   ├── prisma/
│   │   ├── schema.prisma      # データベーススキーマ
│   │   └── migrations/        # マイグレーションファイル
│   └── src/
│       ├── index.ts           # Express APIサーバー
│       ├── controllers/       # コントローラー
│       ├── services/          # ビジネスロジック
│       ├── repositories/      # データアクセス
│       ├── validators/        # バリデーション
│       └── middleware/        # ミドルウェア
└── frontend/                   # フロントエンド
    ├── Dockerfile
    ├── package.json
    ├── tsconfig.json
    ├── vite.config.ts
    ├── tailwind.config.js
    ├── index.html
    └── src/
        ├── main.tsx
        ├── App.tsx
        ├── types.ts          # 共有型のre-export
        ├── store/
        │   └── taskStore.ts   # Zustand状態管理
        ├── components/        # UIコンポーネント
        ├── hooks/             # カスタムフック
        ├── services/          # APIクライアント
        └── utils/             # ユーティリティ関数

🎮 使い方

タスクの作成

  1. 「➕ 新しいタスクを追加」ボタンをクリック
  2. タスク名、詳細、ステータスを入力
  3. 「追加」ボタンをクリック

タスクの移動

  • タスクカードをドラッグ&ドロップで移動
  • カラム間の移動も、カラム内の並び替えも可能

タスクの編集

  • タスクカードの ✏️ アイコンをクリック
  • 内容を編集して「保存」

タスクの削除

  • タスクカードの 🗑️ アイコンをクリック
  • 確認ダイアログで「OK」

🔧 開発モード

開発中は、コンテナがソースコードの変更を自動で検知して再読み込みします。

バックエンドのログを確認

docker compose logs -f api

フロントエンドのログを確認

docker compose logs -f web

💻 開発フロー

このプロジェクトでは、コード品質を維持するために以下のツールとプロセスを導入しています。

コード品質ツール

  • ESLint: TypeScript/JavaScript のコードリンター
  • Prettier: コードフォーマッター
  • Husky: Gitフックツール
  • lint-staged: ステージされたファイルのみをlint/format
  • GitHub Actions: 自動CI/CDパイプライン

セットアップ(初回のみ)

プロジェクトのルートディレクトリで以下を実行:

# ルートの依存関係をインストール
npm install

# Huskyをセットアップ
npm run prepare

# バックエンドの依存関係をインストール
cd backend && npm install

# フロントエンドの依存関係をインストール
cd ../frontend && npm install

# 共有パッケージの依存関係をインストール
cd ../shared && npm install

利用可能なコマンド

ルートディレクトリで実行

# すべてのプロジェクトをLint
npm run lint

# すべてのファイルをフォーマット
npm run format

# フォーマットチェック(CIで使用)
npm run format:check

# すべてのプロジェクトをテスト
npm run test

# すべてのプロジェクトをビルド
npm run build

バックエンドディレクトリで実行(cd backend

# コードをLint
npm run lint

# Lintエラーを自動修正
npm run lint:fix

# コードをフォーマット
npm run format

# 型チェックのみ(ビルドなし)
npm run check

# テストを実行
npm run test

# テストをカバレッジ付きで実行
npm run test:coverage

フロントエンドディレクトリで実行(cd frontend

# コードをLint
npm run lint

# Lintエラーを自動修正
npm run lint:fix

# コードをフォーマット
npm run format

# 型チェックのみ(ビルドなし)
npm run check

# テストを実行
npm run test

# テストをカバレッジ付きで実行
npm run test:coverage

Pre-commitフック

このプロジェクトでは、Huskyとlint-stagedを使用して、コミット前に自動的にコードをチェックします。

コミット時に自動的に実行される処理:

  1. ステージされた .ts.tsx ファイルに対してESLintを実行・修正
  2. ステージされた .ts.tsx ファイルをPrettierでフォーマット
  3. ステージされた .json.md.yml.yaml ファイルをPrettierでフォーマット

もしLintエラーやフォーマットエラーがある場合、コミットは失敗します。エラーを修正してから再度コミットしてください。

CI/CDパイプライン

GitHub Actionsを使用して、以下のチェックを自動的に実行します:

Pull Request時

  • Lint and Format Check: ESLintとPrettierによるコード品質チェック
  • Type Check: TypeScriptの型チェック
  • Backend Tests: バックエンドのテスト実行とカバレッジレポート
  • Frontend Tests: フロントエンドのテスト実行とカバレッジレポート
  • Build: バックエンドとフロントエンドのビルド確認

mainブランチへのpush時

  • 上記すべてのチェック
  • Docker Build: DockerイメージのビルドとキャッシュGeneration

エディタ設定

.editorconfig ファイルが含まれているため、以下の設定が自動的に適用されます:

  • インデント: 2スペース
  • 改行コード: LF
  • 文字コード: UTF-8
  • 行末の空白を削除

VS Code、WebStorm、IntelliJ IDEAなどのモダンなエディタは .editorconfig を自動的に認識します。

📊 API エンドポイント

メソッド エンドポイント 説明
GET /api/tasks 全タスクを取得
POST /api/tasks タスクを作成
PUT /api/tasks/:id タスクを更新
DELETE /api/tasks/:id タスクを削除
POST /api/tasks/reorder タスクの順序を一括更新

🔒 データ永続化

SQLiteデータベースは ./data/kanban.db に保存され、コンテナを削除してもデータは保持されます。

🛡️ 型安全性

このプロジェクトは完全な型安全性を実現しています:

  • any型ゼロ - すべてのコードで適切な型定義を使用
  • 共有型定義 - バックエンドとフロントエンドで型定義を共有
  • Zodスキーマ - バリデーションと型定義の同期
  • TypeScript Strict Mode - 厳格な型チェック
  • 型ガード - ランタイム型チェック

共有型の使用方法

バックエンドとフロントエンドの両方で、共有型パッケージをインポートできます:

// Task関連の型とスキーマ
import {
  Task,
  TaskStatus,
  TaskPriority,
  CreateTaskRequest,
  UpdateTaskRequest,
  CreateTaskRequestSchema,
  UpdateTaskRequestSchema,
} from '@kanban/shared';

// 型ガード
import { isTask, isPrismaClientKnownRequestError } from '@kanban/shared';

// バリデーション
import { validateCreateTaskRequest } from '@kanban/shared';

詳細は TYPE_SAFETY_IMPROVEMENTS.md を参照してください。

📝 ライセンス

このプロジェクトは個人用途のタスク管理アプリケーションです。

🤝 貢献

個人用プロジェクトですが、改善案があればお気軽にご連絡ください。


製作: シニアエンジニア向けカンバンタスク管理システム
開発期間: 2025年11月

About

No description, website, or topics provided.

Resources

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors