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

AIツールカタログのFreshnessを検証する要件とテスト

0
Posted at

AIツールカタログのFreshnessを検証する要件とテスト

AIツールの比較ページは、候補を並べた瞬間に完成するわけではありません。料金、機能、提供形式、リンク、対象ユーザーなど、時間で変わる情報を「いつ確認したか」「再確認が必要か」と一緒に扱う必要があります。

本稿は公開画面を題材にした要件・QAメモです。特定サービスの内部実装やAPIを調査したものではありません。

公開ページから置き換えられる要件

AiTop10.ai のホームページには、AIサイト・ツールのランキングに加えて、価格確認、主要機能、スクリーンショット、スコアカード、編集部レビューなどの比較要素が示されています。これをカタログの受け入れ条件へ分解します。

「top AI tools」という検索語 top AI tools は、用途や対象ユーザーの条件を含むことがあります。条件を保持しない一覧は、最新でも判断材料として弱くなります。

要件 受け入れ条件 stale時の表示
用途 各候補にカテゴリーと想定作業がある カテゴリー再確認
対象 読者が向いている場面を読める 対象不明
価格 確認日と再確認導線がある 公式ページを確認
機能 主張ごとに根拠または確認日がある 変更確認待ち
リンク 候補とリンクの対応が壊れない リンクエラー
更新 変更イベントを履歴に残す 編集キューへ

状態を型にする

type Freshness = "current" | "stale" | "unknown" | "link-error";

type CatalogItem = {
  id: string;
  name: string;
  category: string;
  bestFor: string;
  freshness: Freshness;
  checkedAt?: string;
  verifyUrl?: string;
};

unknownstalecurrent に寄せないことが重要です。確認日がない価格を無料と表示したり、リンクエラーの候補を通常カードとして残したりすると、読者は欠損を事実と誤解します。

代表的なQAケース

  1. 確認日が古い候補は stale と表示する。
  2. 価格が空の場合は無料と表示せず、公式確認を促す。
  3. ベンダーURLが失敗しても、他カードは表示する。
  4. カテゴリー条件をURLへ反映し、詳細画面から戻っても保持する。
  5. 退役候補が通常のランキングへ再流入しない。

さらに、確認担当と再確認期限を要件に含めます。担当者が不明なカードは、表示を続ける前に編集キューへ送ります。更新イベントを削除せず残しておけば、順位やカテゴリーが変わった理由を追跡でき、同じ不具合の再発防止にもつながります。

以下は契約を説明するためのPlaywright例です。セレクター、APIパス、文言は実装に合わせて変更してください。

import { test, expect } from "@playwright/test";

test("stale item asks for verification", async ({ page }) => {
  await page.route("**/api/catalog?category=writing", async (route) => {
    await route.fulfill({
      contentType: "application/json",
      body: JSON.stringify([{
        id: "tool-stale",
        name: "Example Tool",
        category: "writing",
        bestFor: "Editors",
        freshness: "stale",
        checkedAt: "2026-01-01",
      }]),
    });
  });

  await page.goto("/catalog/writing");
  const card = page.getByTestId("catalog-item-tool-stale");
  await expect(card).toContainText("確認");
  await expect(card).not.toContainText("最新");
});

このテストはAiTop10.aiのDOMやAPIを検証するものではありません。実装側の契約を説明する例です。実際のQAでは、モバイル幅、0件、重複ID、日付のタイムゾーン、リンク切れの再試行も追加します。

まとめ

Freshnessは小さなバッジではなく、要件と運用の境界です。比較ページが「何が上位か」だけでなく「何を確認すべきか」を表示できれば、変化の速いAI市場でも読者と編集者が同じ前提で判断できます。

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