導入方法
askai-button をサイトに入れる方法は4通りあります。ファイルを自分のサーバーに置いて script タグで読み込む方法、CDN から script タグで読み込む方法、npm パッケージを使う方法、WordPress プラグインを使う方法です。それぞれの手順と、動作の確認方法を説明します。
どの方法でも、動くものは同じです。サイトの作りに合うものを選んでください。
| 方法 | 向いている場合 |
|---|---|
| script タグ(ファイルを自分のサーバーに置く) | HTMLを直接編集できるサイト。ビルドの仕組みがなくても使えます。第三者への通信は発生しません。 |
| script タグ(CDN から読み込む) | すぐに試したい場合や、ファイルをアップロードできないサイト。訪問者のブラウザーが CDN からファイルを取得します。 |
| npm | JavaScript をバンドルしているサイトやWebアプリ。 |
| WordPress プラグイン | WordPress のサイト。管理画面で設定できます。 |
script タグで入れる
1. ファイルを自分のサイトに置く
askai-button.min.js をダウンロードして、自分のサイトのサーバーに置きます(22.1 KB、gzip 圧縮後は約 8.8 KB)。置き場所は自由です。ここでは /js/askai-button.min.js に置いたものとします。
このファイル1つに、ボタンの動作とCSSがすべて入っています。ほかに読み込むものはありません。
2. タグを1行追加する
ボタンを表示したいページに、次の1行を追加します。
<script src="/js/askai-button.min.js" data-askai></script>
data-askai を付けると、読み込んだ時点でボタンが表示されます。タグを書く場所は、<head> の中でも </body> の直前でも構いません。defer を付けても動きます。
そのまま動く最小の例
次のHTMLを保存し、同じフォルダーに askai-button.min.js を置くと動きます。
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>サンプルページ</title>
</head>
<body>
<h1>サンプルページ</h1>
<p>右下のボタンを押すと、質問の入力欄が開きます。</p>
<script src="askai-button.min.js" data-askai
data-site-url="https://example.com/"
data-presets="このサイトでは何ができますか?|料金を教えてください"></script>
</body>
</html>
data-site-url は、AIに渡すサイトのURLです。Webサーバーで公開しているページでは省略でき、そのときはサイトのトップ(https://あなたのドメイン/)が自動で使われます。この例では、ファイルを直接開いて試せるように指定しています。
よく使う属性
設定は data-* 属性で指定します。
| 属性 | 内容 | 例 |
|---|---|---|
data-presets | 質問の例。| で区切って6件まで。 | data-presets="料金は?|納期は?" |
data-site-url | AIに渡すサイトのURL。サイトがドメインの直下にない場合に指定します。 | data-site-url="https://example.com/shop/" |
data-providers | 表示するAIサービスと順序。, で区切ります。 | data-providers="chatgpt,claude" |
data-position | ボタンの位置。 | data-position="bottom-left" |
data-accent-color | ボタンの色。 | data-accent-color="#27455c" |
data-lang | 言語を固定する場合に指定します。通常は不要です。 | data-lang="en" |
すべての属性は「リファレンス」にあります。
JavaScript で設定する
文言の変更やAIサービスの追加など、属性では指定できない設定は、data-askai を付けずに読み込んで AskAIButton.init() を呼びます。
<script src="/js/askai-button.min.js"></script>
<script>
AskAIButton.init({
presets: ['このサイトでは何ができますか?', '料金を教えてください'],
providers: ['chatgpt', 'claude'],
labels: { buttonLabel: 'AIに聞いてみる' },
});
</script>
CDN から読み込む
npm に公開したバージョン(パッケージ名は @elephancube/askai-button)は、公開 CDN の jsDelivr と unpkg からも配信されます。ファイルをアップロードする必要はなく、次の1行だけで使えます。
<script src="https://cdn.jsdelivr.net/npm/@elephancube/askai-button@0.1.0/dist/askai-button.min.js" data-askai defer></script>
URLには、正確なバージョン(@0.1.0)が入っています。このようなURLで配信されるファイルの内容は、あとから変わりません。data-* 属性や AskAIButton.init() の使い方は、上の説明と同じです。
unpkg から読み込む場合は、次のとおりです。
<script src="https://unpkg.com/@elephancube/askai-button@0.1.0/dist/askai-button.min.js" data-askai defer></script>
自分のサーバーに置く場合との違い
- 訪問者のブラウザーが、CDN にファイルを取りに行きます。そのため、CDN の運営者(第三者)に、ブラウザーが通常のリクエストで送る情報(IPアドレスや、ページのリファラーの設定によってはサイトのURLなど)が伝わります。プライバシーポリシーを公開しているサイトでは、記載が必要かどうかを確認してください。
- ボタンの中身は同じファイルで、ボタン自体は何も送りません。質問の送信も、計測も、独自の通信もありません。
- CDN につながらないときは、ボタンが表示されません。ページのほかの部分には影響しません。
第三者への通信をまったく発生させたくない場合は、ファイルを自分のサーバーに置いてください。このWebサイトも、そうしています。
バージョンを固定する
公開中のサイトでは、バージョンを書かないURLや @latest を付けたURLを使わないでください。こうしたURLは、新しいバージョンが公開されるとすぐにそちらを配信するため、サイトの運営者が何もしなくても、ボタンの動作や見た目が変わることがあります。正確なバージョンを指定しておけば、更新する時期を自分で決められます。更新するときは、変更履歴を確認してから、URLのバージョン番号を書き換えます。
@0.1 のような範囲の指定(jsDelivr)も、その範囲の中で新しいバージョンに切り替わるので、同じ理由で避けてください。
Subresource Integrity(SRI)
integrity 属性を付けると、ファイルの内容が想定と少しでも違う場合に、ブラウザーがそのファイルを実行しなくなります。正確なバージョンを指定している場合にだけ意味があります。値はファイルごとに決まるため、このページには載せていません。値は次のコマンドで計算できます。
curl -s https://cdn.jsdelivr.net/npm/@elephancube/askai-button@0.1.0/dist/askai-button.min.js | openssl dgst -sha384 -binary | openssl base64 -A
出力された値を sha384- のあとに書き、crossorigin="anonymous" も付けます。
<script src="https://cdn.jsdelivr.net/npm/@elephancube/askai-button@0.1.0/dist/askai-button.min.js"
integrity="sha384-(コマンドで得た値)" crossorigin="anonymous"
data-askai defer></script>
Content Security Policy
Content Security Policy を設定しているサイトでは、script-src で CDN のホストを許可してください。jsDelivr は https://cdn.jsdelivr.net、unpkg は https://unpkg.com です。
npm で入れる
npm パッケージの名前は @elephancube/askai-button です。@elephancube スコープで公開しています。プロジェクト、リポジトリ、スクリプトファイルの名前は askai-button です。インストールや読み込みのときは、必ず @elephancube/ を付けた名前を指定してください。
npm install @elephancube/askai-button
import { init } from '@elephancube/askai-button';
init({
presets: ['このサイトでは何ができますか?', '料金を教えてください'],
});
- ES モジュールとして提供しています。TypeScript の型定義も入っています。
init()は、ブラウザーの中で一度だけ呼びます。サーバー側で読み込んでもエラーにはならず、何もしません。- もう一度
init()を呼ぶと、ボタンは新しい設定で作り直されます。取り除くときはdestroy()を呼びます。 - CommonJS 用のビルドはありません。
require()を使っているプロジェクトでは、バンドラー、新しいバージョンの Node.js、またはawait import('@elephancube/askai-button')を使ってください。 - パッケージの
dist/askai-button.min.jsは、script タグ用のファイルと同じものです。CDN が配信するのも、このファイルです。
React などのコンポーネントから使うときは、表示されたあとに一度だけ呼びます。
import { useEffect } from 'react';
import { init, destroy } from '@elephancube/askai-button';
export function AskAI() {
useEffect(() => {
init({ presets: ['料金を教えてください'] });
return () => destroy();
}, []);
return null;
}
オプションの一覧は「リファレンス」にあります。
WordPress プラグインで入れる
必要な環境は、WordPress 6.4 以上、PHP 7.4 以上です。
- GitHub の最新のリリースに添付されているプラグインの zip ファイルをダウンロードします。
- WordPress の管理画面で「プラグイン > 新規プラグインを追加 > プラグインのアップロード」を開き、zip ファイルを選んでインストールします。
- 「プラグイン」の一覧で「Elephancube Ask AI Button」を有効化します(リリース 0.1.0 の zip では、以前の名前「AskAI Button」、フォルダー
askai-buttonのままです)。 - サイトを開くと、公開ページの右下にボタンが表示されます。設定は「設定 > AIに質問」で変更できます。
有効化するだけで、標準の設定のまま使い始められます。設定画面の内容は「WordPress」のページで説明しています。
プラグインは GitHub で配布しています。WordPress.org のプラグインディレクトリには登録していません。
0.1.0 の zip から移行する
リリース 0.1.0 では、プラグインをフォルダー askai-button にインストールしていました。以降のバージョンのフォルダーは elephancube-ask-ai-button なので、WordPress は2つを別のプラグインとして扱います。どちらも同じ設定、同じページ別の値、同じ利用回数を使います。同時に動くのは片方だけです。古いほうが有効な間、新しいほうは動作せず、その旨を表示します。
古いほうを「プラグイン」の画面で削除すると、古いほうの後片付けが実行され、設定と利用回数が削除されます。新しいほうが使うものも消えます。残したい場合は、次の順番で作業してください。
- 「プラグイン」の画面で、古いほう(「AskAI Button」)を無効化します。そこでは削除しません。
- 新しいプラグインをインストールして有効化します。設定はそのまま引き継がれます。
- FTP またはサーバーのファイルマネージャーで、
wp-content/plugins/askai-buttonフォルダーを削除します。
古い設定が不要な場合は、先に古いほうを「プラグイン」の画面で削除し、新しいプラグインをインストールして設定し直してもかまいません。
ソースから zip を作る
リポジトリを取得して、次のコマンドを実行すると、dist-plugin/elephancube-ask-ai-button-0.1.0.zip ができます。Node.js が必要です。
git clone https://github.com/elephancube/askai-button.git
cd askai-button
npm install
npm run build
npm run zip:plugin
動作を確認する
- ページの右下に「AIに質問」ボタンが表示される(英語のページでは「Ask AI」)。
- ボタンを押すとパネルが開き、質問の入力欄にカーソルが入る。
- 質問を入力すると、いちばん下の送信ボタンが押せるようになる。
- 送信ボタンを押すと、選んだAIサービスが別のタブで開き、質問・定型文・サイトのURLが渡されている。
- 渡されたURLが、あなたのサイトのトップのURLになっている。
5 のURLが違う場合は、data-site-url(init() では siteUrl)で指定してください。サイトがドメインの直下ではなく、https://example.com/shop/ のような下の階層にあるときに必要です。
ボタンが表示されないとき
- ファイルのパスが正しいか(ブラウザーの開発者ツールで、
askai-button.min.jsが読み込まれているか)を確認します。CDN のURLを使っている場合は、URLのバージョン番号も確認します。存在しないバージョンを指定すると、ファイルは見つかりません。 - script タグに
data-askaiが付いているか、またはAskAIButton.init()を呼んでいるかを確認します。 - ページに
<meta name="askai" content="off">があると、ボタンは表示されません。 providersに、存在しないAIサービスのidだけを指定していないかを確認します。使えるAIサービスが1つもないと、ボタンは表示されません。- Content Security Policy を設定しているサイトでは、
script-srcでこのファイルの読み込みを許可してください。CDN から読み込む場合は、CDN のホストを許可します(「Content Security Policy」を参照)。
ファイルを直接開いて試すとき(file://)
HTMLファイルをダブルクリックして開いた場合(アドレスが file:// で始まる場合)も、ボタンは表示されます。ただし、パソコンの中のファイルの場所はAIに渡しても意味がないため、URLは渡しません。文面は定型文で終わり、URLの部分は空になります。
URLが渡ることを確認するには、次のどちらかを行ってください。
data-site-url="https://example.com/"のように、サイトのURLを指定する。- 手元のWebサーバーで配信して、
http://localhost:8000/のようなアドレスで開く。
localhost や社内のステージング環境のURLは、AIサービスからは読めません。開発中は、文面とURLが正しく渡っていることだけを確認し、AIがサイトの内容に基づいて答えるかどうかは、公開後に確認してください。