Discourse のバージョン
2026.1.0-latest (c7e9cddb06)
ブラウザ
Chrome 143.0.7499.170 (Official Build) 64-bit
(コホート: 144.0.7559.59 リリース)
OS
Windows 11 Home
バージョン 10.0.26200 (ビルド 26200)
概要
Chrome のハードウェア アクセラレーションが有効になっていると、UI の問題が発生します。
コンポーザー内のテキストキャレットが非表示になる(白い背景に白く表示される)。
Discourse Calendar のイベントブロックがレンダリングされたとき。
この問題は、Chrome でハードウェア アクセラレーションを無効にするとすぐに解消します。
これは、純粋な CSS のリグレッションではなく、Discourse の UI 要素と相互作用するChrome の GPU/コンポジターレンダリングの問題を示唆しています。
観測された問題
コンポーザーキャレットが非表示になる
- 新規トピックおよび返信コンポーザーの両方で発生します。
- キャレットが白く表示され、背景に溶け込むため、入力位置の確認が困難または不可能です。
- ハードウェア アクセラレーションが有効になっている場合、断続的ではありますが再現性があります。
注目すべき動作:
- Chrome DevTools を開くと、キャレットはすぐに正常に再描画されます。
- これは、状態や CSS の変更によるものではなく、レンダリング/コンポジットの再計算によるものであることを強く示唆しています。
discourse-calendar のイベントブロックがセーフモードでワンボックスされない
ハードウェア アクセラレーションが有効な場合:
/safe-modeでは、この動作が変更されます(テーマコンポーネントが無効になっているため、これは想定内です)。
再現手順
- Windows 11 で、「利用可能な場合はグラフィックス アクセラレーションを使用する」を有効にした Chrome を使用します。
2026.1.0-latestを実行している Discourse サイトを開きます。- コンポーザーを開いて入力を開始します。
- キャレットが見えない/白いことを確認します。
- discourse-calendar イベントブロックを挿入または表示します。
再現しない/診断
/safe-modeでは再現しない
シークレットモードでも再現する(拡張機能関連ではない)
カスタム CSS は設定されていない
Chrome DevTools を開くと、キャレットの問題がすぐに修正される
Chrome のハードウェア アクセラレーションを完全に無効にすると、両方の問題が完全に解決する
パス:
Chrome → 設定 → システム →
[ ] 利用可能な場合はグラフィックス アクセラレーションを使用する
無効にした後:
- キャレットは正常に描画される
- イベントのワンボックスは正しく動作する
- 問題は再現しない
メモ/仮説
これは、以下を含む可能性のあるChrome GPU/コンポジターの相互作用の問題のようです。
- テキスト入力/ProseMirror 内のキャレットレンダリング
- 再描画のタイミングまたはフォーカスレイヤー
- アクセラレートされたコンポジット下でのワンボックスのレンダリング/レイアウト計算
以下の事実:
- セーフモードで動作が変化する
- DevTools を開くと即座に修正がトリガーされる
- GPU アクセラレーションが再現性を完全に制御する
これらは、最近のコミットによって導入された Discourse のリグレッションではなく、ブラウザレベルのレンダリングの問題であることを強く示唆しています。
推奨されるデバッグアプローチ
DevTools を開くとレンダリング動作が変化するため、以下が役立つ可能性があります。
- ローカル DevTools ではなく、リモート DevTools を使用して検査する
- ページ読み込み開始時から DevTools を開いた状態でテストする
--disable-gpuとの動作を比較する- 影響を受けるシステムでの
chrome://gpuの出力を確認する
問題が発生しているときに検査すべき重要な要素:
- コンポーザー要素:
textarea.d-editor-input.d-editor .ProseMirror
- 計算されたキャレットレンダリング (
caret-color、コンポジットレイヤー) - ワンボックスコンテナの再描画タイミング
回避策
Windows 11 の影響を受けているユーザー向け:
Chrome のハードウェア アクセラレーションを無効にする
これにより、コンポーザーキャレットの問題と discourse-calendar のワンボックス動作の両方が完全に解決します。