BODIK Utility(12) BODIKエディタ スクリプトの使い方

ISITでは、自治体様がオープンデータを公開する際の助けになるようなツール群(BODIK Utility)を開発し、公開しています。皆様のオープンデータ公開業務にお役立てください。

BODIKエディタ

オープンデータのCSVを編集することに着目したWebエディタです。別ブログでご紹介しました。

BODIK Utility(12)BODIKエディタ

ISITでは、自治体様がオープンデータを公開する際の助けになるようなツール群(BODIK Utility)を開発し、公開しています。皆様のオープンデータ公開業務にお役立てください。 BODIKエディタ オープンデータのC […]

今回は、BODIKエディタにスクリプト機能を追加したので、その使い方をご紹介します。

スクリプト機能は、Excelで公開されている印刷型のExcelファイルをデータ型のCSVに変換することを目的に開発しました。

スクリプト機能

BIDIKエディタは、あらかじめ組み込まれている機能を1つ1つユーザーが選択し、実行することで、CSVを加工することができるツールです。基本的に、未加工のデータを加工して、理想的なCSVに整形したあとは、加工済みのCSVをマスターとして追加、修正することを想定しています。同じ作業を毎回繰り返すことは想定していませんでした。

しかし、表計算ソフトのマクロのように決められた処理を自動実行できる仕組みを実装できないかという要求がありました。

マクロのような複雑な処理を実装するのは難しいが、単純なコマンドとパラメータで処理を記述するスクリプトならば組み込めるのではないかということで、スクリプト機能を実装しました。

人間が見やすい印刷型の表計算ソフトのデータを機械判読可能なデータ型CSVに変換し、オープンデータとして公開するのにお役立てください。

なお、BODIKエディタのスクリプトの詳細に関しては、BODIKエディタのスクリプトマニュアル をご参照ください。

BODIKエディタのスクリプトマニュアル

このページは、BODIK Utilityの BODIKエディタのスクリプト機能 のマニュアルです。 スクリプト一覧 区分 スクリプトコマンド 機能 記述例 列操作 hide_col 列を隠す hide_col <列 […]

BODIKエディタを起動する

BODIKエディタは、次のリンクからアクセスし、ご利用ください

URL:https://utility.bodik.jp/bodikeditor

リンクを開くと、次のような画面が表示されます。

BODIKエディタ起動画面

Excelファイルを開く

画面のExcel対応にある「Excelファイルを開く」ボタン、または「URLからExcelを開く」ボタンをクリックしてください。

今回は、サンプルとして、デジタル庁が公開している自治体標準オープンデータセットの定義書を開いてみましょう。

次のURLから自治体標準オープンデータセット・データ項目定義書Aを読み取ります。

https://www.digital.go.jp/assets/contents/node/basic_page/field_ref_resources/5345f63e-62aa-4ef5-b979-287b6f343e2a/0d6cbe5f/20250501_resources_open_data_municipal-standard-open-dataset_table_a.xlsx

自治体標準オープンデータセット データ項目定義書A

シートを選択する

上部に「Excelのシート」というコンボボックスがあります。ここには、読み取ったExcelファイルに含まれるシートのリストが表示されます。編集したいシートを選択してください。今回は「01.公共施設一覧」を開いてみましょう。

01.公共施設一覧

スクリプト機能

左の「アクションを選択する」コンボボックスで「BODIK Utility機能等」を選択し、その下のアクション一覧から「スクリプトを実行する」をクリックします。

スクリプトを実行する

データ加工処理を考える

データ型CSVにするためには何をすればいいのかを考えます。今回の場合は、次のような加工を行います。

  1. 0行目が空白、1行目も不要なので削除する。
  2. 下の方に2行の不要な行があるので削除する。
  3. 0列目の「項目No.」は、不要なので削除する。(残してもいいですが、今回は操作例として削除します)
  4. CSVの項目ヘッダーをセットする。
    • オリジナルの2行目、この時点の0行目はCSVの項目ヘッダーとなります。
  5. CSVをダウンロードする

この工程をスクリプトで記述してみましょう。

スクリプトを記述する

スクリプトは「スクリプトを入力する」のテキストエリアに入力します。

スクリプトを入力し「実行」ボタンを押すと、テキストエリアに記述したスクリプトが、1行づつ上から順に実行されます。

「Excelのシート」コンボボックスで同じシートを選択すると、いつでもExcelファイルを読み取った状態(つまり、スクリプトで変更する前の状態)に戻すことができます。スクリプトを考えるとき、この「元に戻す機能」は便利なのでご利用ください。

1.0行目を削除する

行を削除するスクリプトは「del_row <行番号>」です。0行目を削除するスクリプトは次のように記述します。

del_row 0

今回は、次の1行目も削除するので、複数行削除になります。複数行を削除するときは、「del_row <開始行番号>:<終了行番号>」で指定します。0行目と1行目を削除するスクリプトは次のように記述します。

del_row 0:1

「実行」ボタンを押して、先頭の2行が削除されたことを確認します。

2.最後の2行を削除する

先ほどと同じ行削除ですが、行を削除するには del_row スクリプトに「行番号」を指定する必要があります。最後の2行が何行目なのか?数えるのも面倒ですよね?

