お雑煮研究会

好きな焼肉は魚

VSCode のエディタウィンドウに高速にターミナルを召喚する

最近は CLI ベースの Coding Agent をよく使っている。

自分は設定の都合上 Claude Code の起動エイリアスが 2 種類あったり、Gemini CLI を使ったりするため Claude Code の VSCode Extension のボタン以外でエディタウィンドウにすぐターミナルを出したい気持ちがある。

エディタウィンドウ上部に出る Claude のボタンのこと

workbench.action.createTerminalEditorSide を使う

https://code.visualstudio.com/updates/v1_59#_create-terminal-in-editor-area-to-the-side

VSCode には workbench.action.createTerminalEditorSide というコマンドが用意されており、雑に言うと今開いているエディタペインの横に新しいターミナルを作成するという挙動をする。

新しいターミナルが作成される様子

なので、これを Keybind に設定しておくとワンタッチでターミナルが出てきてとても捗るわけだ。

大変便利なのでぜひ設定してみていただきたい。

おわり

おわり

2025.08 読んだ本メモ

昔から基本的にライトノベル or ミステリを読んでいる。

今月は割と本を読んだので一旦メモ書き程度に感想をまとめる

読んだ本

転生王女と天才令嬢の魔法革命

fantasiabunko.jp

書籍 1 〜 11 巻 + 王宮秘話 1 巻 + Web 版すべて

  • 地の文がかなり一人称というスタイル
  • 物語の構成がよくできており、無限に壁がぶつかってくるのでずっと面白いターンが続く
    • Web 版とは時系列などがかなり異なっており、もともと勢いと良い関係性があったのが化けている
    • 相当優秀な編集者の方がついたのだろう
  • とにかく主人公二人に視点が当たる
  • 疲れている人に読んでほしい
  • 変わらないために変わり続けるという気持ちになる
  • JUST DO IT だよなという気持ちになる
  • デカい仕事の進め方を考えさせられる

魔王 2099

2099.world

書籍 1 〜 5 巻

  • 魔王転生モノは少なくないがサイバーパンクを交えてきたのは初めて見た
  • 無限に天下一武道会を見ている気持ちになる
  • そろそろ山に差し掛かっていそうなので次巻が楽しみ

妖精の物理学

dengekibunko.jp

kakuyomu.jp

書籍 + プロローグ ( カクヨム )

  • もともとフォローしていた作者さんだったので、昨年 12 月に逝去されたときかなりショックを受けて書籍が発売されてからも読めていなかった
  • とはいえずっと読みたかったので、少しお休みしていた期間に向き合うことにした
  • 誤字脱字以外の校正をしていないのは本当だとわかるくらい文字にライブ感があった
  • 世界観にかなり余白があるため、これ以上世界を知ることができないのがとても名残惜しい
    • 考察の余地があるともいえるが
  • かなり前衛的な SF ファンタジーで、あとがきの文脈を拾うなら本当に時代を先に進みすぎている
    • この絵を脳内で描ける電磁幽体先生に脱帽

不死探偵・冷堂紅葉

書籍 1 〜 3 巻

ga.sbcr.jp

  • シンプルにミステリとしてよくできている
    • 異能力が絡むと予想しづらいことが起きるので飽きない
    • 普段ライトノベルを購入しない方にもぜひ手に取っていただきたい
  • ラノベとしても良い
  • 今かなり勢いのある作品なので続巻お待ちしております

おわり

おわり

Private Repository で開発されている Go ツールを GoReleaser で Homebrew Cask としてリリースできるようにした

GoReleaser 2.10 から、Homebrew Formula のリリースを非推奨とし、代わりに Homebrew Cask をリリースする機能が推奨されるようになった。

goreleaser.com

社内で配布していた Private な Formula も Cask に移行しようとしたら色々足りないものがあることがわかったので、 いろいろコードを継ぎ足して Private Repository でリリースされているツールも Homebrew Cask でインストールできるようにした。

Cask DSL バトル

docs.brew.sh

GoReleaser は yaml で入力した設定をベースとして Templating で Ruby コードを生成しているので、 表現力の高すぎる DSL はサポートできなかった。

