Codex アプリで作る、ローカルLLM対応のAI Overview診断ツールMVP

スポンサーリンク
この記事は約8分で読めます。

Codex アプリを使って、AI OverviewやAI検索に引用されやすい記事構造になっているかを、自分のローカル環境で確認できる診断ツールを作りました。

特徴は、OpenAI APIを使わないことです。
LLM部分はOllamaでローカル実行し、スコア計算はルールベースで安定して出す構成にしています。

この記事では、Next.js App Router、TypeScript、Tailwind CSS、Ollamaを使って、本文入力とURL診断に対応した「AI Overview診断ツール」のMVPを作った流れをまとめます。

Codex アプリで作ったもの

今回作ったのは、記事本文または記事URLを入力すると、AI OverviewやAI検索に引用されやすい構造になっているかを診断するWebアプリです。

  • 記事本文を直接貼り付けて診断
  • URLを指定してページ本文を取得して診断
  • ルールベースで100点満点のスコアを算出
  • Ollamaで改善提案を生成
  • FAQ案を5個生成
  • メタディスクリプション案を3個生成
  • Ollamaが失敗しても、ルールベース診断だけは表示

自分用MVPなので、ログイン機能やDBは入れていません。ローカル環境で動けばよい、という前提となっています。

作業手順

作業フォルダ(AI-Overview)を新規作成し、作成したフォルダをCodex アプリのプロジェクトフォルダとした後に、チャット欄に下記に添付したプロンプトを入力し送信します。

UTF-8

Shift-JIS

Codex アプリ設定

  • 権限:デフォルト権限
  • インテリジェンス(推論の強さ):中
  • 使用モデル:GPT5.5
  • 速度:標準
Codex アプリ インテリジェンス:中
モデル:GPT-5.5設定画面

AI Overview診断ツール起動画面

Codex アプリが作成したREADMEに従い、LLM(ollama+qwen3)と開発サーバー起動(npm run dev)後に、http://localhost:3000/にアクセスすると下記の画面が表示されます。

AI Overview診断ツール画面

診断対象のURLまたは本文入力後に、診断開始をクリックすると下記の診断結果が表示されます。

AI Overview診断ツール診断結果

Codex アプリ実行内容

以下は、プロンプトの指示によりCodex アプリが自律的に考えて実行した内容です。

技術構成

  • Next.js App Router
  • TypeScript
  • React
  • Tailwind CSS
  • Ollama API
  • DBなし
  • 認証なし
  • OpenAI APIなし

Ollama APIのエンドポイントは次の形です。

http://localhost:11434/api/generate

使用するモデル名は、環境変数から読み込むようにしました。

OLLAMA_MODEL=qwen3:latest
OLLAMA_ENDPOINT=http://localhost:11434/api/generate

診断は2段階に分けた

今回の診断は、次の2段階に分けています。

  1. ルールベース診断
  2. ローカルLLMによる改善提案

ポイントは、総合スコアをLLMに決めさせないことです。

LLMは便利ですが、同じ本文でも出力が揺れることがあります。そのため、スコアはプログラムで安定して計算し、LLMには改善提案やFAQ案の生成だけを任せる設計にしました。

ルールベース診断で見ている項目

ルールベース診断では、以下の10項目をそれぞれ0〜10点で評価し、合計を100点満点に換算しています。

  • 本文文字数
  • 見出し数
  • 質問型見出しの有無
  • 冒頭に結論があるか
  • 箇条書きの有無
  • 表の有無
  • FAQの有無
  • 根拠・一次情報の有無
  • E-E-A-T要素の有無
  • 構造化データにしやすい要素の有無

たとえば、本文文字数は次のように評価しています。

  • 1,000文字未満:低評価
  • 1,000〜3,000文字:中評価
  • 3,000文字以上:高評価

見出しについては、Markdownの「#」「##」「###」や、HTMLの「h2」「h3」を検出します。

質問型見出しでは、「とは」「なぜ」「方法」「どう」「いつ」「どこ」「いくら」「できますか」「必要か」などの語句を見ています。

AI Overviewを意識した構造チェック

AI OverviewやAI検索に引用されやすい記事は、単に長文であればよいわけではありません。

