🎯 できること
この投稿では、以下のようなWebアプリを、フロントエンドだけ(HTML/CSS/JavaScript)で簡単に作成&公開する方法を紹介します。
- ✅ カメラで展示物を撮影
- ✅ 画像をAIに送信し、解説を取得
- ✅ ブラウザ上に解説を表示
- ✅ GitHub Pages で無料・簡単に公開
- ✅ 開発ツール・フレームワーク不要!
🧠 対象読者
- React や Vue を使わず、できるだけシンプルに作りたい方
- 小さなプロトタイプをすばやく作りたい方
- APIはすでに用意できていて、フロントに特化した構成を探している方
🧱 フォルダ構成
ai-guide-app/
├── index.html
├── style.css
└── script.js
📝 index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>AI展示物ガイド</title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<h1>📷 AI展示物ガイド</h1>
<video id="video" autoplay></video>
<button id="captureBtn">撮影してAIに送信</button>
<canvas id="canvas" style="display: none;"></canvas>
<div id="result"></div>
<script src="script.js"></script>
</body>
</html>
🎨 style.css
body {
font-family: sans-serif;
text-align: center;
padding: 1rem;
}
video {
width: 100%;
max-width: 400px;
border: 1px solid #ccc;
}
button {
margin-top: 1rem;
padding: 0.5rem 1rem;
font-size: 1rem;
cursor: pointer;
}
#result {
margin-top: 1rem;
white-space: pre-wrap;
}
📜 script.js
const video = document.getElementById("video");
const canvas = document.getElementById("canvas");
const captureBtn = document.getElementById("captureBtn");
const resultDiv = document.getElementById("result");
// カメラを起動する処理
navigator.mediaDevices.getUserMedia({ video: true })
.then(stream => video.srcObject = stream)
.catch(err => alert("カメラの起動に失敗しました:" + err));
// 撮影してAPIに送る処理
captureBtn.addEventListener("click", async () => {
// canvas に映像を描画
const ctx = canvas.getContext("2d");
canvas.width = video.videoWidth;
canvas.height = video.videoHeight;
ctx.drawImage(video, 0, 0);
// 画像データをBase64に変換
const blob = await new Promise(resolve => canvas.toBlob(resolve, "image/jpeg"));
const base64Image = await toBase64(blob);
// AI APIに送信(※APIエンドポイントとKEYは自分で設定)
resultDiv.textContent = "AIが解説中...";
try {
const res = await fetch("https://your-api-endpoint.com/analyze", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_KEY"
},
body: JSON.stringify({ image: base64Image })
});
const data = await res.json();
resultDiv.textContent = data.explanation || "説明が取得できませんでした";
} catch (err) {
resultDiv.textContent = "エラーが発生しました: " + err.message;
}
});
// Base64変換関数
function toBase64(blob) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onloadend = () => resolve(reader.result.split(',')[1]); // base64部分のみ抽出
reader.onerror = reject;
reader.readAsDataURL(blob);
});
}
🚀 GitHub Pagesで公開する手順
- GitHubにログインし、新しいリポジトリを作成(例:
ai-guide-app
) - 上記3ファイルをアップロード(またはGitでpush)
- GitHubリポジトリ →
Settings
→Pages
を開く - 「Branch:
main
/ root (/
)」 を選択して「Save」 - 数秒〜1分ほど待つと、以下のようなURLで公開されます
https://your-username.github.io/ai-guide-app/
🛡 注意点
- カメラを使うにはHTTPS環境が必須(GitHub Pages は OK)
- OpenAIなどのAPIキーをフロントに埋め込むのはセキュリティ的に推奨されません
→ サーバ側でリクエストを中継する「プロキシAPI」の設置を検討してください
🧩 応用アイデア
- 質問候補(例:「これは何時代?」「作者は?」)をAPI側で返す
- チャットUIにして会話形式で解説を続けられるようにする
- 解説履歴を画面に残す/ログとして保存する
- PWA対応してホーム画面に追加可能にする
✅ まとめ
項目 | 内容 |
---|---|
使用技術 | HTML / CSS / JavaScriptのみ |
フレームワーク | 不使用(Vanilla構成) |
ビルドツール | 不要 |
公開方法 | GitHub Pages(無料・HTTPS対応) |
学習コスト | 最小 |
💬 デモ(任意で追加)
https://your-username.github.io/ai-guide-app/