0xf

日記だよ

Claudeってやつを契約してみた

使わないと損なので使っていく。

Codex派ではあるのだが、すっかり会社が ClaudeCode 派に支配された感じがするので、長いものに巻かれるところである。正直どちらも高度なレベルでバランスしていて、まったくの不便なところはない。手の馴染みくらいだと思う(現時点では)。ということで、慣らしていくのだ。

Vibe Coding Levelがまだ低い

家に帰ったらこういうやつを作ってみよう、と考えているとする。

頭の中で、よしこれは今までの自分の知識だけでは作れないので、AIエージェントをいくつか動かして、こういう作りでやってみよう、と考える。これがAI時代の醍醐味である。すごい。しかし帰ってみると、自分で作るところは進むけど、AIに指示を出して作らせようと思っていたところが何もやれていない。(自分の構想の中での)自分の担当パートはかつてない感じでうまく進んでいるのであるが、全体では完成に向かう流れになっていない。最近こういうことが何度かあった。

どうも、解像度が低い指示を出すのが気持ち悪いみたい。かなりクリティカルなハードルなような気がする。

Windows TerminalでタブのタイトルをUbuntuから変更する

特に変わったことではないけど忘れていたのでメモ。Windows 11 24H2/Ubuntu 24.04@WSL2 です。

デフォルトでは .bashrc に以下のようなPS1があって、プロンプト文字列が評価されるたびにエスケープシーケンスが端末に出力されてタブの名前が変わる。

PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"

一つのタブが単一セッションで、いろんなサーバにログインして作業している場面だと割と重宝するはするんだけど、最近は大画面で作業していて一つのタブの中に複数のペインを開いていることが多く、PS1でgitのブランチとかワーキングディレクトリをタブのタイトルに送り込むよりも「これについての作業してるタブです」みたいな内容を表示したい、というのが今回の動機です。あとデフォルトのPS1だと user@host:working_dirで単純に長くなり、タブに表示されるのが全部一緒の user@host にしかならなかった、というのもある。

さて、PS1の内容ですが、以下のようなエスケープシーケンスを送信しています。

  • \033 or \e = ESC
  • ]0; = “タイトル設定(0)”
  • \a = BEL(終端)

これを(エスケープシーケンスの開始と終了を)外せばタブのタイトルの自動的な変更がなくなる。簡単。

あとは適当なタイミングで printf '\e]0;%s\a' "タイトル" とすると、ターミナルがそれを解釈して、タブの名前が変わるわけですね。

このあたりの挙動は世の中で統一されているわけではなくターミナルソフトウェアによって違う気がする。Windows Terminalについてはここにまとまってるかなと思ったけど、]0; はないな? 伝統的な共通のVT100互換の範囲ではなく拡張の範囲だからなあ。統一されてほしい。

「センスがいい」は「自分にとって、あまり苦痛ではなく、着ると姿勢が良くなる服」みたいなやつ

gitのコマンド体系の良さは「現在の作業ディレクトリの状態」を常に利用者に意識させることにあると思う。たぶん、これが利用者のメンタルモデルとあってるからうまくいっている。

もともと存在するプログラマのメンタルモデル。ソースコードには修正が連なるひとつの trunk(幹)があり、それに対して自分が作業しているのが途中から分岐した branchであるぞ、という世界の理解があるので、git の操作に慣れるのは正規化されはするけど、まったく新しい不自然な概念を学ぶことにはならない。

でもこれがうまくいくのは端的には非凡なセンスのなせる業という気もする。最近だと uv と nix がセンスいいなと思った。使っているとそのかたちに矯正されていく感じがする。あるコマンドをたたくと自然に次にやることが頭に浮かぶ。というのは、自分の置かれている状態が更新されるということで。それが現実世界とズレる不安が小さい。

react-reduxとかTEAもそういうとこあった。しばらく使っていると、UIの更新を一つの状態モデルへの更新差分のストリームをランタイムが処理するイメージが頭に構築されていくし、それはWebフロントエンド以外でもそういう見え方をするようになっていく。すると以前あんまりしっくりこなかったIOモナドみたいなのがぐっと身近に感じられるように...などと連鎖していく。

そういう道具を使ってると、この道具センスいいな~、となんとなく思っちゃうんだけど、これはかなり自分中心の相対的な感覚だと思うんだよな。自分のものの見方をアップデートしてくれる、ブレない軸をもったなにかのことを、センスいいなと感じる感覚がありそう。

Windows Terminalで非アクティブなペインの外観のカスタマイズ

例えばこんな感じにするとよいらしい。意外と設定コンソールから設定箇所を発見することができず、ctrl + shift + ,で開く settings.json のファイル修正が必要だった。当然ほしい設定項目だと思うけどな~。

