🛡️ 【提出用図面データ作成の自動化 #4】「動く」だけでは足りない。失敗時の復旧とレビュー導線まで設計した

目次
📝
会社名、顧客名、実店舗名、店舗番号、共有フォルダ、実際の図面データは公開せず、内容を一般化しています。

この記事で伝えたいこと


OCRで図種を判定し、DXFを分割できた時点で、技術的には動いていました。ところが日常業務に置くと、再実行、既存OUTPUT、ZIP失敗、原本削除、レビュー後の保存といった別の問題が出てきます。

ここから先は、処理を増やすというより、失敗しても戻せることと、次に触る人が迷わないことを詰めていきました。

💡
中心ロジックより時間がかかったのは、その周りの運用でした。

背景


以前の状態

図種判定とDXF生成ができた段階では、技術的なPoCとしては成立していました。

ただし日常業務では、同じ案件を再実行したり、途中でZIPが失敗したり、WindowsとMacでファイルを受け渡したりします。

また従来運用では、DXFを図種ごとに準備する、ファイル名を正しく付ける、PDFを想定どおりの順に出力する、といった人の手順遵守に依存する箇所が多く、実際に手順ミスによる誤りも発生していました。

なぜ見直したのか

業務ツールは「成功したときに動く」だけでは不足です。

既存成果物がある、処理が途中で止まる、原本を削除する、別OSで開く、といったケースでも安全に扱える必要があります。

今回やったこと


失敗しても元に戻せるようにした

実ファイルを触る前に出力計画を作り、処理後に生成物を確認します。

Analyze
↓
Validation
↓
Dry Run
↓
Execute
↓
Final Verify

既にOUTPUTがある場合は、「上書き」「削除して作り直す」「キャンセル」から選べます。変更前のOUTPUTはTEMPへ退避し、途中で失敗した場合は復元を試みます。

原本削除も同じ考え方です。設定でONにした場合でも、Final Verifyが終わるまで削除しません。TEMPへのバックアップとサイズ確認を済ませてから削除します。

Revisionがない特定案件では、成果物とは別に空の @最新図 フォルダも作ります。これは既存の保存ルールに合わせるための処理です。

利用者にPython環境を作らせない

OCRやDXF解析はPythonでも実装できます。ただ、今回は他の人も使うツールです。

社内PCではネットワーク上の制約で pip からパッケージを入れられないことがありました。利用者ごとにPythonや仮想環境を準備する運用は避け、既に入っているExcelを実行基盤にしました。

起動もExcelを直接開かせません。VBSをダブルクリックするとExcelを非表示で起動し、xlsmを開いてマクロを実行して終了します。通常時の確認ダイアログは出さず、OUTPUT重複など本当に判断が必要な場面だけ止めます。

ZIPはMacへ渡せる形まで確認する

ZIPは日本語ファイル名をUTF-8で持たせ、内部パスをWindowsの \ ではなく / に統一しました。Windowsで作れたことだけでは済ませず、生成後にCRC、UTF-8フラグ、パス区切りを検査しています。

macOS Finderで実際に展開する確認だけは、まだ残っています。

Everythingで店舗フォルダを探す作業をなくした

v13.2.2では、レビュー者向けに店舗用フォルダへのショートカットを作るようにしました。

店舗用フォルダには、その店舗の過去案件と今回案件の情報が入っています。以前はレビュー時やメール送信後に、Windows向けの高速ファイル検索ソフト Everything を使って対象店舗のフォルダを探していました。今はレビュー用フォルダに置かれたショートカットから直接開けます。

OUTPUTを確認
↓
レビュー用フォルダへ保存
↓
レビュー
↓
ショートカットから店舗用フォルダを開く
↓
過去情報・今回案件の情報を確認
↓
メール送信
↓
同じ店舗用フォルダへ必要なデータを保存

小さな変更ですが、自分の処理が終わった後に、次の人がどこを探すかまで見るようになりました。

実際に確認したこと


正常系の6図種について、PDF判定からDXF生成、ZIP作成まで通ることを確認しました。

生成ZIPについては、6ファイル、CRCエラーなし、全エントリUTF-8フラグあり、内部パスが / であることを構造的に確認しています。

entries: 6
UTF-8 flag: ON
path separator: /
CRC/integrity error: none

