<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Rust on KnightLiブログ</title>
        <link>https://knightli.com/ja/tags/rust/</link>
        <description>Recent content in Rust on KnightLiブログ</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>ja</language>
        <lastBuildDate>Mon, 18 May 2026 21:02:21 +0800</lastBuildDate><atom:link href="https://knightli.com/ja/tags/rust/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>wx-cli 解説：コマンドラインでローカルの WeChat チャット履歴を検索する</title>
        <link>https://knightli.com/ja/2026/05/18/wx-cli-wechat-local-data-command-line-tool/</link>
        <pubDate>Mon, 18 May 2026 21:02:21 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/05/18/wx-cli-wechat-local-data-command-line-tool/</guid>
        <description>&lt;p&gt;&lt;code&gt;wx-cli&lt;/code&gt; は Rust で書かれたローカル WeChat データ向けのコマンドラインツールです。自分の WeChat セッション、チャット履歴、連絡先、グループメンバー、お気に入り、Moments、公式アカウント記事、添付ファイル、統計情報をターミナルから検索できるようにすることを目的としています。&lt;/p&gt;
&lt;p&gt;これはクラウド型の WeChat 同期サービスでも、チャットボットでもありません。むしろローカルの読み取り専用データ検索レイヤーに近いものです。WeChat は引き続き手元のマシンで動作し、データも手元に残ります。&lt;code&gt;wx-cli&lt;/code&gt; は必要に応じてローカルデータベースを復号、キャッシュ、検索し、その結果を YAML または JSON として人間や Agent に返します。&lt;/p&gt;
&lt;p&gt;このプロジェクトで注目したい点は二つあります。一つは、WeChat のローカルデータ検索をクロスプラットフォーム CLI としてまとめていること。もう一つは、Claude Code、Cursor、Codex のような AI Agent の利用シーンを明確に意識し、&lt;code&gt;SKILL.md&lt;/code&gt; と &lt;code&gt;meta&lt;/code&gt; 付きの構造化出力を提供していることです。&lt;/p&gt;
&lt;h2 id=&#34;wx-cli-でできること&#34;&gt;wx-cli でできること
&lt;/h2&gt;&lt;p&gt;プロジェクト README によると、&lt;code&gt;wx-cli&lt;/code&gt; はかなり広い機能をカバーしています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;最近のセッションと未読セッションを表示する。&lt;/li&gt;
&lt;li&gt;特定の連絡先またはグループのチャット履歴を検索する。&lt;/li&gt;
&lt;li&gt;ローカルデータベース全体からキーワード検索する。&lt;/li&gt;
&lt;li&gt;新着メッセージを表示する。&lt;/li&gt;
&lt;li&gt;連絡先、グループメンバー、グループ内ニックネームを検索する。&lt;/li&gt;
&lt;li&gt;お気に入りを検索する。&lt;/li&gt;
&lt;li&gt;Moments の通知、タイムライン、本文を検索する。&lt;/li&gt;
&lt;li&gt;公式アカウントの記事配信を検索する。&lt;/li&gt;
&lt;li&gt;チャット内の画像添付を一覧表示し、抽出する。&lt;/li&gt;
&lt;li&gt;チャット統計を作成する。&lt;/li&gt;
&lt;li&gt;チャット履歴を Markdown または JSON としてエクスポートする。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これらの機能により、単なる「チャット履歴検索」ではなく、WeChat のローカルデータを検索、集計、エクスポートできるローカル資料庫として扱えるようになります。&lt;/p&gt;
&lt;h2 id=&#34;ai-agent-に向いている理由&#34;&gt;AI Agent に向いている理由
&lt;/h2&gt;&lt;p&gt;多くの CLI ツールは人間向けで、出力も単なるテキストになりがちです。&lt;code&gt;wx-cli&lt;/code&gt; は Agent が読むことを明確に想定しています。&lt;/p&gt;
&lt;p&gt;README では、&lt;code&gt;history&lt;/code&gt;、&lt;code&gt;search&lt;/code&gt;、&lt;code&gt;sessions&lt;/code&gt;、&lt;code&gt;unread&lt;/code&gt;、&lt;code&gt;new-messages&lt;/code&gt;、&lt;code&gt;stats&lt;/code&gt;、&lt;code&gt;attachments&lt;/code&gt; などのコマンドが &lt;code&gt;meta&lt;/code&gt; 情報を付けて返すと説明されています。&lt;code&gt;meta&lt;/code&gt; には結果の状態、不明なシャード、ヒットしたデータの最新時刻、session 記録の最新時刻などが含まれます。&lt;/p&gt;
&lt;p&gt;これは Agent にとって有用です。AI は「何が見つかったか」だけでなく、「結果は新しいのか」「メッセージが抜けている可能性はないか」「再度 init すべきか」も判断する必要があるためです。たとえば：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;status&lt;/code&gt; は結果が &lt;code&gt;ok&lt;/code&gt; なのか &lt;code&gt;possibly_stale&lt;/code&gt; なのかを示せます。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;unknown_shards&lt;/code&gt; は daemon が現在 key を持っていないデータベースシャードの存在を示せます。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;chat_latest_timestamp&lt;/code&gt; はヒットしたデータ内の最新メッセージ時刻を Agent に伝えます。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;session_last_timestamp&lt;/code&gt; はローカルの session 記録が検索結果より明らかに新しいかどうかを判断する助けになります。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;この種のメタ情報は AI の誤判断を減らし、Claude Code、Cursor、Codex のようなツールが WeChat データを扱うときの安定性を高めます。&lt;/p&gt;
&lt;h2 id=&#34;インストール方法&#34;&gt;インストール方法
&lt;/h2&gt;&lt;p&gt;プロジェクトは npm によるクロスプラットフォームインストールを推奨しています。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install -g @jackwener/wx-cli
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;macOS / Linux では curl によるインストールにも対応しています。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -fsSL https://raw.githubusercontent.com/jackwener/wx-cli/main/install.sh &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Windows では管理者 PowerShell で実行します。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;irm &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;https&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;raw&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;py&#34;&gt;githubusercontent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;com&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;jackwener&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;wx-cli&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;install&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;py&#34;&gt;ps1&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;iex
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;ソースからビルドする場合は、Rust を直接使えます。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone git@github.com:jackwener/wx-cli.git &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; wx-cli
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cargo build --release
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;ビルド成果物は &lt;code&gt;target/release/wx&lt;/code&gt;、Windows では &lt;code&gt;wx.exe&lt;/code&gt; です。&lt;/p&gt;
&lt;h2 id=&#34;agent-skill-との関係&#34;&gt;Agent Skill との関係
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;wx-cli&lt;/code&gt; は AI Agent 向けの Skill も提供しています。skills CLI を使えば、Claude Code、Cursor、Codex など Skills 対応環境へ一度に導入できます。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npx skills add jackwener/wx-cli
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;グローバルにインストールする場合：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npx skills add jackwener/wx-cli -g
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;インストール後、Agent はリポジトリ内の &lt;code&gt;SKILL.md&lt;/code&gt; を読み、&lt;code&gt;wx-cli&lt;/code&gt; のインストール、初期化、呼び出し方法を理解します。&lt;/p&gt;
&lt;p&gt;つまり、Agent に次のようなローカル情報整理を依頼できます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;特定期間に特定のグループチャットで話題になったキーワードを探す。&lt;/li&gt;
&lt;li&gt;最近の未読メッセージを要約する。&lt;/li&gt;
&lt;li&gt;特定セッションから最近のチャット履歴をエクスポートする。&lt;/li&gt;
&lt;li&gt;公式アカウント記事のリンクを検索する。&lt;/li&gt;
&lt;li&gt;グループチャット内の発言統計を分析する。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;前提は変わりません。対象データは、あなた自身のマシン上にある、あなた自身の WeChat データである必要があります。&lt;/p&gt;
&lt;h2 id=&#34;基本的な使い方&#34;&gt;基本的な使い方
&lt;/h2&gt;&lt;p&gt;初期化前には WeChat を起動しておく必要があります。要件はプラットフォームごとに異なります。&lt;/p&gt;
&lt;p&gt;Linux では次を実行できます。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo wx init
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Windows では管理者 PowerShell を使います。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;wx&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;init&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;macOS は少し複雑です。README によると、デフォルトの方法では WeChat に ad-hoc 署名を行い、プロセスメモリをスキャンできるようにする必要があります。再署名後は古い TCC 権限レコードも削除する必要があります。そうしないと、スクリーンショット、ビデオ通話、マイクなどの権限が「有効に見えるのに実際には拒否される」状態になることがあります。プロジェクトドキュメントでは、再署名によって macOS が他の App のデータアクセス許可を頻繁に求める副作用も注意しています。&lt;/p&gt;
&lt;p&gt;初期化後は、次のコマンドで確認できます。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx sessions
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;最近のセッションが見えれば、基本的な経路は利用可能です。daemon は初回呼び出し時に自動起動します。&lt;/p&gt;
&lt;h2 id=&#34;よく使うコマンド例&#34;&gt;よく使うコマンド例
&lt;/h2&gt;&lt;p&gt;最近のセッションを表示：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx sessions
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;未読セッションを表示：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx unread
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;公式アカウントや折りたたみ入口を除外し、個人とグループの未読だけを見る：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx unread --filter private,group
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;特定セッションの最近のチャット履歴を見る：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx &lt;span class=&#34;nb&#34;&gt;history&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;张三&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;さらに多くの履歴を取得：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx &lt;span class=&#34;nb&#34;&gt;history&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;张三&amp;#34;&lt;/span&gt; -n &lt;span class=&#34;m&#34;&gt;2000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;期間を指定してグループチャットを検索：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx &lt;span class=&#34;nb&#34;&gt;history&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;AI群&amp;#34;&lt;/span&gt; --since 2026-04-01 --until 2026-04-15
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;全体検索：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx search &lt;span class=&#34;s2&#34;&gt;&amp;#34;关键词&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;特定グループ内でキーワード検索：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx search &lt;span class=&#34;s2&#34;&gt;&amp;#34;会议&amp;#34;&lt;/span&gt; --in &lt;span class=&#34;s2&#34;&gt;&amp;#34;工作群&amp;#34;&lt;/span&gt; --since 2026-01-01
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;チャット履歴をエクスポート：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx &lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;张三&amp;#34;&lt;/span&gt; --format markdown -o chat.md
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx &lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;AI群&amp;#34;&lt;/span&gt; --since 2026-01-01 --format json
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;これらのコマンドはスクリプトや Agent から呼び出す用途に向いており、特に &lt;code&gt;--json&lt;/code&gt; と組み合わせると扱いやすくなります。&lt;/p&gt;
&lt;h2 id=&#34;moments-と公式アカウント記事&#34;&gt;Moments と公式アカウント記事
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;wx-cli&lt;/code&gt; はチャットだけを検索するわけではありません。&lt;/p&gt;
&lt;p&gt;Moments 関連のコマンドは通知と投稿に分かれています。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx sns-notifications
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx sns-feed
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx sns-search &lt;span class=&#34;s2&#34;&gt;&amp;#34;关键词&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;注意点として、Moments データはローカルで表示されたことのある内容に限られます。WeChat クライアントは必要に応じてデータをダウンロードするため、ローカルに存在したことのないデータをツールが突然取得することはできません。&lt;/p&gt;
&lt;p&gt;公式アカウント記事は独立したコマンドで検索します。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx biz-articles
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx biz-articles --account &lt;span class=&#34;s2&#34;&gt;&amp;#34;返朴&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx biz-articles --since 2026-05-01 --until 2026-05-10
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx biz-articles --json &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; jq &lt;span class=&#34;s1&#34;&gt;&amp;#39;.[].url&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;アカウント名、タイトル、URL、概要、カバー画像、時刻などのフィールドが返ります。資料整理、記事収集、ローカル知識ベースづくりをしている人には実用的な機能です。&lt;/p&gt;
&lt;h2 id=&#34;添付ファイルの抽出&#34;&gt;添付ファイルの抽出
&lt;/h2&gt;&lt;p&gt;WeChat チャット内の画像添付は、通常そのまま読める一般的な画像ファイルではなく、&lt;code&gt;xwechat_files/&amp;lt;wxid&amp;gt;/msg/attach/...&lt;/code&gt; 配下の &lt;code&gt;.dat&lt;/code&gt; ファイルとして保存されています。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;wx-cli&lt;/code&gt; は二段階のフローを提供しています。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx attachments &lt;span class=&#34;s2&#34;&gt;&amp;#34;张三&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx attachments &lt;span class=&#34;s2&#34;&gt;&amp;#34;AI群&amp;#34;&lt;/span&gt; --kind image -n &lt;span class=&#34;m&#34;&gt;100&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;まず &lt;code&gt;attachment_id&lt;/code&gt; を取得し、その後で抽出します。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx extract &amp;lt;attachment_id&amp;gt; -o ~/Desktop/photo.jpg
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;出力レポートには &lt;code&gt;md5&lt;/code&gt;、&lt;code&gt;dat_path&lt;/code&gt;、&lt;code&gt;dat_size&lt;/code&gt;、&lt;code&gt;output&lt;/code&gt;、&lt;code&gt;format&lt;/code&gt;、&lt;code&gt;decoder&lt;/code&gt; などの情報が含まれます。README では legacy XOR、V1 fixed-AES、V2 AES + XOR などのデコード方式に対応していると説明されており、image key の抽出方法はプラットフォームによって異なります。&lt;/p&gt;
&lt;p&gt;この機能は強力ですが、より慎重に使う必要があります。自分のデータだけを処理し、無許可のデータアクセスには使わないでください。&lt;/p&gt;
&lt;h2 id=&#34;daemon-アーキテクチャが重要な理由&#34;&gt;daemon アーキテクチャが重要な理由
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;wx-cli&lt;/code&gt; の性能面のポイントは daemon にあります。&lt;/p&gt;
&lt;p&gt;README が示す構成はおおむね次のようなものです。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx (CLI) ──Unix socket──▶ wx-daemon (バックグラウンドプロセス)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                              │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    ┌─────────┴──────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               DBCache               連絡先キャッシュ
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           (mtime を見て再利用)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;daemon は初回復号後、データベースと mtime 情報を &lt;code&gt;~/.wx-cli/cache/&lt;/code&gt; に永続化します。データベースファイルの mtime が変わっていなければ、以後の呼び出しではキャッシュを再利用でき、毎回復号する必要がありません。&lt;/p&gt;
&lt;p&gt;これはコマンドライン検索と Agent のループ処理の両方で重要です。Agent は複数のセッションを連続で検索し、複数のキーワードを調べ、その後に統計やエクスポートを行うことがあります。毎回スキャンと復号をやり直すと体験は悪くなります。daemon キャッシュにより、ローカル検索サービスに近い感覚で使えます。&lt;/p&gt;
&lt;h2 id=&#34;原理の簡単な説明&#34;&gt;原理の簡単な説明
&lt;/h2&gt;&lt;p&gt;プロジェクト README は原理を直接説明しています。WeChat 4.x は SQLCipher 4 でローカルデータベースを暗号化し、WCDB は派生後の raw key をプロセスメモリ内にキャッシュします。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;wx-cli&lt;/code&gt; はプラットフォームに応じた方法で WeChat プロセスメモリをスキャンし、key パターンに一致するものを見つけて鍵を抽出します。その後 daemon が必要に応じてデータベースを復号し、キャッシュします。&lt;/p&gt;
&lt;p&gt;低レベルの仕組みはプラットフォームごとに異なります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;macOS は Mach VM API を使います。&lt;/li&gt;
&lt;li&gt;Linux は &lt;code&gt;/proc/&amp;lt;pid&amp;gt;/mem&lt;/code&gt; を使います。&lt;/li&gt;
&lt;li&gt;Windows は &lt;code&gt;VirtualQueryEx&lt;/code&gt; と &lt;code&gt;ReadProcessMemory&lt;/code&gt; を使います。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これらの仕組みは、初期化に高い権限が必要になりがちな理由、そして macOS で署名やプライバシー権限が関係する理由を説明しています。&lt;/p&gt;
&lt;h2 id=&#34;利用上の境界とリスク&#34;&gt;利用上の境界とリスク
&lt;/h2&gt;&lt;p&gt;この種のツールでは、まず境界を明確にする必要があります。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;wx-cli&lt;/code&gt; README の免責事項は明確です。このツールは学習と研究目的に限られ、自分の WeChat データを復号するためのものであり、関連する法令を遵守する必要があります。無許可のデータアクセスに使ってはいけません。&lt;/p&gt;
&lt;p&gt;実際に使うときは、次の点にも注意するのがよいでしょう。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;自分のコンピューター、自分の WeChat アカウントでのみ使う。&lt;/li&gt;
&lt;li&gt;エクスポートしたチャット履歴を安易にクラウドモデルへアップロードしない。&lt;/li&gt;
&lt;li&gt;Agent でチャット履歴を分析する場合、API 事業者とデータ越境リスクを先に確認する。&lt;/li&gt;
&lt;li&gt;Markdown / JSON としてエクスポートした後は、ファイル権限とバックアップ先に注意する。&lt;/li&gt;
&lt;li&gt;会社端末や共有端末で使う前に、コンプライアンスと権限を確認する。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ローカルツールだからといってプライバシーリスクがないわけではありません。データが最初から外へ出る経路は減りますが、出力をクラウドモデル、クラウドストレージ、第三者スクリプトに渡せば、リスクは戻ってきます。&lt;/p&gt;
&lt;h2 id=&#34;向いているユーザー&#34;&gt;向いているユーザー
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;wx-cli&lt;/code&gt; は次のような場面に向いています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;自分の WeChat 過去メッセージをローカルで素早く検索したい。&lt;/li&gt;
&lt;li&gt;特定セッションを Markdown または JSON としてエクスポートしたい。&lt;/li&gt;
&lt;li&gt;一定期間のグループチャット発言状況を集計したい。&lt;/li&gt;
&lt;li&gt;Claude Code、Cursor、Codex などの Agent にローカル WeChat 資料を整理させたい。&lt;/li&gt;
&lt;li&gt;公式アカウント記事の配信リンクをローカル知識ベースに整理したい。&lt;/li&gt;
&lt;li&gt;WeChat のローカルデータベース構造や復号フローを研究したい。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一方で、次のような用途にはあまり向いていません。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;クラウド型の WeChat 同期をしたい。&lt;/li&gt;
&lt;li&gt;他人の端末やアカウント権限を回避したい。&lt;/li&gt;
&lt;li&gt;GUI だけで操作したく、コマンドラインに触れたくない。&lt;/li&gt;
&lt;li&gt;macOS の権限、Windows の管理者権限、Linux の sudo を扱いたくない。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;wx-cli&lt;/code&gt; の価値は、単に「コマンドラインで WeChat チャット履歴を検索できる」ことだけではありません。より正確には、WeChat のローカルデータを、検索でき、エクスポートでき、Agent が消費できるローカルデータソースへ変える点にあります。&lt;/p&gt;
&lt;p&gt;daemon アーキテクチャは繰り返し復号と検索性能の問題を解決します。&lt;code&gt;meta&lt;/code&gt; wrapper は AI Agent が結果の鮮度を判断しやすくします。&lt;code&gt;SKILL.md&lt;/code&gt; は Claude Code、Cursor、Codex のようなツールにインストールと利用方法を理解させます。&lt;/p&gt;
&lt;p&gt;WeChat から情報を探す、グループチャットを整理する、記録をエクスポートする、個人資料庫を構築するといった作業が多いなら、&lt;code&gt;wx-cli&lt;/code&gt; は注目に値します。ただし使うときは、常に一つの前提を忘れないことが重要です。処理するのは自分のデータだけにし、エクスポートした結果は慎重に管理してください。&lt;/p&gt;
&lt;h2 id=&#34;参考資料&#34;&gt;参考資料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/jackwener/wx-cli&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;jackwener/wx-cli GitHub リポジトリ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>DeepSeek-TUI：ターミナルで DeepSeek コーディング Agent を動かす</title>
        <link>https://knightli.com/ja/2026/05/08/deepseek-tui-terminal-coding-agent/</link>
        <pubDate>Fri, 08 May 2026 13:41:15 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/05/08/deepseek-tui-terminal-coding-agent/</guid>
        <description>&lt;p&gt;DeepSeek-TUI はターミナルで動く AI コーディング Agent です。DeepSeek V4 モデルを中心に設計され、&lt;code&gt;deepseek&lt;/code&gt; コマンドで起動します。TUI 内でファイルの読み書き、shell コマンド、web search、git、MCP server、sub-agent 協調を扱えます。&lt;/p&gt;
