プログラミング

ConemuやHyperでコマンドを新しいタブで開いて実行したい

ConemuやHyperなどのコマンドラインターミナルエミュレータで、コマンドを新しいタブやウィンドウで開いて実行する、といったことは可能なのでしょうか。
ターミナルソフトウェアのウィンドウやタブをCLI、コマンドとして管理できるのは、プログラマとしてはもし可能なら有り難い機能です。

例えば使用例の想定として、以下のようなシナリオが考えられます。

hyper --tab --title "Server" --script "cd $HOME/myProject/server && bundle exec rails s"
hyper --tab --title "Console" --script "cd $HOME/myProject/server && bundle exec rails c"
hyper --tab --title "Specs" --script "cd $HOME/myProject/server && bundle exec guard"

@jacquescrocker
Selecting a shell on startup in the Hyper terminal emulator

hyperのタブを開いて、.bashrcの実行を待ち(あるいはログインシェルじゃなくていいでしょうが)、そこでようやくコマンドやバッチコマンド、ファイルを実行することができます。
例えるなら、sudo apt update ; sudo apt install package -yをそれぞれ別に実行して3回待たなくてはいけないのと同じくらいにプログラマとしては時間消費効率の悪い作業です。

僕の場合極端ですが、スタートアップで立ち上げたいスクリプトがいくつかあり、それらをそれぞれターミナルとタブの立ち上げを待って実行していくやり方をしていました。そのせいでWindowsを再起動するのやSSDを入れ替えたりするのがすごい億劫なのです。
なので、もしコマンドを新しいタブで開いて実行的なことができるなら、それはかなりいい。

しかし、残念ながら見たところ、それをやるのは厳しいみたいである。
Hyperにまさにそれをやりたいという人のissueが投稿されていたので見てみます。

Use Hyper CLI to open multiple windows and tabs with configuration · Issue #462 · vercel/hyper

issueがまだopenなので察しますが、実装できるかもしれないという方向性で話が進行形で進んでいるようです。
といってもすごい低アクティブです。2021年に実装されることはないようにも思う。

Guake Terminal has something very similar to this

Guake Terminalというのが似た機能を持っている、という情報はこの中から見つけましたが、gnomeというと、Linuxマシン用ですよね。できればHyperのようなクロスプラットフォームで…。

そこで、色々考えを巡らせていると、
「もしかしてtmuxでいけるのでは」
と思い至りました。

(インストール)

sudo apt update ; sudo apt install tmux -y

(Github)

tmux/tmux: tmux source code

tmuxは前に記事も書いていますが活用しきれてなく、tmuxがどういうやつなのかよくわかっていません。おそらくターミナルエミュレーターエミュレーターみたいな感じなんだと思います。

例えば以下の関数が.bashrcにあって、
.bashrcを読み込んだログインシェルでweb_dを普段は実行しているとします。

web_d(){
  cd /mnt/c/pg/web/public && http-server -p 8091 &> /dev/null & lt --port 8091 -s hogehoge
}

そういうやり方をしていると前述の通り無駄な時間がかかるわけですが、

tmuxであればこれを以下のようにやってバックグラウンドでログインシェル、.bashrc、コマンドまでを自動でやって待機していてくれます。

tmux new-session -d -s "web_d" 'bash -ic "web_d;"'

アタッチしたいときはtmux attach-session -t webみたいにすればいいです。
そこで、ちゃんと動作しているか、ログされているかなどをオンデマンドにチェックすることができます。
例えるなら、ヘッドフルでpuppeteerを動かすか、ヘッドレスでpuppeteerを動かすか、くらいの違いがCPUに出そうなところも注目です。

そんな感じで、ConemuやHyperでコマンドを新しいタブで開いて実行したい、ということでしたが、
ターミナルエミュレータでタブやウィンドウを物理的に開いてコマンドを実行させるのと、
バックグラウンドで実行させておいてチェックしたいときにattach-sessionをするのとでは、慣れてしまえばあまり違いがないように思います。

僕の環境が異常なだけかWSL1が遅いからなのか不確かですが、
僕のbash環境は.bashrcと初期化スクリプトを読み込むのに40秒くらいかかります。(.bashrcは3.5万行くらい)

そんな感じなので、なおさらtmuxを使ったこのようなスタートアップコマンドの実行方法はとても素晴らしいと思う。