表をスクロールして削除する対象の行を表示し、その行をクリックしてみてください。

削除する行をクリックする

左上に「行番号」「列番号」という表示があります。ここにはクリックしたセルの情報が表示されます。

行番号に「57」が表示されています。つまり、削除する最後の2行は、57行と58行になります。

del_row 0:1
del_row 57:58

ここで注意する点として、上の「Excelのシート」コンボボックスで「01.公共施設一覧」を再選択して、最初の状態に戻してから上記コマンドを実行します。そうしないと「del_row 0」が2回実行されることとなり、削除してはいけない行を削除してしまいます。

スクリプトを1行づつ追加しながら考えるときは、毎回、「元の状態に戻してからスクリプトを実行する」ことを覚えておいてください。

最後の2行が削除されたこと、先頭行が項目ヘッダーとして残っていることを確認します。

3.0列目を削除する

列を削除するスクリプトは「del_col <列番号>」です。0列目を削除するので次のスクリプトを記述します。

del_row 0:1
del_row 57:58
del_col 0

0列目が削除されたことを確認します。

4.ヘッダーをセットする

ここまでの加工で、先頭行(0行目)がCSVの項目列ヘッダー行になりました。

0行目を項目列ヘッダーにするスクリプトは「set_header」です。スクリプトに記述します。

del_row 0:1
del_row 57:58
del_col 0

set_header

スクリプトを実行し、0行目が消え、表の項目列ヘッダーに0行目の文字列がセットされたことを確認します。

「set_header」でエラーになることがあります。CSVの項目ヘッダーですので、同じ項目名が複数あると、重複エラーになります。今回のケースでは全項目がユニークで重複がなかったのでエラーにならず、ヘッダーをセットすることができました。

もし、set_headerで重複エラーが発生した場合は、重複を解消してから、set_headerするようにしてください。

重複を解消するには、セルを直接編集してもいいですが、再現性を確保するためには「set_col」スクリプトを使って、セルのデータを書き換えることができます。「set_col」については、スクリプトのマニュアル等をご参照ください。

これで、印刷型Excelからデータ型CSVへのデータ加工は完了です。

5.CSVを保管する

このデータをCSVで保管しましょう。CSVをダウンロードするスクリプトは「download <CSVのファイル名>」です。

del_row 0:1
del_row 57:58
del_col 0

set_header
download 公共施設.csv

「公共施設.csv」というCSVファイルがダウンロードできました。

ダウンロードした「公共施設.csv」をBODIKエディタで開いてみましょう。

スクリプトで加工したCSVを開く

BODIKエディタのスクリプトを使って、印刷型Excelから機械判読可能なデータ型のCSVができましたね。おめでとうございます。

最後に、主に開発者向けに、CSVの内容をJSONに変換する方法をご紹介します。

おまけ.JSONでダウンロードする

上記のスクリプトでCSVを手に入れることができました。このようなCSVの内容をJSONで欲しいときがありませんか?

特にAIに情報をインプットするとき、JSONで渡すほうがAIが理解しやすくなります。

そんなときに使えるスクリプトを用意しました。「download_json <JSONファイル名>」をお使いください。

del_row 0:1
del_row 57:58
del_col 0

set_header
download 公共施設.csv
download_json public_facility.json

このスクリプトを実行すると、次のようなJSONファイルが手に入ります。

[
{
"項目名": "全国地方公共団体コード",
"区分": "○",
"説明": "情報の管理主体である団体の全国地方公共団体コードを6桁で記載。※記載方法について、「データ項目特記事項」シートの【共通ルール】、及び「全国地方公共団体コード」を参照。",
"形式": "文字列(半角数字)",
"記入例": "011002",
"項目名英語": "localGovernmentCode",
"共通語彙基盤": "施設>メタデータ>発行者>ID>識別値 ",
"共通語彙基盤での値型": "xsd:string ",
"GIF参照データモデル": "施設>施設住所>全国地方公共団体コード",
"GIF区分": "◎"
},
{
"項目名": "ID",
"区分": "○",
"説明": "情報の管理主体である地方公共団体内でデータが一意に決まるよう、IDを設定し記載。※記載方法について、「データ項目特記事項」シートの【共通ルール】を参照。",
"形式": "文字列(半角英数字)",
"記入例": "AA0100022200",
"項目名英語": "identifier",
"共通語彙基盤": "施設>ID>識別値",
"共通語彙基盤での値型": "xsd:string",
"GIF参照データモデル": "施設>ID",
"GIF区分": "◎"
},
{
"項目名": "地方公共団体名",
"区分": "",
"説明": "情報の管理主体である地方公共団体名を記載。",
"形式": "文字列",
"記入例": "北海道札幌市",
"項目名英語": "localGovernmentName",
"共通語彙基盤": "施設>メタデータ>発行者{@組織型}>住所>都道府県(注1)",
"共通語彙基盤での値型": "xsd:string ",
"GIF参照データモデル": "",
"GIF区分": ""
},
  ・・・・・・
]

BODIKエディタのスクリプト機能、いろいろなケースで使えて、結構便利!気に入っています。ぜひお試しください。

ひらの