&lt;p&gt;単なるチャット CLI というより、ターミナル上の作業台です。コードを読む、ファイルを編集する、コマンドを実行する、診断を見る、セッションを保存する、状態を戻す、という開発動作を 1 つにまとめます。&lt;/p&gt;
&lt;p&gt;リポジトリは主に Rust で書かれ、MIT ライセンスです。&lt;/p&gt;
&lt;h2 id=&#34;向いている人&#34;&gt;向いている人
&lt;/h2&gt;&lt;p&gt;DeepSeek-TUI は、ターミナル中心の開発者が DeepSeek モデルをローカル開発に組み込みたい場合に向いています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DeepSeek でコード修正やプロジェクト分析をしたい。&lt;/li&gt;
&lt;li&gt;フル IDE を開きたくない。&lt;/li&gt;
&lt;li&gt;AI に workspace を読ませ、必要に応じて編集させたい。&lt;/li&gt;
&lt;li&gt;Plan、Agent、YOLO を使い分けたい。&lt;/li&gt;
&lt;li&gt;セッション保存、長時間タスク再開、rollback が必要。&lt;/li&gt;
&lt;li&gt;MCP、LSP 診断、HTTP/SSE runtime API、skills を使いたい。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;簡単な Q&amp;amp;A だけなら web や軽量 CLI で十分です。DeepSeek-TUI はモデルをローカル開発フローに入れたい人向けです。&lt;/p&gt;
&lt;h2 id=&#34;インストール&#34;&gt;インストール
&lt;/h2&gt;&lt;p&gt;npm:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install -g deepseek-tui
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek --version
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek --model auto
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;npm パッケージは事前ビルド済み Rust バイナリを取得する installer/wrapper で、Node.js &lt;code&gt;&amp;gt;=18&lt;/code&gt; が必要です。&lt;/p&gt;
&lt;p&gt;Cargo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cargo install deepseek-tui-cli --locked
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cargo install deepseek-tui --locked
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Homebrew:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew tap Hmbown/deepseek-tui
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install deepseek-tui
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;GitHub Releases から Linux x64/ARM64、macOS x64/ARM64、Windows x64 のバイナリも入手できます。&lt;/p&gt;
&lt;p&gt;Docker:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker run --rm -it &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -e DEEPSEEK_API_KEY &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -v &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PWD&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;:/workspace&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ghcr.io/hmbown/deepseek-tui:latest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;api-key&#34;&gt;API Key
&lt;/h2&gt;&lt;p&gt;初回起動時に DeepSeek API key を入力し、以下へ保存します。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;~/.deepseek/config.toml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;手動設定：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek auth &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; --provider deepseek
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek auth status
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;環境変数：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;DEEPSEEK_API_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;YOUR_KEY&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;診断：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek doctor
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;保存済み key の削除：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek auth clear --provider deepseek
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;auto-mode&#34;&gt;Auto mode
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek --model auto
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;TUI 内:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/model auto
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Auto mode はモデルと thinking を同時に選びます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Model: &lt;code&gt;deepseek-v4-flash&lt;/code&gt; または &lt;code&gt;deepseek-v4-pro&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Thinking: &lt;code&gt;off&lt;/code&gt;、&lt;code&gt;high&lt;/code&gt;、&lt;code&gt;max&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本番リクエスト前に小さな routing call を行い、最新の依頼と文脈からモデルと thinking を決めます。&lt;code&gt;auto&lt;/code&gt; はローカル機能で、上流 API には具体的なモデル名が送られます。&lt;/p&gt;
&lt;p&gt;ベンチマーク、厳格なコスト管理、固定挙動が必要な場合は明示的にモデルを指定します。&lt;/p&gt;
&lt;h2 id=&#34;モード&#34;&gt;モード
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;モード&lt;/th&gt;
          &lt;th&gt;用途&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Plan&lt;/td&gt;
          &lt;td&gt;読み取り専用の調査と計画&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Agent&lt;/td&gt;
          &lt;td&gt;承認ゲート付きの通常モード&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;YOLO&lt;/td&gt;
          &lt;td&gt;信頼済み workspace で自動承認&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;YOLO は便利ですが危険も大きいため、信頼できる一時ブランチやテストディレクトリで使うべきです。&lt;/p&gt;
