Skip to content

hagyyyy-inc/wasulance-api

Repository files navigation

wasulance API — Hono + TypeScript のバックエンド

このリポジトリについて(免責) 開発中の SaaS「忘ランス (wasulance)」のモノレポから API レイヤ (apps/api) のみを議論用に抜き出したスナップショットです。

  • 単体ではビルド/型チェックは通りません(@wasulance/db / @wasulance/shared などワークスペース内パッケージや Prisma schema は親モノレポ側にあります)。
  • ドキュメント内の ../../docs/... 等の相対リンクや Issue 番号は親リポジトリ向けで、ここでは行き止まりになります。
  • 機密情報(.env / 鍵 / 接続文字列)は含みません。Git 管理対象ファイルのみを抽出しています。
  • 読みどころは「設計判断の意図」です。動かすためではなく、コードの構造と判断の跡を見ていただく目的のリポジトリです。

/api/* を担う Hono ベースの API レイヤ。AI 駆動開発で構築・運用しています。


プロダクト概要

忘ランス (wasulance) は、フリーランス・個人事業主向けの「請求書の送り忘れ防止」リマインダー SaaS。

請求書の送付タイミングを Excel やカレンダーで管理していると「送り忘れ」が起きやすく、請求が遅れれば入金が遅れるだけでなく、取引先からの信用にも関わる。これを「忘れない仕組み」で解決する。

機能 概要
請求スケジュール登録 クライアントごとに請求日 / 通知タイミングを登録
リマインド通知 Email / Slack / LINE / Discord / Chatwork / WebPush で「請求書を送る日」を通知
請求済みチェック 月次でクライアント別に「請求書を送ったか(請求済み / 未請求)」をチェックリスト管理
サブスクリプション Free(3 件まで)/ Pro(無制限 + 外部通知チャネル)。Stripe Subscriptions

ターゲットと割り切り

狙うのは、取引先と直接取引していて、取引先ごとに請求期日がバラバラで送り忘れてしまうフリーランス——多くはないが確実にいる層。だから請求書の発行・送付・入金確認といった「重い」機能は外部 SaaS に任せ、本プロダクトは 「指定したチャネルに『請求書を送る時が来た』と通知する」一点だけに特化している。

本リポジトリはこのプロダクトの API レイヤ(バックエンド) 部分。本番環境は AWS 上に構築済み(Hono API Lambda・公開前)。


見どころ(設計判断の跡)

このリポジトリで特に見ていただきたいのは、**「AI に書かせても破綻しないための型と構造のガードレール」**です。

  1. 依存方向を一方向に固定したレイヤリングdomain → usecases → interface-adapters → frameworkdomain はどのワークスペース・ライブラリにも依存しない(実装規約: CLAUDE.md §1)。
  2. インターフェースに依存させたテスタブルな構成 — interactor はドメインのインターフェース(port)をコンストラクタ注入で受けるため、テストは vi.fn() をインターフェース型で固めて注入し DB / Prisma なしで業務ロジックを検証できる。テストは具体実装を一切 import しない。 例: tests/usecases/schedules/schedules.test.ts
  3. AI 駆動開発を規約とガードレールで縛る — 実装規約(CLAUDE.md)に加え、.claude/ に開発規律・実行ガードレール・専門サブエージェント・ワークフローを整備している(下記「AI 駆動開発の仕組み」)。

AI 駆動開発の仕組み(.claude/

AI に書かせても品質と安全を落とさないための、規律・ガードレール・自動化を .claude/ に置いている。

  • .claude/settings.json — AI が実行できない操作を機械的に deny(破壊的コマンド / 保護ブランチへの直 push / .env 等の機密読み取り / curl での外部送信)。AI に過剰な権限を渡さない(OWASP LLM06 対策)。
  • .claude/rules/ — 開発規律(agent-behavior.md)とセキュリティ指針(security.md)。
  • .claude/agents/ — code-reviewer / security-auditor / test-writer / docs-writer の専門サブエージェント定義。
  • .claude/skills/ — 開発ワークフローをスキル化(ship / clean-sync / commit-push / fix-review-comments / review-pr / deploy)。

.claude/rules/ はプロジェクト横断の規約をこのリポジトリ用に抜粋したもの。絶対パス等はサニタイズ済み。

CI コストを抑える工夫(一人開発向けの割り切り)

品質ゲートと本番デプロイを CI から手元に寄せ、コミット/デプロイのたびの CI 消費を削減している(hook・スクリプトはモノレポ root 側)。

  • pre-commit hook(Husky)でコミット時に品質ゲートを強制
    pnpm exec lint-staged                    # prettier で format
    pnpm turbo run lint typecheck test:cov   # lint + 型チェック + テスト(カバレッジ)
    set -e で 1 つでも落ちればコミット不可。
  • 本番デプロイはローカルスクリプトdeploy-prod.sh + 事前チェック preflight-deploy-check.sh)。
  • 結果、コミットごとの lint/test/build や deploy の CI ワークフローは無効化(ci.yml.disabled 等)。

これは CI の代替ではない。hook は --no-verify でバイパス可能で、ローカル(macOS)で通っても Linux/Lambda で壊れる差(例: ファイル名の case-sensitivity)は捕まえられない。チーム開発や本番の厳密性が要る場面ではバイパス不能な CI ゲートを置くべき——と理解した上での、一人開発のコスト最適化。

git worktree による並列開発

git worktree複数のブランチを別ディレクトリに同時チェックアウトし、独立した機能/Issue を並列で進める。ブランチ切り替えや stash が不要で、worktree ごとに別の AI エージェントセッションを走らせて同時進行できる。

  • 隔離: worktree ごとに作業が独立(変更が混ざらない・それぞれ独立してビルド/テスト可能)
  • 並列: 独立したタスクを同時進行(依存のない複数 Issue に有効)
  • 運用フロー: worktree 作成 → develop を各 worktree に取り込み → マージ済みは掃除(スキル化)

効くのは独立したタスクの並列化。相互依存する作業や同じファイルを触る変更はマージ調整が必要。


主要な役割

  • 認証 (signup / login / refresh / logout / email 認証 / パスワードリセット) を JWT HS256 + bcrypt で提供
  • ドメイン use case (auth / clients / schedules / subscriptions / calendar / line / users / invoices / contact / admin 等) を Hono ルートにマッピング
  • Prisma / jose / bcryptjs / Stripe / SES 等のインフラ依存は interface-adapters/ だけが触れる(唯一の seam)
  • 配信形態: localhost dev は @hono/node-server、prod は AWS Lambda(apps/web から CloudFront 経由)

ディレクトリ構成(要約)

src/
├── domain/               entities / value-objects / repositories / services / exceptions
├── usecases/             auth / clients / schedules / subscriptions / calendar ...
│                         ── 各 verb ごとに input-port.ts / interactor.ts / output-port.ts
├── interface-adapters/   PrismaXRepository / JoseTokenService / BcryptPasswordHashService 等
└── framework/
    ├── controllers/      *.controller.ts (output → HTTP 写像 + exhaustive check)
    ├── middleware/       auth / rate-limit / error-handler
    ├── di/               container.ts
    └── app.ts            buildApp()

tests/                    src とミラー構造(domain / usecases / interface-adapters / framework / integration)
                          144 本。具体実装を import せず、ドメインの port を mock して DB なしで検証

実装規約の正本は CLAUDE.md。層構成 / 命名 / use case の書き方 / DI / テスト方針はそちらが正です(テスト方針は §8)。

About

忘ランス (wasulance) のバックエンド(Hono + TypeScript)。開発中モノレポから apps/api を抽出した議論用スナップショット

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors