AIとJSON読み取りでいい感じの活用を考えてみた

公開日:

こんにちは。
サポートチームの妄想うさぎ、ほり🐰です。

注意

本記事は情報提供を目的としており、本記事の内容は無保証、サポートの対象外です。
サポート窓口、問合せ窓口にご質問をいただいても対応いたしかねますのでご了承ください。

JSONのやることができました!

先日、カスタマインのアップデートでこのような”やること”が追加されたのを知っておりますか?

JSONを読み込む

アップデート情報はこちら

カスタマイン更新履歴
https://docs-customine.gusuku.io/ja/changelog

JSON?じぇいえすおーえぬ???

となった方もいらっしゃるかもしれません。

かくいう私も、
「JSON、うん、あれだよね、Webシステム作るときによく使うやつだよね」
くらいのゆるい認識だったりしますw

と、これでは格好がつかないので、私の愛しのチャッピーちゃん(ChatGPT)に聞いてみましょう。

JSONとは

JSON(じぇいそん) は、

人とコンピュータの両方が読みやすい「データの書き方(形式)」

のことです。

正式名称は JavaScript Object Notation(ジャバスクリプト・オブジェクト・ノーテーション) といいます。


📦 たとえば、こういうものです

json
コピーする編集する
{
  "名前": "田中太郎",
  "年齢": 25,
  "趣味": ["読書", "旅行", "映画"]
}

これは、「田中太郎さんは25歳で、読書・旅行・映画が趣味」という情報をデータとして表現した形です。

…ですって!「じぇいそん」って読むんですね。(流石にそれは知ってたけど)

で、これがカスタマインに登場したと。
…そういうことですね。

で、JSON読み込んだら何がスゴイんだと。
…そう思いますよね。

ドキュメントを読むと、ここがポイントだと思うのですよね。

ほり的ポイント☝️

「JSONを読み込む」で上記の例を変換すると、アクション結果を通して JSON 内の要素を参照することができます。例えば、「JSONを読み込む」のアクション番号が 1 で、name の値(山田太郎)を取り出したい場合は、以下のように書けます。

= $1.name

つまり、JSON形式の書き方の文字列があれば、
そこから任意の内容を取り出せるってことなのです。

内容を取り出せるということは…
そう、マッピングに使えるんですねぇぇぇぇ

ということはですよ。
アレと相性がいいんじゃないかなと思ったわけです。

OpenAI を呼び出してテキストを生成する

OpenAI を画像付きで呼び出してテキストを生成する

たとえば、領収書のファイル(画像)を読み取って、
宛先とか金額とかをJSON形式に成形してもらえば、kintoneの各フィールドにセットすることだってできちゃうわけなんですよねぇえええええ!!

JSON読み込みが出る前までの話

実はですね…
OpenAI を画像付きで呼び出してテキストを生成する」が登場したときに、そういうのできないかな?とチャレンジしたことがあったんですけども。

OpenAI を画像付きで呼び出してテキストを生成する」の結果は複数行文字列で返ってくるので、そこから任意の部分を取り出そうと思ったら、「正規表現を用いてフィールドの値を置換する」くらいしかなかったんです。

正規表現、みなさんお得意ですか?
私はまったく得意ではありません!!(人類には早すぎたんや…)
なのでWebで調べたり、愛しのチャッピーちゃんに聞いたりして試行錯誤しております。

そんなわけなので、AIで読み取っても結局抜き出しのところで苦労してたんですよね…
(一応できなくはなかったですけど、面倒だし難しかったです)

そんな中、全人類待望の「JSONを読み込む」が爆誕したんですよ。
それは試したいでしょう。試しますよね。さぁやりましょう!!!

アプリ紹介

こんな感じで用意しました。

元になる画像はこのようなものを用意しました。
もちろん適当です。住所は我らが倉敷市役所です。

AIに渡す文字列は、指示も含めてこのようにします。

##指示内容
この画像の中の文字を以下のJSON文字列の内容で抜き出して、抜き出した文字を以下のJSON形式で記載したものを返してください。
結果の値にはコードブロックは使わないでください。

##抜き出しの注意点
日付の場合は、「YYYY-MM-DD」の形式に変換して抜き出すこと。
宛先の場合は、「様」「御中」などの敬称は付けずに名前だけを抜き出すこと。
金額の場合は、「¥」マークや区切りのカンマ「,」を含まない、数値のみで抜き出すこと。

#結果出力JOSN記載例
{
  "name": "山田太郎",
  "age": 30
}

#必要なJSON文字列のキー
・日付
・宛先
・金額
・但し書き
・郵便番号
・住所
・会社名

何度か試してみて、一番安定して結果が出てきたのがこの指示でした。
もし試してみるときには、色んなパターンで最適な指示を見つけていただければと思います。
特に、日付や宛先、金額は、そのままkintoneにセットしやすいように指示を工夫しています。

カスタマイズ

今回はこんな感じに落ち着きました。

画像から読み取って成形するところはOpenAI呼び出しがあるので、読み込み中画面を表示するのと、それをやらない(JSON形式はできてる前提)で読み込んでセットする部分と、個別で動作できるようにしました。

このあたりは、運用を踏まえて調整していただくといいのかなと思います。

