<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Tmux on マスタカの ChangeLog メモ</title>
    <link>https://masutaka.net/tags/tmux/</link>
    <description>Recent content in Tmux on マスタカの ChangeLog メモ</description>
    <generator>Hugo -- 0.138.0</generator>
    <language>ja</language>
    <lastBuildDate>Sun, 12 Apr 2026 17:00:44 +0900</lastBuildDate>
    <atom:link href="https://masutaka.net/tags/tmux/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>[2026-04] 最近の Claude Code の使い方</title>
      <link>https://masutaka.net/2026-04-12-1/</link>
      <pubDate>Sun, 12 Apr 2026 17:00:44 +0900</pubDate>
      <guid>https://masutaka.net/2026-04-12-1/</guid>
      <description>&lt;p&gt;最近私が &lt;a href=&#34;https://github.com/anthropics/claude-code&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Claude Code&lt;/a&gt;
 をどう使っているかまとめました。&lt;/p&gt;
&lt;p&gt;以前 &lt;a href=&#34;https://masutaka.net/2026-01-16-1/&#34;&gt;[2026-01-16-1]&lt;/a&gt;
 で Claude Code の書籍を紹介しましたが、今回は自分のワークフローについて書きます。&lt;/p&gt;
&lt;h2 id=&#34;作業環境&#34;&gt;作業環境&lt;/h2&gt;
&lt;p&gt;MacBook の内蔵ディスプレイで作業しています。私は外部ディスプレイをあまり使わない人です。&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>最近私が <a href="https://github.com/anthropics/claude-code" target="_blank" rel="noopener">Claude Code</a>
 をどう使っているかまとめました。</p>
<p>以前 <a href="/2026-01-16-1/">[2026-01-16-1]</a>
 で Claude Code の書籍を紹介しましたが、今回は自分のワークフローについて書きます。</p>
<h2 id="作業環境">作業環境</h2>
<p>MacBook の内蔵ディスプレイで作業しています。私は外部ディスプレイをあまり使わない人です。</p>
<p>macOS 標準の ターミナル.app を画面全体に表示し、<a href="https://github.com/tmux/tmux" target="_blank" rel="noopener">tmux</a>
 を使っています。tmux はウィンドウを分割せずに使い、タブ（ウィンドウ）の切り替えで作業しています。<a href="https://github.com/ghostty-org/ghostty" target="_blank" rel="noopener">Ghostty</a>
 や <a href="https://github.com/gnachman/iTerm2" target="_blank" rel="noopener">iTerm2</a>
 にはまだ（？）乗り換えていません。</p>
<p>エディタは <a href="https://www.gnu.org/software/emacs/" target="_blank" rel="noopener">Emacs</a>
 です。Claude Code 登場前は、何度か VSCode への乗り換えを試して諦めて&hellip;を繰り返していましたが、今は考えなくて良くなりました。助かります。</p>
<p>今さらながら Emacs の <code>global-auto-revert-mode</code> が便利です。Emacs で開いているファイルを Claude Code が編集したとき、Emacs のバッファが自動的に更新されます。<a href="https://github.com/masutaka/dotfiles-public/blob/44515ec73117fa32f310358e003db22399d9f222/.emacs.d/init.el#L1646-L1649" target="_blank" rel="noopener">こんな設定</a>
です。</p>
<p>Claude Code のモデルはプライベートでも会社でも Opus 4.6 (1M context) を使っています。Sonnet は基本的に使いません。プライベートの Claude のプランは Pro にしたり Max にしたりしていて、Max の時は 1M context 付きになります。</p>
<h2 id="ワークフロー">ワークフロー</h2>
<p>GitHub Issue を起点とした 3 ステップのワークフローで作業しています。</p>
<h3 id="1-作業計画の作成">1. 作業計画の作成</h3>
<p>起点は <a href="https://github.com/masutaka/dotfiles-public/tree/44515ec73117fa32f310358e003db22399d9f222/.claude/skills/create-plan-for-gh-issue/SKILL.md" target="_blank" rel="noopener"><code>/create-plan-for-gh-issue</code></a>
 という自作の skill（スラッシュコマンド）です。</p>
