1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

車検証(車両&顧客)管理システム バイブコーディング【Vol.01】

Posted at

はじめに

自動車やオートバイなど、車両を多く管理する必要のある企業(中古車販売事業や運送業など)にとって、車両や顧客の管理は必須かと思います。今回はClaudeやCodexのCLIをVS Codeから呼び出して、運用フローやサーバー仕様などを定義し、バイブコーディングでシステムを開発してみました。サーバー環境はAWSでDocker Containerベース、ECS/Lambda/Lightsailなどに対応し、DBはPostgreSQLです(今回は簡易的にLightsail)。

本記事では、実装した「車両管理システム」の機能要件・フロー・仕様をまとめます。コードはDjango 4.2 + Django REST Frameworkで、PDF読み取りに pdfplumber、不足時は pytesseract でOCRフォールバックしています。


完成ページスクリーンショット

【メインページ】
vehicle.jpg

【一覧ページ】
vehicle02.jpg

【DB(管理)ページ】
vehicle03.jpg


機能要件一覧(抜粋)

  • 車検証PDFを入力(Web UIアップロード/REST API/フォルダ投入/管理コマンド)し、テキスト抽出→項目解析を自動実行
  • pdfplumber で抽出し、テキスト量が足りなければ pytesseract(日本語+英語)でOCRフォールバック
  • 抽出結果を VehicleInspection としてDB保存、元PDFは media/inspection_pdfs/%Y/%m/%d/ に保管
  • 抽出状態を pending/processing/completed/failed で管理し、失敗時はメモ保持
  • 抽出・格納対象(例): 登録番号、車名/型式/原動機型式、種別/用途/自家用・事業用、車体形状、乗車定員、最大積載量、重量・寸法・軸重、型式指定番号・類別区分番号、総排気量/出力、燃料、走行距離計(現行/旧)、所有者/使用者/所在地、使用本拠位置、登録日・初度登録年月・車検有効期限、税額、受検種別/形態/点検整備状況、備考 など
  • Web UI: 一覧/詳細/編集/削除/再処理、検索(登録番号/所有者/車名)、ステータス絞り込み、ページネーション
  • REST API(認証必須): CRUD、フォルダ一括処理、再処理、統計取得
  • バッチ/監視: process_pdfs で一括処理、watch_folder でフォルダ監視→自動処理・処理済み移動
  • 環境変数でDB・CORS・PDFフォルダ・AWS設定・SECRET_KEY/DEBUG/ALLOWED_HOSTSを切替可能
  • Docker/Compose & AWS(ECS/EB/Lightsailコンテナ)デプロイ対応、ヘルスチェック /health/ を提供

システムフロー

1. PDF投入〜登録(Web/UI・API)

  1. /upload/ でドラッグ&ドロップ or POST /api/vehicles/ にPDF送信
  2. VehicleInspectionextraction_status=processing で生成し、PDFを保存
  3. pdfplumber→必要に応じOCRで抽出、正規表現で項目解析
  4. 解析結果を保存し completed に。例外時は failed とメモ
  5. Web/UI・APIから閲覧/編集/削除/再処理が可能

2. フォルダ監視・バッチ

  1. 監視フォルダ(PDF_WATCH_FOLDER 既定 ./pdf_input)にPDF配置
  2. watch_folder が生成検知→自動処理
  3. 成功時はDB登録し処理済みフォルダ(PDF_PROCESSED_FOLDER 既定 ./pdf_processed)へ移動
  4. 失敗はカウント&ログ、同名PDFが既存ならスキップ
  5. 手動一括は process_pdfs [--folder <path>]

3. API

  • GET /api/vehicles/ 一覧(20件/ページ)
  • GET /api/vehicles/{id}/ 詳細、PUT/PATCH 更新、DELETE 削除
  • POST /api/vehicles/{id}/reprocess/ 再処理
  • POST /api/vehicles/process_folder/ フォルダ一括処理
  • GET /api/vehicles/stats/ 件数ステータス
  • GET /health/ DBヘルスチェック
  • 標準でDRF認証必須、CORSは環境変数で許可

仕様書(ポイント)

技術スタック

  • Django 4.2 + Django REST Framework
  • DB: SQLite(開発デフォルト)/ PostgreSQL(本番想定)
  • PDF処理: pdfplumber、OCR: pytesseract
  • 監視: watchdog
  • デプロイ: Docker/Compose、AWS(ECS/EB/Lightsailコンテナ)

環境変数(例)

  • SECRET_KEY(必須), DEBUG, ALLOWED_HOSTS
  • DB: USE_SQLITE, DB_NAME, DB_USER, DB_PASSWORD, DB_HOST, DB_PORT
  • CORS: CORS_ALLOWED_ORIGINS, CORS_ALLOW_ALL_ORIGINS
  • PDF: PDF_WATCH_FOLDER, PDF_PROCESSED_FOLDER
  • AWS: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_STORAGE_BUCKET_NAME, AWS_S3_REGION_NAME
  • 言語/タイムゾーン: ja, Asia/Tokyo

データモデル(主要フィールド)

  • 登録番号、登録日/初度登録、車名/型式/原動機型式、種別/用途/自家用・事業用、車体形状、乗車定員、最大積載量、重量・寸法・軸重、型式指定番号、類別区分番号、総排気量/出力、燃料
  • 走行距離計(現行/旧)、所有者/使用者/住所、使用本拠位置、車検日/有効期限、税額、受検情報、備考
  • PDFファイル、抽出テキスト、extraction_statusextraction_notes、作成/更新日時

PDF処理

  1. PDF保存→pdfplumberで抽出、不足時OCR(lang='jpn+eng'、失敗時英語のみ)
  2. 正規表現で項目解析(和暦→西暦変換含む)
  3. 成功で completed、例外で failed + メモ
  4. 一括処理時、既存ファイル名はスキップ、成功PDFは処理済みフォルダへ移動

Web UI

  • /upload/: ドラッグ&ドロップ、簡易プログレス、件数サマリ
  • /vehicles/: 一覧(検索・ステータス絞り込み・ページネーション)
  • /vehicles/<id>/: 詳細/編集/削除/再処理

運用・セキュリティ

  • REST APIのデフォルト権限は IsAuthenticated
  • ALLOWED_HOSTS/CORSは環境変数で設定、DEBUG=Falseで各種セキュリティヘッダー有効
  • Tesseract未インストール時は警告し、OCR無しで継続
  • /health/ で監視

管理コマンド

  • python manage.py process_pdfs [--folder <path>] 一括処理
  • python manage.py watch_folder [--folder <path>] 監視→自動処理

触ってみる(ローカル例)

git clone <repository-url>
cd 車両管理システム
python -m venv venv
venv\Scripts\activate  # Windows の場合
pip install -r requirements.txt
cp env.example .env   # SECRET_KEYやDBを設定
python manage.py migrate
python manage.py runserver
# ブラウザで http://localhost:8000/upload/ へアクセス

Docker Compose利用の場合:

docker-compose up -d
docker-compose exec web python manage.py migrate
docker-compose exec web python manage.py createsuperuser

まとめ

  • PDF→テキスト→正規表現解析→DB保存を一気通貫で自動化し、Web UI/DRF API/管理コマンドの複数入口を用意
  • OCRフォールバックで読み取り品質を担保しつつ、失敗メモと再処理導線を確保
  • 環境変数とDocker/AWS対応でデプロイを簡素化

車検証の入力オペレーションを自動化したい方の参考になれば幸いです。質問や改善アイデアがあればぜひコメントください。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?