2
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?

ユニークなレコードの差分をチェックするツールを自作してみた

Last updated at Posted at 2024-03-26

はじめに

テキストベースの比較ツールは世の中に多く出回ってるんだけど、テーブルや配列などの構造データを基準にした比較ツールは見当たらなかった。
需要が少ないのか、探し方が悪いのかはわからないけど、自分が使いたいから作ったってだけの話。

発表用にまとめたので、こっちを見たほうがいいかも

ユニークなレコードとは

テーブルの主キーや複合ユニークキーを持っている一意なデータのことです。
例えばdateとnameで一意な組み合わせをもつ構造データのことを指します。

{
  date: '2023-12-01',
  name: 'sales',
  value: 100,
}

業務的な使い所

業務で複雑な計算処理をするWebアプリの開発担当をしています。
入出力データ共に1000以上のデータを含んだ配列を扱っており、テーブルのデータやユーザーの入力値など変数が多く、テストコードのチェックで100%の保証をできるとは思っていません。
実際の生データを使って、コード修正前後に意図しないデータ変更がないか確認するのに使っています。

他には、BigQueryから出力したCSVデータを使った分析をしていて、最新の出力データとの比較なんかにも使えます。

テキストベースの差分ツールを使ってみる

VSCodeでGit差分を参考に出してみる。

単発レコード

1レコードの1項目が変わるぐらいならこれで問題ない。

image.png

複数レコード

単発レコードの分 + レコードの並びが変わると、削除と追加の両方が表示される。

image.png

ユニークレコードで差分を出してみる

2023-12-01 sales データはユニークであるため、データ順も関係なく、新旧で比較が可能となる。

image.png

npmパッケージで公開

まずパッケージを作ってnpmで公開してみることにした。Web版とパッケージ版の両方を公開することに意義があると考える。

というのも、誰が運営しているかわからないWebサイトに業務データを貼り付けるのに抵抗があって、例えば画像や動画ファイルの変換サイトとかあるけども、極力使いたくないタイプなのだ。
世の中にはChat GPTに社内情報を貼り付けたりする人がいるわけだけど、無料で使えるリソースの対価は何かしら支払っていると考えておいた方がいい。

Webサイトにデータを貼り付ける = バックエンドを通せる ので、気になる人はパッケージ版を使うと安心かもしれない。
とはいえ、公開パッケージも無料で使えるわけで、悪意のある人間が中にはいるかもしれない。そう考えると、今回作ったパッケージも第三者には怪しい野良ツールなんだと思う。

VercelでWeb版を公開

自分で作ったnpmパッケージをinstallして、Next.jsでWebインターフェースを作成。
最近はVercelでお手軽に公開できるのがかなり便利ですね。

image.png

アウトプット

READMEに使い方など書いてるので、参考までに。

パッケージ版

Web版

終わりに

というわけで、業務外にチマチマ作ってたツールの紹介でした。
自分が業務で作りたいツールを業務外で作れば、自分の成果物として外部にアウトプットできるのがポイントです。

エンジニアあるあるですが、自分が楽するためのツールを作るのは楽しいんですよね。
とはいえ体を休めるのも仕事なので、程々にしましょう。

2
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
2
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?