&lt;h2 id=&#34;主な機能&#34;&gt;主な機能
&lt;/h2&gt;&lt;p&gt;ファイル操作、apply patch、shell、git、web search/browse、sub-agent、MCP、LSP 診断、セッション保存と再開、workspace rollback、永続 task queue、HTTP/SSE runtime API、skills system に対応します。&lt;/p&gt;
&lt;p&gt;LSP 診断は編集後のエラーをモデルへ戻せる点が便利です。rollback は side-git snapshot を使い、&lt;code&gt;/restore&lt;/code&gt; と &lt;code&gt;revert_turn&lt;/code&gt; を提供します。ただし通常の git commit は引き続き重要です。&lt;/p&gt;
&lt;h2 id=&#34;よく使うコマンド&#34;&gt;よく使うコマンド
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek &lt;span class=&#34;s2&#34;&gt;&amp;#34;explain this function&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek --model deepseek-v4-flash &lt;span class=&#34;s2&#34;&gt;&amp;#34;summarize&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek --model auto &lt;span class=&#34;s2&#34;&gt;&amp;#34;fix this bug&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek --yolo
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek auth &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; --provider deepseek
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek doctor
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek doctor --json
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek models
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek sessions
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek resume --last
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek resume &amp;lt;SESSION_ID&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek fork &amp;lt;SESSION_ID&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek serve --http
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek serve --acp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek pr &amp;lt;N&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek mcp list
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek mcp validate
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;zed--acp&#34;&gt;Zed / ACP
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;agent_servers&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;DeepSeek&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;custom&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;deepseek&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;args&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;serve&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;--acp&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;env&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;README によると、現在の ACP は新規セッションと prompt response を扱いますが、tool-backed editing と checkpoint replay はまだ公開されていません。&lt;/p&gt;
&lt;h2 id=&#34;設定と-provider&#34;&gt;設定と provider
&lt;/h2&gt;&lt;p&gt;ユーザー設定：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;~/.deepseek/config.toml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;workspace overlay：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;workspace&amp;gt;/.deepseek/config.toml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;api_key&lt;/code&gt;、&lt;code&gt;base_url&lt;/code&gt;、&lt;code&gt;provider&lt;/code&gt;、&lt;code&gt;mcp_config_path&lt;/code&gt; などは workspace overlay で禁止されています。&lt;/p&gt;
&lt;p&gt;OpenAI-compatible:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek auth &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; --provider openai --api-key &lt;span class=&#34;s2&#34;&gt;&amp;#34;YOUR_OPENAI_COMPATIBLE_API_KEY&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;OPENAI_BASE_URL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://openai-compatible.example/v4&amp;#34;&lt;/span&gt; deepseek --provider openai --model glm-5
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Ollama:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ollama pull deepseek-coder:1.3b
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek --provider ollama --model deepseek-coder:1.3b
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;まとめ&#34;&gt;まとめ
&lt;/h2&gt;&lt;p&gt;DeepSeek-TUI は DeepSeek V4、TUI、tool call、LSP 診断、セッション再開、rollback、MCP、skills を 1 つの Rust ベースの作業環境にまとめたターミナル Agent です。軽量さよりも、ローカル開発フローへ深く入ることに価値があります。&lt;/p&gt;
&lt;h2 id=&#34;参考資料&#34;&gt;参考資料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/Hmbown/DeepSeek-TUI&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;DeepSeek-TUI GitHub リポジトリ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://deepseek-tui.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;DeepSeek-TUI 公式サイト&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.npmjs.com/package/deepseek-tui&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;DeepSeek-TUI npm パッケージ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://platform.deepseek.com/api_keys&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;DeepSeek API Keys&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>sudo と sudo-rs の違い：Rust 版 sudo は何を変えるのか</title>
        <link>https://knightli.com/ja/2026/05/01/sudo-vs-sudo-rs-rust-linux-command/</link>
        <pubDate>Fri, 01 May 2026 19:27:08 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/05/01/sudo-vs-sudo-rs-rust-linux-command/</guid>
        <description>&lt;p&gt;&lt;code&gt;sudo&lt;/code&gt; は Linux ユーザーにとって最もなじみ深いコマンドの一つである。
