0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Manifest V3のセットアップが面倒すぎて、自然言語で拡張機能を生成するツールを作った

0
Posted at

きっかけ

ブラウザ拡張機能を作ろうと思い立つたびに、セットアップの段階で手が止まっていました。

manifest.jsonの構成、permissionsの選定、Service Workerの仕組み…。作りたいものは頭の中にあるのに、Manifest V3の仕様を調べるだけで時間が消えていく。しかもネットで見つかるサンプルはV2時代のものが混在していて、そのまま動かないことが多い。

「やりたいことを自然言語で説明したら、そのまま動く拡張機能が出てきたらいいのに」。そう思って作ったのが NuModeX Ext Maker です。

何ができるか

ブラウザ拡張機能の中でチャットUIが開いて、自然言語で欲しい拡張機能を説明すると、Manifest V3準拠のファイル一式がZIPで出てきます。

例えば「現在のページのタイトルとURLをMarkdown形式でコピーするボタンが欲しい」と書くと、manifest.json、popup.html、popup.js、アイコンまで含めたZIPが生成されます。そのままChromeのchrome://extensionsでロードすれば動く。

numodex-ext-maker-extension-builder-ja.png

もともとは拡張機能を楽に作りたいという動機で始めましたが、開発の途中でブラウザ拡張機能と静的Webサイトの構造に共通点が多いことに気づいて、静的サイトの生成機能も追加しました。

生成されたコードはそのまま使うこともできるし、エディタで直接編集することもできます。AIに任せっきりではなく、自分でコードを触りたい人にも対応しています。サンドボックス上のライブプレビューで、変更を即座に確認しながら作業できます。

numodex-ext-maker-live-preview.png

バックエンドを持たないという判断

一番最初に決めたのは「バックエンドサーバーを運用しない」ということでした。

理由は2つあって、1つは単純にサーバー代を払いたくなかった。もう1つは、ユーザーのプロンプトやAPIキーを預かりたくなかった。預かった瞬間にプライバシーポリシーの責任範囲が一気に広がるし、漏洩リスクも自分が背負うことになる。

なので、全部ブラウザの中で完結する設計にしました。

ユーザーのブラウザ → AIプロバイダー(ユーザー自身のAPIキー)
         ↓
   生成されたコード → ブラウザのローカルストレージ

SoraVantia GK(開発元)はこのデータパスの中に一切いません。アカウント登録もなし、ログインもなし。インストールしてAPIキーを入れたらすぐ使えます。

正直、この設計にはデメリットもあります。ユーザーの利用状況が全く見えないので、どの機能が使われているか、どこで詰まっているかがわからない。改善のフィードバックは完全にユーザーからの自発的な連絡頼みです。

AIプロバイダーを1つに絞らなかった理由

最初は1つのプロバイダーだけ対応すればいいかなと思っていました。でも実際に使ってみると、モデルによって得意不得意があって、使い分けたいという声がある。ユーザーによって手持ちのAPIキーも違う。

結局、以下に対応しました:

  • Google Gemini
  • OpenAI GPT
  • Anthropic Claude
  • OpenAI互換APIなら何でも
  • オンデバイスAI

OpenAI互換APIに対応したことで、ローカルで動くLLMをつなげることも可能になりました。

マルチブラウザ対応で地味にハマったこと

Chrome、Edge、Firefox、Opera、Whale、Safariに対応しています。

ManifestV3自体はChromium系ブラウザ間ではほぼ共通なので、Chrome/Edge/Opera/Whaleはそこまで問題ない。面倒だったのはFirefoxです。

FirefoxのManifest V3サポートは微妙に挙動が違うところがあって、特にbrowser_specific_settingsの扱いとか、一部のAPIの有無とか。このあたりの差異をAIの出力段階で吸収するのは結構苦労しました。

Safariはさらに別世界で、これは現在も対応作業中です。

Import from ZIPを後から追加した話

最初は「ゼロから生成する」機能だけだったんですが、使っているうちに「既存の拡張機能をAIで修正したい」という場面が出てきました。

自分で生成したものを微調整したいとか、他のプロジェクトを読み込んでリファクタリングしたいとか。それでZIPインポート機能を追加して、既存プロジェクトに対してAIで編集できるようにしました。

これは後から足した機能ですが、今では一番便利に使っています。ゼロから作るより、既存のコードを改善するほうが実用的な場面の方が多い。

9言語対応

UIは日本語、英語、スペイン語、フランス語、韓国語、中国語、ドイツ語、ポルトガル語、イタリア語に対応しています。

なぜ9言語かというと、ブラウザ拡張機能のストアはグローバルなので、英語だけだと機会損失が大きいと感じたからです。ブラウザの言語設定を検出して自動切り替えしますが、UI内で手動で言語を切り替えることもできます。

ライセンス

Business Source License 1.1を採用しました。

個人利用・社内利用は無料。ソースコードはGitHubで全部見れます。ただし、NuModeX Ext Maker自体を別のストアに出すのはNGです。2030年3月にApache 2.0に自動移行します。

「ソースは見れるけど、フォークしてそのままストアに出すのはダメ」という形です。ユーザーが生成した拡張機能は当然ユーザーのものなので、商用利用含めて自由にできます。

試してみたい方へ

APIキーがあればすぐに使えます。

ブラウザ リンク
Chrome Chrome Web Store
Firefox Firefox Add-ons
Edge Edge Add-ons
Whale Whale Store

ソースコード: github.com/soravantia/numodex-ext-maker
製品ページ: numodex.com/numodexextmaker

バグ報告や改善提案はGitHubのIssueか numodex@soravantia.com まで。

開発元: SoraVantia合同会社

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?