<p>GitHub Issue の内容から作業計画を Markdown ファイルとして作成します。Issue は PR 作成でも調査でも、なんでも構いません。</p>
<p>ポイントは Issue に必要な情報を書いておくことです。Description でもコメントでも良くて、内容が雑多でも大丈夫です。添付画像も読み込んでくれます。</p>
<p>作らせたあとに何回かやり取りして、より良い計画にしていきます。</p>
<h3 id="2-作業計画のレビュー">2. 作業計画のレビュー</h3>
<p>作成した計画を別セッションの Claude Code にレビューさせます。不安なときは Codex にもレビューさせます。</p>
<p>Codex を直接使うことはあまりなくて、<a href="https://github.com/masutaka/dotfiles-public/tree/44515ec73117fa32f310358e003db22399d9f222/.claude/skills/codex-discuss/SKILL.md" target="_blank" rel="noopener"><code>/codex-discuss</code></a>
 という自作の skill 経由で使っています。</p>
<p>&#x1f4a1; <code>/codex-discuss</code> は引数に何か渡せばいい感じに議論してくれますし、引数に何も渡さなくても勝手に議論対象を考えてくれます。何を議論したらよいか分からない時は、ユーザーに聞いてきます。第三者視点を得られる気がするので重宝していますが、欠点は遅いことですね&hellip;。</p>
<p>計画書は Markdown ファイルなのでレビューがやりやすく、週を跨いだ作業でも問題ありません。</p>
<p>計画がまとまったら、記録のために GitHub Issue のコメントとして貼り付けています。以前はリポジトリの <code>docs/plans/</code> にコミットしていましたが、削除したファイル名などが grep にヒットしノイズになるのと、ちょっと違うなと思って止めました。</p>
<h3 id="3-作業の実施とレビュー">3. 作業の実施とレビュー</h3>
<p>計画はたいてい Phase に分割されており、各 Phase ごとにコミットする想定になっています。</p>
<p>git 操作は今のところ人間がやっています。コミットメッセージの提案には <a href="https://github.com/masutaka/dotfiles-public/tree/44515ec73117fa32f310358e003db22399d9f222/.claude/skills/suggest-commit-message/SKILL.md" target="_blank" rel="noopener"><code>/suggest-commit-message</code></a>
 という自作の skill が重宝しています。</p>
<p>PR をレビュー依頼する前に、別セッションの Claude Code で <code>/review</code> してレビューし、不安だったら <code>/codex-discuss</code> で議論します。</p>
<p><a href="https://github.com/openai/codex-plugin-cc" target="_blank" rel="noopener">openai/codex-plugin-cc</a>
 も試しましたが、あまり合いませんでした。</p>
<p>また、Dependabot からの PR レビューには <a href="https://github.com/masutaka/dotfiles-public/tree/44515ec73117fa32f310358e003db22399d9f222/.claude/skills/review-dependabot-pr/SKILL.md" target="_blank" rel="noopener"><code>/review-dependabot-pr</code></a>
 が重宝しています。</p>
<h2 id="まとめ">まとめ</h2>
<p>2026/04 時点の Claude Code の使い方をまとめました。</p>
<p>Claude Code をカスタマイズしすぎないようにしています。Twitter を見ているとみんな高度なことをやっているように見えますが、あまり影響を受けすぎず、自分の直感を信じて使っています。</p>
<p>いくつか紹介した Claude Code の設定などは、以下の dotfiles-public リポジトリにまとまっています。</p>

<object type="image/svg+xml" data="https://gh-card.dev/repos/masutaka/dotfiles-public.svg?fullname=&link_target=_blank"></object>

<p>今後もブラッシュアップしていくのと、評判の良い <a href="https://openai.com/ja-JP/index/introducing-the-codex-app/" target="_blank" rel="noopener">Codex.app</a>
 も使ってみようと思います。</p>
<h2 id="落穂拾い">落穂拾い</h2>
<h3 id="claude-code-からの-yesno-の質問には-yn-で十分">Claude Code からの Yes/No の質問には y/n で十分</h3>
<p>Claude Code からの Yes/No の質問は <code>y</code> や <code>n</code> で十分です。地味ですがトークン削減になります。</p>
<h3 id="claude-code-からのインタビュー形式のヒアリング">Claude Code からのインタビュー形式のヒアリング</h3>
<p>作業内容がぼんやりしているときは、Claude Code から「インタビュー形式で」ヒアリングしてもらうと整理しやすいです。</p>
<p>情報ソースが足りない時に、Claude Code が自律的に質問してきます。</p>
<p><a href="https://github.com/masutaka/dotfiles-public/blob/44515ec73117fa32f310358e003db22399d9f222/.claude/CLAUDE.md" target="_blank" rel="noopener">~/.claude/CLAUDE.md</a>
 に「ユーザーに選択・判断を求める場合は AskUserQuestion ツールを使うこと」の一文を入れています。</p>