Cask Cookbook をよく読んでみたら Cask 定義の中に任意の Ruby コードを含めていいらしいので、 複雑すぎる DSL をサポートしない代わりに custom_block という建付けで任意コードを追加して使う形で事なきを得た。

https://docs.brew.sh/Cask-Cookbook#arbitrary-ruby-methods

github.com github.com

Documantation

Private Repository サポートのリリース後すぐにこの機能を利用してくれた方がいて、サンプルコードにいくつか問題点があることがわかったのでもう少し修正した。 ありがとうございました。

zenn.dev

github.com

所感

Go も Homebrew も不慣れだったので何個かやらかしもあったが、なんとかなった。 つい先日だが、今現在公式サイトで公開されているこちらのサンプルコードで社内で配布していた Formula も無事 Cask に移行できた。

goreleaser.com

おわり

おわり

休養と読書

気疲れと休養

2 週間ほど前から心身のバランスを崩してしまっている。

ここ数ヶ月、ソフトウェア開発のあり方は音を立てて軋んでいる。業務ではない部分に目を向けるなら、 Deep Research や Coding Agent によって知らないこと・ 手を出したことがないものに手を出すのはとても簡単になった。 休むのが下手で知ることに貪欲な人間であれば、息をするように過労になれる時代だと思う。

自分の性格もそちら寄りだという自覚はあり、案の定休むことをおろそかにしてしまった。

休みたくても気づいたら PC に向かってなにか作っているという生活になっており、それを自覚した時に嫌気がさしてしまって 1 週間ほど PC と距離を置いている。

最近まともに読書ができていなかったことを思い出したので、本を読んで緩い時間を過ごすことにした。

読書

1 週間で大量に本を読んでかなり精神状態は良くなったし、得た気付きもある。

ここ数ヶ月ほど、感情や熱量を発信する手段がプログラミングしかないような視野の狭窄に陥っていたような気がする。 悪いことではないが、1 つのことに固執しすぎると疲れてしまうし精神に毒だということを思い出せたので今文字を書いている。

気分がいいのでこのまま別の記事に本の好みやここ 1 週間で読んだ本の感想なども書こうと思う。

おわり

おわり

Claude Code Hooks を使って Gemini CLI 経由での検索を義務付ける

日夜 Claude Code と開発する中で、やはり Web 検索の精度は Gemini ないし Google のほうが強いという気持ちになっている。

このような記事もあるほどなので、おそらくこれは共通認識だろう。

zenn.dev

とはいえ、Claude Code が Web 検索をするたびに介入して Gemini を使え!と書くのは面倒だしいちいち CLAUDE.md に書いたところで守ってくれるとは限らない。

だが Hooks ならできる

先日追加された Hooks なら、必ず Gemini 経由で検索させることが可能だ。

docs.anthropic.com

実は Hook Output という概念があり、特定の JSON 文字列を出力することで Claude に明確に構造化された人間の判断結果を渡せるようになっている。

ということでこの機能を使って、こういうことを伝えてあげれば良い。

  • PreToolUse Hook で WebSearch tool の呼び出しに介入し
  • WebSearch tool の呼び出しは block する。かわりに Bash(gemini --prompt "WebSearch: <query") を使ってくれ

これに対応する Hook の設定はこうなる。

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "WebSearch",
        "hooks": [
          {
            "type": "command",
            "command": "jq -n --arg reason 'Use Bash(gemini --prompt \"WebSearch: <query>\") instead.' '{decision: \"block\", reason: $reason}'"
          }
        ]
      }
    ]
  }
}

実際に動かす

こうなった。CLAUDE.md では何も言っていないが、勝手に Gemini を使った検索に切り替えてくれる。

Hook で Claude の行動に介入することで、機械的に規約を守らせることができるようになったのは結構良いことだと思っている。

> WebSearch "東京の天気"

✻ Thinking…

  The user is asking me to do a web search for "東京の天気" which means "Tokyo weather" in Japanese. 
  This is a straightforward request for current weather information. I should use the WebSearch tool to 
  search for this information.

  Based on the system prompt, I should respond in Japanese with a concise response. The user is asking 
  for weather information, so I should provide what I find from the search results.

