FastComments.com

ドキュメント、書籍などにインラインのライブコメントを追加する

FastComments Collab Chat により、ユーザーはウェブサイト上の任意のテキストをハイライトして注釈を付けることができ、特定のテキスト選択に紐づいたスレッド形式の議論を作成できます。ユーザーは単語、文、または段落全体を選択して、コンテンツ内で直接協働的な会話を開始できます。

この機能は、編集上のフィードバック、協働読書環境、教育プラットフォーム、ドキュメントレビュー、特定のテキストに紐づいた文脈的な議論を行いたいあらゆるシナリオに最適です。

これらのドキュメントは Collab Chat 機能に特化していることに注意してください。ページ数の多いコンテンツ(Books など)に対しては、collab chat を使用せずに ページごとにスレッドを追加することができます。FastComments はページごとやスレッドごとに課金しません。Collab Chat は、ユーザーがテキストを選択してハイライト部分にコメントできるようにしたい場合に特に用いられます。

例はこちら.

Internal Link

基本例

Collab Chat を使う最も簡単な方法は、単一のコンテンツコンテナをターゲットにすることです。以下の例は記事でテキスト注釈を有効にする方法を示しています:

基本的な Collab Chat の例
Copy CopyRun External Link
1
2<!DOCTYPE html>
3<html>
4<head>
5 <title>My Article with Collab Chat</title>
6</head>
7<body>
8 <div id="article-content" style="min-height: 500px">
9 <h1>My Article Title</h1>
10 <p>This is a paragraph that users can annotate. Simply highlight any text to start a discussion!</p>
11 <p>You can have multiple paragraphs, and users can highlight text across any of them.</p>
12 </div>
13
14 <script src="https://cdn.fastcomments.com/js/embed-collab-chat.min.js"></script>
15 <script>
16 FastCommentsCollabChat(document.getElementById('article-content'), {
17 tenantId: 'demo'
18 });
19 </script>
20</body>
21</html>
22

カスタム URL ID の例(書籍のページ、記事など)

デフォルトでは、Collab Chat はページの URL と要素のパスおよびテキスト範囲を組み合わせて会話を識別します。会話のグループ化をより細かく制御するには、カスタムの urlId を指定できます:

カスタム URL ID を使用した Collab Chat
Copy Copy
1
2<script src="https://cdn.fastcomments.com/js/embed-collab-chat.min.js"></script>
3<script>
4 FastCommentsCollabChat(document.getElementById('article-content'), {
5 tenantId: 'demo',
6 urlId: 'book-one-page-2'
7 });
8</script>
9

URL 構造が変更されても同じ会話を維持したい場合、または複数のページで同じ会話注釈を共有したい場合に便利です。

ダークモードの例

サイトがダークな背景を使用している場合は、チャット UI が正しく表示されるようにダークモードサポートを有効にしてください:

ダークモードの Collab Chat
Copy CopyRun External Link
1
2<!DOCTYPE html>
3<html>
4<head>
5 <title>My Article with Collab Chat - Dark Mode</title>
6 <style>
7 body {
8 background-color: #1a1a1a !important;
9 color: #e0e0e0 !important;
10 font-family: system-ui, -apple-system, sans-serif;
11 padding: 20px;
12 margin: 0;
13 }
14 #article-content {
15 max-width: 800px;
16 margin: 0 auto;
17 background-color: #2d2d2d;
18 padding: 20px;
19 border-radius: 8px;
20 }
21 h1 {
22 color: #ffffff !important;
23 }
24 p {
25 color: #e0e0e0 !important;
26 line-height: 1.6;
27 }
28 .fastcomments-collab-chat-top-bar {
29 background-color: #2d2d2d !important;
30 color: #e0e0e0 !important;
31 border-bottom: 1px solid #444 !important;
32 }
33 </style>
34</head>
35<body>
36 <div id="article-content" style="min-height: 500px">
37 <h1>My Article Title</h1>
38 <p>This is a paragraph that users can annotate. Simply highlight any text to start a discussion!</p>
39 <p>You can have multiple paragraphs, and users can highlight text across any of them.</p>
40 </div>
41
42 <script src="https://cdn.fastcomments.com/js/embed-collab-chat.min.js"></script>
43 <script>
44 FastCommentsCollabChat(document.getElementById('article-content'), {
45 tenantId: 'demo',
46 hasDarkBackground: true
47 });
48 </script>
49</body>
50</html>
51

トップバーを無効にした例

デフォルトでは、Collab Chat はユーザー数とディスカッション数を表示するトップバーを表示します。これを無効にできます:

