概要
取引先とのファイルの受け渡しを、メールやFAXから招待制のWebアプリに置き換えました。ClamAVによるウイルススキャンを通ったファイルを社内のGoogleドライブへ自動で同期します。
社内のドライブは社外と共有できない設定のため、最終的な保管先はそのままにし、受け渡しをアプリに移しました。社内外の利用者は共有スペース(Box)で、アカウントのない相手とは期限つきのURLで受け渡します。
Claude CodeのはSkillsとサブエージェントを使用した仕様駆動開発を行いました。レビュー役のAIにはコードを編集させず、仕様の判断と検証は自分で行っています。
Points
社外の取引先へのアカウント発行と最長20年の運用を前提に、アクセス制御・ウイルス対策・監査・障害検知を作り込みました。
TypeScriptとGoのMonorepo構成で、フロントエンド・API・ワーカーの型をZodとProtocol Buffersで共有しています。設計ルールはbulletproof-reactとクリーンアーキテクチャを基に定め、違反は規約テスト102本とESLintで検出します。
- ・通信が切れても続きから再開するアップロード(自前実装)
- ・ClamAVのスキャンを通ったファイルだけを利用者に渡し、検出したら隔離する仕組み
- ・社内のGoogleドライブへの自動同期(Boxごとに切替)
- ・期限・パスワード・回数制限・本人確認を設定できる共有リンク
- ・アカウントがなくても本人確認で提出できるファイルリクエスト
- ・保持期間による自動削除と、削除対象から外すHOLD機能
- ・100種類以上にカテゴライズされた監査ログ
- ・容量の見込みや失敗した処理の再実行まで扱う管理コンソール23画面
- ・アプリ本体と並べて表示できる95本のアプリ内マニュアル
- ・認可の最終判定をRLS(103ポリシー)に置き、マトリクステストで検証
- ・Transactional Outboxと冪等な受け手で、イベントの欠落と重複に対処
- ・定期処理の停止など画面に出ない障害に対する検知を用意
Stacks
-
フロントエンド :
- Next.js 16(App Router、PPR)、
- React 19、
- TypeScript 5、
- CSS(Tailwind CSS v4、shadcn/ui)、
- Libraries(TanStack Query、Zustand、nuqs、React Hook Form、Zod...)
-
バックエンド :
- Node.js 22、
- Hono 4(@hono/zod-openapi)、
- Better Auth(2段階認証・メールOTP)、
- Prisma 7、
- Supabase(PostgreSQL、RLS、PGroonga)、
- Go 1.26(Drive同期・ウイルススキャン)、
- ClamAV、
- React Email + Resend、
- Libraries(sharp、PDFium、FFmpeg、Protocol Buffers...)
-
インフラ・その他 :
- Google Cloud(Cloud Run、Cloud Storage、Pub/Sub、Cloud Tasks/Scheduler、Eventarc、Cloud Armor)、
- Monorepo構成(pnpm + Turborepo + go.work)、
- クリーンアーキテクチャ + bulletproof-react、
- GitHub Actions(CI/CD、Workload Identity Federation)、
- Vitest / Playwright / Go testing、
- Docker / Artifact Registry、
- 生成AI(Claude Code)




























