Datasette Apps:Datasette 内でカスタム HTML アプリケーションをホストする
Datasette Apps は、ユーザーが Datasette インスタンス内で厳格にサンドボックス化された iframe 内で自己完結型の HTML+JavaScript アプリケーションを実行できる新しいプラグインです。これらのアプリは読み取り専用の SQL クエリを実行でき、ストアドクエリを使用すれば書き込み操作も可能です。このプラグインは iframe の sandbox 属性とコンテンツセキュリティポリシー(CSP)を利用してセキュリティを確保し、postMessage や MessageChannel を使用してロックダウンされた API を提供し、コピー可能なプロンプトによる AI 支援アプリ生成をサポートします。記事では、CSP 許可リストを悪用したデータ漏洩の脆弱性の修正、可視ログ、および Datasette をよりリッチなツールエコシステムへと進化させるビジョンについても議論されています。
Datasette は、Datasette Apps という新しいプラグインを発表しました。これにより、ユーザーは Datasette インスタンス内で、厳格に制限された iframe サンドボックス内で自己完結型の HTML+JavaScript アプリケーションを実行できます。これらのアプリは親ページの DOM、cookie、localStorage にアクセスできず、コンテンツセキュリティポリシー(CSP)ヘッダーが注入されるため、外部ホストへの HTTP リクエストもブロックされ、悪意のあるアプリやバグのあるアプリによるプライベートデータの漏洩を防ぎます。
このプラグインの核となるのは、Datasette の機能を安全に拡張する方法を提供することです。アプリは JavaScript を使用して Datasette 内のデータベースに対して読み取り専用の SQL クエリを実行でき、ストアドクエリを設定すれば書き込み操作も可能です。当初、この機能は Datasette Agent 用の Claude Artifacts 的な仕組みとして開発されましたが、サンドボックスパターンがインターフェースにカスタムアプリを追加する以上の価値があると気づき、Datasette エコシステム内のトップレベルの概念に昇格されました。
技術的には、Datasette Apps は iframe sandbox="allow-scripts" と CSP の巧妙な組み合わせを利用しています。開発者は、HTML ページの先頭に <meta http-equiv="Content-Security-Policy"> ヘッダーを置くことで iframe の機能をさらに制限できることを発見し、悪意のある JavaScript がそのヘッダーを変更または削除できないことも確認しました。ロックダウンされたフレーム内で制御された操作を可能にするために、まず postMessage() を使用したシンプルなプロトコルを実装し、その後セキュリティを高めるために MessageChannel() に移行しました。MessageChannel() は、ページが他の場所に移動するとチャネルが自動的に閉じるため、信頼できない外部ページからのコマンド実行を防ぎます。
また、Datasette Apps にはクエリとエラーの可視ログ機能が含まれており、デバッグに役立ちます。書き込み操作については、Datasette のストアドクエリ機能(Datasette 1.0a31 で大幅にアップグレード)を活用し、ユーザーが特定の書き込みクエリを作成し、それを特定のアプリにのみ許可することでリスクを低減します。
特筆すべき点として、アプリ作成フォームの末尾には、選択したデータベースのスキーマを含むすべての必要な情報が含まれたコピー可能なプロンプトが用意されています。ユーザーはこのプロンプトを ChatGPT、Claude、Gemini などの AI ツールに貼り付け、アプリの HTML コードを生成させることができます。Datasette Agent がインストールされている場合、AI アシスタントはアプリの作成や編集も直接行えます。
開発プロセスでは AI 支援が重要な役割を果たしました。最初のプロトタイプは Claude Opus 4.6 で構築され、その後 GPT-5.5 がアーキテクチャ設計を支援し、Claude Fable 5 がセキュリティ評価を実施して深刻な脆弱性を発見しました。その脆弱性とは、低権限ユーザーがアプリを作成し、CSP 許可リストを利用して管理者を誘導し、そのデータを盗み出すというものでした。この問題は、apps-set-csp 権限とサイトレベルの allowed_csp_origins 設定を導入することで修正されました。
全体として、Datasette Apps は Datasette を読み取り専用のデータサービスからよりリッチなツールエコシステムへと進化させるマイルストーンです。Datasette のデータジャーナリズムのルーツを引き継ぎ、カスタムインターフェースやビジュアライゼーションを通じて、データに隠されたストーリーを引き出す手助けをします。