通常ユーザーが、許可された範囲で一時的により高い権限でコマンドを実行できるようにする。
たとえば、ソフトウェアのインストール、システム設定の変更、サービスの再起動などで使われる。&lt;/p&gt;
&lt;p&gt;最近 &lt;code&gt;sudo-rs&lt;/code&gt; が注目されているのは、Ubuntu 25.10 が従来の sudo を置き換える形で、Rust 実装の &lt;code&gt;sudo-rs&lt;/code&gt; をデフォルトで使い始めるためだ。
一般ユーザーから見ると、表面上は引き続き &lt;code&gt;sudo&lt;/code&gt; と入力する。
本当に変わるのはシステムの内側で、実行される実装が Rust 版 sudo になっている可能性がある。&lt;/p&gt;
&lt;p&gt;この話では、自然に二つの疑問が出てくる。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;従来の sudo に何か問題があるのか。&lt;/li&gt;
&lt;li&gt;sudo-rs は日常利用やサーバー設定に影響するのか。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;簡単に言えば、普通のデスクトップユーザーはほとんど心配しなくてよい。
ただし、サーバーを管理している、複雑な sudoers ルールを書いたことがある、または特殊な sudo の挙動に依存している場合は、きちんとテストする必要がある。&lt;/p&gt;
&lt;h2 id=&#34;sudo-rs-とは&#34;&gt;sudo-rs とは
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;sudo-rs&lt;/code&gt; は Rust で書かれた sudo / su の実装である。
完全に別物の新しいコマンドを作ることが目的ではなく、従来の sudo の主要機能を再実装しつつ、Rust のメモリ安全性を利用して一般的なセキュリティリスクを下げることを目指している。&lt;/p&gt;
&lt;p&gt;従来の sudo は主に C 言語で書かれており、歴史が長く、機能も非常に充実している。
その成熟度は安定性をもたらす一方で、保守上の負担にもなる。
多くのコードはかなり古い Unix/Linux の利用場面に由来し、その後、大量の互換ロジック、拡張、境界処理が重ねられてきた。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo-rs&lt;/code&gt; が再実装を選んだ理由には、次のようなものがある。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rust によりメモリ安全性の問題を減らす。&lt;/li&gt;
&lt;li&gt;より現代的なコード構造で保守難度を下げる。&lt;/li&gt;
&lt;li&gt;一部の歴史的機能やリスクのあるデフォルト挙動を削る。&lt;/li&gt;
&lt;li&gt;Rust に慣れた新しい貢献者を呼び込む。&lt;/li&gt;
&lt;li&gt;将来の権限昇格ツールに、より監査しやすい土台を提供する。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ただし、&lt;code&gt;sudo-rs&lt;/code&gt; は従来の sudo と 100% 互換の置き換えではない。
現在も開発中であり、一部の従来機能はまだ実装されておらず、別の一部は今後も実装されない可能性がある。&lt;/p&gt;
&lt;h2 id=&#34;一般ユーザーが感じる変化&#34;&gt;一般ユーザーが感じる変化
&lt;/h2&gt;&lt;p&gt;一般ユーザーにとって、変化はかなり少ない。&lt;/p&gt;
&lt;p&gt;これまで通り次のように使う。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;または：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl restart nginx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Ubuntu 25.10 では、&lt;code&gt;sudo&lt;/code&gt; が &lt;code&gt;sudo-rs&lt;/code&gt; を指す。
ユーザーが入力するコマンドを &lt;code&gt;sudo-rs&lt;/code&gt; に変える必要はなく、スクリプト内の一般的な &lt;code&gt;sudo&lt;/code&gt; 呼び出しも、コマンド名の変更で即座に壊れるわけではない。&lt;/p&gt;
&lt;p&gt;見えやすい変化は、パスワード入力時のフィードバックである。
&lt;code&gt;sudo-rs&lt;/code&gt; はデフォルトで、パスワード入力時にアスタリスクを表示する。
従来の sudo でも設定により同様の挙動にできるが、多くのディストリビューションでは何も表示しない設定がデフォルトだった。&lt;/p&gt;
&lt;p&gt;また、一部のエラーや警告メッセージの文面が変わる可能性がある。
たとえば、パスワード誤り、権限不足、設定の非互換などでは、以前とまったく同じ文面ではないことがある。
人間のユーザーにとって大きな影響はないが、sudo のエラー出力を解析するスクリプトがある場合は確認が必要だ。&lt;/p&gt;
&lt;h2 id=&#34;管理者が注意すべき違い&#34;&gt;管理者が注意すべき違い
&lt;/h2&gt;&lt;p&gt;本当に注意が必要なのは、システム管理者と上級ユーザーである。&lt;/p&gt;
&lt;p&gt;従来の sudo のエコシステムは大きく、多くのサーバーには複雑な sudoers 設定がある。
これらの設定には、コマンド引数のマッチング、環境変数の制御、ログ、メール通知、PAM の挙動、ホストグループごとのポリシーなどが含まれることがある。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo-rs&lt;/code&gt; には現時点で従来の sudo との違いがある。
たとえば、元記事では &lt;code&gt;sudo-rs&lt;/code&gt; が従来 sudo の sendmail サポートを含まないことに触れている。
過去に sudo 使用通知を sendmail で送っていた環境では、移行時に別の方法を用意する必要がある。&lt;/p&gt;
&lt;p&gt;認証面では、&lt;code&gt;sudo-rs&lt;/code&gt; は PAM を使う。
そのため、リソース制限や umask などの挙動は、sudoers ファイルだけに頼るのではなく、より PAM 側で設定する必要がある。
以前 sudoers で多くの細部を扱っていた場合、切り替え前にそのルールが今も有効か確認するべきである。&lt;/p&gt;
&lt;p&gt;もう一つ重要なのは、コマンド引数位置でのワイルドカード対応だ。
&lt;code&gt;sudo-rs&lt;/code&gt; は sudoers ファイルでありがちな設定ミスを避けるため、コマンド引数位置でのワイルドカードをサポートしない。
これはセキュリティ上は良いことだが、既存ルールに影響する可能性がある。&lt;/p&gt;
&lt;h2 id=&#34;ubuntu-で-sudo-と-sudo-rs-はどう扱われるか&#34;&gt;Ubuntu で sudo と sudo-rs はどう扱われるか
&lt;/h2&gt;&lt;p&gt;Ubuntu 25.10 以降、システムはデフォルトで &lt;code&gt;sudo-rs&lt;/code&gt; を使う。
ユーザーは引き続き &lt;code&gt;sudo&lt;/code&gt; と入力し、その下で Rust 実装が動く。&lt;/p&gt;
&lt;p&gt;従来の sudo がすぐ消えるわけではない。
Ubuntu の移行設計では、従来の sudo は &lt;code&gt;sudo-ws&lt;/code&gt; という形で残される。
どうしても従来実装が必要な場合は &lt;code&gt;sudo-ws&lt;/code&gt; を使うか、alternatives の仕組みでデフォルト sudo を切り替えられる。&lt;/p&gt;
&lt;p&gt;切り替えコマンドは次のような形になる。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --config sudo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;ただし、普通のユーザーが積極的に従来 sudo へ戻すことは勧めにくい。
sudoers をカスタマイズしておらず、特殊な挙動にも依存していないなら、ディストリビューションのデフォルトに従うほうが楽である。&lt;/p&gt;
&lt;p&gt;古い Ubuntu バージョンで試したい場合、&lt;code&gt;sudo-rs&lt;/code&gt; は Ubuntu 24.04 以降 universe リポジトリから入手できる。
他のディストリビューションでもパッケージが提供されている可能性はあるが、コマンド名や統合方法は同じとは限らない。&lt;/p&gt;
&lt;h2 id=&#34;なぜ-sudo-rs-は-rust-を選ぶのか&#34;&gt;なぜ sudo-rs は Rust を選ぶのか
&lt;/h2&gt;&lt;p&gt;sudo は高権限ツールである。
この種のツールに脆弱性があると、通常のコマンドよりも深刻な結果につながることがある。
歴史的にも、sudo には複数の権限昇格脆弱性が存在した。&lt;/p&gt;
&lt;p&gt;Rust の強みはメモリ安全性にある。
所有権、借用チェック、型システムにより、ダングリングポインタ、境界外アクセス、use-after-free などの一般的な問題を減らせる。
これでプログラムが絶対に安全になるわけではないが、C/C++ プロジェクトでよく見られる一群の脆弱性を減らせる。&lt;/p&gt;
&lt;p&gt;sudo のように長くセキュリティ上重要な位置にあるツールでは、より安全な言語で書き直すことには現実的な意味がある。
これは単なる「Rust を使いたいから Rust」ではなく、保守と監査のコストを下げようとする試みである。&lt;/p&gt;
&lt;p&gt;もちろん、言語がすべてのセキュリティ問題を解決するわけではない。
権限チェックロジック、設定解析、PAM 連携、環境変数処理、ログ、ユーザー体験は、今後も慎重な設計と長期的なテストを必要とする。&lt;/p&gt;
&lt;h2 id=&#34;sudo-rs-は唯一の選択肢ではない&#34;&gt;sudo-rs は唯一の選択肢ではない
&lt;/h2&gt;&lt;p&gt;sudo エコシステムには、もともと他の代替ツールも存在する。&lt;/p&gt;
&lt;p&gt;比較的よく知られているのは &lt;code&gt;doas&lt;/code&gt; である。
OpenBSD 由来で、より単純で小さな設定を目指している。
sudo ほど複雑ではない点を好むユーザーもいる。&lt;/p&gt;
&lt;p&gt;ほかにも、RootAsRole や systemd の &lt;code&gt;run0&lt;/code&gt; など、Rust や systemd 関連の代替案がある。
ただし、これらのツールの目的や適用場面は完全には同じではない。&lt;/p&gt;
&lt;p&gt;多くの Linux ディストリビューションでは、sudo は今でもデフォルトの選択肢である。
&lt;code&gt;sudo-rs&lt;/code&gt; の意味は、ユーザーの習慣を保ちながら、内部実装をより現代的なコード基盤に置き換えようとしている点にある。&lt;/p&gt;
&lt;h2 id=&#34;移行前に確認すべきこと&#34;&gt;移行前に確認すべきこと
&lt;/h2&gt;&lt;p&gt;個人のデスクトップユーザーなら、ディストリビューションのデフォルト設定に従えばよい。&lt;/p&gt;
&lt;p&gt;サーバーやワークステーションを管理している場合は、次の点を確認したい。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;複雑な &lt;code&gt;/etc/sudoers&lt;/code&gt; または &lt;code&gt;/etc/sudoers.d/&lt;/code&gt; ルールがあるか。&lt;/li&gt;
&lt;li&gt;コマンド引数のワイルドカードを使っているか。&lt;/li&gt;
&lt;li&gt;sudo のメール通知に依存しているか。&lt;/li&gt;
&lt;li&gt;sudo のエラー出力を解析するスクリプトがあるか。&lt;/li&gt;
&lt;li&gt;sudoers で umask、リソース制限、環境変数を制御しているか。&lt;/li&gt;
&lt;li&gt;LDAP、PAM、SSSD などの認証連携があるか。&lt;/li&gt;
&lt;li&gt;automation やデプロイスクリプトが従来 sudo の挙動を前提にしているか。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;まずテスト機で確認できる。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo -l
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;その後、重要な保守コマンドを実行し、権限、環境変数、ログ挙動が期待通りか確認する。&lt;/p&gt;
&lt;h2 id=&#34;sudo-rs-へ自分で切り替えるべきか&#34;&gt;sudo-rs へ自分で切り替えるべきか
&lt;/h2&gt;&lt;p&gt;ディストリビューションがすでにデフォルトで切り替えているなら、普通のユーザーはそのまま受け入れてよい。
サーバーや本番環境では、試したいという理由だけで手動置き換えするのは勧めにくい。&lt;/p&gt;
&lt;p&gt;より安全な進め方は次の通り。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;テスト環境に &lt;code&gt;sudo-rs&lt;/code&gt; をインストールする。&lt;/li&gt;
&lt;li&gt;既存の sudoers 設定を項目ごとに検証する。&lt;/li&gt;
&lt;li&gt;PAM、ログ、監査、automation スクリプトを確認する。&lt;/li&gt;
&lt;li&gt;ロールバック方法を確認する。&lt;/li&gt;
&lt;li&gt;ディストリビューションが安定した統合を提供してから移行する。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;この種のツールは権限チェーン上にあるため、「いくつかのコマンドが動く」だけで安全とは判断しにくい。
本当に確認すべきなのは、境界条件と異常系である。&lt;/p&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;sudo-rs&lt;/code&gt; は従来 sudo の Rust 実装であり、より現代的で安全なコード基盤で sudo の中核機能を担うことを目指している。
Ubuntu 25.10 がデフォルトで有効化することは、主要ディストリビューションがこの方向を本格的に進め始めたことを示している。&lt;/p&gt;
&lt;p&gt;一般ユーザーにとって、変化は小さい。
引き続き &lt;code&gt;sudo&lt;/code&gt; と入力するだけで、内部実装が &lt;code&gt;sudo-rs&lt;/code&gt; になっている可能性があるだけだ。
気づくとしても、パスワード入力時にアスタリスクが表示されることや、エラーメッセージが少し変わることくらいである。&lt;/p&gt;
&lt;p&gt;システム管理者にとって、重要なのは互換性だ。
複雑な sudoers ルール、sendmail 通知、PAM 連携、引数ワイルドカード、sudo 出力に依存するスクリプトがある場合は、アップグレード前にテストすべきである。&lt;/p&gt;
&lt;p&gt;Rust による書き直しは万能薬ではない。
それでも sudo のようなセキュリティ上重要なツールでは、メモリ安全性リスクと保守の複雑さを減らす方向として、真剣に検討する価値がある。&lt;/p&gt;
&lt;p&gt;参考ソース：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://itsfoss.com/sudo-vs-sudo-rs/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;It&amp;rsquo;s FOSS：sudo vs sudo-rs: What You Need to Know&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/trifectatechfoundation/sudo-rs&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;sudo-rs GitHub プロジェクト&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