一方、macOS Finderでの実際の展開確認は、この構造検証とは別の確認項目として残しています。

v13.2.2で追加した店舗用フォルダへのショートカットについては、実環境でレビュー者が必要情報へアクセスでき、メール送信後のデータ保存にも利用できることを確認済みです。

✅
Windows側での生成物とZIP内部構造、v13.2.2の店舗フォルダへのショートカット導線は確認済みです。OUTPUT重複・原本削除・VBS起動の異常系など、別途残っている実環境確認は完了扱いにしていません。

難しかったこと・うまくいかなかったこと


ZIP工程で一度失敗した

実ファイル出力PoC中にZIP生成で失敗しました。

処理を段階化し、今回作成した成果物だけをロールバックする構成だったため、原本を壊さず戻せました。

UTF-8にしただけではMac対応にならなかった

日本語ファイル名をUTF-8にした後も、ZIP内部パスがWindows形式の \ になっていました。

ZIP標準の / へ修正し、生成後に内部構造を検査するようにしました。

Excel画面やコンソールが作業を邪魔した

外部コマンドやExcelが前面に出ると、機能が正しくても日常作業の邪魔になります。

そのため外部コマンド非表示、VBSからのExcel非表示起動へ寄せました。

どう判断したか


採用した方法
  • 実処理前のDry Run
  • 最終Verify後にのみ不可逆操作を行う
  • 既存OUTPUTはTEMPへ退避してから変更する
  • 重複時だけユーザーへ選択を求める
  • ZIPはUTF-8 + / 区切りで生成する
  • 原本削除は設定でON/OFFにする
  • VBSから非表示実行する
採用しなかった方法
  • 既存出力を無条件で上書きする
  • 失敗時に中途半端な成果物を残す
  • Final Verify前に原本を削除する
  • 通常処理のたびに確認ダイアログを出す
  • Windowsで開けたことだけでZIP互換性OKとする
最大限無人化するのではなく、定型処理は自動化し、不可逆・曖昧な場面だけ人間へ判断を戻す構成にしました。

結果


できるようになったこと

中心の自動処理だけでなく、再実行からレビュー後の保存までつながるようになりました。

  • OUTPUTを変更する前に退避し、失敗時に戻せる
  • 原本削除をFinal Verifyの後ろに置ける
  • UTF-8 + / のZIPと @最新図 を既存運用に合わせて作れる
  • VBSから起動でき、利用者側のPython環境構築を不要にできる
  • レビュー者がファイル検索ソフトで店舗フォルダを探さず、ショートカットから直接移動できる
まだ確認・改善が必要なこと
  • 最新版の異常系テスト
  • macOS Finderでの展開確認
  • 原本削除ON時の実環境ロールバック確認
  • 実運用での削減時間とエラー率の計測

AIを使った範囲


AIに任せたこと
  • VBA実装案
  • ZIP形式の調査と構造チェック
  • ロールバック処理の実装案
  • VBS起動方法の整理
  • 異常系テスト観点の整理
自分で判断したこと
  • どの確認を省略し、どこで人間に判断を戻すか
  • @最新図 の実際の運用仕様
  • 原本削除を設定化すること
  • Macとの受け渡しを要件に含めること
  • Excel/VBAを配布基盤にする判断
  • 実ファイルを使った受入判断

今回の学び


  1. 業務ツールは正常系だけでは完成しない
    • 重複、失敗、再実行、削除、別OSなど周辺条件が実運用を左右します。
  2. 不可逆操作は最後へ寄せる
    • 原本削除はFinal Verifyとバックアップ後にしました。
  3. 自動化は自分の操作だけを速くすればよいわけではない
    • 定型処理は自動化しつつ、方針選択が必要な場面は人間へ戻し、さらにレビューや保存など次工程の導線まで見る必要がありました。
  4. 成果物は内部形式まで検証する
    • ZIPが開けるだけでなく、文字コードや区切り文字まで確認しました。

まとめ


作っている途中で、手間が増えたのはOCRやDXF生成の中心ロジックより、その周りでした。再実行したときに何を残すか、失敗したらどこまで戻すか、他の人のPCでどう起動するか。そこを詰めないと日常業務には置けません。

v13.2.2では、レビュー後に店舗フォルダを探すところまで対象にしました。自分の作業時間だけを短くするより、前後の人が迷わない流れにする方が実運用では効きます。