検索意図に対して、答えが分かりやすく整理されていることが重要です。

そのため、今回の診断では以下のような要素を重視しました。

  • 冒頭で結論を示しているか
  • 見出しごとに論点が分かれているか
  • 質問に対する答えが明確か
  • 箇条書きで要点を整理しているか
  • 比較情報を表で整理しているか
  • FAQ形式で補足しているか
  • 公式情報、出典、データ、調査などの根拠があるか
  • 実績、事例、経験、監修などのE-E-A-T要素があるか

Ollamaで改善提案を生成する

ルールベース診断が終わったら、診断結果と記事本文をOllamaに渡します。

Ollamaには、以下の内容をJSON形式で返すように指示しました。

  • 評価サマリー
  • 改善すべき点
  • 具体的な改善提案
  • FAQ案5個
  • メタディスクリプション案3個

返却形式は次のように固定しています。

{
  "summary": "string",
  "problems": ["string"],
  "improvements": ["string"],
  "faqIdeas": [
    {
      "question": "string",
      "answer": "string"
    }
  ],
  "metaDescriptions": ["string"]
}

重要なのは、LLMのJSON出力が崩れてもアプリ全体を落とさないことです。

JSONのパースに失敗した場合でも、ルールベース診断結果だけは返すようにしました。

Ollama連携で詰まった点

実装中に一度、画面上で「Ollamaまたはモデル設定を確認してください」と表示されました。

確認してみると、Ollama自体は起動しており、モデルも存在していました。原因は、初回のモデルロードと生成に時間がかかり、API側のタイムアウトを超えていたことでした。

そこで、次のように改善しました。

  • タイムアウトを60秒から180秒に延長
  • Ollama APIに format: "json" を指定
  • temperature を低めに設定
  • num_predict で出力長を制御
  • フォールバック時に実際の失敗理由を表示

これにより、Ollamaの応答が安定し、llmStatus: "success" が返るようになりました。

URL診断にも対応した

最初は本文入力だけに対応していましたが、途中でURL指定でも診断できるように変更しました。

URL診断では、指定されたページのHTMLを取得し、以下の要素を抽出しています。

  • title
  • meta description
  • h1
  • h2
  • h3
  • li
  • table
  • 本文テキスト

抽出したHTML要素は、診断しやすいようにMarkdown風のテキストへ変換してから、既存のルールベース診断に渡しています。

これにより、本文を手動で貼り付けなくても、URLだけで診断できるようになりました。

URL診断の注意点

URL診断には限界もあります。

今回のMVPでは、通常のHTMLを取得して本文を抽出しています。そのため、以下のようなページではうまく本文を取得できない場合があります。

  • JavaScriptで後から本文を描画するページ
  • ログインが必要なページ
  • 本文がほとんどHTMLに含まれていないページ
  • PDFや画像ファイル
  • HTML構造が特殊なページ

その場合は、本文入力モードに切り替えて、記事本文を直接貼り付けて診断する運用にしています。

画面の構成

画面はシンプルにしました。

  • アプリタイトル
  • 説明文
  • URL入力と本文入力の切り替え
  • 診断開始ボタン
  • 総合スコア
  • 評価サマリー
  • 項目別スコア表
  • 改善すべき点
  • 具体的な改善提案
  • FAQ案
  • メタディスクリプション案

Tailwind CSSを使い、白背景、カード形式、表形式のスコア表示にしています。

自分用MVPなので、派手なUIよりも、診断結果を読みやすいことを優先しました。

セットアップ手順

まず、Ollamaをインストールします。

公式サイトはこちらです。

https://ollama.com/

次に、使用するモデルを取得します。

ollama pull qwen3:latest

Ollamaが起動しているか確認します。

ollama list
curl http://localhost:11434/api/tags

アプリ側では依存関係をインストールします。

npm install

.env.local を作成します。

OLLAMA_MODEL=qwen3:latest
OLLAMA_ENDPOINT=http://localhost:11434/api/generate

開発サーバーを起動します。

npm run dev

ブラウザで以下を開きます。

http://localhost:3000

よくあるエラー

Ollamaに接続できない

