「請求書の自動送信を組んだのに、なぜか半分しか届かない」
「集計マクロが、たまに変な数字を吐く」

自動化がうまく動かないとき、原因はプログラムではなく入力した台帳(マスタ)の汚れであることがほとんどです。

そこで、自動化を動かす前にCSVの不備をまとめて洗い出す小さなツールを作って、GitHubで公開しました。pythonの標準機能だけで動くので、追加インストールは要りません。

🔗 コードはこちら:mamagotolab/master-checker

demo

先に結論:自動化の前に、台帳を「検査」する

自動化で失敗する人は、いきなり一番大きい処理(請求・連携・配信)を動かします。
うまくいく人は、その前に入力データを全部チェックします。

順番はこうです。

  1. CSV(顧客マスタ・商品マスタ)の不備を先に洗い出す
  2. 人間が直す
  3. きれいになってから自動化を動かす

master-checker はこの「1番」だけを担当します。重複・空欄・表記ゆれ・型の崩れを見つけて報告します。勝手には直しません。 理由は後で書きます。

なぜマスタが汚いと自動化が止まるのか

私は、会計ソフトとクラウドソーシングの明細をつなぐ仕訳の自動化を、自分の事務作業のために組みました。
そのときに何度もつまずいたのが、データそのものの汚れです。

よくある汚れを並べます。

人間が目で見れば「同じだよね」と分かります。
でもプログラムは文字が1つでも違えば別物として扱います。ここが自動化の落とし穴です。

⚠️ 効果の数字について。私の手元では、月1回の手作業チェックが数十分かかっていました。これは試算ですが、件数の多い台帳ほど、事前チェックの自動化は効いてきます。実際の削減時間は台帳の大きさで変わります。

設計:要件定義でいちばん時間をかけたこと

ツールを作るとき、コードより先に「何をやって、何をやらないか」を決めました。
ここが、私が仕事で一番大事にしている部分です。

決めたこと1:検出だけして、直さない

自動で直す機能(--fix)は、あえて入れていません。

理由は、直し方には必ず判断が要るからです。
(株)株式会社 に寄せるのか、その逆か。それは台帳を使う人が決めることです。
ツールが勝手に書き換えると、元データを壊しかねません。だから報告だけに徹しました。

決めたこと2:一番重い処理の前に、全部まとめて検査する

検査は、ファイルを読み込んだ直後に全項目を一気に実行します。
途中で1個見つけて止める、という作り方にはしていません。

理由は、使う人に「直すべき箇所の全体像」を一度に見せたいからです。
1個直すたびに再実行させるのは、非エンジニアには負担になります。

決めたこと3:追加インストールを要らなくする

このツールは外部ライブラリを使いません。pythonの標準機能だけで書いています。

データ処理だと pandas を使うのが定番です。
でも、それを入れる時点で非エンジニアの多くは止まります。
「まず python check.py 顧客.csv だけで動く」を優先しました。配る側の都合ではなく、使う側の都合で決めています。

実装でつまずいた、リアルな注意点

ここからは、実際に作って分かった一次情報です。公式ドキュメントには載っていません。

文字コードの自動判定(Windowsの台帳はShift-JIS)

日本の業務CSVは、いまでも Shift-JIS(cp932) で保存されていることが多いです。
UTF-8だけ想定すると、開いた瞬間に文字化けします。

そこで utf-8-sig → utf-8 → cp932 の順で読めるものを探す形にしました。
読めた文字コードは結果にも表示します。「Shift-JISとして読みました」と一言出すだけで、使う人の安心感が変わります。

全角・半角の混在は「正規化の前後差」で見つける

全角と半角の混在は、目視ではなかなか気づけません。
pythonには unicodedata.normalize('NFKC', ...) という、全角を半角に揃える機能があります。
これをかける前とかけた後で値が変わるかを見れば、混在を機械的に検出できます。

カラムの種類は「名前」でなく「中身」で推定する

「日付の列」「数値の列」を、見出し名だけで判断すると外します。
見出しが英語だったり、空欄だったりするからです。

そこで、列の中身の8割以上が日付パターンなら日付列、という値ベースの推定にしました。
8割という線引きは1か所の定数にまとめて、後から調整しやすくしています。

誤検知は「自動で直さない」ことで許容できる

検査を厳しくすると、誤検知(本当は問題ない箇所を拾う)が増えます。
普通は嫌われます。でもこのツールは自動で直さないので、多めに拾っても害が小さいのです。
最終判断は人間がやる。だから「見逃すより、拾って見せる」に寄せました。設計の前提が、検査の強さを決めています。

使い方

bash python check.py 顧客マスタ.csv --key 顧客ID --required メールアドレス

「黒い画面」に慣れていない方は、Windowsなら「コマンドプロンプト」を開いて、上の1行をコピーして貼り付けるだけです。難しい設定は要りません。

問題があると、ERROR・WARN・INFOに分けて表示します。
ERRORが残っていると終了コードが 1 になるので、「ERRORが消えるまで自動化を動かさない」という運用を、シェルスクリプトに組み込めます。

Markdownレポート(--report)やJSON出力(--json)にも対応しているので、ほかの処理につなぐこともできます。

よくある質問

Q. プログラミングが分からなくても使えますか?
A. pythonが入っていれば、python check.py ファイル名.csv だけで動きます。追加のインストールは要りません。

Q. Excelファイルは読めますか?
A. いまはCSVだけです。Excelは「CSV形式で保存」してから渡してください。

Q. 勝手にデータを書き換えませんか?
A. 書き換えません。見つけて報告するだけです。直すのは人間の役目にしています。

Q. Shift-JISの台帳でも大丈夫ですか?
A. 文字コードは自動で判定します。Shift-JIS(cp932)のCSVもそのまま読めます。

おわりに

自動化は、派手なツールを入れることではありません。
入力する台帳を、機械が読める状態に整えること。地味ですが、ここが土台です。

土台が整っていれば、あとの自動化はぐっと楽になります。逆に、ここを飛ばすと何度でもつまずきます。

「自社の台帳をこの流れで整えたい」「会計や請求の流れごと自動化したい」というご相談を承っています。
業務の流れを整理する“要件定義”から、運用後の保守まで対応します。

ママゴトラボは、業務の自動化ツールを要件定義から設計してつくる開発ラボです。
「この作業、自動化できないかな?」がありましたら、お気軽にご相談ください。
👉 https://mamagotolab.com

その業務、自動化できるかもしれません

「毎回手でやっている作業」を、要件定義から見直してツールにします。GAS・Python・VBAでの自動化のご相談を承っています。

ココナラで相談する →
ブログ一覧に戻る