MENU

1班から全ラインへ ── 多チームの“汚いデータ”を安全に扱う(Claude Code・発展編)

第1回から第4回で、1つの班(パン班)ぶんの発注ツールが「正しく動く」ところまで来ました。でも、本当の現場は1班では終わりません。生産管理の担当者は、全部のラインの発注を、1人でまとめて見ている。しかもその計画データは、班ごとにバラバラのExcelで作られていて、決してきれいではない。今回は、そこへ広げます。

目次

1. 修正点の概要

今回の仮想事例では、パン班・洋菓子班・和菓子班という3つの製造ラインがあり、製造計画は班ごとに独立して管理されています。そして現実の計画は、いつも全部の情報がきれいに埋まっているとは限りません。仮にすべて埋まっていても、誤った計画がそのまま提出されれば、在庫管理は簡単に破綻します。だからこそ、「この計画はどこかおかしくないか?」と気づくきっかけがあれば、在庫を適正に保てる可能性が上がります。

変えたいのは、この3つです。

ポイント
  • 多チーム対応… 全ラインの製造計画を、1つの計画としてまとめて扱う。
  • データ整合チェック… 班ごとに汚れた入力でも止まらず、不整合を見える化する。
  • 製造計画の可視化… どの日・どの製品が混むかをひと目で分かるようにして、考えるきっかけをつくる。

前提として、コアの計算は、一行も変えません。同じ材料を複数の製品が使うときの「合算」は、第2回ですでに実装済みです。製造計画のteam列も、最初から入れてありました。だから多チーム化は、計算を作り直すのではなく、計画の行が増えるだけです。

2. 修正計画:データチェック機能と製造計画の可視化

何をどう変えるかを、先に仕様として固めます(今回配る変更仕様書にまとめました)。コアを触る大きめの変更なので、Claude CodeにはPlanモードで「コアは変えず、その上に乗せる」段取りを確認してから実装に入ります。

入力:全ラインを1つの計画に

全ラインの計画を1つの計画として読みます(team列で班を識別)。班ごとの計画ファイルが分かれていても、同じ形式なら結合して読み込む。特別な臨時計画も、同じ形式で足すだけです。

整合チェック:止める/報告して続行

ここがこの回の肝です。汚いデータへの対応を、2段に分けます。構造の異常(必須カラムが無い・ファイルが読めない)は止める。一方、紐づけの不整合(計画にあるが配合表に無い製品、配合表にあるが在庫に無い材料、欠損、日付の異常、表記ゆれで結合できないIDなど)は、報告して続行します。

  • 原材料IDのカラムがない → 止まる。
  • 日付の形式が異なる → 報告して進める。

といった形で進めていきます。

可視化:候補からヒートマップを選ぶ

実際にプログラムを書く前に、イメージだけ固めておきたかった。そこでWeb Claudeに「全ラインの計画を可視化して、混雑状況の理解の助けになる表示例を出して」と相談し、図を作ってもらいました。候補は3つです。

(A) 製品×日付のヒートマップ

(B) 日別の総ロット数+能力ライン

(C) チーム別の積み上げ棒

採用は(A)ヒートマップにしました。理由は、チームと品目の情報が落ちず、「どの製品が・どの日に混むか」が分かるから。(B)(C)は総量や班の負荷は見えても品目が潰れてしまい、「急ぐべきか緩めていいか」の判断材料としては弱い、と考えました。

MATSU

プログラムの実装する前に、Web Claudeを活用して図を作ってもらうのが時短になります。

作成した変更仕様書

作成した変更仕様書は以下の通りになります。

3. 実装:Planモードで実装し、動作を確認する

Planモードによる実装

変更仕様書をClaude Codeに渡し、Planモードで実装させます。返ってきた計画が「既存のコアプログラムを変更せず、実装する」段取りになっているかを、まず確認する。もしコアを書き換える計画になっていたら、そこで止めて指示し直します。この一手間が、動いている土台を壊さないための保険です。確認できたら、実装に進みます。

動かすデモデータ:わざと3か所、汚しておく

動作確認には、3班ぶんのデモデータを用意しました(在庫・全ラインの製造計画・配合表の3ファイル)。A=パン班、B=洋菓子班、C=和菓子班で、砂糖や卵といった共通材料は班をまたいで使われます。だから合算が効いて、共有材料ほど早く減る──多チーム化の効きどころが見える構成です。