トップバーを無効にした Collab Chat
Copy CopyRun External Link
1
2<!DOCTYPE html>
3<html>
4<head>
5 <title>My Article with Collab Chat - No Top Bar</title>
6</head>
7<body>
8 <div id="article-content" style="min-height: 500px">
9 <h1>My Article Title</h1>
10 <p>This is a paragraph that users can annotate. Simply highlight any text to start a discussion!</p>
11 <p>You can have multiple paragraphs, and users can highlight text across any of them.</p>
12 </div>
13
14 <script src="https://cdn.fastcomments.com/js/embed-collab-chat.min.js"></script>
15 <script>
16 FastCommentsCollabChat(document.getElementById('article-content'), {
17 tenantId: 'demo',
18 topBarTarget: null
19 });
20 </script>
21</body>
22</html>
23

コメント数コールバックの例

コメントが追加または更新されたときに commentCountUpdated コールバックで追跡できます:

コメント数コールバックの Collab Chat
Copy Copy
1
2<script src="https://cdn.fastcomments.com/js/embed-collab-chat.min.js"></script>
3<script>
4 FastCommentsCollabChat(document.getElementById('article-content'), {
5 tenantId: 'demo',
6 commentCountUpdated: function(count) {
7 console.log('Total comments:', count);
8 document.getElementById('comment-badge').textContent = count;
9 }
10 });
11</script>
12

複数セクションの例

ページの複数の別々のセクションで Collab Chat を初期化できます。各セクションは独立した注釈を持ちます:

複数セクションでの Collab Chat
Copy Copy
1
2<div id="intro-section">
3 <h2>Introduction</h2>
4 <p>Content for the introduction...</p>
5</div>
6
7<div id="main-section">
8 <h2>Main Content</h2>
9 <p>Content for the main article...</p>
10</div>
11
12<script src="https://cdn.fastcomments.com/js/embed-collab-chat.min.js"></script>
13<script>
14 // intro セクションを初期化
15 FastCommentsCollabChat(document.getElementById('intro-section'), {
16 tenantId: 'demo',
17 urlId: 'my-article-intro'
18 });
19
20 // main セクションを初期化
21 FastCommentsCollabChat(document.getElementById('main-section'), {
22 tenantId: 'demo',
23 urlId: 'my-article-main'
24 });
25</script>
26

オンライン書籍にライブコメントを追加する Internal Link

必要に応じてページごとに Collab Chat を初期化し、ページごとに別々のスレッドを持たせることができ、urlId パラメータ に book-one-page1 のような値を渡してください。この構成は通常のコメントウィジェットにも有効です。

テキスト選択の動作 Internal Link


テキスト選択の仕組み

ユーザーが Collab Chat コンテナ内でテキストを選択すると、ウィジェットはその選択を取得し、ディスカッションを開始できるようにします。選択は単語1つほどの小さなものから、複数の要素にまたがる段落全体のような大きなものまで可能です。

選択遅延

デスクトップでは、ユーザーがテキストを選択してからディスカッションのプロンプトが表示されるまでに3.5秒の遅延があります。これは、ユーザーがテキストをコピーしたり読むためにハイライトするだけの場合に UI がチラつくのを防ぎます。モバイルでは、タッチスクリーンでのテキスト選択がより意図的であるため、プロンプトはすぐに表示されます。

一意の会話ID

各会話にはページのURL、DOM要素のパス、シリアライズされたテキスト範囲を組み合わせた一意の urlId が割り当てられます。これにより、各テキスト選択が後で再び見つけられる別個の会話を作成します。

設定でカスタムの urlId を指定した場合、それは要素パスとテキスト範囲と組み合わされて最終的な識別子が作成されます。

視覚的ハイライト

特定のテキスト選択に対してディスカッションが存在する場合、そのテキストは視覚的にハイライトされます。ハイライトは背景色を使って実装され、ホバー時または関連するチャットウィンドウが開いているときに表示されます。

ハイライトの仕組みは、選択したテキストをスタイル可能な特別な要素でラップすることで機能します。この方法により、基盤となるHTML構造が複雑な場合でもハイライトが正確に保持されます。

チャットウィンドウの位置決め

ユーザーがハイライトをクリックするか新しい注釈を作成すると、選択したテキストの近くにチャットウィンドウが表示されます。ウィジェットは利用可能なビューポートの空間に基づいて、このウィンドウの最適な位置を自動的に計算します。

