デジタル庁が10月21日に紹介した「Harunobu」は、ExcelやCSVが機械にとって読みやすいかを100点満点で採点するツールです。セル結合だらけの、いわゆる「神Excel」を見つけ出し、その採点結果を生成AIに渡して直させる使い方まで公式に示しています。
実際にどこまで見抜けるのかを確かめるため、架空の支店別売上表で「神Excel」の見本を作り、手元で採点しました。結合や省略、残った数式はきちんと指摘されました。一方で、色で意味を付けた箇所と、月を横に並べた形は見逃しました。そのまま直すと、色に込めた「要確認」の情報が消えます。使い方と合わせて、この落とし穴を書きます。
Harunobuは何を採点するのか
デジタル庁のブログによると、Harunobuは政府が3月に決めた「行政データにおける機械可読性に関するルール」に沿って、Excel・CSV・TSVを採点します。ルールは30件あり、レベル1からレベル3まで分かれています。セルを結合していないか、1セルに1データか、数値に文字が混ざっていないか、表の上にタイトルが載っていないか、といった内容です。
特徴は、AIを使わずに決まった手順で判定することです。デジタル庁は「100回採点すれば100回とも同じ結果」になるよう、ルールベースにこだわったと書いています。AIで判定を補う機能もありますが、オプションです。デジタル庁の紹介ページでは、AI補助をオンにしない限りファイルは外部に送られないとしています。社外に出せない業務のExcelでも、手元で試せるということです。
コードはGitHubでMITライセンスで公開され、ブラウザ画面、コマンド、Pythonのライブラリの3通りで使えます。採点は「lite」(レベル1)、「standard」(レベル2まで、既定)、「thorough」(レベル3まで)から選べます。
入れ方:uvが古いと動かない
Pythonのパッケージ管理ツールuvを使います。リポジトリを取得し、依存を入れて採点するまでは次の4行です。
git clone https://github.com/digital-go-jp/machine_readability_rule
cd machine_readability_rule
uv sync
uv run harunobu analyze 売上.xlsx --mode thorough --out-path result.json
私の環境では、3行目のuv syncが日付の読み取りエラーで止まりました。手元のuvが0.8.18と古く、リポジトリの設定を読めなかったためです。0.13.5で実行し直すと通りました。同じエラーが出たら、uv self updateでuvを更新してください。
このエラーの原因になった設定は、読む価値があります。リポジトリはexclude-newer = "14 days"という設定で、公開から14日たっていないパッケージを取り込まないようにしています。設定ファイルのコメントには「サプライチェーン攻撃の影響を抑える」とあります。10月21日に起きたLiteLLM 1.107.0の改ざんは、公開から約2時間で取り下げられました。14日待つ設定なら、取り込む前に避けられた種類の攻撃です。なお、AI補助を使うときに入るLiteLLMは、ロックファイルで1.88.6に固定されていて、既定のuv syncでは入りません。
「神Excel」の見本は、レベル1が75点、レベル2が0点
見本にしたのは、どの会社にもありそうな四半期の売上報告です。数値はすべて架空です。次のような「くせ」を入れました。
- 1行目に結合したタイトル、2行目は空行
- 「売上」の見出しを3列に結合し、その下に4月・5月・6月を並べる
- 同じ支店が続く行は支店名を省略
- 担当名を全角スペースで整える(「営業 1課」)
- 金額を「1,200千円」の文字で入力し、集計中は「-」
- 合計の列にSUMの数式、要確認の行を黄色に塗る
- 表の下に「※黄色は要確認」という注記
比べるために、同じ数字を「年月・支店・担当・売上_千円」の4列で1行1件に並べた版も作りました。thoroughで採点した結果です。
| ファイル | L1 | L2 | L3 |
|---|---|---|---|
| 神Excelの見本 | 75 | 0 | 0 |
| 1行1件の版 | 100 | 100 | 85 |
| 見本を変換した版 | 100 | 100 | 100 |
見本で指摘されたのは、表の外のタイトルと注記、全角スペース、文字で入れた金額、結合した見出し、省略した支店名、残った数式、表が3行目から始まっていることです。結合した見出しと支店名の省略は「強制0点」の重い違反で、レベル2はこの2つだけで0点になりました。どのセルが何に違反したかもJSONに出るので、直す場所に迷いません。
採点は、uvの起動を含めて1ファイル6秒ほどでした。2回採点すると、点数と違反したルールは同じで、違反の一覧の並び順だけが変わりました。結果を機械で比べるときは、並べ替えてから比べると安全です。
見逃したもの:色の意味と、横に並んだ月
採点結果を1件ずつ読むと、引っかかるところがありました。
1つ目は黄色の塗りです。ルールには「書式でデータの違いを表現していないか」がありますが、判定は「書式によるデータ区別は検出されませんでした」でした。この見本では、黄色が「要確認」という情報そのものです。
2つ目は月の並べ方です。4月・5月・6月を列にした形は、ルールが避けるよう求める「横持ち」の典型ですが、「データは縦持ち形式です」と判定されました。単位も、見出しではなくセルの中の「千円」でしたが、「すべての数値列に単位が記載されています」で合格しています。
3つ目は逆の誤判定です。きれいに整えた版でも、支店名の「東京」「大阪」が「都道府県名が省略されています」と指摘され、レベル3は85点でした。ここは支店の名前で、都道府県ではありません。表記を「東京支店」に変えると指摘は消えました。
デジタル庁自身も、Harunobuはルールの「一例」の実装で、一部のルールは意味まで踏み込まず機械的に判定していると同じブログで断っています。100点は「指摘された問題がない」という意味で、「機械が正しく読める」ことの保証ではありません。私はこの点を前提に、点数は直す順番を決める目安として使うのがよいと考えています。
AIに直させるなら、変換プログラムを書かせる
デジタル庁は、採点結果のJSONとExcelをChatGPTに渡し、整形用のPythonプログラムを作らせる手順を紹介しています。大事なのは、AIにデータを直接書き換えさせず、プログラムを書かせる点です。プログラムなら、同じファイルからいつも同じ結果が出ます。月ごとに届く同じ形式のExcelにも使い回せます。
私も同じ考え方で、見本を1行1件に変換する30行ほどのPythonを用意し、変換後のファイルを採点し直しました。結果は3つのレベルとも100点です。ただ、変換後のファイルを見ると、黄色の「要確認」はどこにも残っていませんでした。ツールが指摘しなかったので、変換する側も捨ててよい書式として扱ったわけです。表の下の注記も消えています。
AIに頼むときは、採点結果に出ない情報を守るよう、条件を先に書いておくと防げます。私なら次のように頼みます。
添付のExcelと、Harunobuの採点結果result.jsonをもとに、
このExcelを1行1件の表に変換するPythonプログラムを書いてください。
データを直接書き換えるのではなく、同じ形式の別の月のファイルにも使えるプログラムにしてください。
条件:
- セルの色や太字に意味がある場合は、その意味を新しい列(例: 状態)に文字で残す
- 表の外の注記は捨てずに、どの行に関係するかを判断して列に移すか、別シートに残す
- 「-」や空欄は0にせず空欄にする。0と空欄を区別する
- 数値は単位や桁区切りを外して数値型にし、単位は列名に入れる(例: 売上_千円)
- 変換前後で合計値が一致するかを確かめる処理を入れる
最後の条件は、変換で数字が変わっていないかを機械で確かめるためです。Harunobuは形を採点しますが、値が正しく移ったかは見ません。合計の一致を確かめる処理があれば、変換の誤りに気付けます。
デジタル庁のブログも、外部の生成AIサービスでデータを扱う場合は所属組織のルールに従うよう注意しています。顧客名や個人情報が入ったExcelをそのままアップロードせず、列の構成が同じダミーのファイルでプログラムを作らせ、実データには手元でそのプログラムを流すのが安全です。
まずは部署の共有フォルダから10ファイル
Harunobuが一番役に立つのは、1ファイルを直すときより、たくさんのファイルの状態をつかむときだと私は見ています。デジタル庁も、部署ごとに採点して平均点を出し、点の低い部署を重点的に支援する使い方を挙げています。
手始めに、毎月AIや集計に回しているExcelを10ファイルほど選んでthoroughで採点し、レベル2が0点になったファイルから直してみてください。そのとき、色や注記に意味が込められていないかだけは、採点結果とは別に自分の目で確かめておくことをおすすめします。

コメント