EXCEL仕様書をデータとして活用する(VeletaでGo)
はじめに
弊社では、2024年10月23日に Japan DX Week の会場で、新製品の Veleta をローンチしました。
お披露目の場なので、ミニセミナーと称して、デモをしまくりました。
デモのネタをこちらのブログでも「VeletaでGo」というシリーズ?でいくつか投稿中です。
ですが、この記事は、Mashu です。
Mashu
Mashu は、弊社が販売しているデータカタログの SaaS です。
Mashu は、データベースやデータレイク、データウェアハウスからメタデータを収集します。
気の利いた開発ベンダーであれば、データベースの中にも論理名をコメントとして残してくれているので、Mashu は、コメントも全部吸い上げてくれます。
ところが、イマイチな開発ベンダーさんだとコメントが入っていないので、生の物理名と暗号解読の戦いになります。
ですが、そんな開発ベンダーさんでも、EXCELのテーブル仕様書を納品してくれている可能性はかなり高いです。
データベースから自動でメタデータを抽出するだけでなく、EXCELのテーブル仕様書も自動でなんとかなりませんか?
CSVエクスポートとインポート
Mashu は、CSVファイルで論理名と説明をインポートできます。
Mashu にインポートするには、Mashu のキー情報が必要になりますので、まずは、エクスポートします。
エクスポートした CSV は、以下のような形式になっています。
これにテーブル仕様書から論理名と説明を差し込みます。
論理名と説明以外の情報も残したいんですけど…
という場合には、カスタムタグとして、CSVインポートすることで対応できます。
カスタムタグとしてエクスポートした CSV は、以下のような形式になっています。
これに、カスタムタグの属性とした値を差し込みます。
xls2csv
「差し込みます」と書きましたが、手作業でやったら膨大な時間がかかりますので、プログラムを作りました。
まずは、論理名と説明から
先頭は、プログラムにパラメータとして渡すデータ構造の定義で、Settings が親玉で、テーブルの論理名と説明、カラムの論理名と説明が、どのEXCELファイルのどのシートのどの列に書かれているかを指定します。
プログラムの構造は単純で、まず、readXxx で、指示されたとおりに EXCEL を読み込んで、物理名に対応した論理名と説明をマップにして辞書を作ります。
そして、CSV を読みながら、辞書にあったら、論理名と説明を差し込みに行きます。
次に、カスタムタグ
基本的に、論理名と説明のプログラムと同じ構造です。カスタムタグの項目の順に指定された列の値を CSV に差し込みます。
このように xls2csv
は単純なので、Go言語の処理系さえインストールすれば、簡単・高速にコンパイルできます。make
がなければ、
のように go build
で OK です。
使い方は、こんな感じで
EXCEL のファイル名とシート名、論理名は alias
、説明は description
にカラムの位置を指定します。
ちなみに、demo
フォルダは、イベント会場でライブデモした資材です。
GoでもEXCEL
さて、xls2csv
が簡単に実現できたのは、roboninc/xlsx
のおかげです。
Go言語で EXCEL 処理というと、以下の2つが有名だと思います。
tealeg/xlsx
は、わかりやすくて、高速で、最初はこちらを使っていたのですが、一時、更新が止まっていたこともあって、excelize
に浮気したメンバーもいたのですが、当時の excelize
には、列コピーなど非常に遅い処理があって、プルリクでも作ろうかとも思ってソースコードを見たのですが、私の趣味とは合わないようでして(個人的な感想ですw)いろいろと探したところ、以下のものを見つけました。
これは、高速で、ソースコードもわかりやすかった(個人的な感想です)のですが、メンテナンスが止まっていて、かつ、いくつか修正が必要な箇所があったので、ROBON でメンテナンスをすることにしました。上の xls2csv でも、ROBON 版の roboninc/xlsx
を使用しています。
オリジナルと同様、MITライセンスのままにしていますので、ライセンスの範囲でご自由にお使いください。
おわりに
ROBON では、今回ご紹介した roboninc/xlsx
だけでなく、過去の技術ブログでもご紹介しました roboninc/sqlx
もオープンソースとしてメンテナンスしています。これらのオープンソースのメンテナンスに興味のある方、ご連絡をお待ちしております。
Discussion