ただし、きれいなデータだけでは整合チェックが働く様子を見られないため、わざと3か所だけ、汚してあります。

① ロット数の欠損:製造計画のロットの1行を空にした(→ その行は除外して報告)。図は次のセクション参照。

② 配合表に無い製品:計画にだけ「抹茶ロール」を入れた(→ 計上せず報告)。

③ IDの表記ゆれ:在庫は BTR-01、配合表の1か所だけ BTR_01(→ 表記ゆれの疑いとして報告)。

製造予定日は過去日になるため、そのまま使うことができません。使う場合は日付を変更して使ってください。

動作確認:不整合における表示

コードの実装が完了しました。「製造計画ヒートマップを見る」「整合チェック報告」のボタンが追加されています。

3つのCSV(在庫・全ラインの製造計画・配合表)を入れて動かします。全ラインの計画を読み込み、共通材料は班をまたいで合算される。そして、データに不整合があれば、処理を止めずに報告が出ます。

想定した項目である3つの項目

  • ロットデータの欠損
  • 抹茶ロールが配合表にない
  • 表記のゆれ

これらに由来するデータの不整合は検出されました。また、メタ的な話をしますが、製造計画の日付について、作業をしているうちにデモデータの日付が過去のものになってしまい、計算対象外になりました。想定していない不整合でしたが、これも検出できるように設計してくれていたみたいです。

動作確認:ヒートマップで混雑の可視化

そして、「製造計画ヒートマップを見る」を押したら採用したヒートマップが出てきます。縦が製品(班つき)、横が日付、色が濃いほどその日に多く作る、という見方です。色の濃い帯を追うだけで、どの製品がいつ混むか、どこが空くかが、ひと目で分かります。製造をしない日や過密なスケジュールなど、通常運転と異なる部分がひと目で分かります。

4. 評価:pytestによるテスト作業

ここまでで「動いた」ことは確認できました。でも第4回でやったとおり、「動いた」と「正しい」は別です。だから評価は、第4回のテストにそのまま観点を足して、もう一度 pytest を回します。

pytestによる検証項目

今回の変更に合わせて足すのは、この4つの観点です。

追加項目
  • 多チームで、共通材料が班をまたいで正しく合算されるか
  • 未登録製品や在庫に無い材料が、(止まらず)報告されるか
  • 欠損がポップアップで通知され、該当行が除外されるか
  • 表記ゆれのIDが、注意として拾われるか

これらを足して、全件が緑(PASSED)になって初めて、多チーム対応も「正しく動く」と言えます。実装で終わりにせず、ここまでやって一区切りです。

検証結果

検証項目に対する検証結果は以下の結果になりました。

確認項目結果検証内容
① 多チームで共通材料が班をまたいで合算バターの平均使用量が単一班より大きいことを確認(A班 BRD-01/02 + B班 CAK-02 等を合算)
② 未登録製品・在庫に無い材料が止まらず報告report.ok=True(停止しない)かつ MTR-01(紐づけ①)・BTR_01(紐づけ②)が報告される
③ 欠損が通知され該当行が除外WAG-02 06-10(空lots)が計画から除外され、「13行目:ロット数が空です」が報告される
④ 表記ゆれIDが注意として検出BTR_01 ↔ BTR-01 がnear-miss(注意)で検出。全角・区切り・前ゼロの正規化も確認

全ての項目において、passedになりました。これで変更の完了です。

5. まとめ

まとめ
  • 多チーム化はコアを変えず、計画の行が増えるだけ(team列を最初から持たせた設計が効く)
  • 汚いデータは2段で対応:構造の異常は止める、紐づけの不整合は報告して続行
  • 「黙って無視」をやめ、欠損はポップアップで具体的に通知
  • 可視化はヒートマップを採用。情報を増やさず、混雑を目で見つけられる形に
  • 実装(動いた)と評価(正しい)は分けて確認する

次回は第6回。道具としては形になりましたが、まだ「毎回やり直し」が残っています。緊急度のしきい値も、選んだファイルも、起動するたびに最初から。前回の設定を外部ファイルに覚えさせて、起動時に戻せるようにします。あわせて、.batなどで自分以外のPCにも配れる形にして、この道具を「人に渡せる」ところまで仕上げます。

使用しているデータ・製品名・取引先名はすべて架空のものです。コードは解説用の実装例で、各ツールの仕様・料金は記事公開時点のものです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次