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にPythonを書かせて陥る「Pandasの罠」と「UIの壁」を突破するアーキテクチャ思考

0
Last updated at Posted at 2026-03-29

はじめに:AI時代に新人が陥る「動くけど使えない」コードの罠

ChatGPTやClaude、GeminiなどのAIエージェントの登場により、新人プログラマでも「とりあえず動くアプリ」を爆速で作れる時代になりました。

しかし、AIに「CSVファイルを読み込んで加工するPythonコードを書いて」と雑に指示すると、「ローカルのテストでは完璧に動くのに、本番の業務に投入した瞬間大事故を起こすコード」 を出力してくることが多々あります。

今回は、私が完全オフライン(WASM環境)で動く金融CSV変換ツールを開発した際に直面した 「AI開発の落とし穴」 と、それをプロフェッショナルな実務レベルに引き上げるための 「アーキテクチャ思考(3つの教訓)」 を共有します。

これから業務ツールを作ろうとしている新人の方や、AIアシスタントを使いこなしたいエンジニアの必読事項です。

罠1:Pandasの型推論トラップ(「データ純度」の死守)

❌ AIが書きがちな素直すぎるコード

AIにCSV処理を頼むと、高確率で以下のようなコードを出力します。

Sample_code-1
import pandas as pd

# AIがよく書く素直な読み込み処理
df = pd.read_csv("bank_data.csv")

一見何も間違っていません。しかし、実務データ(特に銀行の入出金明細など、空欄が混ざるCSV)をこれに通すと、致命的なバグが発生します。

💣 何が起きるのか?(勝手なFloat変換)

Pandasは、列の中に1つでも空欄(NaN)が存在する数値列を見つけると、気を利かせて列全体の型を自動的に Float64 へアップキャスト(変換) してしまいます。

つまり、元データでは 1000 だった入金額が、出力されたCSVでは 1000.0 になってしまうのです。

日本の会計ソフト(freee、マネーフォワード、弥生会計など)は非常に厳格です。金額欄に「.0」が混入した瞬間にインポートエラーを吐き出し、システムは停止します。「気を利かせた型変換」は、業務システムにおいて最大の敵です。

⭕ 解決策:システムに勝手な変換を許さない

業務データを扱う際は、「Data Purity(データ純度)」 を死守するアーキテクチャ設計が必要です。

Sample_code-2
# 「純度維持」のコード
df = pd.read_csv(
    "bank_data.csv",
    dtype=str,       # 1. すべての列を「ただの文字列」として強制読み込み
    na_filter=False  # 2. NaNへの自動変換をブロックし、空欄を最初から「空文字」として保つ
)

AIは「データを分析しやすく整える」のは得意ですが、「会計ソフトが絶対に受け付ける無加工のデータを出力する」というビジネス要件までは知りません。システムの自動変換を「物理的に封殺」する防御的プログラミングが、プロの第一歩です。

罠2:フロントエンドの壁と「UIと実体の分離」

❌ 無理やりCSSでねじ伏せようとする罠

WASM環境(Pyodideやmarimoなど)でPythonをブラウザ上で動かす際、スマホの狭い画面で「振込依頼人名(フリコミイライニンメイ)」のような長いカラム名をセレクトボックスに表示させようとすると、レイアウトが横に崩壊します。

ここで新人は、AIに「CSSで文字を省略(text-overflow: ellipsis)して!」と頼みがちです。しかし、モダンなWASMフレームワークは「Shadow DOM」で守られていることが多く、外部からの単純なCSSハックを弾き返します。

⭕ 解決策:辞書を用いた「Illusionary Mapping(表示と実体の分離)」

フロントエンド(CSS)で無理やり見た目を変えようとするから沼にハマります。バックエンド(Python)側でアーキテクチャを工夫すれば、この問題は一瞬で解決します。

Sample_code-3
# 実際のカラム名(長い)
real_columns = ["日付", "振込依頼人名(フリコミイライニンメイ)", "引き出し金額"]

# UI表示用の短いラベルと、実体をつなぐ辞書(Mapping)を作成
display_mapping = {
    "日付": "日付",
    "振込人名": "振込依頼人名(フリコミイライニンメイ)", # 短く表示
    "引出額": "引き出し金額"
}

# ユーザーには辞書の「キー(短い文字)」を選ばせ、
# 裏側の処理には辞書の「値(元の長いカラム名)」を渡す
selected_label = "振込人名"
target_column_for_logic = display_mapping[selected_label] 

画面(UI)には短いラベルを表示し、裏側のロジック(実体)には完全な文字列を渡す。この 「UIと実体の分離」 こそが、環境に依存しない堅牢な設計(アーキテクチャ)です。

総括:AIエージェント時代における「人間の役割」

コードの記述スピードでは、人間は絶対にAIに勝てません。しかし、AIに丸投げしたシステムは、実務の過酷なエッジケース(空欄による小数バグや、極小スマホ画面でのレイアウト崩壊)で必ず破綻します。

これからの時代、プログラマの価値は「コードを書くこと」から 「ビジネスの絶対ルール(ドメイン知識)を定義し、AIの出力を監査する(Architectになる)こと」 へとシフトします。

  • 「会計ソフトに『.0』は絶対に許されない」
  • 「CSSで戦うのではなく、Pythonの辞書で解決する」

こうした 「システムの要件定義と戦略」 を描ける人間こそが、AIを真の意味で使いこなす次世代のプログラマとなるでしょう。

おまけ:これらの知見を全投入して作った実務ツール

本記事で紹介した「Pandasのデータ純度死守(小数付与の完全ブロック)」や「完全オフライン(WASM)での動作」といった厳格な要件をすべて詰め込み、「維持費ゼロ・情報漏洩リスクゼロで銀行CSVを会計ソフト用に変換&マスキングするツール」 を開発しました。

「AIを使ってどこまで実務に耐えうるSaaSを作れるのか?」という技術の結晶です。現在ココナラで公開していますので、実務でCSVの型変換エラーや手作業のマスキングに疲弊している方は、ぜひ覗いてみてください。(完全買い切りで一生使えます)

👉 銀行CSVを安全に会計用へ変換します(WASM-FinCSV Transformer)

この記事が、これから実務ツールを開発する皆さんの「転ばぬ先の杖」となれば幸いです!

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?