Ollamaが起動していない可能性があります。

curl http://localhost:11434/api/tags

このコマンドで応答が返るか確認します。

モデルが見つからない

.env.localOLLAMA_MODEL と、実際に取得済みのモデル名が一致していない可能性があります。

ollama list

必要であれば、モデルを取得します。

ollama pull qwen3:latest

LLMのJSON出力が崩れる

Ollamaのモデルが、指示どおりにJSONだけを返さない場合があります。

この場合でも、ルールベース診断結果は表示されるようにしています。

URLから本文を抽出できない

JavaScript描画のページやログインが必要なページでは、本文を取得できない場合があります。

その場合は、本文入力モードで記事本文を直接貼り付けます。

今回の実装で重視したこと

今回のMVPでは、完璧なAI診断よりも、ローカル環境で安定して動くことを重視しました。

特に意識したのは次の点です。

  • OpenAI APIを使わない
  • スコアはLLMではなくルールベースで決める
  • LLMが失敗してもアプリ全体を落とさない
  • エラー内容を日本語で分かりやすく表示する
  • URL診断と本文診断の両方に対応する
  • 自分用MVPとしてすぐ使える形にする

今後の改善案

今後改善するなら、以下のような機能を追加したいです。

  • Playwrightを使ってJavaScript描画ページも診断する
  • 診断履歴を保存する
  • 記事ジャンルごとにスコアの重みを変える
  • FAQ構造化データのJSON-LD案を生成する
  • 競合ページとの比較診断を行う
  • 利用するOllamaモデルを画面で選べるようにする
  • 改善後の記事構成案を自動生成する

まとめ

Codex アプリを使って、プロンプトの指示だけで、ローカル環境でLLM(ollama+qwen3)を使って動くAI Overview診断ツールを作ることができました。

作業指示後は、ペットを表示させCodex アプリの進捗状況を確認しながら、他の作業を同時に行いました。

AI OverviewやAI検索を意識した記事改善では、本文の長さだけでなく、見出し、結論、FAQ、表、根拠、E-E-A-T要素などを整理することが重要です。

今回作ったツールは、その構造チェックをローカル環境で手軽に行うための第一歩として使えます。

関連記事

Codexアプリとは?GPT-5.5を使ったAIコーディングエージェントの始め方
Codexアプリとは何か、GPT-5.5との関係、Codex CLI・IDE拡張・Codex Cloud・Claude Codeとの違い、インストール方法、WSLフォルダの使い方、基本操作、注意点を初心者向けに解説します。
Codex アプリの設定方法:手を動かして学ぶ初心者向けハンズオン
Codex アプリの設定方法を、実際の画面操作に沿って解説。権限設定、config.toml、MCP、プラグイン、アプリ連携、スキル、ペットまで実践的に学べます。
Expo Goで始めるReact Native超入門
Expo Goを使ってReact Nativeを最速で始める初心者向け入門ガイド。環境構築不要でスマホ実機だけで動作確認しながら学べる手順を解説。ToDoアプリ開発や画面遷移、データ保存など基礎から理解できます。
SQLite + Prismaとは?ローカルLLM対応AI Overview診断ツールにDB保存機能を追加して分かったこと
SQLite + Prismaを使って、ローカルLLM対応AI Overview診断ツールに診断履歴のDB保存機能を追加する方法を初心者向けに解説。MVPから実用ツールへ拡張する考え方も紹介します。
Supabaseとは?ローカルLLM対応AI Overview診断ツールのDB保存先をSQLiteからSupabaseに変更する
SQLiteで保存していたAI Overview診断ツールのDB保存先をSupabaseへ変更する方法を、初心者向けに分かりやすく解説。Supabaseの基本、REST API連携、PostgreSQL保存の流れ、設定手順、注意点まで紹介します。
Supabase Authとは?ローカルLLM対応AI Overview診断ツールにユーザー認証を追加する
Supabase Authを使って、ローカルLLM対応AI Overview診断ツールにユーザー認証を追加する方法を解説。ログイン機能、user_id保存、Next.js API Routeでの認証確認、Supabase REST API連携、セキュリティ注意点まで初心者向けに紹介します。