2025年3月、Google DeepMindがリリースしたGemini 2.5は、AIの常識を塗り替えるほどの進化を遂げた次世代モデルです。自然言語処理はもちろん、画像・音声といったマルチモーダル入力への対応、強化された推論力とコード生成能力により、あらゆる分野での活用が可能になりました。
しかし、機能が多彩すぎるがゆえに「何ができるの?」「どのプランを選べばいい?」「自分の目的に本当に使えるの?」と、逆に悩んでしまいますよね。
そこでこの記事では、Gemini 2.5の仕組みや特長、利用できるプラン、他のAIとの性能比較、実際の活用シーンまで、わかりやすく解説します。
Gemini 2.5とは?
2025年3月にGoogle DeepMindが発表したGemini 2.5は、これまでのGeminiシリーズを大きく進化させた最新のAIモデルです。従来モデルと比べて、論理的な思考力・プログラミング能力・マルチモーダル処理の精度が著しく向上しており、研究開発からビジネス、教育分野まで幅広い活用が期待されています。
特に、自然言語だけでなく画像や音声といった複数の情報形式を扱える柔軟性と、複雑な問題に対しても一貫した文脈理解と推論を行う能力は、従来のAIを大きく上回るポイントです。
では、Gemini 2.5の仕組みや特徴、利用できるプラン、他のAIとの性能比較について解説します。
Gemini 2.5の仕組み・従来との比較
Gemini 2.5は、Google DeepMindが開発した最新のAIモデルで、従来のGemini 2.0 Flash Thinkingから大きく進化しています。Gemini 2.0は高速な思考処理に優れたモデルとして設計されていましたが、Gemini 2.5ではより深い推論能力や複雑な文脈理解が可能となるよう、根本的な基盤モデルが強化されています。
さらに、ポストトレーニングの工程にも改良が加えられており、ユーザーからのフィードバックを反映する仕組みや追加学習によって、実用的で信頼性の高い出力が得られるようになりました。
Gemini 2.5は、テキストのみならず画像や音声といったマルチモーダルな情報も処理できる点が特徴であり、従来モデルでは難しかった複合的なタスクにも対応できる柔軟性を備えています。また、コード生成の精度とスピードも向上しており、開発者にとっても強力なサポートとなるAIに進化しています。
全体として、Gemini 2.5は単なる思考支援ツールにとどまらず、多様な分野で高度な意思決定を支援するための統合的なAIモデルとして位置付けられています。
Gemini 2.5が使える料金プラン
プラットフォーム | 料金(税込) | 主な利用対象 | 備考 |
---|---|---|---|
Gemini Advanced | 月額 約2,900円 | 個人ユーザー | Google One「AI Premium」加入が必要 |
Google AI Studio | 基本無料(従量課金あり) | 開発者・検証目的 | 無料枠あり。上限超過で課金発生 |
Vertex AI(近日提供) | 従量課金(詳細未定) | 企業・大規模開発者 | Google Cloud上で提供、API経由で利用可能 |
Gemini Advancedは、月額料金が固定で分かりやすく、個人ユーザーがAIのフル機能を利用するには最も手軽です。Google Oneの「AI Premiumプラン」に加入することで利用できます。
Google AI Studioは、開発者がGemini 2.5を手軽に試せる環境で、無料枠もあるため検証目的に向いています。商用利用や継続的な開発には、使用量に応じた料金が発生します。
なお、主に法人の利用がメインのVertex AIでも、近日中に利用が開始される見込みです。(2025年3月27日現在)価格はリクエスト数や処理内容に応じた従量課金制です。システム統合や業務自動化を目的とした大規模な活用に適しています。
Gemini 2.5の得意分野
Gemini 2.5は、従来モデルに比べて大幅に強化された推論能力とコード生成能力を備えており、様々な高度なタスクに対応できる点が大きな特徴です。特に、長文や複雑な命題を扱う際の文脈理解や、多段階の論理的な思考が求められる場面で高い精度を発揮します。
たとえば、複数の条件が絡む意思決定のサポートや、仮説の立案と検証を行うような推論タスクにおいて、自然で的確な回答を導き出すことが可能です。
また、プログラミング分野においても、Python・JavaScript・TypeScriptをはじめとする複数の言語でのコード生成やデバッグ、改善提案に対応しています。ユーザーが自然言語で「こんな機能がほしい」と指示するだけで、実用的なコードを自動生成でき、アプリ開発や業務自動化の効率を大幅に向上させます。
そのほか、マルチモーダル入力への対応によって、テキストだけでなく、画像や音声を含んだ情報処理も得意です。これにより、教育・デザイン・データ分析など、幅広い分野での応用が可能になっています。特に、情報を多角的に捉え、構造化されたアウトプットとして提示する能力に優れています。
Gemini 2.5 Proと他のAIとの性能比較
Gemini 2.5 Proと他の主要AIモデルの性能比較を表にまとめました。
ベンチマーク | Gemini 2.5 Pro | OpenAI o3-mini | GPT-4.5 | Claude 3.7 Sonnet | Grok 3 Beta | DeepSeek R1 |
---|---|---|---|---|---|---|
Humanity’s Last Exam(推論・知識) | 18.8% | 14.0% | 6.4% | 8.9% | – | 8.6% |
GPQA diamond(科学) | 84.0% | 79.7% | 71.4% | 78.2% | 80.2% | 71.5% |
AIME 2025(数学) | 86.7% | 86.5% | – | 49.5% | 77.3% | 70.0% |
AIME 2024(数学) | 92.0% | 87.3% | 36.7% | 61.3% | 83.9% | 79.8% |
LiveCodeBench v5(コード生成) | 70.4% | 74.1% | – | – | 70.6% | 64.3% |
Aider Polyglot(コード編集) | 74.0% / 68.6%(whole/diff) | 60.4%(diff) | 44.9%(diff) | 64.9%(diff) | – | 56.9%(diff) |
SWE-bench verified(コーディング) | 63.8% | 49.3% | 38.0% | 70.3% | – | 49.2% |
SimpleQA(事実性) | 52.9% | 13.8% | 62.5% | 43.6% | – | 30.1% |
MMMU(視覚的推論) | 81.7% | – | 74.4% | 75.0% | 76.0% | – |
Vibe-Eval(画像理解) | 69.4% | – | – | – | – | – |
MRCR(長文理解) | 94.5% (128k) | 61.4% | 64.0% | – | – | – |
Global MMLU Lite(多言語知識) | 89.8% | – | – | – | – | – |
Gemini 2.5 Proは、さまざまな分野で他の主要AIモデルを上回る、または同等以上の性能を示しています。
特に、Humanity’s Last Examのような知識と推論力を問うベンチマークでは18.8%というスコアを記録し、GPT-4.5の6.4%、Claude 3.7の8.9%に対して大きな差をつけています。ツールなしでどれだけ複雑な問題に答えられるかを見るもので、Gemini 2.5 Proの思考力の高さを示しています。
科学や数学の分野では、GPQA diamondで84.0%、AIME 2025で86.7%、AIME 2024では92.0%という高得点を獲得しており、いずれもClaudeやGrokを上回るか、それに匹敵する性能を誇ります。
コード生成では、LiveCodeBench v5で70.4%と高い実行成功率を示しており、GPT-4.5の74.1%とほぼ同等の水準です。さらに、Aider Polyglotによるコード編集のスコアでも全体74.0%、差分ベース68.6%という高水準を維持しています。
実際のコーディング課題を対象としたSWE-bench verifiedでも63.8%と好成績で、Claude 3.7の70.3%に次ぐ性能です。一方、SimpleQA(事実性)ではGPT-4.5が最も高いスコアの62.5%を示しましたが、Geminiも52.9%と安定した成績を残しています。
Gemini 2.5 Proの始め方・登録方法
Gemini 2.5 Proを利用するには、まずGeminiの公式サイトにアクセスします。
右上の「ログイン」から、ご自身のGoogleアカウントでログインしましょう。Googleアカウントを持っていない場合は、作成してください。
ログイン後、右上の「Gemini Advancedを試す」をクリックすると、Google Oneプランの案内が出てきます。
Google Oneプランを購入すると、Gemini 2.5 Proが使えるようになっています。
Gemini 2.5 Proの使い方
Geminiログイン・Google Oneプランの購入が完了したら、左上の「Gemini Advanced」をクリックしましょう。
すると、プルダウンメニューが出てくるので、一番下の「2.5 Pro (experimental)」を選択してください。この状態で、画面下部の「Geminiに相談」にプロンプトを入れると、Gemini 2.5 Proが使えます。
例えば「「スキマ時間で英語を学ぶ方法」について説得力のあるプレゼン骨子を作って。」と送ってみると、思考プロセスとともに回答が表示されました。
なお、プロンプト入力欄の左下にある「+」マークを押すと、画像やファイルなどをアップすることが可能です。また、右下のマイクのマークを押すと、音声入力もできます。Gemini 2.5 Proはマルチモーダル機能を備えているので、テキスト以外のデータもどんどん活用していけます。
Gemini 2.5 Proの活用例
Gemini 2.5 Proは、単なるチャットAIの枠を超え、さまざまな実務や創造的タスクをサポートできる強力なツールです。長文読解からコード生成、データ分析、教育現場での活用まで応用範囲は非常に広く、多くのシーンで使えるAIとして注目されています。
では、具体的にどのような形でGemini 2.5 Proを活用できるのか、実際の事例を交えながら紹介していきます。
複雑な内容の長文も一括で要約・検索
Gemini 2.5 Proは、長文処理に非常に優れたAIモデルであり、文脈の流れや主旨を正確に捉えた上で、わかりやすく要約することが可能です。特に、専門的なレポート・論文・契約書・議事録など、情報量が多く複雑な構成を持つ文書でも、一度に全体を読み取り、重要なポイントを抽出する能力に長けています。
たとえば、「このPDFの内容を3つの要点にまとめてください」「このレポートから市場動向に関する部分だけを抽出して要約してください」といった指示にも対応可能です。目的や視点を明確に伝えることで、読み手にとって意味のある要約が得られます。
また、全文を一読することなく「〇〇というキーワードに関連する箇所だけ教えて」といった検索的な使い方も有効です。Gemini 2.5 Proは文書全体を把握した上で、該当する部分を抽出し、文脈を損なわずに回答するため、効率よく情報を把握できます。
では実際に、環境省の「令和6年版 環境・循環型社会・生物多様性白書」から、23ページ分の内容を要約してもらいました。
この送付したPDFファイルについて、内容を読み取って、3つの要点にまとめて。
しっかりと内容を押さえて、具体的にまとめられていることがわかります。
簡単な指示からWebアプリケーションを自動生成
Gemini 2.5 Proは、プログラミングスキルがない人でも簡単な指示でWebアプリケーションの開発をスムーズに進められるよう支援する強力なAIです。
フロントエンド(HTML/CSS/JavaScript)やバックエンド(Python/Node.jsなど)の基本的な構成を把握しており、フォームやテーブル・検索機能・API連携など、よくある機能をテンプレート化して提案します。さらに、「Reactで作って」「データベースはSQLiteで」といった技術スタックの指定にも柔軟に対応可能です。
また、生成されたコードはそのまま動作させるだけでなく、「もっとボタンを目立たせたい」「入力チェックを追加して」などの追加修正指示も自然文で可能なため、開発工程が対話ベースで進められるのも特徴です。開発の経験がある人にとっては、プロトタイピングのスピードを大きく向上させる手段となり、初心者にとってはコーディング学習のサポート役としても活用できます。
では実際に、「みんなを驚かせられるようなクオリティのWEBアプリ作って欲しいんだよね」という雑な指示からスタートして、作ってみます。
4つほどアイディアを出してくれたので、「インタラクティブ・カラーパレットジェネレーター」を作ってみることにします。
まずは、HTMLとCSSのみ作って、デザインの確認を促してきました。
ちょっとイメージと違ったので「もうちょい装飾欲しいかも」と雑な指示を投げてみると、具体的にどこを変えたらいいかの案を出してくれました。
デザインにOKを出すと、次はいよいよJavaScriptの実装に入りました。
生成されたコードはこちらです。
<!DOCTYPE html>
<html lang=”ja”>
<head>
<meta charset=”UTF-8″>
<meta name=”viewport” content=”width=device-width, initial-scale=1.0″>
<title>インタラクティブ・カラーパレット</title>
<link rel=”preconnect” href=”https://fonts.googleapis.com”>
<link rel=”preconnect” href=”https://fonts.gstatic.com” crossorigin>
<link href=”https://fonts.googleapis.com/css2?family=Poppins:wght@400;500&display=swap” rel=”stylesheet”>
<link rel=”stylesheet” href=”https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css” integrity=”sha512-iecdLmaskl7CVkqkXNQ/ZH/XLlvWZOJyj7Yy7tcenmpD1ypASozpmT/E0iPtmFIB46ZmdtAc9eNBvH0H/ZpiBw==” crossorigin=”anonymous” referrerpolicy=”no-referrer” />
<style>
/* CSSは前回と同じなので省略 */
:root {
–color-1: #f2f2f2; –color-2: #e0e0e0; –color-3: #cccccc; –color-4: #b8b8b8; –color-5: #a3a3a3;
–bg-color-start: #ffffff; –bg-color-end: #f5f5f5;
–text-color: #333333; –transition-duration: 0.6s;
}
html { overflow-y: scroll; }
body {
min-height: 100vh; margin: 0; font-family: ‘Poppins’, sans-serif;
background-image: linear-gradient(to bottom, var(–bg-color-start), var(–bg-color-end));
background-repeat: no-repeat; background-attachment: fixed; color: var(–text-color);
display: flex; justify-content: center; align-items: center; text-align: center;
transition: color var(–transition-duration) ease; background-color: var(–bg-color-start);
}
.container { padding: 20px; }
.palette {
display: flex; margin-bottom: 45px; height: 250px; min-width: 300px; max-width: 600px;
width: 80vw; box-shadow: 0 8px 30px rgba(0, 0, 0, 0.1); border-radius: 12px; overflow: hidden;
}
.color-box {
flex: 1; background-color: var(–color-1); display: flex; justify-content: center; align-items: flex-end;
padding-bottom: 20px; box-sizing: border-box; position: relative;
transition: background-color var(–transition-duration) ease;
}
.color-box:nth-child(1) { background-color: var(–color-1); }
.color-box:nth-child(2) { background-color: var(–color-2); }
.color-box:nth-child(3) { background-color: var(–color-3); }
.color-box:nth-child(4) { background-color: var(–color-4); }
.color-box:nth-child(5) { background-color: var(–color-5); }
.color-code {
background-color: rgba(0, 0, 0, 0.6); color: #ffffff; padding: 5px 10px; font-size: 13px;
border-radius: 4px; font-family: ‘Menlo’, monospace; opacity: 0; transition: opacity 0.3s ease;
pointer-events: none; position: absolute; bottom: 20px;
}
.color-box:hover .color-code { opacity: 1; }
#generate-btn {
width: 60px; height: 60px; font-size: 1.6rem; line-height: 60px; text-align: center; padding: 0;
color: var(–text-color); background-color: #ffffff; border: 1px solid #e0e0e0; border-radius: 50%;
cursor: pointer; box-shadow: 0 4px 10px rgba(0, 0, 0, 0.08); transition: all 0.2s ease;
}
#generate-btn:hover {
background-color: #f9f9f9; border-color: #d0d0d0; box-shadow: 0 7px 15px rgba(0, 0, 0, 0.1);
transform: translateY(-2px);
}
#generate-btn:active {
transform: scale(0.95) translateY(0px); box-shadow: 0 2px 5px rgba(0, 0, 0, 0.07);
}
</style>
</head>
<body>
<div class=”container”>
<div class=”palette”>
<div class=”color-box”><span class=”color-code”>#XXXXXX</span></div>
<div class=”color-box”><span class=”color-code”>#XXXXXX</span></div>
<div class=”color-box”><span class=”color-code”>#XXXXXX</span></div>
<div class=”color-box”><span class=”color-code”>#XXXXXX</span></div>
<div class=”color-box”><span class=”color-code”>#XXXXXX</span></div>
</div>
<button id=”generate-btn” title=”Generate New Palette”>
<i class=”fas fa-arrows-rotate”></i>
</button>
</div>
<script>
const generateBtn = document.getElementById(‘generate-btn’);
const colorBoxes = document.querySelectorAll(‘.color-box’); // 全てのカラーボックス(今回は直接は使わないが取得)
const colorCodes = document.querySelectorAll(‘.color-code’); // 全てのカラーコード表示用span
// — 色生成 & 変換ロジック —
// ランダムなHSLカラーを生成する関数 (鮮やかめ、中間的な明るさ)
function generateRandomHsl() {
const h = Math.floor(Math.random() * 361); // 色相 (0-360)
const s = Math.floor(Math.random() * 31) + 65; // 彩度 (65-95%) – 鮮やかさを担保
const l = Math.floor(Math.random() * 31) + 35; // 明度 (35-65%) – 極端な白/黒を避ける
return { h, s, l };
}
// HSLをRGBに変換する関数 (0-255範囲)
// 参考: https://www.w3.org/TR/css-color-3/#hsl-color を元に調整
function hslToRgb(h, s, l) {
s /= 100;
l /= 100;
let r, g, b;
if (s === 0) {
r = g = b = l; // 無彩色
} else {
const hue2rgb = (p, q, t) => {
if (t < 0) t += 1;
if (t > 1) t -= 1;
if (t < 1 / 6) return p + (q – p) * 6 * t;
if (t < 1 / 2) return q;
if (t < 2 / 3) return p + (q – p) * (2 / 3 – t) * 6;
return p;
};
const q = l < 0.5 ? l * (1 + s) : l + s – l * s;
const p = 2 * l – q;
r = hue2rgb(p, q, h / 360 + 1 / 3);
g = hue2rgb(p, q, h / 360);
b = hue2rgb(p, q, h / 360 – 1 / 3);
}
return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];
}
// RGB値を16進数カラーコード(#RRGGBB)に変換する関数
function rgbToHex(r, g, b) {
const toHex = (c) => c.toString(16).padStart(2, ‘0’); // 1桁の場合も0で埋める
return `#${toHex(r)}${toHex(g)}${toHex(b)}`.toUpperCase();
}
// 5色のランダムパレット(HEXコード配列)を生成する関数
function generateRandomPalette() {
const palette = [];
for (let i = 0; i < 5; i++) {
const { h, s, l } = generateRandomHsl();
const [r, g, b] = hslToRgb(h, s, l);
const hexColor = rgbToHex(r, g, b);
palette.push(hexColor);
}
return palette;
}
// — パレット適用ロジック —
// 生成されたパレットを画面に適用する関数
function applyPalette(palette) {
palette.forEach((color, index) => {
const colorIndex = index + 1;
// ★重要★ CSS変数 (–color-1, –color-2, …) の値を更新
document.documentElement.style.setProperty(`–color-${colorIndex}`, color);
// 対応するカラーコード表示 (span要素) のテキストを更新
if (colorCodes[index]) {
colorCodes[index].textContent = color;
}
});
// — オプション:背景色や文字色も動的に変更する場合 —
// 例:今回は背景・文字色は固定のままですが、もし変えたい場合は
// ここでパレットの色から適切な色を選び、–bg-color や –text-color を更新します。
// コントラスト比などを考慮する必要があり、少し複雑になります。
// document.documentElement.style.setProperty(‘–bg-color’, palette[0]); // 例: 1番目の色を背景に
// document.documentElement.style.setProperty(‘–text-color’, determineTextColor(palette[0])); // 背景色に合わせた文字色
}
// — イベントリスナー & 初期化 —
// ボタンクリック時の処理
function handleGenerateClick() {
// 新しいパレットを生成
const newPalette = generateRandomPalette();
// 生成したパレットを画面に適用
applyPalette(newPalette);
}
// ボタンにクリックイベントリスナーを追加
generateBtn.addEventListener(‘click’, handleGenerateClick);
// ページ読み込み時に最初のパレットを生成・適用(初期表示のため)
// 少し遅延させることで、初期のグレーから色が変化する様子を見せる(お好みで)
// setTimeout(handleGenerateClick, 100); // 0.1秒後
// すぐに表示する場合
handleGenerateClick();
</script>
</body>
</html>
実際に動かしてみると、このようにクリックするたびにカラーパターンが生成されました。
CSVファイルを読み込ませてビジネスデータ分析
Gemini 2.5 Proは、CSVファイルのような表形式データの解析にも対応しており、ビジネスにおける意思決定やレポート作成をサポートするのに非常に役立ちます。売上データ・顧客情報・アクセスログなど、日々蓄積されるデータを読み込ませるだけで、自然言語での指示に従って自動的に分析・要約・可視化できます。
たとえば、「このCSVから月別の売上推移をグラフにしてください」「最も売上が高い商品カテゴリを教えてください」「前年比の増減率を表にまとめてください」といった指示をテキストで与えるだけで、適切な分析とアウトプットが返ってきます。特に、集計・フィルタ・ソート・グラフ化などの基本的なデータ処理は、複雑なスクリプトを書くことなく実行できるため、非エンジニアにも扱いやすい点が魅力です。
また、ビジネスでよくある異常値の検出・傾向の分析・KPIの可視化といったタスクにも対応しており、簡単な問いかけを繰り返すことで、インタラクティブに深掘り分析を進めることも可能です。たとえば、「この月だけ売上が下がっている理由は?」と尋ねることで、関連指標や他データとの相関をもとに仮説的な答えを導いてくれる場合もあります。
では、実際にダミーの売上データCSVを作って、解析を頼んでみましょう。ところが、いざやってみようとすると、CSVデータがグレーアウトしてしまって選択できません。
それなら、Googleドライブ経由でGoogleスプレッドシートのデータを読み込んでもらおう!と思ったのですが、Googleドライブ内でも選択できるのはドキュメントやプレゼンテーションのみです。
現状まだこの機能は、試用版のGemini 2.5 Proでは利用できない場合もありそうです。
生徒向け教材・図解つき解答の自動生成
Gemini 2.5 Proは、難解な数式や論理的な思考を要する問題に強く、教育現場でも非常に有用なツールです。特に数学のように、段階的な解法や図解が理解のカギを握る分野で力を最大限に発揮します。
たとえば、「高校2年生向けに微分の応用問題を解説して」「関数の最大値・最小値の求め方を図付きで説明して」といった指示を出せば、問題文の理解から式の立て方、途中計算、解の導出までをステップごとにわかりやすく整理します。さらに、グラフや図形を用いた視覚的な補足も加えられるため、生徒の直感的な理解を助けます。
また、「この証明問題を中学生にもわかるように言い換えて」「図形の合同条件を図と一緒に教えて」など、生徒の学年や習熟度に応じた出力ができる点も強みです。形式ばった解説ではなく、丁寧で会話調の説明にすることも可能で、堅苦しくなりがちな数理分野に柔らかさを加えることもできます。
では、実際に数学の問題の作問と図つきの解説を依頼してみましょう。
高校数学Ⅱの範囲から「微分の応用」に関する練習問題を1問作成し、図つきで丁寧に解説してください。ステップごとの計算過程も示してください。
解説もしっかり出してくれていますね。
ところが、この図のMermaidコードをMermaid Live Editorで表示しようとしたところ、エラーが出てしまいました。
何度もエラー修正を繰り返しましたが解消できず、Gemini 2.5 Pro自身が諦めるモードに入りました。結局、図については見ることができませんでした。
AIエージェント開発でチャットボット作成
Gemini 2.5 Proは、複雑な指示の理解とマルチターンの対話設計に長けており、チャットボットやAIエージェントの開発にも非常に適しています。とくに、従来のテンプレートベースのチャットボットとは異なり、柔軟な言語理解と高度な推論力を活かして、より自然で目的に沿った対話設計が可能です。
たとえば、「カスタマーサポート向けのAIエージェントを作りたい」「ユーザーの質問に対してFAQから回答を生成し、必要に応じて予約ページへ誘導して」といった複合的な指示にも対応でき、チャットフローの全体設計からスクリプトの生成、ロジックの分岐までを一括で構築できます。
開発者にとっては、Gemini 2.5 Proを使って「このような対応をするボットをJavaScriptで作成して」と指示することで、実際のコードやAPI連携部分まで自動生成することも可能です。非エンジニアであっても、自然言語による「こういう受け答えにして」「この条件なら別の質問を返して」といったプロンプトを通じて、高度な対話設計を構築できる点が魅力です。
レストランのLINE風チャットボットを設計してください。ユーザーの質問に応じて、営業時間・メニューの案内、予約ページのURL案内などを行います。「予約したい」と言われたら人数と希望時間を聞き、URLに誘導してください。JavaScriptで簡易的なコードもください。
この簡単な指示だけで、内容や機能まで考え、簡易的にテストできるHTMLとJavaScriptを生成してくれました。
HTML
<!DOCTYPE html>
<html lang=”ja”>
<head>
<meta charset=”UTF-8″>
<meta name=”viewport” content=”width=device-width, initial-scale=1.0″>
<title>レストランチャットボット</title>
<style>
body { font-family: sans-serif; }
#chatbox {
height: 400px;
border: 1px solid #ccc;
overflow-y: scroll;
padding: 10px;
margin-bottom: 10px;
background-color: #f0f0f0; /* LINE風背景 */
}
.message {
margin-bottom: 10px;
padding: 8px 12px;
border-radius: 15px;
max-width: 70%;
word-wrap: break-word;
}
.user {
background-color: #86e57f; /* LINE風 ユーザー吹き出し */
margin-left: auto; /* 右寄せ */
text-align: left;
}
.bot {
background-color: #ffffff; /* LINE風 ボット吹き出し */
margin-right: auto; /* 左寄せ */
text-align: left;
border: 1px solid #eee;
}
#userInput {
width: calc(100% – 70px);
padding: 10px;
border: 1px solid #ccc;
border-radius: 5px;
}
#sendButton {
width: 60px;
padding: 10px;
border: none;
background-color: #007bff;
color: white;
border-radius: 5px;
cursor: pointer;
}
a { color: #007bff; text-decoration: none; }
a:hover { text-decoration: underline; }
</style>
</head>
<body>
<h1>レストランチャットボット</h1>
<div id=”chatbox”>
<div class=”message bot”>いらっしゃいませ![レストラン名]へようこそ。ご用件をお知らせください。(例:営業時間、メニュー、予約)</div>
</div>
<div>
<input type=”text” id=”userInput” placeholder=”メッセージを入力…”>
<button id=”sendButton”>送信</button>
</div>
<script src=”chatbot.js”></script>
</body>
</html>
JavaScript
const chatbox = document.getElementById(‘chatbox’);
const userInput = document.getElementById(‘userInput’);
const sendButton = document.getElementById(‘sendButton’);
// — 設定項目 —
const restaurantName = “サンプルレストラン”; // レストラン名を設定
const businessHours = “営業時間は、ランチ 11:30〜14:00、ディナー 17:00〜22:00(ラストオーダー 21:30)です。定休日は水曜日です。”;
const menuUrl = “https://example.com/menu”; // メニューページのURLを設定
const reservationUrl = “https://example.com/reserve”; // 予約ページのURLを設定
const phoneNumber = “03-xxxx-xxxx”; // 電話番号を設定
// — —
let reservationState = ‘idle’; // ‘idle’, ‘asking_people’, ‘asking_time’
let reservationInfo = {
people: null,
time: null
};
// — イベントリスナー —
sendButton.addEventListener(‘click’, handleUserInput);
userInput.addEventListener(‘keypress’, function(e) {
if (e.key === ‘Enter’) {
handleUserInput();
}
});
// — 関数 —
// メッセージをチャットボックスに表示
function displayMessage(sender, message) {
const messageDiv = document.createElement(‘div’);
messageDiv.classList.add(‘message’, sender);
// URLをリンクに変換(簡易版)
message = message.replace(/(https?:\/\/[^\s]+)/g, ‘<a href=”$1″ target=”_blank”>$1</a>’);
messageDiv.innerHTML = message; // HTMLとして挿入
chatbox.appendChild(messageDiv);
chatbox.scrollTop = chatbox.scrollHeight; // 自動スクロール
}
// ユーザー入力を処理
function handleUserInput() {
const userText = userInput.value.trim();
if (userText === ”) return;
displayMessage(‘user’, userText);
userInput.value = ”; // 入力欄をクリア
// ボットの応答を生成・表示 (少し遅延させると自然に見える)
setTimeout(() => {
const botResponse = generateBotResponse(userText);
displayMessage(‘bot’, botResponse);
}, 500); // 0.5秒遅延
}
// ボットの応答を生成
function generateBotResponse(userText) {
const lowerUserText = userText.toLowerCase(); // 比較のために小文字に
// 予約フローの状態に応じた処理
if (reservationState === ‘asking_people’) {
// 人数に対する応答を期待
const peopleMatch = userText.match(/(\d+)\s*(人|名)/); // 数字と「人」または「名」を探す
if (peopleMatch && peopleMatch[1]) {
reservationInfo.people = peopleMatch[1];
reservationState = ‘asking_time’;
return `${reservationInfo.people}名様ですね。ご希望の時間は何時頃でしょうか? (例: 19時、18:30)`;
} else {
// 人数がうまく聞き取れなかった場合
return “恐れ入ります、人数を「〇人」または「〇名」の形式で教えていただけますでしょうか?”;
}
} else if (reservationState === ‘asking_time’) {
// 時間に対する応答を期待 (簡易的なキーワードで判定)
if (lowerUserText.includes(‘時’) || lowerUserText.includes(‘:’)) {
reservationInfo.time = userText; // 入力された時間をそのまま保持
reservationState = ‘idle’; // 予約フロー完了
const response = `${reservationInfo.time}頃ですね、承知いたしました。\nご予約はこちらのページからお願いいたします。\n${reservationUrl}\nご希望の日時と人数(${reservationInfo.people}名様)を選択してご予約ください。`;
// 予約情報をリセット
reservationInfo = { people: null, time: null };
return response;
} else {
// 時間がうまく聞き取れなかった場合
return “恐れ入ります、ご希望の時間を「〇時」や「〇:〇」の形式で教えていただけますでしょうか?”;
}
}
// 通常のキーワード応答
if (lowerUserText.includes(‘こんにちは’) || lowerUserText.includes(‘こんばんは’) || lowerUserText.includes(‘どうも’)) {
return `いらっしゃいませ!${restaurantName}です。ご用件をお知らせください。(例:営業時間、メニュー、予約)`;
} else if (lowerUserText.includes(‘営業’) || lowerUserText.includes(‘何時まで’) || lowerUserText.includes(‘開いてる’)) {
return businessHours;
} else if (lowerUserText.includes(‘メニュー’) || lowerUserText.includes(‘食べ物’) || lowerUserText.includes(‘飲み物’) || lowerUserText.includes(‘なにがある’))
return `メニューはこちらのページをご覧くださいませ。\n${menuUrl}`;
} else if (lowerUserText.includes(‘予約’) || lowerUserText.includes(‘席’) || (lowerUserText.includes(‘お願い’) && lowerUserText.includes(‘します’))) {
reservationState = ‘asking_people’;
return “ご予約ですね、ありがとうございます。ご利用人数は何名様でしょうか?”;
} else if (lowerUserText.includes(‘ありがとう’) || lowerUserText.includes(‘助かり’)) {
return “どういたしまして。他にご不明な点はございますか?”;
} else if (lowerUserText.includes(‘電話’) || lowerUserText.includes(‘番号’)) {
return `お電話でのお問い合わせは ${phoneNumber} までお願いいたします。`;
} else {
// デフォルト応答
return `申し訳ありません、よく分かりません。\n「営業時間」「メニュー」「予約」などのキーワードでお尋ねいただくか、お電話(${phoneNumber})でお問い合わせください。`;
}
}
// 初期メッセージ
// displayMessage(‘bot’, `いらっしゃいませ!${restaurantName}へようこそ。ご用件をお知らせください。(例:営業時間、メニュー、予約)`);
// HTML側で初期メッセージを表示するようにしたので、JS側はコメントアウト
実際に動かしてみた結果がこちらです。
しっかり受け答えができていることがわかります。
Gemini 2.5 Proを最大限に活用するコツ
Gemini 2.5 Proの能力を最大限に引き出すためには、AIの特性に合わせてプロンプトを設計したり、マルチモーダル機能を積極的に活用したりすることが求められます。
では、思考型・推論型モデルの特性を踏まえたプロンプトの作り方や、複数の情報形式に対応する指示の出し方など、Gemini 2.5 Proをより賢く・便利に使いこなすための実践的なコツを紹介します。
思考型・推論型モデルに合ったプロンプトを作る
Gemini 2.5 Proは、単なる質問応答を超えて、深い思考や複雑な推論を必要とするタスクに適したAIです。能力を最大限に引き出すため、プロンプトではロール設定・思考ステップの明示・出力形式の指定を意識しましょう。
まず、ロール設定とは、AIに対して「あなたは〇〇の専門家です」や「あなたはデータアナリストです」といった役割を与えることです。AIはその立場に応じた文脈や表現を使って回答するようになり、より的確で実用的な出力が得られます。
次に、思考ステップの明示です。Gemini 2.5 Proは論理的に考えるのが得意なため、「ステップ・バイ・ステップで考えてください」「まずは仮説を立ててから検証してください」など、思考の流れを誘導することで、精度の高い結果を引き出せます。
最後に、出力形式の指定も効果的です。たとえば「表形式でまとめてください」「箇条書きで答えてください」「コードで出力してください」といった具体的な指示を与えることで、より読みやすく整理された結果が得られます。
マルチモーダル機能で形式を超えた指示をする
Gemini 2.5 Proは、テキストに加えて画像やファイルなど、さまざまな形式の情報を同時に処理できるマルチモーダル機能が特徴です。強みを活かすには、単にデータを渡すのではなく、「どう読み取って、どう処理してほしいか」を明確にプロンプトで伝えましょう。
たとえば、画像を使う場合は「このグラフの内容を3行で要約してください」「この図をもとにレポートの導入文を書いてください」など、目的や出力形式を具体的に指定することで、より実用的な回答が得られます。
CSVや表形式のファイルを扱う場合は、「このデータの中で最も売上が高い月を教えてください」「前年比の伸び率をカテゴリごとに分析して、表で出力してください」など、ファイルの中身に対する処理内容をはっきり伝えることがポイントです。
また、画像+テキストのように複数の形式を同時に使う指示も有効です。たとえば「このチラシ画像とこの文章を組み合わせて、SNS用の投稿文を作ってください」といったマルチメディア的な活用もできます。
Gemini 2.5 Proの注意点
Gemini 2.5 Proからはどれほど優れた出力が得られるとしても、AIは万能ではなく、正確性や情報の鮮度、文脈の継続性などの面で限界があります。特に、事実と異なる情報の生成・最新の出来事に関する知識の不足・セッションをまたいだやり取りに弱い点などは、ユーザー自身がカバーすべきポイントです。
ここでは、Gemini 2.5 Proを安全かつ効果的に使いこなすために、あらかじめ把握しておくべき代表的な注意点を紹介します。
事実と異なる内容を堂々と生成することがある
Gemini 2.5 Proは高精度な推論と生成能力を備えたAIですが、完全に誤りのない情報を返すわけではありません。特に注意すべき点として、もっともらしく見えるが、事実と異なる内容を生成することがある点が挙げられます。いわゆる「ハルシネーション」と呼ばれる現象で、AIが存在しない情報を自信満々に語ってしまうことです。
たとえば、存在しない統計データや出典を提示したり、実在しない人物の発言や論文を引用したりするケースもあります。あくまで言語パターンや文脈から「ありそう」と判断して生成されたものであり、必ずしも裏付けのある事実とは限りません。
Gemini 2.5 Proを使って情報収集や文章作成を行う際は、生成された内容をそのまま鵜呑みにせず、信頼できる情報源での裏取りやファクトチェックを行いましょう。特にビジネス文書や研究資料、公開する情報など、正確性が求められる場面では慎重な扱いが求められます。
AIの回答は参考意見として活用し、最終的な判断や確認は人間が担うという姿勢が、安心して活用するための基本です。Gemini 2.5 Proの優れた出力力を活かしつつ、事実確認を欠かさない運用を心がけましょう。
最新情報を知るには別途データを読み込ませる必要がある
Gemini 2.5 Proは、2025年1月時点までに学習されたデータをもとに動作しており、それ以降の出来事やアップデート、トレンドなどの最新情報には対応していません。そのため、たとえば「昨日のニュースを要約して」「今週の為替動向を教えて」といったリアルタイム性が求められる質問には、正確に答えることができません。
こうした情報のギャップを埋めるためには、ユーザー自身が最新データを読み込ませる必要があります。具体的には、Webページの内容を貼り付けたり、最新のニュース記事やCSVファイルなどをアップロードしたりした上で「この内容を要約してください」「このデータに基づいて分析してください」と指示を出す方法が有効です。
また、リアルタイム性が重要なタスクにおいては、Gemini 2.5 Pro単体で完結させるのではなく、外部データとの連携や人間による確認を併用することで、より信頼性の高い結果を得られます。強力なAIであっても情報の鮮度には限界があるため、常に最新の知識が必要な場面では、AIの補助的な役割としての使い方を意識しましょう。
セッション間の情報保持はサポート外の可能性がある
Gemini 2.5 Proは、1回のセッション内での文脈理解には非常に優れていますが、セッションをまたいで情報を記憶・保持する機能は正式にはサポートされていない可能性があります。そのため、前回のやり取りの内容やユーザーの意図を次のセッションで自動的に引き継ぐことは基本的にできません。
たとえば、あるプロジェクトに関する会話を複数日に分けて行いたい場合でも、「昨日の続きからお願いします」や「前に話したデータを覚えていますか?」といった指示には対応できず、再度その情報を提供する必要があります。これは、セキュリティやプライバシーの観点からも設計上意図された仕様です。
したがって、継続的なやり取りや長期的な文脈を維持したい場合は、セッションの冒頭で必要な情報を明示的に共有することが推奨されます。
- プロジェクトや会話の背景
- これまでにやり取りした要点や結論
- 続きから扱ってほしい具体的な内容や課題
例:「昨日は◯◯という課題について話しました。本日はその続きを議論したいので、以下がこれまでの経緯です……」
セッションごとに文脈を再構成する習慣を持つことで、Gemini 2.5 Proの出力品質を維持しつつ、スムーズなやり取りが可能になります。