{
  "profiles": {
    "defaults": {
      // アクティブ(フォーカス中)の見た目
      "background": "#0C0C0C",
      "foreground": "#CCCCCC",
      "opacity": 100,
      "useAcrylic": false,

      // 非アクティブ(フォーカス外)の見た目
      "unfocusedAppearance": {
        "background": "#202020",
        "opacity": 85,
        "useAcrylic": false
      }
    }
  }
}

Alt + Shift + + / - にペイン分割、Alt + <Arrow Keys>での移動がデフォルトキーバインドでは割り当てられているのだけど、これで分割ペイン環境で快適に生活ができます。

Windows Terminalで新しいタブやペインを開く際に前のターミナルの作業ディレクトリを引き継ぐ

公式にドキュメントがある。PROMPT_COMMANDでエスケープシーケンスを発行して現在のディレクトリをターミナルに伝えるといいでしょうと。公式にあるなんて最高。すばらしい。

動かない... それ ubuntu.exe のせいでは?

でも、動かない。なぜ。ギギギ...となっていた。

うんうんうなっていたのだけど、こちらのツイートにたどり着いた。

起動設定が「ubuntu.exe」となっているプロファイルはだめで、「C:\Windows\system32\wsl.exe -d Ubuntu」のほうはちゃんと動くらしい

なんですって~

あんまり意識してなかったので実行バイナリどこにあるのかとみてみた。powershellwhich ではなく where.exe なんですね。面白い。whereLINQの組み込みキーワードに吸われているのも面白い。

PS C:\WINDOWS\system32> where.exe wsl.exe
C:\Windows\System32\wsl.exe
C:\Users\takas\AppData\Local\Microsoft\WindowsApps\wsl.exe
PS C:\WINDOWS\system32> where.exe ubuntu.exe
C:\Users\takas\AppData\Local\Microsoft\WindowsApps\ubuntu.exe

WindowsApps/ 以下にある wsl.exeSystem32/ 以下にあるやつが別物?

PS C:\WINDOWS\system32> C:\Windows\System32\wsl.exe --version
WSL バージョン: 2.6.3.0
カーネル バージョン: 6.6.87.2-1
WSLg バージョン: 1.0.71
MSRDC バージョン: 1.2.6353
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.26100.1-240331-1435.ge-release
Windows バージョン: 10.0.26200.7623
PS C:\WINDOWS\system32> C:\Users\takas\AppData\Local\Microsoft\WindowsApps\wsl.exe --version
WSL バージョン: 2.6.3.0
カーネル バージョン: 6.6.87.2-1
WSLg バージョン: 1.0.71
MSRDC バージョン: 1.2.6353
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.26100.1-240331-1435.ge-release
Windows バージョン: 10.0.26200.7623

いや別に違いはなさそうだ。実際、以下の設定にしたらうまくタブの引継ぎが期待通り動作しました。最高です。(新規タブ、というよりは duplicate tab と split pane のときですが問題ない) Windows Terminalはかなり出来が良いので、作業ディレクトリの引継ぎが機能するならほとんど不満はないです。

ubuntu.exe から wsl.exe -d Ubuntuに変更した

これで、完璧... と思ったけど別のPCでセットアップしたらうまくいかない

起動時にホームディレクトリに移動する設定を消しておく

別のマシンで試したときはそもそも起動時にホームディレクトリへ移動する設定になっていた。

--cd ~ これでは強制的にホームディレクトリ開始してしまうのはそうっぽい。

これを消すと、wsl.exe を起動したプロセスからカレントディレクトリを引き継ぐようになる。初期状態から起動すると /mnt/c/windows/system32 になったりしてちょっと気持ち悪い。

そこで開始ディレクトリ設定をWindows Terminalでするのだけど、これはWindowsのパスを指定することになる。LinuxのホームディレクトリをWindowsのパスに変換してやるには、wslpath -w を使う。

Linux側で、

wslpath -w ~/

とかやった結果をターミナルプロファイルの開始ディレクトリとして設定しておくと、新しく起動するときも、既存のタブを複製(公式サイトの示すように現在パスを更新するようにしておく前提で)するときも期待する感じの挙動になると思う。

そういえば

そういえば、ちゃんとコンテキストメニューを表示するようにするオプションも生えてました。ただ、最初ぶうぶう言ってましたがここしばらくで慣れてしまったので、右クリックではコピー/ペーストに戻してしまいました。ターミナルでのマウス操作ってウインドウスクロールとコピーする以外にあんまりなかった。

「右クリックでメニューを表示する」があって安心。