コードを書きながらXをチェックするためにブラウザに切り替える——その数秒の切り替えがフローを断ち切っている。tuitter(ツイッター)は、ターミナルを離れずにXを操作できるTypeScript製のTUI(Terminal UI)クライアントだ。BunランタイムとOpenTUIフレームワークで実装されており、OAuth 2.0でX API v2に接続する。
GitHubスター数は300を超え、エンジニアの間でターミナルXクライアントとして注目を集めている。本記事では、インストールからX Developer Appの設定、実際の操作方法まで一通り解説する。
tuitterとは:ターミナルで動くXクライアントの概要
tuitterはBenjamin Dicken氏が開発した、X(旧Twitter)のTUIクライアントだ。TypeScriptとBunランタイムで実装されており、OpenTUIというターミナルUIフレームワークを基盤にしている。
TUI(Terminal User Interface)とは、テキストベースのターミナル上に描画するUIのことだ。GUIのようにマウス操作はできないが、キーボードだけで完結する操作体系が特徴で、SSH接続先のサーバーやリモート環境でも動作する。
同様のアプローチで作られたターミナルツールには、Podman TUI(Go製のコンテナ管理ダッシュボード)など、各領域に専用のTUIクライアントが存在する。tuitterはそのXフィード版に相当する。
主なスペック:
- 言語: TypeScript(99.7%)+ Shell(0.3%)
- ランタイム: Bun
- UIフレームワーク: OpenTUI
- API: X API v2
- 認証: OAuth 2.0
- GitHubスター: 300+(2026年4月時点)
Bunを選んだ理由:Node.jsとの違い
tuitterがBunを採用している点は注目に値する。BunはNode.js互換のJavaScriptランタイムで、起動速度とパッケージインストール速度がNode.jsより大幅に速い。
TUIツールのような「素早く起動して操作する」という用途には、起動レイテンシの低さが重要だ。bun linkでグローバルコマンドとして登録すると、tuitterと打つだけでほぼ即座に起動する。
また、Bunは.envファイルを標準でサポートしており、dotenvなどの追加パッケージなしに環境変数を読み込める。tuitterのセットアップがシンプルに保たれているのは、この点も大きい。
インストールとセットアップ手順
前提条件
- Bunがインストール済みであること
- X(旧Twitter)のDeveloper Accountを持っていること
Bunのインストールはワンライナーで完了する:
curl -fsSL https://bun.sh/install | bash
リポジトリのクローンと依存パッケージのインストール
git clone https://github.com/bddicken/tuitter.git
cd tuitter
bun install
bun installはnpm installより数倍速く、プロジェクトの依存解決が数秒で終わる。
環境変数の設定
リポジトリには.env.exampleが含まれている。これをコピーして設定する:
cp .env.example .env
.envファイルの構造は以下の通りだ:
# 必須
X_CLIENT_ID=your_client_id_here
# オプション
X_CLIENT_SECRET=your_client_secret_here
X_REDIRECT_URI=http://127.0.0.1:8787/callback
X_OAUTH_SCOPES=tweet.read users.read tweet.write like.write like.read bookmark.write bookmark.read offline.access
X_TOKEN_STORE_PATH=~/.tuitter/oauth-token.json
X_IMAGE_MODE=auto # auto / kitty / off
必須なのはX_CLIENT_IDだけだ。残りはデフォルト値が用意されており、最小構成で動かすならX_CLIENT_IDを設定するだけでよい。
グローバルコマンドとして登録して起動
bun link
tuitter
bun linkによりtuitterがグローバルコマンドとして登録される。初回起動時にブラウザが開き、OAuthフローが始まる。
X Developer Appの設定方法
tuitterを動かすにはX Developer AccountとOAuth 2.0対応のアプリが必要だ。以下の手順で設定する。
Developer Consoleでの操作手順
- console.x.com にアクセスしてログイン
- 既存プロジェクトを選択するか、新規プロジェクト・アプリを作成
- アプリ設定画面でOAuth 2.0を有効化
- コールバックURL(Redirect URL)に
http://127.0.0.1:8787/callbackを追加 - アプリ設定から Client ID をコピーして
.envのX_CLIENT_IDに設定 - Confidentialクライアントとして設定する場合はClient Secretも
.envのX_CLIENT_SECRETに設定
デフォルトのOAuthスコープ
tuitterがデフォルトでリクエストするスコープは以下の通りだ:
tweet.read
users.read
tweet.write
like.write
like.read
bookmark.write
bookmark.read
offline.access
読み取りに加えてツイート投稿・いいね・ブックマーク操作のスコープも含まれる。X_OAUTH_SCOPES環境変数でカスタマイズも可能だ。
OAuth 2.0認証フローの仕組み
tuitterの認証フローは標準的なOAuth 2.0 Authorization Code Flowだ。初回起動時だけブラウザを使い、以降はローカルに保存されたトークンで動作する。
offline.accessスコープにより、Refresh Tokenが取得される。これにより長期間の利用でもブラウザ再認証が不要になっている。
画像表示モードの設定
tuitterはX_IMAGE_MODE環境変数で画像のレンダリング方法を変更できる。
| モード | 動作 | 推奨環境 |
|---|---|---|
auto |
環境を自動検出して最適な方法を選択 | デフォルト。多くの環境で動作 |
kitty |
Kittyターミナルの画像プロトコルを使用 | Kitty使用時に高品質な画像表示 |
off |
画像表示を無効化 | SSH環境、低帯域回線、テキスト専用端末 |
Kittyターミナルを使っている場合はX_IMAGE_MODE=kittyを設定することで、ターミナル内でインライン画像表示が可能になる。
他のX/Twitterクライアントとの比較
ターミナルからXを操作するツールは複数存在する。tuitterの位置づけを整理する。
| ツール | 言語/実装 | 認証 | 投稿可能 | 画像表示 | 特徴 |
|---|---|---|---|---|---|
| tuitter | TypeScript + Bun | OAuth 2.0 | ✅ | ✅(kitty対応) | 公式API使用、読み書き両対応 |
| tut | Go | OAuth 1.0a | ✅ | 限定的 | Mastodon向けTUI |
| rainbowstream | Python | OAuth 1.0a | ✅ | 限定的 | Python製Twitterクライアント(旧API) |
| nitter | Web(自己ホスト) | 不要 | ❌ | ✅ | 読み取り専用の軽量フロントエンド |
| twurl | Ruby | OAuth 1.0a | ✅ | ❌ | CURLのTwitter版CLI(API検証用) |
tuitterはX API v2のOAuth 2.0を使用している点が現代的だ。旧来のOAuth 1.0aベースのツール(rainbowstreamなど)はXの認証ポリシー変更で動作しなくなったものが多いが、tuitterはX API v2に完全対応している。
また、SNS自動化や情報収集ツールとの組み合わせも考えられる。たとえばXのデータ収集にはOsintgram(Instagram OSINT)のようなアプローチをXに適用する方向性も研究されているが、tuitterは個人利用のインタラクティブクライアントに特化している。
トークンの管理とセキュリティ
取得したOAuthトークンはデフォルトで ~/.tuitter/oauth-token.json に保存される。保存場所は X_TOKEN_STORE_PATH 環境変数で変更可能だ。
# カスタムトークン保存先の例
X_TOKEN_STORE_PATH=/home/user/.config/tuitter/token.json
このファイルにはAccess TokenとRefresh Tokenが含まれるため、パーミッションの設定に注意が必要だ:
# トークンファイルのパーミッションを確認・設定
ls -la ~/.tuitter/oauth-token.json
chmod 600 ~/.tuitter/oauth-token.json
トークンの範囲は.envのX_OAUTH_SCOPESで制限できる。読み取り専用で使う場合は書き込みスコープを外すことを推奨する:
# 読み取り専用スコープの設定例
X_OAUTH_SCOPES=tweet.read users.read like.read bookmark.read offline.access
tuitterが向いているユースケース
コーディング中のX閲覧: IDEやエディタとターミナルを並べて使う開発者にとって、ブラウザを開かずにXのタイムラインを確認できるのは利点だ。tmuxやzellij等のターミナルマルチプレクサと組み合わせると、ペインの一つにtuitterを表示したまま開発できる。
リモートサーバー環境: SSH接続した開発サーバーやVPSでも動作するため、サーバー作業中にXを確認したいケースに対応できる。
Kittyターミナルユーザー: Kitty特有の画像プロトコルに対応しているため、Kittyを常用している開発者にとってはツイート内の画像もターミナル内でレンダリングされる。
一方で、チームのSNS運用自動化や定期投稿などには向いていない。そのような用途にはTypefully APIやX API v2のスケジュール機能を直接使うアプローチが適している。
まとめ
tuitterは、ターミナル中心の開発ワークフローに自然に馴染むXクライアントだ。セットアップの複雑さはX Developer Appの登録のみであり、インストール自体は3コマンドで完了する。
BunとTypeScriptの組み合わせにより、Node.jsベースのツールと比較して起動速度とインストール速度が改善されている。OAuth 2.0 + X API v2対応で、旧来のTwitterクライアントが抱えていた認証問題を回避している点も現代的だ。
ターミナルから離れたくないエンジニアのための、シンプルで実用的なツールとして機能する。