xshoji's blog

Ampの広告付き無料プランのクレジット残量をメニューバーに表示するようにしてみた

目次

はじめに

前回の記事 で紹介した自作のプラグインを使ってたところ、以下の不満が出てきた。

  • AIの思考や行動が長くなると、ターン終了までコストがわからない
  • 一瞬コストが表示されるのを見逃すと結局今いくら残ってるかわからない
  • ampを起動しないとコストが表示されない

そこで、ampのプラグインという領域を飛び出し、macのメニューバーに常駐する形でコストを表示させる仕組みを作ってみたので紹介する。

仕組み

macのメニューバーに常駐する形でコストを表示させる仕組みのからくりはとてもシンプルです。

swiftbar/SwiftBar: Powerful macOS menu bar customization tool https://github.com/swiftbar/SwiftBar

これを使って、自作のスクリプト経由で吐き出したコスト残量ファイルの中身を表示させるだけ。

中間ファイルは /tmp/amp-credit-menubar.txt という名前にしているが、中身はただのプレーンテキストではなく JSON にしている。SwiftBar 側はその JSON を読んでメニューバー向けの表示に整形するだけ、という役割。

要件

最初に自作したプラグインの不満点を解決しつつ、最終的に常時コストを表示させる仕組みの要件は以下になった。

  • Sleepから復帰すると最新のFreeの残コストを取得して表示する
  • 毎時コストが回復するので、回復のタイミングでも最新のFreeの残コストを取得して表示する
  • Ampのプロセス起動中は、非同期のworkerプロセスが10秒ごとにコストを監視し常にメニューバーに結果を反映する
    • Ampのプロセスが起動していないときは無駄なコスト確認を走らせないようにしたい意図

これらの要件を満たすように実装したが、結果として構成は以下のようになった。

┌──────────────────────────────────┐      JSON       ┌─────────────────────────────┐
│  Amp Plugin (Bun runtime)        │ ──────────────> │  SwiftBar Plugin (bash)     │
│  free-credit-monitor.ts          │  /tmp/amp-      │  amp-credit.10s.sh          │
│                                  │  credit-        │                             │
│  - Runs `amp usage` periodically │  menubar.txt    │  - Reads JSON and renders   │
│  - Background refresh every 10s  │                 │    the menu bar output      │
│  - Instant refresh between chats │                 │  - Auto-refresh every 10s   │
│  - Optional TUI notifications    │                 │  - Fallback: `amp usage`    │
└──────────────────────────────────┘                 └─────────────────────────────┘

役割分担としては、定期的な表示更新や Sleep 復帰後の再取得は SwiftBar 側、Amp を触っている最中の即時反映は plugin 側に寄せている。毎時のクレジット回復タイミングも SwiftBar 側の定期更新で拾えるので、常駐表示としてはこれで十分だった。

amp usage するのが amp plugin と swiftbar の sh 両方というのがなんとも筋が悪いが、まあ、自分しか使わないので適当で。

ぶっちゃけamp側のプラグインはなくても良い

なんでわざわざAmp側のプラグインで非同期更新させてるのか。実はあまり理由はなくて、単純にやってみたかったから。 一応

  • Ampのプロセスが起動していないときは無駄なコスト確認を走らせないようにしたい意図

の意図はあるものの、そんなにAmp側への負荷もかからないだろうし、SwiftBar側のshで常にAmp Freeのコスト残量を取得する実装にすれば Amp側のプラグインは不要になる。

使ってみた感想

正直、めっちゃいいです。前は残りどれくらい使えるんだっけ?を見るためにAmpのアカウントページを見たり、プラグイン起動するためだけにampを立ち上げてたんですが、 この仕組みを入れてからターミナルで普通に指示を出しつつ、コストは常にメニューバーに表示されている状態を実現できたので、ある程度残量が減ったところで作業をやめやすくなりました。