Skip to content

hideack/ladder

Repository files navigation

ladder

CLI で動く RSS/Atom フィードリーダー。fastladder へのオマージュ。

  • ターミナル上の 3 ペイン TUI で記事を読む
  • ブラウザから閲覧できるローカル Web UI(ladder server
  • SQLite にローカル保存(~/.config/ladder/ladder.db
  • MCP サーバーモードで AI エージェントからも参照可能

必要環境

  • Node.js 20 以上

インストール

git clone https://github.com/your/ladder.git
cd ladder
npm install
npm run build          # esbuild でバンドル → bin/ladder.js 生成

開発時は npx tsx bin/ladder.ts で直接実行できます。

使い方

フィードを追加する

ladder add https://example.com/feed.xml

記事を取得する

ladder fetch              # 全フィードを取得
ladder fetch --feed 3     # フィード ID 3 のみ取得

cron での定期実行例(30 分ごと):

*/30 * * * * /usr/local/bin/ladder fetch >> ~/.config/ladder/fetch.log 2>&1

TUI を起動する

ladder ui

Web UI を起動する

ladder server                   # http://127.0.0.1:4317
ladder server --port 8080       # ポート指定
ladder server --host 0.0.0.0    # LAN / Tailscale 公開時

ブラウザで http://127.0.0.1:4317 を開くと、TUI と同じ 3 ペイン構成で記事を読めます。キーバインドも TUI に揃えています(j / k / Space / p / e / ? など)。Podcast エントリーはインラインの <audio> プレーヤーで再生できます。

初回起動前に npm run build:web で SPA をビルドしておいてください(npm run build でも一緒にビルドされます)。開発時は npm run dev:client で Vite HMR を有効にし、npm run dev:server で API サーバーを別プロセスで動かせます。

OPML

ladder opml import subscriptions.opml   # インポート
ladder opml export                      # stdout へエクスポート
ladder opml export out.opml             # ファイルへエクスポート

カテゴリ管理

ladder category add "Tech"
ladder category add "Tech/Frontend"     # スラッシュでネスト(1 段階)
ladder category list
ladder category rename "Tech" "Technology"

フィード操作

ladder feed move 3 "Tech"              # フィード ID 3 をカテゴリへ移動
ladder feed move 3 --uncategorize      # カテゴリ解除

Podcast エピソードをダウンロードする

ladder podcast download --days 7       # 直近 7 日分をダウンロード
ladder podcast download --count 10     # 最新 10 話をダウンロード
ladder podcast download --feed 3       # フィード ID 3 のみ
ladder podcast download --feed 3 --days 30 --dir ~/Downloads/podcasts

保存先のデフォルトは ~/.config/ladder/podcasts/。既にダウンロード済みのファイルはスキップされます(冪等)。

TUI から個別にダウンロードするには、エントリーを選択して Shift+D を押します。enclosure_url が未取得の場合はフィードを自動再フェッチしてからダウンロードします。

古い記事を削除する

ladder purge              # 既読記事を 90 日以上前のものを削除(デフォルト)
ladder purge --days 30

TUI キーバインド

全ペイン共通

キー 動作
j / k フォーカス依存: Feeds ペイン→フィード移動 / それ以外→エントリー移動(自動既読)
J / K 同上・ページ単位移動
n フィードカーソルを次へ(どのペインからでも)
p ピン留めトグル
Space 未読記事を順に読む(スクロール → 次エントリー → 次フィード)
b 逆方向ページ送り
v 選択中の記事をブラウザで開く
e 記事全文をサイトからフェッチして表示(再押しで元に戻す)
E AI 要約 / 日本語翻訳(再押しで元に戻す)
Shift+D Podcast MP3 をダウンロード(enclosure_url 未取得時は自動フェッチ)
/ タイトル・本文を全文検索
r 選択フィードをリロード
R 全フィードをリロード
Tab / Shift+Tab ペインのフォーカスを切り替え
? ヘルプを表示
q 終了

Feeds ペイン

キー 動作
/ フィード・カテゴリを移動
Enter フィード選択 / カテゴリ折りたたみ
s ソート切替(未読数順 ↔ 最新記事順)
H フィルター切替(active → unread → all)
a カテゴリ割り当て
C カテゴリマネージャーを開く
d フィード購読解除(確認あり)

Entries ペイン

キー 動作
/ 記事を移動(自動既読)
u 未読 / 既読トグル
m フィード全件を既読にする
v ブラウザで開く

MCP サーバー

Claude Desktop や Claude Code から ladder のフィード・記事を参照できます。

ladder mcp   # stdio transport で起動

設定例(~/.config/claude/claude_desktop_config.json):

{
  "mcpServers": {
    "ladder": {
      "command": "ladder",
      "args": ["mcp"]
    }
  }
}

利用可能なツール:

ツール 概要
list_feeds 購読中フィード一覧
list_entries 記事一覧(フィード・未読・ピン絞り込み対応)
get_entry 記事詳細(本文を含む)
search_entries 全文検索(SQLite FTS5)
get_pinned_entries ピン済み記事一覧
mark_as_read 記事 / フィードを既読にする
fetch_now 即時クロール

技術スタック

項目 採用
言語 TypeScript (Node.js 20+)
TUI neo-blessed
Web サーバー Hono
Web フロント Vue 3 + Pinia + Vite
HTML サニタイズ isomorphic-dompurify
DB SQLite (better-sqlite3、WAL モード、FTS5)
CLI commander
RSS パーサー rss-parser
MCP @modelcontextprotocol/sdk

ライセンス

MIT

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors