Matsuba(社外ファイル共有)

概要

取引先とのファイルの受け渡しを、メールや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)
画像 1
画像 2
画像 3
画像 4
画像 5
画像 6
画像 7
画像 8
画像 9
画像 10
画像 11
画像 12
画像 13
画像 14
画像 15
画像 16
画像 17
画像 18
画像 19
画像 20
画像 21
画像 22
画像 23
画像 24
画像 25
画像 26
画像 27
画像 28
アクティブ画像