スラブ画像をアップロード
鑑定中…
—
💰 トータルコストを含む想定市場相場(手数料・税込み・AI推定)
グレード別価格比較
鑑定履歴
このアプリをブラウザの「お気に入り」に登録すると、次回から素早くアクセスできます。
Ctrl + D でお気に入り登録
Cmd + D でお気に入り登録
画面下部(または上部)の共有ボタン 📤 →「ブックマークを追加」または「ホーム画面に追加」
右上のメニュー ⋮ → ☆マークをタップして「お気に入りに追加」、または「ホーム画面に追加」
【モデル変更】AIモデルをclaude-sonnet-5からclaude-opus-5-5へ変更(worker.jsのMODEL定数)。鑑定結果の【解析情報】欄の「AIモデル」表示も、生のAPIモデル文字列ではなく人が読みやすい表示名("Claude Opus 5.5")に変換して表示するようにした(modelDisplayName()、未知のモデル文字列は変換せずそのまま表示するフォールバック付き)。あわせて、デバッグ用のコスト概算表示(COST_RATES)もOpus 5.5の料金(入力$4/MTok・出力$20/MTok、2026-09-23確認)に更新。Opus 5.5はキャッシュ読出の単価が他モデルの入力の10%ではなく5%($0.20/MTok)という特徴があるため、cacheReadMultiplierも0.1→0.05に変更した。紹介価格の期限(introPricingExpires)は今回確認できた範囲では見当たらなかったためnullにしている。
指摘に基づく不具合修正3件。①runAnalysis()終盤のlocalStorage.setItem(cacheKey,...)がtryブロックに裸で置かれており、renderReport()で結果表示・API課金が完了した後にQuotaExceededError等が起きると catch に落ちて「解析中にエラーが発生しました」という誤ったエラー表示になっていた(結果は実際には表示済み)。個別のtry/catchで囲み、キャッシュ保存の失敗が鑑定成功の表示を妨げないようにした。あわせて、キャッシュ復元時のJSON.parse(cached)も無防備だったため、壊れたキャッシュ1件で鑑定全体が失敗する問題があった。パース失敗時は壊れたキャッシュを削除し、通常のAPIフェッチ経路へフォールバックするようにした。②sw.jsのCACHE_VERSIONがv3.38のままv3.39〜v3.41の3回の更新で据え置かれていた(sw.js自身のコメントで「デプロイのたびに変更する運用を想定」としていたにもかかわらず)。v3.42へ更新し、今後の更新し忘れに気付きやすいよう注意コメントを追加。③renderHistory()のサムネイル生成が、HTML文字列に onerror="..." というインラインイベントハンドラを埋め込んでおり、MiniZipの「CSP(script-src 'self')配下でも動かせるよう自前実装する」という方針と矛盾していた('unsafe-inline'を外すと動作しなくなる)。createElement/querySelectorAll後のaddEventListener('error', ...)に置き換えた。
【相場調査・再試行予算】worker.jsのTOOLS.max_usesを1→2に引き上げ。狙いは平均精度の底上げではなく、1回目の検索クエリが表記揺れ等で空振りした際に「回復手段がゼロ」という構造的な弱点への対応。無条件に2回発行されコストが上限に張り付くことを避けるため、systemプロンプトの【相場調査】に「検索結果が0件、または明らかに不一致の場合に限り、クエリを簡略化して1回だけ再検索する。十分な実績が得られれば再検索しない」という条件を明示(OUTPUT_EFFORTは"low"のまま)。実際の再検索発生率を確認できるよう、server_tool_use.web_search_requestsをCloudflareのログに出力するようにした("[worker][metrics] web_search_requests="で検索可能)。
【sampleCountバッジの見直し】3件未満を一律「参考値」と表示する二値バッジは、常時点灯していると利用者に無視されるようになり本当に危ない0件のケースまで見落とされかねないため廃止。0件は「相場データなし(推定値)」、1〜2件は「限定的な実績のみ(参考値)」、3件以上は表示なしの三段階に変更し、【解析情報】側も「◯件(参考値)」ではなく「落札実績◯件を参照」という淡々とした表記に変更した。
worker.jsが共有されたため、v3.39でindex.html側のみ対応していたmarketData.sampleCountを実際にAIへ出力させる対応を完了。REQUEST_JSON_SCHEMAのmarketData.propertiesにsampleCount(integer)を追加し、未出力を防ぐためrequiredにも含めた。systemプロンプトの【出力ルール】に「priceRangeUSD・gradePriceComparisonの算出根拠として実際に参照した落札事例の件数を、重複を除いた実数で正直に記入する(0件なら0)」旨の指示を追加。文言・スキーマ追加のみでコストへの影響は出力トークンが数文字分増える程度。これによりv3.39の「市場相場USDの下に参考値(根拠事例が少数です)と表示」機能が実際に機能するようになった。
【価格の信頼性表示】marketData.sampleCount(採用した落札事例の件数)を受け取れるよう表示側を対応。3件未満の場合、「市場相場USD」の下に「参考値(根拠事例が少数です)」と表示し、【解析情報】にも「根拠事例数:◯件」を追加。sampleCountが無い応答(未対応のworker.js・旧履歴)では何も表示しない。※この項目はindex.html側の表示対応のみで、実際にAIがsampleCountを返すには、worker.js側の出力スキーマ(REQUEST_JSON_SCHEMA)へのフィールド追加とsystemプロンプトへの指示追加が別途必要(worker.jsが共有されていないため未実施。追記予定のJSON Schema・プロンプト文言は別途提示する)。
【データ耐久性】履歴のサムネイル(thumb)・鑑定結果画像(reportImage)のdataURLをlocalStorageからIndexedDB(scmp-images)へ切り出した。従来は1件40〜60KBの画像を含めてlocalStorageに保存しており、環境により5〜10MB程度の上限に100件前後で到達し古い履歴が自動的に間引かれていた(v3.37でZIPバックアップにより「消えたら復旧できない」状態は解消していたが、間引かれること自体は解決していなかった)。IndexedDBは多くの環境でlocalStorageの数十〜数百倍の容量を扱えるため、間引きが発生するまでの件数が大きく伸びる。旧形式(インライン保存)の履歴は起動時にバックグラウンドで自動移行し、書き込みに失敗したエントリのみ元の形式のまま残す(データを失わないためのフォールバック)。JSON書き出し・ZIPバックアップ・JSON読み込みは画像をIndexedDBとマージ/分離する形に対応済みで、従来どおり画像込みの単一ファイルとして扱える。IndexedDB非対応/失敗時は、従来どおりlocalStorageへのインライン保存にフォールバックする。
【最優先・重要】Service Worker(sw.js)を新規追加(本アプリにはこれまでSWが存在しなかったため、既存のキャッシュ戦略の変更ではなく新規実装)。ナビゲーションリクエスト(HTMLページ本体)はネットワーク優先(network-first、オフライン時のみキャッシュへフォールバック)とし、頻繁にデプロイしている運用で既存ユーザーが古いHTMLに固定され続ける問題を回避。静的アセット(/ogp.png)は従来どおりcache-first。GET以外のリクエストおよびクロスオリジンのリクエスト(鑑定APIのWorkerドメイン等)は一切intercept/cacheしない。activate時に現在のCACHE_VERSION(v3.38)と一致しない古いキャッシュを全て削除し、skipWaiting()/clients.claim()で新しいSWを早期に有効化する。index.html側にはservice worker登録処理(`navigator.serviceWorker.register('/sw.js')`)のみを追加。
【データ耐久性】4点対応(index.html側のみ)。①起動時に`navigator.storage.persist()`を要求するようにした(iOS Safari等が長期未操作サイトのストレージを自動破棄する挙動への対策。許可はブラウザ任せだがコストがほぼ無いため常に要求)。②前回起動から30日以上経過し、かつ直近7日以内に未表示の場合のみ、ZIPバックアップを促すモーダルを表示するようにした(外部ライブラリ無しの自前ZIP書き出し=MiniZipを実装。手動用に履歴セクションへ「⬇ ZIPバックアップ」ボタンも追加)。③設定画面に「💾 ストレージの永続化」の状態表示(許可済み/未許可/確認不可)と、未許可時に再リクエストできる「🔒 永続化をリクエストする」ボタン、`navigator.storage.estimate()`による使用量・上限の表示を追加。④30日判定・7日クールダウンの純粋ロジック(DOM非依存)を`DURABILITY_LOGIC`マーカーで囲った独立scriptブロックに切り出し、`/tests/durability.test.js`(Node.js標準の`node:test`+`assert`、追加パッケージ不要)でユニットテストを追加。※Service Workerのキャッシュ戦略変更(cache-first→ネットワーク優先)は、現在のsw.jsの内容がこちらに共有されていないため未着手。既存のsw.jsファイル(および可能であればworker.js・既存の契約テストファイル)を共有いただければ、次の更新で対応する。
OGP画像(ogp.png)のサブタイトル1行目を「AI × NGC / PCGS × Sixbid / NumisBids」から「AI × NGC / PCGS × Sixbid / NumisBids / acsearch.info / CoinArchives」へ変更。文字数増加に伴いフォントサイズを縮小して1行に収め、背景グラデーション・文字色は変更前と同一のまま維持。合わせて、以後の更新では本セクション(🕘 更新履歴)に日本時間の日付で毎回エントリを追加する運用とした。
「市場相場」の精度向上策として、systemプロンプトの【相場調査】に2点追加(Worker側のみ、文言追加でコストへの影響は軽微)。①価格帯の算出方針: ヒットした落札事例全体の単純平均ではなく、鑑定対象と同等以上の品質帯にある上位価格帯の事例の平均を優先して採用するよう指示。NGC Ancients鑑定品はStrike/Surfaceスコアで品質に幅があり、単純平均だと低品質個体の事例に引っ張られて過小評価になりやすいための対応。②検索クエリの精緻化: 古代コインの場合、鑑定会社名(NGC等)とStrike/Surfaceスコア(例:5/5)も検索クエリに含めるよう指示し、同等品質の落札事例に絞り込みやすくした。
【バグ修正】モバイルで撮影した写真をアップロードすると、鑑定結果ページの画像・履歴サムネイル等(canvasを経由して生成される画像)が横向き・逆さまになる不具合を修正。原因は、独自にJPEGのEXIF Orientationタグを読み取ってcanvas描画時に回転補正を適用していたが、現行の主要ブラウザ(Chrome/Safari/Firefox)は要素やdrawImage()でのデコード時点で既にEXIF Orientationに基づき自動的に正しい向きへ補正するようになっており、その上にさらに独自の回転補正がかかる「二重回転」になっていたこと。アップロード直後のプレビュー(canvasを経由しない、
タグへ直接URLを設定するだけの表示)はブラウザの自動補正のみが効くため正しい向きで表示されており、鑑定結果側の画像とだけ向きが食い違う症状として現れていた。独自のEXIF回転補正(getExifOrientation・drawToCanvasの回転transform)を撤去し、ブラウザの自動補正済みの画像をそのままリサイズするだけの処理に変更した。
依頼によりv3.32で1→3に引き上げたweb_searchのmax_usesを1へ戻した(Worker側)。本アプリは「AIコイン相場(出力制限モード)」であり、出力・コストを抑える方針を優先するための対応(v3.0時点で一度3→1に削減した経緯に回帰する形)。max_uses:1では複数回検索という前提が成立しないため、systemプロンプトに追加していた「3件以上得られたら追加検索しない/不足時は最大あと2回まで」という早期打ち切り指示も、実行不可能な分岐を説明するだけの無駄なトークンになるため合わせて削除した。v3.32で行ったJPEG品質の引き上げ(0.72→0.92)は、コストに影響しない改善のため据え置いている。
依頼された2施策を実施。①web_searchのmax_usesを1→3に引き上げ、systemプロンプトに「まず1回、コイン名・グレード・"sold"で横断検索し、落札事例が3件以上得られたら追加検索しない。3件未満の場合のみ最大あと2回まで検索してよい(合計3回まで)」という早期打ち切り指示を追加(Worker側)。※依頼時の前提(現在4回以上検索している)は実際とは異なり、実際のmax_usesは1で、進捗表示の6ステップは検索回数と無関係な演出用タイマーだった(v3.0で3→1に削減した経緯もある)ため、この変更は「トークン削減」ではなく「通常時は据え置き・不足時のみ精度優先で追加コストを許容する」設計として実施した。②Anthropicへ送る画像のJPEG品質を0.72→0.92に引き上げ(index.html側)。画像トークン数は解像度のみで決まりJPEG品質・ファイルサイズは影響しないため、コスト増ゼロでラベルの細かい文字の読み取り精度向上が見込める。
鑑定結果ページの「🔗 共有」「🖨️ 印刷」「✖️ 閉じる」の行に、背景色を分けた「🗑️ 削除」ボタンを追加。タップすると確認ダイアログの後、この鑑定結果を履歴(および画像キャッシュ)ごと削除し、レポート表示を閉じてアップロード画面に戻る。履歴一覧側の🗑️ボタン(hi-del)と同じ削除ロジックを再利用している。表示中のレポートがどの履歴エントリに対応するかを追跡するため、新規鑑定時・履歴から開いた時の両方でdata._historyHashにハッシュを保持するようにした。
【バグ修正】「市場相場JPY」および「トータルコストを含む想定市場相場」の下限価格が実際より大幅に低く表示される不具合を修正。原因は、priceRangeUSDの数値抽出処理(index.html側のparsePriceRangeUSD・worker.js側のextractNumbers)が、価格帯の後に続く括弧内の注記(例:"3500〜6000USD(Strike5/Surface5の...)"の"Strike5"・"Surface5"に含まれる"5")まで価格の一部として拾ってしまい、本来3500であるべき下限が5と誤認識されていたこと(結果として市場相場JPYが¥800〜、トータルコストが$7〜のような明らかに不自然な値になっていた)。開き括弧(半角"("・全角"(")より前の部分だけを数値抽出の対象にすることで修正した。この処理は市場相場JPY・トータルコスト計算・Worker側の整合性チェック(B-1・B-2)すべてで共通して使われているため、いずれも同時に修正される。
鑑定中の進捗ステータス(#progressSteps)に、v3.28で追加したCoinArchivesの検索ステップ「CoinArchivesを検索中…」を追加(acsearch.infoを検索中…の直後、レポートを生成中…の直前)。進捗バーの割合計算・タイマーも6ステップ構成に合わせて調整した。
「市場相場」AI算出結果の精度向上策として、CoinArchives(無料版、www.coinarchives.com)をweb_search工具のallowed_domainsに追加(Worker側)。あわせてsystemプロンプトの相場調査根拠・ヘッダーのサブタイトル・meta description・JSON-LDのデータソース表記にもCoinArchivesを追加。判断の経緯: 有料版「CoinArchives Pro」の利用規約には自動収集を禁止する明示条項があり、無料版の検証ページでもreCAPTCHAゲートの稼働を確認したが、無料版サイト自体には書面の利用規約が見当たらず、依頼により追加した。今後アクセスに問題が見られた場合は見直す。
【緊急ホットフィックス】v3.26で追加した`temperature: 0`が「`temperature` is deprecated for this model.」というinvalid_request_errorを引き起こし、鑑定が完了しない不具合が発生していたため撤去。claude-sonnet-5ではtemperatureパラメータ自体が非推奨のため指定できない。B-1・B-2(Worker側での機械的な整合性チェック・補正)はtemperatureと無関係のため影響なくそのまま有効。
「市場相場」の精度向上策として、トークン消費を増やさない2施策を実施。①(A-1)Anthropicへのリクエストに`temperature: 0`を明示指定(従来は未指定でAnthropic側の既定値のまま生成していた)。数値主体の価格帯出力のブレを抑え、再現性・一貫性を上げる狙い。トークン数への影響はゼロ。②(B-1・B-2)Worker側でAIの出力を機械的に検証・補正する処理を追加(Anthropicへの追加呼び出し無し、トークン消費ゼロ)。`priceRangeUSD`の下限が`meltValue`を下回っていた場合は下限を引き上げ、`gradePriceComparison`の2行がグレード順と矛盾していた場合は並び替え・価格の入れ替えで補正する。グレード文字列が判定できない場合は誤補正を避けるため補正をスキップする。補正が発生した場合は【解析情報】に「🛠️ 価格帯の整合性を自動調整しました」と控えめに表示する(v3.25以前の履歴には表示されない)。※①(temperature: 0)はv3.27でこのモデルでは非推奨と判明し撤去済み。②はそのまま有効。
【緊急ホットフィックス】v3.24で`output_config.effort`を"medium"に引き上げた直後、「レポートを生成中…」から進まず鑑定が完了しないという報告を受け対応。クライアント側のエラーハンドリング自体は正常だったため、「Anthropic側の応答が返るまでに非常に時間がかかっていた(thinking使用による生成時間の増加)」ことが原因と判断し、`effort`を"low"へ戻した(`max_tokens`は安全マージンとして1600のまま維持)。あわせて、原因を問わず同種の問題が再発しないよう、Anthropicへのリクエスト全体(fetch開始からSSE読み取り完了まで)に90秒の上限タイムアウトを追加。タイムアウト時は「AIの応答が時間内に完了しませんでした」という明確なエラー(504)を返し、無応答のまま止まり続けることがないようにした。クライアント側の`describeError()`にも504のハンドリングを追加。
v3.23では見送っていた`output_config.effort`("low"→"medium")と`max_tokens`(1200→1600)の引き上げを、依頼により再度適用(Worker側のみ)。検索結果の解釈やStrike/Surfaceスコアによる価格調整のような複合的な判断に、より多くの内部推論リソースを割かせる狙い。effortはキャッシュ対象のプレフィックスに含まれないパラメータのためプロンプトキャッシュの命中には影響しない。max_tokensは、高いeffortで内部推論がmax_tokensの枠を消費しやすくなる(公式ドキュメントに明記)ことへの安全弁として引き上げた。コストは内部推論の分だけ実質的に上がる見込み(概算でキャッシュhit時1鑑定あたり約2.8円→約3.3〜4.1円、+17%〜+46%程度)。本変更はWorker(worker.js)側のみで、index.html自体に差分は無い。
v3.22でv3.15まで巻き戻していたsystemプロンプトの精度向上策(B-1・B-2・B-4・B-6)を、依頼により再度実装(Worker側のみ)。①検索クエリに"sold"/"hammer price"等の取引を示す語を含めさせる指示。②複数の落札事例が見つかった場合は直近1〜2年以内の事例を優先させる指示。③gradePriceComparisonの比較対象グレードを「鑑定対象グレードの隣接グレード(1つ上または1つ下)」に固定する指示。④priceRangeUSDの下限がmeltValueを下回らないこと、gradePriceComparison内の価格がグレードの高さと矛盾しない順序になることを求める自己整合性チェックの指示。いずれも文言追加のみでコストへの影響はほぼ無し。なお、v3.17で行った`output_config.effort`("medium")と`max_tokens`(1600)の引き上げは今回は再適用せず、v3.15のまま("low"/1200)を維持している。本変更はWorker(worker.js)側のみで、index.html自体に差分は無い。
依頼によりworker.jsをv3.15時点の構成へ一括ロールバック。v3.17で行った`output_config.effort`の引き上げ("low"→"medium")と`max_tokens`の引き上げ(1200→1600)を元に戻し、v3.19でsystemプロンプトに追加した4点の指示(検索クエリに取引語を含める指示、検索結果の鮮度優先指示、gradePriceComparisonの隣接グレード固定、価格の自己整合性チェック)を削除した。allowed_domains(Sixbid/NumisBids/acsearch.infoの3サイト)とindex.html側は、v3.18・v3.21の時点で既にv3.15相当の状態に戻っていたため変更なし。結果として、v3.16〜v3.21で行った変更(CNG追加・effort/max_tokens引き上げ・プロンプト追加・Numista連携)はすべて解消され、v3.15時点の挙動に戻っている。
依頼によりv3.20(Numista連携)を全面的にロールバックし、v3.19時点の構成に戻した。worker.js側の`tryNumistaLookup()`関数・`NUMISTA_API_URL`/`NUMISTA_TIMEOUT_MS`定数・レスポンスへの`numistaMatch`フィールドの付加を削除。index.html側の「🔍 Numistaで型式を確認」リンク(HTML/CSS/JS)、`data._numistaMatch`の抽出処理を削除。`NUMISTA_API_KEY`のシークレットが設定されたままでも実害はないが(未使用になるだけ)、不要であればCloudflareダッシュボードから削除して構わない。
識別確認用にNumistaを追加。前回、NumistaのWebサイト向け利用規約に「scraping等の自動的手段によるデータ処理システムの妨害」を禁止する条項があることを確認したため、web_search工具でのアクセス(allowed_domainsへの追加)は行わず、代わりにNumistaが別途公開している公式API(api.numista.com、要APIキー登録)のみを使う方式で実装した。AIの鑑定結果確定後、Worker側からNumista公式APIへ型式照合をベストエフォートで問い合わせ(NUMISTA_API_KEY未設定時や失敗時は鑑定結果に影響させず静かにスキップ)、一致する型式が見つかった場合のみ鑑定結果ページのコイン名の下に「🔍 Numistaで型式を確認」リンクを表示するようにした(印刷時は非表示)。Numista APIの結果をAIへの再入力には使わず、Anthropicへの呼び出し回数は引き続き1回のまま。
「市場相場」AI算出結果の精度向上策として、systemプロンプト(Worker側)に4点の指示を追加・修正(いずれも文言追加のみでコストへの影響はほぼ無し)。①検索クエリに"sold"/"hammer price"等の取引を示す語を含めさせ、目的の落札事例にヒットしやすくする指示。②複数の落札事例が見つかった場合は直近1〜2年以内の事例を優先させる指示。③gradePriceComparisonの比較対象グレードを「鑑定対象グレードの隣接グレード(1つ上または1つ下)」に固定する指示(従来は「代表的な2グレード」とだけ指示しモデル任せだった)。④priceRangeUSDの下限がmeltValueを下回らないこと、gradePriceComparison内の価格がグレードの高さと矛盾しない順序になることを求める自己整合性チェックの指示。本変更はWorker(worker.js)側のみで、index.html自体に差分は無い。
v3.16で追加したCNG(Classical Numismatic Group、cngcoins.com)を、依頼によりweb_search工具のallowed_domainsおよびsystemプロンプトの相場調査根拠から削除。あわせてヘッダーのサブタイトル・meta description・JSON-LDのデータソース表記からもCNGを除去し、検索対象をv3.15時点の構成(Sixbid / NumisBids / acsearch.info)に戻した。
「市場相場」AI算出結果の精度向上策として、output_config.effortを"low"から"medium"に引き上げた(Worker側)。検索結果の解釈やStrike/Surfaceスコアによる価格調整のような複合的な判断に、より多くの内部推論リソースを割かせる狙い。ドキュメント照合の結果、v3.0時点の「effortを変えるとプロンプトキャッシュが無効化される」というコメントは誤りだったと判明したため訂正(effortはキャッシュ対象のプレフィックスに含まれないパラメータで、キャッシュ命中には影響しない)。また、effort引き上げにより内部推論がmax_tokensの枠を消費しやすくなる(公式ドキュメントに明記)ため、打ち切りリスクの増加分を吸収する目的でmax_tokensを1200→1600に引き上げた。コストは内部推論の分だけ実質的に上がる(出力トークン単価自体は変わらない)。本変更はWorker(worker.js)側のみで、index.html自体に差分は無い。
「市場相場」AI算出結果の精度向上策として、古代コインの主要オークションハウスであるCNG(Classical Numismatic Group、cngcoins.com)をweb_search工具のallowed_domainsに追加(Worker側)。あわせてsystemプロンプトの相場調査根拠・ヘッダーのサブタイトル・meta description・JSON-LDのデータソース表記にもCNGを追加。もう一つの候補だったHeritage Auctions(ha.com)は、利用規約(Website Use Agreement)に自動的手段(screen scraping・robot等)によるデータ収集を明示的に禁止する条項が確認されたため、今回は追加を見送った。
鑑定結果ページの「🔗 共有」「🖨️ 印刷」ボタンの行の右側に「✖️ 閉じる」ボタンを追加。タップすると進行中のリクエストがあれば中断し、鑑定結果を閉じて画像アップロード画面(トップ)へスクロールして戻る。ロゴタップ時の「ホームに戻る」動作と同じ処理を共通関数(closeReport)にまとめ、両方のボタンから呼び出すようにした。
①鑑定日のバグ修正: 「鑑定日」欄が常に本日の日付を表示しており、履歴から過去のレポートを開いても【解析情報】の解析日時(_analysis.ts基準)と矛盾していた。同じ_analysis.tsを使って一致させた。②本番HTMLに残っていた開発用コメント(Worker URLの書き換え指示)を削除。401エラーのメッセージから一般ユーザーには意味の無いCloudflareダッシュボードの操作手順を排除し、案内文に変更。500(APIキー未設定などのサーバー設定エラー)を明示的にハンドリングするよう追加。③履歴保存の容量超過時、従来は1件ずつ削除して保存を再試行する処理(O(n²))だったため、まとめて古い履歴(末尾から10%単位)を間引く方式に変更し計算量を抑制。あわせて、削除が発生した場合に「保存容量の上限に達したため、古い履歴を◯件削除しました」とトースト通知するようにした(従来は無言で削除していた)。この通知が他のトースト(インポート完了等)に即座に上書きされて見えなくならないよう、トースト表示自体をキュー方式に変更し、複数のトーストが連続して呼ばれても順番に表示されるようにした。
モバイル幅でアプリ名が4行に折り返り、アイコンボタン列(📖★🕘⚙️🔊)がその途中の高さに宙に浮いたように配置される表示崩れを修正。ヘッダーを「ロゴ+タイトル+サブタイトルの行」と「アイコンボタンの行」の2段構成に整理し、ボタン列は常にタイトルの下に独立した行として右揃えで表示されるようにした。あわせてタイトルの文字サイズを画面幅に応じて可変(clamp)にし、狭い画面でも折り返り行数を抑えるようにした。
アプリ名表示「AIコイン相場(簡易版)」を「AIコイン相場(出力制限モード)」に変更(ページタイトル・ヘッダーのh1・OGP/Twitterカード・JSON-LD・共有機能のタイトルとテキストを含む)。
バックエンド構成を刷新(Cloudflare Workerと連携)。①model/max_tokens/tools/system/出力スキーマをすべてWorker側へ移設し、クライアントは画像データのみを送信する方式に変更(コスト最適化の設定をブラウザから書き換えられないようにするため)。②Anthropicへのストリーミング呼び出しとその集約処理をWorker側に統合し、クライアントは常に完成済みの単一レスポンスを受け取る方式に変更(1鑑定あたり最大1回の呼び出しに統一)。③「市場相場JPY」をAI生成の固定レートではなく、設定パネルの為替レート(既定USD/JPY=160円)から都度算出する方式に変更し、ラベルに換算根拠(例:「1USD=¥160換算」)を明示。設定変更時はリアルタイムに再計算される。v3.10以前の履歴(AI生成のpriceRangeJPYを保持)は、再計算できない場合のみ従来の値にフォールバックして表示する。
鑑定結果ページの見出し「💰 トータルコストを含む想定相場(手数料・税込み推定)」を「💰 トータルコストを含む想定市場相場(手数料・税込み・AI推定)」に修正。
鑑定結果ページの見出し「💰 想定トータルコスト(手数料・税込み推定)」を「💰 トータルコストを含む想定相場(手数料・税込み推定)」に修正。
アプリ名表示「AIコイン相場」を「AIコイン相場(簡易版)」に変更(ページタイトル・ヘッダーのh1・OGP/Twitterカード・JSON-LD・共有機能のタイトルとテキストを含む)。
鑑定履歴の保存件数上限(10件)を撤廃し、無制限に保存できるよう変更(JSON書き出し・読み込みも同様に上限なし)。表示側は1ページ10件のページネーションに対応し、履歴一覧の下部に「‹ 1 / N(全◯件) ›」の形式でページ送りボタンを表示。新規鑑定時は自動的に1ページ目(最新)に戻る。
鑑定結果ページに「💰 想定トータルコスト(手数料・税込み推定)」セクションを追加。「推定USD」「推定JPY」「推定GBP」「推定EUR」「推定CHF」を表示し、推定JPYを最も大きく中央に配置して視認性を高めた。コインの市場相場(AI推定のpriceRangeUSD)に、設定パネルの「バイヤーズプレミアム率」「カード/為替スプレッド手数料」「輸入消費税」「保険料率」(各項目デフォルトでオン、スイッチでオフ=非加算にできる)を掛け合わせて算出し、為替レート設定でJPY・GBP・EUR・CHFに換算する。設定変更はレポート表示中でも即座に再計算される。従来の「推定USD/JPY」(AIが返す生の市場相場)は「市場相場USD/JPY」に名称変更し、新セクションと役割を明確に区別した。
ヘッダー右上に⚙️設定ボタンを追加。バイヤーズプレミアム率(既定22%)、カード/為替スプレッド手数料(既定3%)、消費税率(既定10%)、保険料率(既定0.5%)、為替レート USD/GBP/EUR/CHF(既定160円/210円/180円/195円)の8項目を設定でき、それぞれにオン/オフスイッチを設置。値は端末内(localStorage)に保存され、次回起動時も引き継がれる。「デフォルトに戻す」ボタンで一括リセット可能。
v3.3で追加した「検索で根拠が得られなかった場合はpriceRangeUSDの先頭に『検索データなし・推定』と明記する」ルールをsystemプロンプトから削除。この表示が出ないよう変更した。
①落札DBとして検索性の高いacsearch.infoをweb_search工具のallowed_domainsに追加(Sixbid / NumisBidsに加えて3サイト検索)。鑑定中の進捗ステータス(#progressSteps)にも「acsearch.infoを検索中…」ステップを追加。systemプロンプトに「検索で根拠となる落札実績が得られなかった場合は、priceRangeUSDの先頭に『検索データなし・推定』と明記し、憶測で価格帯を作らない」ルールを追加。②品質面の安全弁としてmax_tokensを800→1200へ戻し、SSE/バッファ/非stream各経路でstop_reasonを捕捉。stop_reason:"max_tokens"(出力が上限で打ち切られた可能性)を検知した場合は、console.warnとトーストで明示的に警告するよう変更。
本番反映後に発生していた鑑定エラー(output_config.format.schema: For 'array' type, property 'maxItems' is not supported)を修正。構造化出力のJSON SchemaからgradePriceComparison配列のmaxItems制約を削除(Anthropic APIが未対応のため400エラーの原因になっていた)。件数の上限(2件)はsystemプロンプトの指示と表示側のslice(0,2)のみで制御する方式に変更。
【解析情報】ブロック(AIモデル・情報量スコア・解析日時・認定番号に関する注意書き)の表示位置を、グレード別価格比較テーブルの直後・免責事項(本レポートはAIによる推定です...)の直前に移動。
【コスト最適化フェーズ1】Web検索をweb_search_20260318に更新しallowed_domainsをsixbid.com/numisbids.comに限定、response_inclusion:"excluded"を設定。出力を構造化出力(output_config.format)に移行しJSONスキーマをsystemプロンプトから分離、repairWithHaiku()による二重課金経路を撤去。gradePriceComparisonを最大2行に、max_tokensを800に削減。プロンプトキャッシュを維持するためsystem文面は判断基準のみを残しつつ1024トークンを超える分量に調整。
og:image:type / og:image:secure_url / og:image:altを追加し、リンクプレビューでの画像検出精度を強化。ogp.png配信用に_headersファイルを追加し、クローラー側の古いキャッシュが残りにくいよう調整。
OGP設定を実際のデプロイ先ドメイン(ai-coin-souba.pages.dev)に修正し、リンク共有時にサムネイル画像が表示されない不具合を解消。専用のogp.png(1200×630)を新規作成。
ヘッダー左上のロゴ・タイトル(🪙🔍 AIコイン相場)をクリックすると、現在の鑑定結果をリセットしてホーム(アップロード画面)に戻るよう変更。
近代コイン・世界コイン・ファンタジー貨など、NGC Ancients以外でStrike/Surfaceの記載が無いコインについて、AIが数値を推測で埋めてしまう問題を修正。該当なしの場合は「未記載」と表示するよう変更。
鑑定履歴から個別削除・全削除した際に、対応する画像キャッシュ(scmp:cache:*)も同時に削除するよう修正。
【コスト計測フェーズ0】Web検索のmax_usesを3→1に削減し、output_config.effort:"low"を追加。usage(input/output/cache_read/cache_creation/web_search_requests)と概算コストを計測するデバッグ機能を追加(localStorageの'scmp:debug'='on'で表示、既定は非表示)。画像トークンの概算式を正しい計算式に統一。
アップロード時の「圧縮後: ◯◯KB・推定◯◯tok前後(画像分)」表示を削除。
ヘッダーのサブタイトルを「AI × NGC Ancients × Sixbid / NumisBids|スラブコイン相場鑑定」から「AI × NGC / PCGS × Sixbid / NumisBids|スラブコインAI相場鑑定」に変更。
鑑定履歴からレポートを開いた際に、コイン画像全体をタイトル上部に表示するよう変更。新規鑑定時・キャッシュ復元時も同様に表示。
APIをCloudflare Pages FunctionsからCloudflare Worker(workers.dev)に分離。レポート内のトークン消費・概算コスト表示(「今回◯◯tok/約$0.0XX」「キャッシュから復元(API消費0)」)を廃止。直近オークション落札結果・サマリー・参照データソース等の項目を削除しAPIコストを削減。鑑定履歴のサムネイル表示を強化。
「高速モード(Haiku)」「相場をWeb検索」の切替機能を廃止し、モデルはclaude-sonnet-5・Web検索は常時有効に固定。鑑定結果に【解析情報】(AIモデル・情報量スコア・解析日時・認定番号に関する注意書き)を追加。
「お気に入り」をブラウザのブックマーク登録案内に、「更新履歴」を本アプリのバージョン履歴表示に変更。
フッターに著作権表記(Numistrade へのリンク付き)を追加。
アプリ名を「Slab Coin Market Price」から「AIコイン相場」に変更。
JSONエクスポート/インポート、印刷用CSS、共有ボタン、モデル切替(Sonnet/Haiku)、相場のWeb検索ON/OFF、鑑定中のアニメーション・効果音、使い方ガイド/お気に入り/更新履歴ボタンを追加。
画像解析によるグレード判定・相場レポート生成・鑑定履歴(最新10件)機能をリリース。
落札額から実質負担額を試算する際に使う各種手数料率・税率・為替レートです。項目ごとにオン/オフを切り替えられます。値は端末内に保存され、次回起動時も引き継がれます。
💾 ストレージの永続化
端末のストレージ容量が逼迫した際などに、ブラウザが本アプリのデータ(鑑定履歴等)を自動的に消去しにくくするための設定です。特にiOS Safariは長期間操作の無いサイトのデータを自動的に破棄することがあります。許可されるかはブラウザ側の判断に委ねられます。
前回このアプリを開いてから30日以上経っています。端末の状態によっては、鑑定履歴(画像・相場データ)が消えてしまうことがあります。念のため、バックアップ(ZIP)を取っておくことをおすすめします。