Timeline Gallery は、X (旧 Twitter) のタイムラインを画像中心のギャラリー表示に切り替える Chrome 拡張機能です。
ギャラリーモードをオンにすると、左右のサイドメニューを隠してタイムライン幅を広げ、画像が1枚だけ添付されたポストを見やすく表示します。動画、GIF、複数画像、引用元カード、リプライ文脈のポストは初期設定では表示対象外です。
このプロジェクトは X Corp. とは関係のない独立したプロジェクトです。
- 拡張機能のポップアップからギャラリーモードをオン / オフ
- デフォルトではギャラリーモードはオフ
- X / Twitter のタイムライン上で動作
- 左右のサイドメニューを非表示にし、タイムライン部分を拡張
- 画像が1枚だけ添付されたポストを中心に表示
- 画像なし、動画、GIF、複数画像、引用元カード、リプライ文脈のポストを初期設定で非表示
- 投稿者情報、投稿時間、反応数、表示回数などの周辺情報を抑えて画像を見やすく表示
- リポスト、いいね、ブックマークなどの主要アクションは維持
- 広告は対象条件を満たす場合に表示し、通常のポストと区別
- ポスト詳細画面では、幅広レイアウトと非表示サイドバーを維持しつつ通常の投稿情報を表示
Timeline Gallery はブラウザ内で動作し、外部サーバーへユーザーデータを送信しません。
- X のタイムライン内容を外部サーバーへ送信しません
- 利用状況、アクセス履歴、アカウント情報、投稿内容を収集しません
- 設定保存には
chrome.storage.localを使用します - X のログイン処理を自動化しません
- 認証情報、Cookie、アクセストークンを読み取りません
開発用の Chrome プロファイル、スクリーンショット、ビルド成果物はコミットしないでください。
- Google Chrome
- Node.js 24 以上
- Corepack
pnpm を Corepack 経由で有効化する場合:
corepack prepare pnpm@10.33.3 --activatepnpm を直接実行できない環境では、各コマンドを corepack pnpm ... として実行してください。
corepack pnpm installcorepack pnpm devWXT が開発用拡張機能を読み込んだ Chrome を起動します。ポップアップや一般的な拡張機能の開発に使います。
X は WXT / web-ext が起動したブラウザでのログインを拒否することがあります。ログイン済みの X で検証する場合は、次の手順を使ってください。
WXT をブラウザ起動なしで実行します。
corepack pnpm dev:xその後、通常の Chrome で開発用拡張機能を読み込みます。
chrome://extensionsを開く- デベロッパーモードを有効にする
パッケージ化されていない拡張機能を読み込むを押す.output/chrome-mv3-devを選択するhttps://x.com/homeを開く
詳しくは docs/x-development.md を参照してください。
corepack pnpm build生成された .output/chrome-mv3 を chrome://extensions から読み込むと、パッケージ版に近い状態で確認できます。
通常の Chrome ウィンドウを奪わずに X を確認したい場合は、専用の Chrome プロファイルを使います。
初回ログイン:
corepack pnpm auth:x:headless:reset開いた専用 Chrome ウィンドウで X にログインし、ウィンドウを閉じます。
以後の検証:
corepack pnpm inspect:x:headless
corepack pnpm inspect:x:headless:gallery検証用プロファイルとスクリーンショットは .wxt/ 以下に保存され、git では無視されます。
ストア掲載用のモック画像を生成します。
corepack pnpm run store:assets提出前チェックを実行し、アップロード用 ZIP を作成します。
corepack pnpm run store:packageZIP は .output/ 以下に作成されます。掲載文、プライバシー入力項目、権限説明、提出前チェックリストは docs/chrome-web-store.md にまとめています。
基本の確認:
corepack pnpm run check
corepack pnpm run format:check個別コマンド:
corepack pnpm run typecheck
corepack pnpm run lint
corepack pnpm run test
corepack pnpm run test:e2e
corepack pnpm run validate:manifesttest:e2e は拡張機能をビルドして Chrome に読み込み、ポップアップ表示とローカル fixture ページへの content script 注入を確認します。
src/
entrypoints/
background.ts Manifest V3 service worker
content.ts X ページ連携とギャラリー制御
popup/ React popup
utils/
messaging.ts runtime message 型と helper
storage.ts chrome.storage.local の状態 schema
x-gallery.ts X タイムライン分類とレイアウト制御
x-page.ts X ルート判定 helper
tests/
unit/ DOM / 状態管理の単体テスト
e2e/ Puppeteer による拡張機能 smoke test
scripts/ ローカルブラウザ操作と検証 helper
docs/ 開発・申請メモ
store-assets/ Chrome ウェブストア掲載用のモック画像
公開リポジトリのため、以下はコミットしないでください。
.wxt/.output/tmp/.env/.env.*/.envrc- Chrome プロファイル、Cookie、セッションデータ
- 認証情報、トークン、秘密鍵
- 実アカウント情報や実投稿が写ったスクリーンショット
store-assets/ の PNG は、corepack pnpm run store:assets で生成したモック画像のみを置く想定です。
- X の DOM 構造は頻繁に変わるため、セレクタや分類ロジックは継続的な更新が必要です
- 「このポストに興味がない」系の動作は、X 側のメニュー項目が DOM に存在する場合に依存します
- 広告判定は X の表示ラベルや既知のマーカーに基づくため、X 側の変更で更新が必要になる可能性があります
- ギャラリーモードは主にホームタイムラインとタイムライン類似ビューを対象にしています
変更は小さく保ち、可能な限りローカルで検証してから Pull Request を作成してください。
X タイムラインの表示に影響する変更では、tests/unit/x-gallery.test.ts の追加・更新を優先し、次を実行してください。
corepack pnpm run check
corepack pnpm inspect:x:headless:gallery