位置決めシステムは、チャットウィンドウがハイライトからどの方向に伸びるべきかを示すために to-rightto-leftto-topto-bottom のような CSS クラスを使用します。モバイルデバイス(幅768px未満の画面では)では、ユーザビリティ向上のためチャットウィンドウは常に全画面表示になります。

チャットウィンドウの寸法

チャットウィンドウはデスクトップで幅410px、間隔20px、ハイライトしたテキストを指す16pxの視覚的な矢印があります。これらの寸法は一貫した動作を確保するために固定されていますが、CSSで外観をカスタマイズできます。

複数要素にまたがる選択

ユーザーは、ある段落の途中から別の段落の先頭までのように、複数のHTML要素にまたがるテキストを選択できます。範囲のシリアライズシステムはこれを正しく処理し、要素の境界を超えて選択されたすべてのテキストをハイライトします。

ブラウザ互換性

テキスト選択システムは標準の window.getSelection() API を使用しており、すべてのモダンブラウザでサポートされています。古いバージョンの Internet Explorer では互換性のために document.selection にフォールバックします。

選択の永続性

テキスト選択に対して会話が作成されると、その注釈はページをリロードしても持続します。シリアライズされた範囲とDOMパスにより、ユーザーがページに戻ったときにウィジェットはハイライトを同じ位置に復元できます。

これはページのコンテンツが安定している限り信頼して動作します。テキスト内容を変更したりHTMLを再構成した場合、既存の注釈がテキストと正しく一致しなくなる可能性があります。そのため、アクティブな注釈があるページでは大幅なコンテンツ変更を避けるか、必要な場合は注釈を移行することを検討してください。


カスタマイズ Internal Link

ダークモード対応

動的ダークモード

サイトのダークモードが body 要素に .dark クラスを追加して制御されている場合、Collab Chat UI は再初期化を必要とせずにこれを自動的に反映します。ウィジェットのスタイルは、このクラスの有無に応じて応答するように設計されています。

ダークモードのCSS例
Copy Copy
1
2/* ダークモード用のCSS */
3body.dark {
4 background: #1a1a1a;
5 color: #ffffff;
6}
7

CSSによるカスタムスタイル

ハイライト、チャットウィンドウ、その他の要素の外観は CSS でカスタマイズできます。ウィジェットはスタイルシートでターゲットにできる特定のクラスを追加します。

テキストハイライトは FastComments のコメントバブルスタイリングシステムを使用しているため、標準のコメントウィジェットに適用したカスタマイズは Collab Chat にも影響します。

トップバーのカスタマイズ

トップバーにはオンラインのユーザー数とディスカッション数が表示されます。topBarTarget としてカスタム要素を指定することで位置をカスタマイズできます:

カスタムトップバーの位置
Copy Copy
1
2FastCommentsCollabChat(element, {
3 tenantId: 'demo',
4 topBarTarget: document.getElementById('my-custom-header')
5});
6

または null に設定して完全に無効化することもできます:

トップバーを無効化
Copy Copy
1
2FastCommentsCollabChat(element, {
3 tenantId: 'demo',
4 topBarTarget: null
5});
6

モバイルでの挙動

幅が 768px 未満の画面では、Collab Chat は自動的にモバイル最適化レイアウトに切り替わります。チャットウィンドウはテキストの横に浮かぶ代わりにフルスクリーンで表示され、選択の遅延がなくなり、より即時の操作が可能になります。

この挙動は組み込みで、設定は不要です。ウィジェットは画面サイズを自動的に検出して調整します。

チャットウィンドウの外観

チャットウィンドウはデスクトップで幅が 410px、ハイライトされたテキストを指す 16px の矢印があります。ウィンドウは利用可能なビューポート空間に基づいて自動的に位置決めされ、to-rightto-leftto-topto-bottom のようなポジショニングクラスを使用します。

これらのウィンドウの色、フォント、間隔、その他の視覚的プロパティを調整するためにカスタム CSS を追加できます。チャットウィンドウは標準の FastComments ウィジェットと同じコンポーネント構造を使用しているため、適用したグローバルなカスタマイズを継承します。

ローカリゼーション

Collab Chat は標準の FastComments ウィジェットと同じローカリゼーションオプションをすべてサポートします。UI テキストを別の言語で表示するには locale オプションを設定してください:

ロケールを設定
Copy Copy
1
2FastCommentsCollabChat(element, {
3 tenantId: 'demo',
4 locale: 'es' // スペイン語
5});
6

FastComments は数十の言語をサポートしています。ロケール設定はプロンプト、ボタン、プレースホルダーテキストなど、すべての UI テキストに影響します。