⏺ Web Search("東京の天気")
  ⎿  Error: WebSearch operation blocked by hook:
     - Use Bash(gemini --prompt "WebSearch: <query>") instead.

✻ Thinking…

  The WebSearch was blocked by a hook, and I'm being told to use Bash with gemini CLI instead. I should 
  use the suggested command format.

⏺ Bash(gemini --prompt "WebSearch: 東京の天気")
  ⎿  Data collection is disabled.                                                     
     MCP STDERR (sequential-thinking): Sequential Thinking MCP Server running on stdio

     … +14 lines (ctrl+r to expand)

✻ Thinking…

  The gemini command worked and provided weather information for Tokyo. The response shows:
  - Current weather: Cloudy, 27°C
  - Today: Sunny then cloudy, high 37°C, low 26°C, 30% chance of rain
  - Monday: Sunny then cloudy, high 38°C, low 28°C
  - Tuesday: Sunny then cloudy, high 35°C, low 26°C
  - Air pollution levels are high, so people with respiratory sensitivity should limit outdoor 
  activities

  I should provide this information to the user in Japanese as requested.

⏺ 現在の東京の天気は曇り、気温は27℃です。

  今後の予報:
  - 今日(日曜日): 晴れのち曇り、最高気温37℃、最低気温26℃、降水確率30%
  - 月曜日: 晴れのち曇り、最高気温38℃、最低気温28℃
  - 火曜日: 晴れのち曇り、最高気温35℃、最低気温26℃

  大気汚染のレベルが高いため、呼吸器系の敏感な方は屋外での活動を控えることが推奨されています。

おわり

おわり

pfnet/plamo-translate-cli を mise で管理する

先日 PFN からリリースされた plamo-translate-cli が大変便利なので使っている。

github.com

ところで私は PC の構成管理に mise を使っているので、plamo-translate-cli も mise で管理したい。

やってみたらできたので、やり方を紹介する。

やり方

こうするだけ。

注: README にもあるが、Python 3.13 以上だと sentencepiece を GitHub のソースからビルドする必要があるためそちらに合わせている

[tools]
"pipx:plamo-translate" = { version = "latest", uvx_args = "--with mlx_lm --with numba --with git+https://github.com/google/sentencepiece.git@2734490#subdirectory=python" }

[settings.pipx]
# default true  だが、うっかり pipx を使われると困るので
# 明示的に uvx を true にしている
uvx = true

interactive mode を使う際はこういう警告が出るが、python 環境に依存関係を入れずに uvx に解決させているので出ているだけ。 問題ないはず。

❯ plamo-translate
/Users/sushichan044/.local/share/mise/installs/python/3.13.5/bin/python: No module named mlx_lm

おわり

おわり

fzf で高速に git worktree 間を移動する

AI Coding の発展により、 最近は一つのリポジトリの中に複数のgit worktreeを切って並列作業をすることが増えてきた。

こうなると、当然git worktreeの間を素早く移動したくなるのが人間というものである。

いいアイデアはないだろうかと考えていたら、ふと id:mizdra さんが似たものを作られていたことを思い出した。

www.mizdra.net

多分同じ要領で行けそうなので作ってみることにした。

完成形

基本 zsh で作業しているのでそれ用になっている。他のシェル使っている方は申し訳ない...

任意の Git リポジトリ内で起動すると、そのリポジトリで作成されている Git worktree を fzf で表示して選択したディレクトリに移動できるだけ。

実際の利用風景

雑感

AI 、こういうシェル芸がとても得意っぽくて適当に対話していたら出来てしまった。dotfiles 盆栽 with AI は結構捗りそう。

gist.github.com

追記

fzf-git にも似たようなものがある。今回は自分の好みに合わせたかったので作ったが、こちらを使うのでもよいだろう。 違いとしては、こういうものがありそう。

  • 選択時の挙動が cd ではなく shell への入力
  • fzf 内で worktree の削除もできる

github.com

おわり

おわり