
2025/12/11 6:08
Useful patterns for building HTML tools
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
改善された要約
著者は、HTML、JavaScript、および CSS をすべて 1 ファイルにまとめた 150 件以上のシングルファイル HTML ツールを作成しています。コードは主に大規模言語モデルによって生成され、その後 Playwright でテストし、GitHub Pages に公開してビルドステップやフレームワークなしでブラウザ上で完全に動作させています。典型的なパターンとしては、CDN(CDNjs、jsDelivr)からライブラリを取得し、URL や localStorage に状態を保存し、JavaScript で「ダウンロード」ボタンを提供する方法があります。人気の例には svg‑render、pypi‑changelog、bluesky‑thread、paste‑rich‑text、alt‑text‑extractor、clipboard‑viewer、cors‑fetch、icon‑editor、word‑counter、render‑markdown、haiku などがあります。より複雑なプロジェクトでは、著者は Claude Code や Codex CLI のようなコーディングエージェントを使用し、Playwright テストを実行して GitHub にプルリクエストで変更をプッシュします。LLM API(OpenAI、Anthropic、Gemini)はツールから直接呼び出すことができ、API キーは localStorage に保存されているためページソースに露出しません。ツールはまた、、PDF.js、Tesseract.js、および Pyodide、Squoosh、sloccount などの WebAssembly モジュールを使用してサーバーなしでファイル入力を処理し、OCR、画像圧縮、ブラウザ内で Python や C コードを実行します。一部のツールはリッチクリップボード API を利用した「コピー」ボタンを公開し、モバイルでもうまく機能します。これらすべてが軽量でコピー&ペースト準備済みのワークフローを示しており、開発者が重いツールなしで迅速にプロトタイピングできることを実証し、ブラウザのみで動作する Web アプリの構築と共有方法を示しています
本文
2025年12月10日
HTMLで作るアプリを「HTMLツール」と呼び始めました。
それらは HTML、JavaScript、CSS を一つのファイルにまとめて使い、実用的な機能を提供します。ほとんどは LLM(大規模言語モデル)によって作成されています。この記事では私が実際に役立ったパターン集をご紹介します。
例
- svg‑render – SVG コードをダウンロード可能な JPEG/PNG に変換
- pypi‑changelog – PyPI のリリース間での差分を生成し、クリップボードへコピー
- bluesky‑thread – ブルー・スカイ上のディスコーススレッドを階層化して表示
これらは最近のお気に入りです。実際に使っているツールは数十個あります。
tools.simonw.net でコレクションを覗いてみてください。
「月別」ビューがあると閲覧しやすいです。
HTML ツールの構成要素
1. アーティファクト・キャンバスでプロトタイプ作成
ChatGPT、Claude … それぞれに アーティファクト(=「前置き」) があり、
そのまま簡単に「本文」―
● **サブミットボタンが非‑先行‐実装でさっくりと……
?
We need to translate the entire article into Japanese. Provide natural, polite. Let's produce full translation.2025年12月10日
HTML で作るアプリを「HTML ツール」と呼び始めました。
それらは HTML、JavaScript、CSS をひとつのファイルにまとめて使い、実用的な機能を提供します。ほぼすべて LLM(大規模言語モデル)で書かれています。この記事では私が実際に役立ったパターン集をご紹介します。
例
- svg‑render – SVG コードをダウンロード可能な JPEG/PNG に変換
- pypi‑changelog – PyPI のリリース間で差分を生成し、クリップボードへコピー
- bluesky‑thread – Bluesky 上のディスコーススレッドを階層表示
これらは最近のお気に入りです。実際に使っているツールは数十個あります。
tools.simonwillison.net でコレクションをご覧ください。「月別」ビューだと探しやすいです。
HTML ツールの構成
1. アーティファクト/キャンバスでプロトタイプ作成
ChatGPT・Claude・Gemini は、簡単な HTML+JavaScript アプリを即座に書き出してくれます。
- Claude は「Artifacts(アーティファクト)」と呼び、
- ChatGPT と Gemini は「Canvas(キャンバス)」と呼びます(必要なら「ツール」メニューをトグル)。
例(Gemini/ChatGPT 用):
JSON を貼り付けて YAML に変換するキャンバスを作ってください。React は使わないで。
Claude 用:
JSON を貼り付けて YAML に変換するアーティファクトを作ってください。React は使わないで。
React は完全に排除します。ビルドステップが必要になり、LLM から直接コピー&ペーストしづらくなるためです。
共有リンク が付くと完成したアプリの URL が得られます(例:ChatGPT の JSON→YAML、Claude の JSON→YAML、Gemini の JSON→YAML)。
2. 複雑なプロジェクトはコードエージェントへ
Claude Code や Codex CLI は Playwright 等を使って即座にテストできます。
大規模プロジェクト(例:Bluesky スレッドビューア)や既存ツールの改修に利用しています。
変更は
simonw/tools リポジトリへ直接プルリクエストで反映されます。
3. CDN から依存ライブラリを読み込む
CDNjs、jsDelivr 等からライブラリを取得します。
LLM プラットフォームのアーティファクト/キャンバス機能は、ライブラリ名を言えば自動で CDN URL を生成してくれることが多いです。
うまくいかない場合は CDN で検索し、URL をコピー&ペーストします。
4. 別サーバにホストする
LLM ホステッドツールは厳しい sandbox 内で動き、外部データを読み込めず、プロモーションメッセージが表示されることもあります。
私は GitHub Pages にホストしています。
.html ファイルを simonw/tools にコピーすると数秒で公開できます。
5. コピー&ペーストを活かす
コピー&ペーストは最強の手段です。
- 内容 → 変換 → 再コピー
- モバイルフレンドリーにするため、「クリップボードへコピー」 ボタンを付ける
例:
- hacker‑news‑thread‑export – URL を貼り付けて LLM 用に凝縮したスレッドを取得
- paste‑rich‑text – ページからコピーして HTML としてペースト(モバイル対応)
- alt‑text‑extractor – 画像を貼り付けると alt テキストを抽出
6. デバッグツールを作る
何が可能かを知るのは鍵です。
| ツール | 内容 |
|---|---|
| clipboard‑viewer | 任意のクリップボード内容をすべて表示 |
| keyboard‑debug | 現在押されているキーと KeyCode を表示 |
| cors‑fetch | URL が CORS 経由でアクセス可能か確認 |
| exif | 画像の EXIF データを表示 |
7. URL に状態を持たせる
状態をそのまま URL に埋め込むことで、ツールは共有・ブックマークが簡単になります。
例:icon‑editor(24×24 アイコンエディタ)はデザインを URL に保持します。
8. localStorage を使って秘密情報や大きな状態を保存
localStorage はクライアント側でデータを保持し、サーバーに露出しません。
- word‑counter – タイピング中に自動保存
- render‑markdown – ブログ執筆時に便利(同じテクニック)
- haiku –
で API キーを取得し、prompt()
に保管。Claude Haiku を使ってウェブカメラ映像から俳句を書き出す。localStorage
9. CORS 対応 API を集める
CORS が許可されたエンドポイントは HTML ツールの金鉱です。
| API | 用途 |
|---|---|
| iNaturalist | 動物観測データ(写真付き)を取得 |
| PyPI | パッケージ情報を取得 |
| GitHub | 公開リポジトリ → raw.githubusercontent.com(CORS 対応) |
| Bluesky | さまざまな操作に利用 |
| Mastodon | CORS が寛容 |
| GitHub Gists | 状態を永続化するための Gist を作成 |
例:
- species‑observation‑map – iNaturalist の最近の観測を地図上に表示
- zip‑wheel‑explorer – Python wheel を取得し、ブラウザで解凍・閲覧
- github‑issue‑to‑markdown – Issue の詳細/コメントをコピー可能な Markdown に変換
- terminal‑to‑html – 必要に応じて Gist へ保存
- bluesky‑quote‑finder – Bluesky 投稿の引用を表示し、いいね数や時間でソート可
10. CORS 経由で LLM を呼び出す
OpenAI・Anthropic・Gemini は JSON API を CORS 経由で利用できますが、API キーは必須です。
localStorage にキーを保管します(手間はありますが安全)。
例:
- haiku – Claude API でウェブカメラ画像から俳句を生成
- openai‑audio‑output – OpenAI の GPT‑4o 音声 API で音声合成
- gemini‑bbox – Gemini 2.5 が複雑な画像マスクを返すことを示す
11. ファイルの読み込みは恐れずに
<input type="file"> でサーバーアップロード不要、JavaScript だけでファイル内容を読むことができます。
例:
- ocr – PDF.js + Tesseract.js を使ってブラウザ上で OCR。
- social‑media‑cropper – 画像を開く/貼り付けて Twitter(2:1)、LinkedIn(2:1)、Substack(1.4:1)などに合わせてトリミング。
- ffmpeg‑crop – 動画プレビューで領域をドラッグし、ローカルで ffmpeg コマンドをコピー。
12. ダウンロード可能なファイルも用意
多くのツールはサーバー不要でダウンロードファイルを生成します。
- svg‑render – SVG を PNG/JPEG に変換してダウンロード
- social‑media‑cropper – トリミングした画像をダウンロード
- open‑sauce‑2025 – .ics ファイル(スケジュール)を出力するアプリ(「Vibe」プロジェクト参照)
13. Pyodide でブラウザ上に Python を動かす
Pyodide は WebAssembly にコンパイルされ、CDN から読み込め、
micropip で追加パッケージを入れられます。
例:
- pyodide‑bar‑chart – Pandas + Matplotlib で棒グラフを描画
- numpy‑pyodide‑lab – インタラクティブな NumPy チュートリアル
- apsw‑query – APSW SQLite をブラウザ上で実行し、EXPLAIN QUERY プランを表示
14. WebAssembly がさらに可能性を広げる
WebAssembly はネイティブコードをブラウザで走らせます。
例:
- ocr – Tesseract.js(WebAssembly)
- sloccount – David Wheeler の SLOCCount をブラウザへ移植
- micropython –
で Python を実行@micropython/micropython‑webassembly‑pyscript
15. 既存ツールをリミックスする
公開コレクションがあると、LLM アシスタントはそれを再利用できます。
私はツールをコンテキストにコピーしたり、関連例を検索させてから作業します。
ソースコード自体がドキュメント・パターンになっています。
例:Claude Code に
pypi パッケージエクスプローラ ツールを見てください…
PyPI API を使い、wheel URL を一覧表示し、差分を作成して「コピー」ボタン付きの pypi‑changelog.html を作ってください。
完全なトランスクリプトはリポジトリのコロノンに掲載しています。
16. プロンプトとトランスクリプトを記録
ワークフローを文書化するため、以下を公開します。
- 直接チャット LLM 用:プラットフォームの share 機能で共有
- コーディングエージェント(Claude Code, Codex CLI)用:ターミナルトランスクリプトを
ツールに貼り付け、Gist で共有。terminal‑to‑html
リポジトリのコミットメッセージはこれらのトランスクリプトへリンクします。
ぜひ挑戦してみてください
過去一年半で LLM の可能性を探求し、この方法でツールを作ると HTML ツーリングと LLM の両方が深く理解できます。
自分だけのコレクションを始めたいなら、GitHub で無料リポジトリを作り、GitHub Pages を有効にしてください(設定 → Pages → ソース → デプロイ先ブランチ → main)。その後は好きなように
.html ファイルをコピーして公開できます。
ボーナス・トランスクリプト
Claude Code + shot‑scraper でこの投稿にスクリーンショットを追加しました。