<h3 id="claude-code-のセッションは短く保つ">Claude Code のセッションは短く保つ</h3>
<p>Claude Code のセッションはコンテキストウィンドウに余裕があっても、あまり延命しないようにしています。途中経過のノイズが紛れ込んで、ちょっと変になる体感があるためです。</p>
<p>ちなみに現在のコンテキストウィンドウ (cw) は、Claude Code のステータスラインで把握しています。</p>
<p><img alt="Claude Code のステータスライン" loading="lazy" src="/images/claude-code-statusline.png"></p>
<p>上記ステータスラインの設定はこちら:</p>
<ul>
<li><a href="https://github.com/masutaka/dotfiles-public/blob/44515ec73117fa32f310358e003db22399d9f222/.claude/settings.json#L49-L52" target="_blank" rel="noopener">~/.claude/settings.json#L49-L52</a>
</li>
<li><a href="https://github.com/masutaka/dotfiles-public/blob/44515ec73117fa32f310358e003db22399d9f222/.claude/scripts/statusline.js" target="_blank" rel="noopener">~/.claude/scripts/statusline.js</a>
</li>
</ul>
<h3 id="claude-code-からの通知設定">Claude Code からの通知設定</h3>
<p>Claude Code の処理完了を見逃さないよう、以下のような tmux のステータスラインと macOS の通知センターに通知を送る設定をしています。</p>
<p><img alt="tmux のステータスライン" loading="lazy" src="/images/claude-code-tmux-statusline.png"></p>
<p><img alt="macOS の通知センター" loading="lazy" src="/images/claude-code-macos-notification.png"></p>
<p>前職の同僚の吉田さんの記事が参考になりました。</p>
<ul>
<li><a href="https://zenn.dev/milmed/articles/845f47259eca07" target="_blank" rel="noopener">Claude Code 「俺のターン」を確実に検知する - Zenn</a>
</li>
</ul>
<p>吉田さんの記事では、スピナー表示や未読マーカーの仕組みが詳しく解説されています。私の設定は、それをベースに以下の調整を加えたものです。</p>
<ul>
<li>共通:
<ul>
<li><code>Notification</code> フックを追加し、ツール許可待ちなどのアイドル状態でもtmux の未読マークや通知音で気付けるようにした</li>
</ul>
</li>
<li>tmux:
<ul>
<li><code>SessionEnd</code> フックでスピナーを後片付けし、<code>/exit</code> や <code>C-c C-c</code> で終了した時にスピナーが回り続ける問題を解消した</li>
<li>heartbeat ファイルを導入し、mtime を TTL として監視することで、Esc 中断時にもスピナーが自動停止するようにした</li>
<li>未読を表す●の色を赤からシアンに変更。シアンのほうが未読のように見えるため</li>
</ul>
</li>
<li>macOS 通知センター:
<ul>
<li><code>Notification</code>（Funk 音）と <code>Stop</code>（Glass 音）でサウンドを変え、「気付いてほしい」と「完了」を耳で区別できるようにした</li>
<li>通知本文に <code>(tmux:N)</code> でウィンドウ番号を付与し、どのウィンドウに戻ればいいか分かるようにした</li>
</ul>
</li>
</ul>
<p>実際のコードはこちらです。</p>
<ul>
<li><a href="https://github.com/masutaka/dotfiles-public/blob/44515ec73117fa32f310358e003db22399d9f222/.claude/settings.json#L53-L122" target="_blank" rel="noopener">~/.claude/settings.json#L53-L122</a>
（hooks 設定）</li>
<li><a href="https://github.com/masutaka/dotfiles-public/blob/44515ec73117fa32f310358e003db22399d9f222/.claude/scripts/tmux-spinner.sh" target="_blank" rel="noopener">~/.claude/scripts/tmux-spinner.sh</a>
</li>
<li><a href="https://github.com/masutaka/dotfiles-public/blob/44515ec73117fa32f310358e003db22399d9f222/.claude/scripts/macos-notify.sh" target="_blank" rel="noopener">~/.claude/scripts/macos-notify.sh</a>
</li>
<li><a href="https://github.com/masutaka/dotfiles-public/blob/44515ec73117fa32f310358e003db22399d9f222/.config/tmux/tmux.conf#L22-L32" target="_blank" rel="noopener">~/.config/tmux/tmux.conf#L22-L32</a>
</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>OSX の GNU Screen は ~/.zprofile を読み込まない？</title>
      <link>https://masutaka.net/2012-11-19-1/</link>
      <pubDate>Mon, 19 Nov 2012 09:00:00 +0900</pubDate>
      <guid>https://masutaka.net/2012-11-19-1/</guid>
      <description>&lt;p&gt;&amp;#x1f517; &lt;a href=&#34;http://blog.catatsuy.org/a/243&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;tmuxのすすめ｜catatsuyのBlog&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;こちらの記事を参考に tmux を試していたら、なんか PATH がおかしい。調べてみたら、むしろ GNU Screen の方がおかしくて、&lt;code&gt;~/.zprofile&lt;/code&gt; が読み込まれていないことが分かった。&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>&#x1f517; <a href="http://blog.catatsuy.org/a/243" target="_blank" rel="noopener">tmuxのすすめ｜catatsuyのBlog</a>
