tmuxのことがわかってきた、と思っていた矢先に、また詰まった。
Ctrl+Bが効かない日があった
tmuxを使っていると、なぜかCtrl+Bが効く日と効かない日があった。
効かないとき、何度押しても無反応だ。Ctrl+Bを押して、Dを押してデタッチするはずなのに、何も起きない。
前の日は普通に使えていたのに、今日は全く反応しない。
自分の操作が間違っているのか、設定が変わったのか、それとも何か壊れたのか、まったく見当がつかない。
最初は「押し方が足りないのかもしれない」と思って、何度も何度も押してみた。
当然何も変わらない。
次に「もしかしてtmuxが起動していないのかもしれない」と思って、tmuxを起動しようとした。
そうするとまた前話のようなネスト問題になりかねないので恐る恐る打ち込む。
「またネストしてしまったか」と思ってGeminiに聞いてみるが、そういう話でもないらしい。
じゃあ何が違うんだと何度も確認するが、原因がわからないまま時間だけが過ぎる。
こういう「なぜかわからないが動かない」の時間が、この頃は毎日どこかで発生していた。
その日は結局あきらめて、翌日やったら普通に動いた。
なぜ動いたのかもわからなかった。
TeraTermが横取りしていた
翌日また効かなくなったとき、Geminiにもっと詳しく状況を説明した。
「昨日は動いたのに今日はまた動かない」
「昨日と今日で何か変わったことはあるか」と聞かれたので、うーんと考えた。
「日本語入力のままだったかもしれない」
するとGeminiから意外な答えが返ってきた。
「TeraTermがCtrl+Bを横取りしている可能性があります」
は?
Ctrl+Bはtmuxへの合図のつもりで押していたが、その信号がサーバーに届く前に、ローカルのTeraTermに吸収されてしまっていることがある、ということらしい。
つまりキーを押してはいるが、tmuxには一切伝わっていない。
自分はtmuxに話しかけているつもりなのに、TeraTermが全部横で聞いていて、サーバーに転送していなかった。
仲介役のTeraTermが勝手に「これは自分への指示だ」と判断して、奥にいるtmuxに届ける前に処理していた、というイメージだ。
「TeraTermの設定→キーボード→コントロールキーの送出を確認してください」と言われた。
あとIMEが日本語入力モードになっているとCtrlキーの挙動がおかしくなることがあるので、必ず英数入力状態で操作してください、とも。
言われた通り確認したら、日本語入力がオンになっていた。
半角/全角キーを押して英数入力に切り替え、もう一度Ctrl+Bを押したら、届いた。
そういうことか。
tmuxが壊れていたのではなく、そもそもキーが届いていなかっただけだった。
効く日と効かない日があったのも、日本語入力のオン・オフが切り替わっていたからだと思う。
謎だった数日間の原因が、「入力モードの確認を忘れていた」というだけだったとわかったときのなんとも言えない気持ちは今でも覚えている。
Claudeの入力欄にコマンドを打っていた
似たような話がもう一つある。
tmuxから抜け出せないとき、焦るあまりにClaude Codeの入力欄に
「tmux detach」
とか
「部屋から出る」
とか打ち込んでいたことがあった。
パニックになるとどこに打てばいいかわからなくなって、とりあえず目の前にあるチャット欄に打ち込んでしまう。
当然、何も起きない。
Claudeが「tmux detachはターミナルで実行するコマンドです。ターミナル上で実行してみてください」と丁寧に教えてくれる。
そうじゃない、コマンドを実行したいんじゃなくて本当に出られないんだ、という気持ちになるが、冷静に考えればClaudeは何も悪くない。
チャット欄にLinuxコマンドを打ち込んでいる自分がおかしい。
第2話でも同じことをやっていたのに、焦ると同じ失敗を繰り返す。
「部屋から出る」という日本語を打ち込んでいたこともある。
Claudeは「tmuxのセッションからデタッチするには、Ctrl+B を押してからDを押してください」と答えてくれる。わかってる、それが効かないから困ってるんだ、という堂々巡りだ。
この「焦るとチャット欄に打ち込む」という癖は、しばらく直らなかった。
今でもたまにやる。
プロンプトの意味を初めて理解した
この頃、ターミナルに表示されている文字列の意味をちゃんと理解していなかった。
〇〇@xxx-xxx-xxx-xxx:~/projects/website-a$
これがずっと画面の左端に出ているのだが、なんとなく「なんか文字が出てるな」くらいにしか見ていなかった。
記号と英数字と記号が並んでいて、毎回読み飛ばしていた。
どうせ意味のある情報じゃないだろう、くらいに思っていた。
あるときGeminiに「今自分がどこにいるか確認する方法は?」と聞いたら、「今表示されているプロンプトを見てください」と言われた。
「〇〇というユーザーが、xxx-xxx-xxx-xxxというサーバーの、~/projects/website-aというフォルダにいる、という意味です」
あ、これ「今どこにいるか」がそのまま書いてあったんだ。
ずっと見ていたのに、読んでいなかった。地図を持ちながら地図の読み方を知らなかった、みたいな話だ。
これ以来、プロンプトを意識して見るようになった。
フォルダを移動するたびにプロンプトが変わる。
サーバーが違えばホスト名の部分が変わる。
どのフォルダにいるか、どのサーバーにいるかが一目でわかるようになると、「今どこにいるんだっけ」という迷子感がだいぶ減った。
あんなに読み飛ばしていたのに、今は真っ先に確認する。
環境が変わると知識がリセットされる
TeraTermで使えていた操作がVSCodeのターミナルで使えなかったり、その逆もあったりした。
同じCtrl+Bのはずなのに、ツールによって届いたり届かなかったりする。
同じコマンドのはずなのに、環境によって動いたり動かなかったりする。
最初はこれが本当に混乱した。
「昨日できたのに今日できない」のも、「あのツールではできたのにこっちではできない」のも、すべて自分の操作ミスだと思っていた。
でも実際は、環境やツールの側の問題であることが多かった。
自分が何か間違えたわけではなく、ただ使っているものが違うというだけで、動いたり動かなかったりする。
逆に言うと、TeraTermで詰まったことがVSCodeのターミナルに切り替えたら一瞬で解決した、ということも何度かあった。
行き詰まったらツールを変えてみる、環境を変えてみる、というのも立派な解決策だと学んだ。
エンジニアの人はこういうことを最初から知っているんだろうか。
だとしたら最初から教えてほしかった。
← 前の話|第3話|tmuxの中にいることに気づかないままtmuxを起動して出られなくなった話 | 次の話|第5話|GmailのアプリパスワードをAIのチャット欄に貼り付けてしまった話 →

コメント