Claude Code に長めのタスクを投げると、esc to interrupt を眺める時間がそこそこ発生します。
別作業に切り替えるには短く、じっと待つには長い。その隙間時間に一行ニュースを読めたら、と思って
newsline というプラグイン / CLI を作りました。
何をするもの?
- 既存のステータスライン(HUD)の 下の行 に、地域に合ったヘッドラインが 6 秒ごとに切り替わり表示。
既存のステータスラインはそのまま残ります。 -
単なる翻訳ではなく、その地域の実際の現地メディア から取得します。日本なら NHK、韓国なら
聯合ニュース、フランスなら Le Monde、ドイツなら Tagesschau、ほかに El País・G1・BBC/NPR など。
メディアが落ちた/ブロックされた場合は Google News のロケールフィードへ自動フォールバック。 - 現時点では上記メディアが中心ですが、今後さらに多様なプラットフォームと記事が混ざり、
どんどん豊かになっていく予定です。 - ヘッドラインは OSC 8 ハイパーリンクなので、多くのターミナルでそのままクリックして記事へ。
- 日本語を含む 8 言語対応、トピック(テック/ビジネス/スポーツなど)選択可。
- ヘッドラインの色とローテーション間隔(既定 6 秒)は設定で自由に調整できます。
仕組み(ここが Qiita 向けの本題)
ステータスラインは Claude Code から高頻度で呼ばれるため、呼び出しのたびにネットワークを
待つのは厳禁 です。少しでもブロックすると、そのままプロンプト表示の体感速度に効いてしまう。
そこで newsline は取得と描画を完全に分離しています。
-
バックグラウンド取得: RSS をローカルで取得(python3 標準ライブラリのみ、依存パッケージなし)。
ロケールごとに「まず現地の主要メディア → 最後に Google News ロケールフィード」の順で試行し、
最初に記事が取れたソースを採用。死んだフィードはスキップされます。 - キャッシュ書き込み: 取得したヘッドライン N 件をキャッシュへ。
-
即時描画: ステータスライン呼び出し時はキャッシュから即レンダリングし、壁時計ベースで
ローテーション。ネットワークは一切待ちません。
更新処理は single-flight ロック 付きのバックグラウンドプロセスが担当し、複数セッションから
同時に呼ばれても取得は重複しません。ヘッドラインの色は描画時に適用しているため、設定変更が
キャッシュ再取得を待たずに即反映されます。
インストール(登録・メール不要)
curl -fsSL https://raw.githubusercontent.com/itdar/newsline/master/install.sh | sh
npm(npm i -g newsline-cli && newsline init)、Homebrew、Claude Code のプラグイン
マーケットプレイス(/plugin marketplace add itdar/newsline)でも導入できます。次のメッセージ
送信時から表示され、再起動は不要。newsline uninstall で元のステータスラインに完全復元されます。
プライバシー
取得・表示はすべてローカルです。外部に出るのは、地域ソース選定のためのおおまかなコンテキスト
(言語・国・トピックなど、トラッキング ID なし)だけ。~/.config/newsline/config.json に
"api": "off" と "endpoint": "off" を設定すれば 完全ローカルモード になり、ニュースフィード
以外にはどこにも接続しません。
おわりに
GitHub: https://github.com/itdar/newsline
どんなニュースソースやトピックが欲しいか、フィードバック歓迎です。
この記事は Zenn にも投稿しています(クロスポスト)。
