TechTalk demos

D1 FTS5 日本語全文検索
Code

Cloudflare D1 FTS5 日本語全文検索

SQLite FTS5 仮想テーブル + Intl.Segmenter によるトークン化で日本語全文検索を実現するデモです。

20(2070ms)

WebAssembly で高速メモリ管理

WebAssembly の線形メモリモデルを活用した高速なメモリ管理手法を解説します。Rust や C++ から Wasm へのコンパイル時に、メモリアロケータの選択がパフォーマンスに大きく影響します。

SQLite の全文検索 FTS5 入門

SQLite の FTS5 モジュールは高速な全文検索を提供します。仮想テーブルとして作成され、MATCH 演算子でクエリを実行します。BM25 ランキングにより関連性の高い結果を返すことができ、プレフィックスクエリやフレーズ検索にも対応しています。

フロントエンド開発のベストプラクティス 2026年版

フロントエンド開発においてベストプラクティスを守ることは重要です。パフォーマンス最適化、アクセシビリティ対応、セキュリティ対策など、多岐にわたる観点を総合的に考慮する必要があります。

推し活エンジニアの技術スタック

推し活に全力を注ぐエンジニアが、推しの配信スケジュール管理アプリを個人開発した話。React Native と Supabase で爆速開発しました。

Web API インターフェース設計の原則

RESTful なインターフェース設計では、リソース指向のURL設計とHTTPメソッドの適切な使い分けが重要です。OpenAPI仕様に準拠したドキュメント生成やバリデーションの自動化により、開発効率が大幅に向上します。

CSS カスタムプロパティ活用ガイド

CSS カスタムプロパティ(CSS変数)を活用することで、テーマの切り替えやレスポンシブデザインの管理が容易になります。JavaScript からプロパティを動的に変更することも可能です。

React Server Components の仕組み

React Server Components はサーバー側でレンダリングされるコンポーネントです。クライアントに JavaScript を送信せず、HTML として結果を返します。データベースへの直接アクセスやファイルシステムの読み取りが可能で、バンドルサイズの削減に貢献します。

Cloudflare Workers で始めるエッジコンピューティング

Cloudflare Workers はエッジで動作するサーバーレスプラットフォームです。V8 エンジン上で JavaScript や TypeScript を実行でき、世界中のデータセンターでコードが実行されるため低レイテンシを実現します。D1 データベースや R2 ストレージとの連携も強力です。

TypeScript の型システムを活用した堅牢な設計

TypeScript の型システムは単なるエラー検出を超え、ドメインモデルの表現や API の契約として機能します。Discriminated Union やテンプレートリテラル型、条件型を組み合わせることで、実行時エラーをコンパイル時に防ぐことができます。

Tailwind CSS v4 の新機能まとめ

Tailwind CSS v4 では CSS ベースの設定が導入され、tailwind.config.js が不要になりました。新しい Oxide エンジンにより、ビルド速度が大幅に向上。CSS カスタムプロパティとの統合が強化され、より柔軟なテーマ設定が可能です。

推し活エンジニアの技術スタック

推し活に全力を注ぐエンジニアが、推しの配信スケジュール管理アプリを個人開発した話。React Native と Supabase で爆速開発しました。

Web API インターフェース設計の原則

RESTful なインターフェース設計では、リソース指向のURL設計とHTTPメソッドの適切な使い分けが重要です。OpenAPI仕様に準拠したドキュメント生成やバリデーションの自動化により、開発効率が大幅に向上します。

CSS カスタムプロパティ活用ガイド

CSS カスタムプロパティ(CSS変数)を活用することで、テーマの切り替えやレスポンシブデザインの管理が容易になります。JavaScript からプロパティを動的に変更することも可能です。

WebAssembly で高速メモリ管理

WebAssembly の線形メモリモデルを活用した高速なメモリ管理手法を解説します。Rust や C++ から Wasm へのコンパイル時に、メモリアロケータの選択がパフォーマンスに大きく影響します。

React Server Components の仕組み

React Server Components はサーバー側でレンダリングされるコンポーネントです。クライアントに JavaScript を送信せず、HTML として結果を返します。データベースへの直接アクセスやファイルシステムの読み取りが可能で、バンドルサイズの削減に貢献します。

Cloudflare Workers で始めるエッジコンピューティング

Cloudflare Workers はエッジで動作するサーバーレスプラットフォームです。V8 エンジン上で JavaScript や TypeScript を実行でき、世界中のデータセンターでコードが実行されるため低レイテンシを実現します。D1 データベースや R2 ストレージとの連携も強力です。

TypeScript の型システムを活用した堅牢な設計

TypeScript の型システムは単なるエラー検出を超え、ドメインモデルの表現や API の契約として機能します。Discriminated Union やテンプレートリテラル型、条件型を組み合わせることで、実行時エラーをコンパイル時に防ぐことができます。

Tailwind CSS v4 の新機能まとめ

Tailwind CSS v4 では CSS ベースの設定が導入され、tailwind.config.js が不要になりました。新しい Oxide エンジンにより、ビルド速度が大幅に向上。CSS カスタムプロパティとの統合が強化され、より柔軟なテーマ設定が可能です。

SQLite の全文検索 FTS5 入門

SQLite の FTS5 モジュールは高速な全文検索を提供します。仮想テーブルとして作成され、MATCH 演算子でクエリを実行します。BM25 ランキングにより関連性の高い結果を返すことができ、プレフィックスクエリやフレーズ検索にも対応しています。

SQLite の全文検索 FTS5 入門

SQLite の FTS5 モジュールは高速な全文検索を提供します。仮想テーブルとして作成され、MATCH 演算子でクエリを実行します。BM25 ランキングにより関連性の高い結果を返すことができ、プレフィックスクエリやフレーズ検索にも対応しています。

検索してみよう

Intl.Segmenter のトークン分割は格納時と検索時で同じ結果になるため、複合語が分割されても検索は成功します。しかし、カタカナの長音(ー)の有無など表記揺れがあると、トークンが一致せず検索に失敗します。


コンテンツを追加

サンプルデータ

テック系ブログ風のサンプルデータを一括登録します(10件)。


仕組みとスケーラビリティ

アーキテクチャ

  • fts_contents テーブルに原文を保存
  • fts_index (FTS5 仮想テーブル) に Intl.Segmenter でトークン化したテキストを保存
  • 登録時: 原文 → Intl.Segmenter でトークン分割 → FTS5 に格納
  • 検索時: クエリをトークン化 → FTS5 MATCH → rowid で原文を JOIN

スケーラビリティ目安

記事サイズD1 10GB での件数
短文 (150字)約 1,300万件
ブログ記事 (3,000字)約 50〜70万件
長文 (10,000字)約 15〜20万件

D1 コスト (Workers Paid $5/月〜)

  • Storage: 5GB 無料、超過分 $0.75/GB-月
  • Rows read: 250億/月 無料、超過分 $0.001/100万行
  • Rows written: 5,000万/月 無料、超過分 $1.00/100万行
  • 10GB フル利用でも月額 約 $8.75 程度

制限事項

  • カタカナの長音(ー)の有無など表記揺れには対応できない(正規化の前処理が必要)
  • D1 の 1行あたり最大サイズは 1MB
  • Intl.Segmenter のトークン化精度はランタイム (V8) の辞書に依存