FastComments.com

FastComments Image Chat は、ユーザーが画像上の任意の場所をクリックして議論のポイントを作成できるようにすることで、画像上でのインタラクティブなディスカッションを可能にします。ユーザーは画像の特定の部分をクリックしてその箇所について会話を始めることができ、ディスカッションの位置を示す視覚的なマーカーが作成されます。

この機能は、デザインフィードバック、製品レビュー、図を含む教育資料、コメント付きのフォトギャラリー、そして特定の画像位置に紐付いた文脈的なディスカッションを行いたいあらゆるシナリオに最適です。

レスポンシブデザイン Internal Link

パーセンテージベースの位置指定

Image Chat は、画像上のチャットマーカーを配置するためにピクセル座標ではなくパーセンテージベースの座標を使用します。ユーザーが画像をクリックすると、ウィジェットはクリックのピクセル座標を画像の幅と高さに対するパーセンテージに変換します。この方法により、画像の表示方法に関係なくマーカーが正しい位置に保持されます。

例えば、ユーザーが幅1000pxの画像の左端から250ピクセルの位置をクリックした場合、ウィジェットはこれを左から25%として保存します。別のユーザーが同じ画像をモバイル端末で幅500pxで表示すると、マーカーは左から125ピクセルの位置に表示されますが、それは幅の25%に相当します。

レスポンシブレイアウトにおける利点

このパーセンテージ方式により、Image Chat はすべてのデバイスサイズと向きでシームレスに動作します。画像は画面幅、CSSルール、またはコンテナの制約に応じて異なるサイズで表示されることがありますが、マーカーは常に意図した位置に正しく揃います。

大きなモニターを使うデスクトップユーザーも、小さな画面のスマートフォンユーザーも、マーカーは同じ相対的な位置に表示されます。マーカーは画像自体とともに比例してスケールします。

画像のスケーリングとアスペクト比

画像がスケーリング時にアスペクト比を維持している限り(これはブラウザのデフォルト動作です)、パーセンテージベースのマーカーは完全に整列したままになります。ウィジェットは画像が比例してスケールすると仮定して位置を計算します。

もし object-fit: cover のように特定の寸法で画像のアスペクト比を歪めるような CSS を適用すると、マーカーの位置が正しく揃わない場合があります。最良の結果を得るには、画像を自然にスケールさせるか、アスペクト比を維持するために object-fit: contain を使用してください。

チャット四角のサイズ指定

チャットマーカーの視覚的な大きさもパーセンテージベースです。chatSquarePercentage 設定オプションはデフォルトで5%になっており、各四角は画像幅の5%になります。これにより、異なる画像サイズ間で視覚的な大きさが一貫します。

幅1000pxの画像でデフォルトの5%設定を使用すると、マーカーは50px四方になります。幅500pxの画像では、同じマーカーは25px四方になります。これらは画像サイズに対して比例したままです。

モバイルでの挙動

幅が768px未満の画面では、Image Chat はモバイル最適化レイアウトに切り替わります。チャットウィンドウはマーカーの横に浮かぶのではなく全画面で開きます。これは、浮動するウィンドウが画像を過度に遮ってしまう小さな画面での使いやすさを向上させます。

マーカー自体はパーセンテージベースの位置に表示され、クリック可能なままです。ユーザーはディスカッションの位置を確認し、マーカーをタップして全画面のチャットインターフェースを開くことができます。

動的な画像読み込み

画像が非同期で読み込まれたりページ読み込み後にサイズが変わったりしても、パーセンテージベースのシステムは正しく機能します。ウィジェットは画像要素を監視し、画像の寸法が変わるたびにマーカー位置を再計算します。

遅延読み込みを行っている場合や、ブレークポイントごとに異なるサイズのレスポンシブ画像を実装している場合でも、画像サイズが変わるとマーカーは自動的に調整されます。

デバイス間での一貫性

座標がデータベースにパーセンテージとして保存されるため、デスクトップで作成されたディスカッションはタブレットや電話で表示しても同じ相対位置に表示されます。ユーザーはデバイスを跨いで協力しても位置の不整合が発生しません。

これは双方向に機能します。モバイルデバイスで特定のスポットをタップして作成されたディスカッションは、大きなデスクトップモニターで表示しても同じ相対位置に表示されます。

ビューポートに関する考慮

ウィジェットはパーセンテージをビューポートではなく画像要素自体に対して計算します。つまり、ページをスクロールしたりブラウザウィンドウのサイズを変更したりしてもマーカーの位置には影響しません。マーカーはビューポートの変更に関係なく画像上の位置に固定されます。

将来への備え

パーセンテージベースのアプローチにより、レイアウト、デザイン、デバイス環境の変化に対して画像ディスカッションは強靭になります。新しい画面サイズやデバイスが登場しても、既存のディスカッションは更新や移行を必要とせず正しく表示され続けます。

カスタマイズ Internal Link

ダークモードのサポート

Image Chat には組み込みのダークモードサポートがあります。設定で hasDarkBackground: true を指定すると、チャットウィンドウや UI 要素が自動的にダーク背景に適した表示に調整されます。

FastCommentsImageChat(imageElement, {
    tenantId: 'demo',
    hasDarkBackground: true
});

ダークモードのスタイリングはチャットウィンドウ、マーカーの四角、そしてすべてのインタラクティブ要素に適用されます。サイトにダークモードのトグルがある場合、モード変更時にウィジェットを再初期化するか、以下に説明する body クラス方式を使用できます。