注意☝️

読み取ったものをセットしやすいように、編集画面で動作するようにしておりますが、
画像を添付ファイルへセットした後、いったん保存しておく必要がありますのでご注意ください。

早速実行してみます。

無事、フィールドにセットまで自動で完了しました!

メールの文章から成形してセットする

もうひとつ、活用を考えてみました。

それが、定期的に送られてくるメールをいい感じに成形してフィールドにセットする方法です。

個人的なお話になりますが、 毎日定時にとあるところから売上報告のメールが来るんですけども、これ、どうにかkintoneに貼り付けられたら面白いのになぁと常々考えていたわけですよ。

※内容はフィクション含みます

2025/6/30 17時現在
総合計:4985円

くらしき店
店舗計:4985円

1234567000000
桃ゼリー
@190円
3件 380円

1234567000001
桃ジュース
@220円
3件 660円

1234567000002
ぶどうジュース
@230円
5件 1035円

1234567000003
マスカットジャム
@240円
6件 1320円

メール文章丸ごとコピーは、メール共有オプションとか、クラウド連携サービス(iPaaSとか言われるやつ)などを利用すると可能だと思います。もちろんコピペでもいいですけど。

でも、さすがに明細までチマチマちまちまコピー&ペーストはやってられないですよね。
これをいい感じにkintoneに入れられたら便利そうじゃありませんか?
というわけでやってみます!

アプリは同じものを使いまわしで、セット先フィールドだけ別に用意しました。

小計や合計は、メールから転記したものと、計算フィールドで計算するものと、両方用意しました。

それによって、AIで読み取った値が間違ったりしてたら簡易チェックになるかしら…という浅はかな考えです。チェック機構なんて、いくらあっても困りませんからね。

AIに渡す文字列は指示内容含めてこちら。

##指示内容
指示文章から、次の例に従ってJSON形式の形に変換してください。

##指示文章例
2025/6/28 17時現在
総合計:8700円

くらしき店
店舗計:8700円

1234567000000
 りんご
 @190円
 9件 1710円

##JSON形式の変換例
{
    "日付_メールより":"2025-06-28"
    "総合計_メールより":"8700"
    "明細テーブル":[
        {
            "商品コード_メールより":"1234567000000"
            "品名_メールより":"りんご"
            "単価_メールより":"190"
            "個数_メールより":"9"
            "小計_メールより":"1710"
        }
    ]
}


##指示文章
2025/6/30 17時現在
総合計:4985円

くらしき店
店舗計:4985円

1234567000000
桃ゼリー
@190円
3件 380円

1234567000001
桃ジュース
@220円
3件 660円

1234567000002
ぶどうジュース
@230円
5件 1035円

1234567000003
マスカットジャム
@240円
6件 1320円

ポイントは、明細(kintoneのテーブル)にしたいところを配列で成形してもらうことです。

配列っていうのは[xxx,yyy,zzz]みたいな形で書いてある部分のことになります。
配列にすると何がいいって、そりゃもう「リストから要素を取り出す」が使えることですね。あらまぁ妄想が無限大に広がりますな(´ω`)

カスタマイズ

繰り返しの文字列になっている部分を配列で成形してもらって、その結果を「リストから要素を取り出す」で取り出しつつ、「テーブルに行を追加する」方法を考えました。

(最初に、テーブル全体をクリアするアクションを入れてもいいかもしれないです)

さて実行してみましょう!

はい、見事にテーブルになって出てきました!
これなら日々のチェックもしやすいですし、何かの集計や分析にも使えそうですね。

そして、早速チェック機構が働きます\(^o^)/

なんと、計算フィールドの値と、メールからもらってきた小計値が合いません。
(合計値は、本来はもっと長いメールのものを半分くらいに切ってるので仕方ない…)

でもメールの内容と小計値は合っているように思うので、転記ミスということでもなさそう…。

しばらく考えた結果、
賞味期限間近のものは、現地の店員さんの判断で半額で売ってもらっていることを思い出しました。

半額で売ってても、売上明細上は同じ分類になるのです。すっかり忘れてました。こうやって並べてみてみると気が付きやすくなりますね。

とまぁこんな感じで何かと使えそうな予感がします。
ぜひぜひ、いろんな読み取りを試してみてもらえたらなぁと思います!

おまけ

今回のカスタマイズで、なぜかフィールドに値がセットされず、
コンソールログとかも駆使して調べてたんですが、
よくよく見てみたら、「$」を「S」で指定していたという、超うっかりミスをしでかしておりました。
(キーの位置全然違うやないかい!なんでこんなアホなミスを…恥ずかしい)

焦らず、ログ出力や別の値をセットしてみるなど、色んな角度から試すことが大事ですよw

画面のカスタマイズ、自動処理(バッチ)、帳票出力といった「kintoneの”できない”を”できる”に」
gusuku Customineがあればkintoneらしさをそのままにkintoneをカスタマイズできます

投稿者プロフィール

アバター画像
ほり
kintoneが好き過ぎる、自称帳票まにあ。
テクニカルサポートチーム所属。
「仕事をITでたのしく」をモットーに岡山県倉敷市から完全リモートワークしております!