$shibayu36->blog;

クラスター株式会社のソフトウェアエンジニアです。エンジニアリングや読書などについて書いています。

tmuxのselect-layout -Eでペイン分割を常に等分にする

tmuxでペイン分割を繰り返すと、1/2、1/4、1/4のように不均等な分割になってしまう。3分割や4分割を等分でシュッとやりたいなと思い調べたところ、select-layout -Eが超便利だったのでメモしておく。

.tmux.confの設定

自分は元々emacs風のキーバインドでprefix + 2で上下分割、prefix + 3で左右分割を設定していたが、そこにselect-layout -Eを足すだけで等分リサイズされるようになった。さらにペイン終了時にも等分リサイズされるようにhookを設定した。

# 上下分割 + 等分リサイズ
bind 2 split-window -vc "#{pane_current_path}" \; select-layout -E
# 左右分割 + 等分リサイズ
bind 3 split-window -hc "#{pane_current_path}" \; select-layout -E
# ペイン終了時にも等分リサイズ
set-hook -g pane-exited 'select-layout -E'

これだけで、prefix + 3をすればs左右に自然に等分で分割が増えていくし、prefix + 2なら上下に等分で増えていく。ペインを閉じた時も自動で等分にリサイズされる。

select-layout -Eとは

ポイントはselect-layout -Eの影響範囲だ。tmuxにはレイアウトを均等にする機能としてselect-layout even-horizontalのようなものもあるが、これはウィンドウ全体のペインを並べ替えてしまう。

一方select-layout -Eは、現在のペインが属する分割グループの兄弟ペインだけを均等にする。そのためネストした分割構造を壊さずに、その階層のペインだけを等分にできる。例えば左右3分割の中の1つを上下分割しているような場合でも、上下分割の等分リサイズが他の左右分割に影響しない。

Claude Codeのghコマンドpermission問題をreadonly用ラッパーで解決する

Claude Codeでgh apiを使って情報を取得しようとすると、毎回権限プロンプトが表示されてつらい。例えば以下のようなただコミット一覧を取得するだけのコマンドでも、毎回許可が必要になる。

gh api "repos/anthropics/claude-code/commits?per_page=100&page=1"

かといって利便性のためにgh api全体に対してallowを設定するのは怖い。ghコマンドはissueの作成やPRのマージなど書き込み操作もできるため、意図しない操作をしてしまうリスクがある。readonly操作だけに絞って許可できればいいのに、と思っていた。

何かいい方法はないかと調べていたところ、ghコマンドにはGH_CONFIG_DIR環境変数でプロファイルを切り替えられる仕組みがあることを発見した。これを利用してreadonly専用のghプロファイルを用意し、ラッパーコマンドghroを作って、それだけをallow設定するようにした。

まずGitHubでFine-grained personal access tokenを作成する。権限はリポジトリのreadonly系だけに絞り、secretアクセスなどは閉じておく。

次にreadonly用のプロファイルで認証する。GH_CONFIG_DIRを変えることで通常のghとは別の認証情報を持たせられる。

GH_CONFIG_DIR=~/.config/ghro gh auth login --with-token <<< "<your-token>"

そしてghroラッパースクリプトを作成してPATHの通った場所に置く。

#!/bin/sh
GH_CONFIG_DIR=~/.config/ghro exec gh "$@"
chmod +x ghro

最後にCLAUDE.mdでClaude Codeにghroを使うよう指示する。自分は以下のように設定している。

## GitHub上の情報やコンテンツを取得する場合
- GitHubの情報をreadonlyで取得するときは、ghroコマンドを使う
- ファイル内容を取得するとき、Fetchを使うと取れない。ghroコマンドを使うこと
- 何らかの書き込み操作を行うときはghroではなくghコマンドを利用する

これでreadonly操作は権限プロンプトなしで実行されるようになり、書き込み操作は通常のghコマンドでちゃんと許可が出る。readとwriteの使い分けによりガードレールを設けながら利便性を両立できるようになった。

Daily Do 1.6.0で完了したTODOをリスト上部に自動移動するようにし ました

Daily Doは、今日やることだけに集中するためのシンプルなiOS用TODOアプリです。

このアプリではTODOをいくつか完了していくと、完了済みと未完了が混在してリストが見づらくなり、今日あと何をやればいいかがわかりにくくなるという課題がありました。そこで1.6.0 で完了したTODOをリスト上部に自動で移動するようなリリースをしました。完了済みのものが上にまとまり、残りのやることに集中しやすくなります。

ぜひアップデートして使ってみてください。

Download on the App Store