継承されるカスタマイズオプション

Collab Chat は標準のコメントウィジェットを拡張しているため、ベースウィジェットからすべてのカスタマイズオプションを継承します。これにはカスタム CSS クラス、カスタム翻訳、アバターのカスタマイズ、日付のフォーマットなど、多くの項目が含まれます。

利用可能なカスタマイズオプションの完全な一覧については、メインの FastComments カスタマイズドキュメントを参照してください。

カスタムフォントの利用

サイトがカスタムフォントを使用している場合、Collab Chat UI はページの CSS からそれらのフォントを継承します。フローティングチャットウィンドウにも同じフォントを使用させたい場合は、ウィジェットカスタマイズルールを作成し、そのルール内のカスタム CSS で @import によってフォントを読み込む必要があるかもしれません。

ライブ同期 Internal Link

リアルタイム更新

Collab Chat は WebSocket 接続を使用して、接続されているすべてのユーザー間で会話をリアルタイムに同期します。誰かが新しい注釈を作成したり、コメントを追加したり、ディスカッションを削除したりすると、同じページを表示している他のユーザーはページを再読み込みすることなく即座にその更新を確認できます。

WebSocket 同期の仕組み

Collab Chat を初期化すると、ウィジェットは FastComments サーバーへの WebSocket 接続を確立します。この接続はユーザーのセッションの間開いたままになり、現在のページに関連する更新を監視します。

WebSocket システムは Collab Chat 用に3種類のブロードキャストメッセージを使用します。new-text-chat イベントは誰かがページ上に新しい注釈を作成したときに発生します。updated-text-chat イベントは誰かが既存の会話を更新したときに発生します。deleted-text-chat イベントは誰かが注釈を削除したときに発生します。

ブロードキャストIDシステム

ユーザーが自分の操作が自身にブロードキャストされて戻ってくることで発生するエコー効果を防ぐため、各更新には一意の broadcastId が含まれます。ユーザーが注釈を作成または更新する際、クライアントはその操作のための UUID を生成します。WebSocket が更新をすべてのクライアントにブロードキャストするとき、発信元のクライアントは自分自身の broadcastId と一致するためその更新を無視します。

これにより、ユーザーはサーバーを経由する往復を待つことなく UI 上で自分の変更を即座に確認でき、同時に他のすべてのユーザーにも更新が届くことが保証されます。

ライブユーザー数

トップバーには現在そのページを閲覧しているユーザー数が表示されます。このカウントはユーザーの参加や離脱に応じてリアルタイムに更新されます。ユーザー数は同じ WebSocket 接続を通じて提供され、接続および切断イベントに基づいて自動的に増減します。

接続の回復性

ネットワークの問題やサーバーメンテナンスにより WebSocket 接続が切断された場合、ウィジェットは自動的に再接続を試みます。再接続の期間中でもユーザーは既存の注釈とやり取りできますが、接続が再確立されるまでは他のユーザーからのリアルタイム更新は表示されません。

再接続が完了すると、ウィジェットは見逃した更新がないか再同期します。これはユーザーの介入を必要とせず透過的に行われます。

帯域幅に関する考慮

WebSocket メッセージは軽量で、状態を同期するために必要な最小限の情報のみを含みます。新しい注釈の作成は通常 1KB 未満の帯域幅を使用します。システムには高いアクティビティ期間中にメッセージ頻度を減らすためのインテリジェントなバッチ処理も含まれています。

FastComments ダッシュボードの使用状況メトリクスは pubSubMessageCountpubSubBandwidth を追跡しており、サイト全体のリアルタイム同期アクティビティを監視できます。

タブ間同期

ユーザーが同じページを複数のブラウザタブで開いている場合、あるタブでの更新は他のタブにも即座に反映されます。これは同じ WebSocket 同期メカニズムを通じて動作し、追加の設定は不要です。

セキュリティ

WebSocket メッセージはセキュアな接続(WSS)で送信され、テナント検証が含まれているため、ユーザーが許可されている会話の更新のみを受け取ることが保証されます。サーバーはすべての操作をブロードキャストする前に検証し、不正なアクセスや改ざんを防ぎます。

ご質問はありますか?

FastComments Collab Chat の説明は以上です!ご質問や実装のサポートが必要な場合、または機能のご提案がある場合は、以下でお知らせいただくか、サポートチームまでお問い合わせください。

実際の活用例については、Collab Chat を本番環境で使用している Govscent.org をご覧ください。