</p>
<p>こちらの記事を参考に tmux を試していたら、なんか PATH がおかしい。調べてみたら、むしろ GNU Screen の方がおかしくて、<code>~/.zprofile</code> が読み込まれていないことが分かった。</p>
<p>私の <code>~/.zprofile</code> は以下のとおり。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-zsh" data-lang="zsh"><span style="display:flex;"><span><span style="color:#75715e">#</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># /etc/zprofile and ~/.zprofile are run for login shells</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">#</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># all bourne shells should source /etc/profile</span>
</span></span><span style="display:flex;"><span>source /etc/profile
</span></span></code></pre></div><p><code>/etc/profile</code> は以下のとおり。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-zsh" data-lang="zsh"><span style="display:flex;"><span><span style="color:#75715e"># System-wide .profile for sh(1)</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> <span style="color:#f92672">[</span> -x /usr/libexec/path_helper <span style="color:#f92672">]</span>; <span style="color:#66d9ef">then</span>
</span></span><span style="display:flex;"><span>  eval <span style="color:#e6db74">`</span>/usr/libexec/path_helper -s<span style="color:#e6db74">`</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">fi</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> <span style="color:#f92672">[</span> <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>BASH-no<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span> !<span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;no&#34;</span> <span style="color:#f92672">]</span>; <span style="color:#66d9ef">then</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">[</span> -r /etc/bashrc <span style="color:#f92672">]</span> <span style="color:#f92672">&amp;&amp;</span> . /etc/bashrc
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">fi</span>
</span></span></code></pre></div><p>結果的に以下が原因で、<code>PATH</code> と <code>MANPATH</code> が異なっていた。</p>
<ul>
<li>GNU Screen: <code>eval `/usr/libexec/path_helper -s` </code> が実行されない</li>
<li>tmux: <code>eval `/usr/libexec/path_helper -s` </code> が実行される</li>
</ul>
<p><a href="/2007-01-22-1/">[2007-01-22-1]</a>
 見ると、GNU Screen の挙動が変だよなあ。。。</p>
<p>環境:</p>
<ul>
<li>OSX 10.8.2 Mountain LION</li>
<li>zsh 4.3.11 (i386-apple-darwin12.0) # OSX付属</li>
<li>Screen version 4.00.03 (FAU) 23-Oct-06 # OSX付属</li>
</ul>
<p>ひとまず <code>~/.zprofile</code> を空っぽにして対応。OSX で新規ユーザを作っても、それ系のファイルは作られなかったので、Debian の名残なんでしょう。</p>
<p><strong>追記(2012-11-20):</strong></p>
<p>今回も <a href="https://twitter.com/cvmat" target="_blank" rel="noopener">@cvmat</a>
 さんからアドバイス頂きました。</p>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a href="https://twitter.com/cvmat?ref_src=twsrc%5Etfw">@cvmat</a> おお！こんな方法があったのですね。でもたしかにscreenのデフォルトの振る舞いが自然ですね。</p>&mdash; マスタカ (@masutaka) <a href="https://twitter.com/masutaka/status/270811664381800449?ref_src=twsrc%5Etfw">November 20, 2012</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


]]></content:encoded>
    </item>
  </channel>
</rss>