ダイナミックダークモード

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

/* ダークモード用の CSS */
body.dark {
    background: #1a1a1a;
    color: #ffffff;
}

CSS によるカスタムスタイリング

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

チャットの四角とウィンドウは FastComments のコメントバブルのスタイリングシステムを使用しているため、標準のコメントウィジェットに適用したカスタマイズは Image Chat にも反映されます。

チャットスクエアのサイズ調整

chatSquarePercentage オプションはクリック可能なマーカーのサイズを制御します。デフォルトは画像幅の 5% です:

FastCommentsImageChat(imageElement, {
    tenantId: 'demo',
    chatSquarePercentage: 7  // 大きめで視認性の高いスクエア
});

値を小さくすると画像に馴染む控えめなマーカーになります。値を大きくすると、特にモバイルデバイスやアクセシビリティの観点でマーカーが目立ち、クリックしやすくなります。

モバイルでの挙動

幅が 768px 未満の画面では、Image Chat は自動的にモバイル最適化レイアウトに切り替わります。チャットウィンドウはマーカー横に浮かぶ代わりにフルスクリーンで表示され、小さい画面での使いやすさが向上します。

マーカーは画像上のレスポンシブな位置に表示されたままです。ユーザーは任意のマーカーをタップしてフルスクリーンのチャットインターフェースを開けます。この挙動は組み込み済みで、設定は不要です。

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

チャットウィンドウはデスクトップでは幅 300px、マーカーを指す 16px の矢印があります。ウィンドウは利用可能なビューポート空間に基づいて自動的に位置を決め、to-rightto-leftto-topto-bottom のような配置クラスを使用します。

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

遅延初期化

チャットウィンドウはデスクトップユーザーではホバー時に、または作成時に即座に初期化されます。これにより、ユーザーが実際にマーカーと対話するまでチャットインターフェースのレンダリングを行わないため、初期の読み込み負荷が軽減されます。

遅延初期化は透過的に行われます。ユーザーは遅延を感じませんが、画像上に多数のマーカーがある場合でもブラウザが隠れたチャットウィンドウを何十個もレンダリングする必要はありません。

ローカリゼーション

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

FastCommentsImageChat(imageElement, {
    tenantId: 'demo',
    locale: 'fr'  // フランス語
});

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

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

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

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

カスタムフォントの利用

サイトでカスタムフォントを使用している場合、Image Chat の UI はページの CSS からそれらのフォントを継承します。チャットウィンドウはページの DOM 内にレンダリングされ、既存のタイポグラフィ設定を尊重します。

最良の結果を得るには、Image Chat を初期化する前にカスタムフォントがロードされていることを確認するか、フォント読み込み中にスタイルのないテキストが一時的に表示されることを許容してください。

マーカーのビジュアルデザイン

四角いマーカーは目立ちすぎない控えめなビジュアルデザインになっています。異なる見た目にしたい場合は CSS で外観をカスタマイズできます。

マーカーにはホバーステートがあり、ユーザーがマウスを乗せた際にフィードバックを提供します。タッチデバイスでは、タップ操作がチャットウィンドウを開くことで即時のフィードバックを提供します。


ライブ同期 Internal Link

リアルタイム更新

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

WebSocket同期の仕組み

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

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

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

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

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

接続の回復性

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

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

帯域幅に関する考慮事項

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

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

タブ間同期

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

ユーザーは複数のデバイスでサイトを同時に開くことができ、すべてのデバイスが同期された状態を維持します。デスクトップで作成されたマーカーは、両方のデバイスが同じ画像を表示している場合にタブレット上でも瞬時に表示されます。

セキュリティ

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

オフライン時の動作

ユーザーが完全にオフラインの場合、既存のマーカーを表示することはできますが、新しいマーカーを作成したり他のユーザーからの更新を見ることはできません。ウィジェットはオフライン状態を検出し、適切なメッセージを表示します。

ユーザーがオフライン時にマーカーを作成し、その後オンラインに戻った場合、その操作はキューに蓄積されるのではなく失敗します。データの一貫性を保つため、ユーザーは接続が復旧したら操作を再試行する必要があります。

パフォーマンスへの影響

WebSocket接続はパフォーマンスへの影響が最小限です。更新が発生していないときは接続はアイドル状態になり、アクティビティがあるときだけメッセージを処理します。通常のマーカー活動のある画像では、WebSocketのCPU使用量は画像自体のレンダリングよりも少ないです。

数百人の同時ユーザーと高いマーカー作成アクティビティを伴うページでも、システムは個々のクライアント接続に影響を与えることなく水平スケーリングしてパフォーマンスを維持します。

共同作業のユースケース

リアルタイム同期により、Image Chatは共同作業ワークフローに特に有用です。デザインチームはモックアップを一緒にレビューし、全員がマーカーの配置をリアルタイムで確認できます。カスタマーサポートチームは問題の特定のためにスクリーンショットに共同で注釈を付けることができます。教育グループは図を参加者全員で議論し、作成されるマーカーを互いに確認しながら進められます。

即時のフィードバックにより、ユーザーが更新を見るためにリフレッシュする必要がある従来のコメントシステムと比べて、より魅力的で生産性の高い共同作業体験が生まれます。

ご質問はありますか?

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

Image Chat の動作を確認するには、デモページのライブデモをご覧ください。