境 耕佑

jevと立替精算アプリ

jevを使ってみました。レスポンスが早い。使用量が安い。プロンプトインジェクションを気にしなくてよい。とAI組み込んでプロダクトを作りたいときに不安だった点を解消できて、各種ベンダーがSystem Oneモデル(これ、定着するのかな。。)がリリースする理由がわかりました。いわゆるLLMではオーバースペックに感じていた用途が結構あるので、これからも色々と使ってみたいですね。

やったこと

我が家は財布を分けていて、家族用の出費は折半しています。支払いの多くは家族口座に紐づいたクレジットカードで行いますが、ときどきどちらかが立て替えます。ある程度まとまったところで精算しているものの、記録と計算が面倒でした。そこで、LINEグループで立替を記録し、精算額を計算してくれるLINE Bot、アリーちゃんを作りました。

できること

立替登録、精算集計、履歴表示の3つの機能を作りました。

立替登録 : アリーちゃんに立替日、品目、金額、費目を伝えると、それを記録してくれます。入力する順番を入れ替えても大丈夫です。立替日や費目は推測可能な任意入力とし、省略できるようにしました。とくに費目はjevを使って、品目と過去の履歴から推測してくれます。

  • アリーちゃんに英教室の立替を伝えると、費目がAI推定されて立替登録が完了するLINEの画面
  • 立替日と費目を省略した2件の立替登録が、品目から推測して補完されるLINEの画面
立替日、品目、金額、費目を伝えると、立替を記録します。入力順を変えたり、費目を省略したりしても、内容を推測して補完します。

精算集計 : 未精算の立替を集計して、精算額を表示します。受け取りボタンをタップすると、立替を消し込めます。ここにPayPayのQRコードやリンクを付けたかったのですが、PayPayがまだ対応していなかったため、手動で対応することにしました。

精算と伝えると未精算の立替が集計され、精算額と受け取りボタンが表示されるLINEの画面
「精算」と伝えると、精算額を表示します。

立替履歴 : 未精算の立替一覧と精算履歴を確認できます。立替登録の内容を修正することもできます。一覧画面はWebで作りました。ハッシュ値をURLに入れるだけでは、一般公開されるためセキュリティ面が気になりました。一方で、認証を導入するのは大げさです。そこで、有効期限が1時間のトークンを使い、アリーちゃんがトークンを発行しないとWebページを見られないようにしました。

未精算の立替明細と精算履歴を一覧できるアリーちゃんのWebページ
「履歴」と伝えると、立替明細と精算履歴を確認できます。

内部構造

趣味のアプリなので、ランニングコストがかからないように気をつけました。jevには無料枠がありませんでしたが、費用はわずかなので許容しました。

LINEグループ内のユーザーからLINE公式アカウント、Cloudflare Workers、Cloudflare D1、jevへのデータの流れを示すアリーちゃんのシステム構成図
アーキテクチャ図。

使用した技術は次のとおりです。ゼロから完成まで3日間で開発できました。

  • TypeScript
  • Cloudflare Workers、Cloudflare D1、LINE公式アカウント、jev
  • Orca、OpenCode Go(GPT-6 Luna、GLM-5.3-Flash)、OpenSpec

jevについて

今回のアプリでは、アリーちゃんにメンションしたときのコマンド判定と、費目の推定にjevを使いました。jevの特徴は、独立した質問を一度にまとめてリクエストする方法を推奨していることです。その方法が最もコストを抑えられるようです。質問の設計力が試されそうです。

今回使った質問のJSONは次のとおりです。

 "questions": {
    "action": {
      "type": "choice",
      "instructions": {
        "question": "このメッセージに対して実行すべき行動を一つ選んでください。",
        "rules": [
          "判断の前提や制約を簡潔に記述する"
        ]
      },
      "criteria": {
        "settle": {
          "what": "未精算の立て替えを費目別に集計し、精算カードを作るコマンドです。入力は典型的には単一の語句です。",
          "examples": ["精算", "清算", "締め", "請求", "精算して", "清算して", "締め処理して", "未精算をまとめて", "まとめて請求して"],
          "not_for": "精算方法について質問するだけで、実行を頼んでいない文です。"
        },
        "list": {...},
        "expense": {...},
        "other": {...}
      }
    },
    "category": {
      "type": "choice",
      "instructions": {
        "question": "立て替え品目に付ける費目を候補から選んでください。",
        "rules": [
          "判断の前提や制約を簡潔に記述する"
        ]
      },
      "criteria": {
        "食費": {
          "what": "家庭で食べる食材や食品です。",
          "not_for": "飲食店、テイクアウト、出前の食事です。",
          "examples": ["米 5kg", "牛乳", "無糖 ヨーグルト"]
        },

        // ...「外食費」など、ほかの費目も同様に並ぶ
      }
    }
  }

コストについては、アプリ自体が小さいので、あまり参考にはならないかもしれないですが、3日間、8.7万トークンで0.0033ドルでした。jevは無料枠がないのでホビーアプリに使うのはちょっと抵抗がありました。しかし、この程度の利用量であれば、1ドルに達するまでには、かなり時間がかかるので、安心して使えます。

3日間の開発でjevに43リクエストを送り、費用が0.0033ドルだったことが分かる利用状況のグラフ
3日間の開発で使ったjevの利用状況です。
最後までありがとうございました よければもう一本読んでいってください