0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

請求書→全銀ファイル変換をAIで自動化するWebサービスを個人開発した話

0
Posted at

はじめに

「毎月届く請求書を見ながら、ネットバンキングに振込先をポチポチ入力する作業、なんとかならないかな…」

そんな身近な課題から、請求書をアップロードするだけでAIが自動解析し、全銀協フォーマットの振込データファイルを生成するWebサービス「トルカ 振込アシスト」を個人で開発・リリースしました。

この記事では、着想から本番リリースまでの流れ、技術選定の理由、つまずいたポイントなどを共有します。

解決したい課題

中小企業や個人事業主の経理担当者は、毎月こんな作業をしています:

  1. 届いた請求書(PDF or 紙)を開く
  2. 振込先の銀行名・支店名・口座番号・金額を確認
  3. ネットバンキングにログインして1件ずつ手入力
  4. 入力ミスがないか目視チェック

取引先が10社あれば10回この作業を繰り返します。1件あたり3〜5分、月に30分〜1時間がこの単純作業に費やされています。

しかも、銀行名から「金融機関コード(4桁)」を調べたり、支店名から「支店コード(3桁)」を調べたりする手間もあります。

全銀フォーマットという解決策

実は、ほぼすべてのネットバンキングには**「振込データ一括インポート」**機能があります。全銀協(全国銀行協会)が定めた固定長テキストフォーマットのファイルをアップロードすれば、振込先を一括登録できます。

問題は、この全銀フォーマットファイルを作ること自体が面倒だということ。Shift-JIS・120バイト固定長という仕様は、Excelで手軽に作れるものではありません。

「請求書の画像からAIが情報を読み取り、全銀フォーマットに自動変換する」 — これがトルカのコンセプトです。

サービス概要

利用フロー

請求書(PDF/画像) → アップロード → AI解析 → 確認・修正 → 全銀ファイルDL → ネットバンキングにインポート
  1. アップロード: PDF・JPG・PNGの請求書をドラッグ&ドロップ(最大20件一括対応)
  2. AI解析: Claude Vision APIが銀行名・支店名・口座番号・カナ名義・金額を自動抽出
  3. 確認・修正: 解析結果を画面上で確認。銀行名を入力するとオートコンプリートで金融機関コードを自動補完
  4. ダウンロード: 全銀協規定フォーマット(Shift-JIS・120バイト固定長)のTXTファイルを生成
  5. インポート: ネットバンキングの「総合振込」→「ファイル受付」でアップロードするだけ

特徴

  • AI解析精度: Claude Sonnet 4.6の高精度Vision APIで、手書き請求書やカラフルなレイアウトにも対応
  • 銀行コード自動補完: 1,500以上の金融機関マスタデータと自動照合
  • 仕入先マスタ: 一度登録すれば次回から口座情報を自動反映
  • 品質保証: AI精度が低かった場合、クレジットを自動返還

技術スタック

区分 技術 選定理由
フロントエンド Next.js 16 (App Router) RSC + Server Actions、SSR/SSG柔軟
CSS Tailwind CSS 高速プロトタイピング
認証 Clerk Google OAuth含め10分で導入完了
DB Supabase (PostgreSQL) 無料枠が充実、Storage一体
ORM Prisma 型安全、マイグレーション管理
AI Anthropic Claude Sonnet 4.6 Vision APIの精度が圧倒的
決済 Stripe Checkout + Webhook + カスタマーポータル
ホスティング Vercel Next.jsとの親和性、無料枠
アクセス解析 Vercel Analytics ゼロ設定で導入
ドメイン/DNS Cloudflare 無料SSL、高速DNS

コスト

項目 月額
Vercel (Hobby) 無料
Supabase (Free) 無料
Clerk (Free) 無料(10,000 MAUまで)
Cloudflare 無料
ドメイン (toruca.app) 約¥2,000/年
合計固定費 約¥170/月

AI解析コスト(Anthropic API)とStripe手数料は利用量に応じた従量制なので、利用がなければゼロです。

開発で工夫したこと

1. 全銀フォーマット生成

全銀フォーマットは1976年制定の古い規格で、Shift-JIS・120バイト固定長です。

ヘッダー (1行): 振込依頼人情報
データ (N行): 振込先情報(1件1行)
トレーラ (1行): 合計件数・合計金額
エンド (1行): 終了マーカー

カタカナは半角カナ、数字は右寄せゼロ埋め、文字列はスペース埋めなど、細かいルールがあります。このフォーマット生成ロジックは自動テストで品質を担保しています。

2. 銀行コード自動解決

AIが抽出した「三菱UFJ銀行」→ 金融機関コード「0005」への変換は、zengin-codeパッケージのマスタデータを使っています。

さらに、ゆうちょ銀行の独自体系(記号5桁 + 番号7〜8桁)から全銀コードへの変換も実装しました。

3. 品質保証クレジット返還

AIの解析精度が低く、ユーザーが多くの項目を手修正した場合、消費したクレジットを自動返還する仕組みを入れています。10項目中4項目以上の修正で1クレジット返還。これにより「AIが使えなかった場合でも損しない」安心感を提供しています。

4. 仕入先マッチング

同じ取引先からの請求書を2回目以降アップロードした際、過去の仕入先データと自動マッチングし、銀行口座情報を事前に入力します。使えば使うほど便利になる設計です。

つまずいたポイント

Vercelデプロイで404

vercel.json"framework": "nextjs"を明示しないと、全ページ404になりました。CLIデプロイ時の自動検出に頼ると危険です。

Supabase接続のSession Mode

Prismaは直接接続(ポート5432)、アプリケーションはSession Mode Pooler(ポート5432)で接続する必要があります。DATABASE_URLDIRECT_URLの使い分けに注意。

Stripe Webhookの冪等性

Stripeは同じイベントを複数回送信することがあります。checkout.session.completedでクレジット付与する際、stripeSessionIdの重複チェックで二重付与を防止しています。

全角↔半角変換の罠

日本語入力では全角数字「123」と半角数字「123」が混在します。バリデーション前に全角→半角の自動変換を入れることで、ユーザーの入力ストレスを軽減しました。

今後の展望

  • 会計ソフト連携: freee、マネーフォワードとのAPI連携
  • 定期取引テンプレート: 毎月同じ取引先への振込を簡略化
  • API提供: 外部システムからの利用
  • メール通知: 解析完了通知

おわりに

「ニッチだけど確実に需要がある課題」を解決するサービスを、モダンな技術スタックで低コストに構築できました。

無料で3回分お試しいただけますので、経理業務の効率化に興味がある方はぜひ試してみてください。

トルカ 振込アシスト — https://toruca.app


この記事が参考になったら「いいね」をお願いします。質問やフィードバックはコメント欄またはサービス内のお問い合わせフォームからどうぞ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?