- Published on
ConemuやHyperでコマンドを新しいタブで開いて実行したい
- Authors
- Name
- Shou Arisaka nyapp.buzz/shou
- short bio
- Z世代の情報技術者。Next.jsで自作SNSを個人開発中。
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/hyperissueがまだ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 codetmuxは前に記事も書いていますが活用しきれてなく、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を使ったこのようなスタートアップコマンドの実行方法はとても素晴らしいと思う。
15歳でWordPressサイトを立ち上げ、ウェブ領域に足を踏み入れる。翌年にはRuby on Railsを用いたマイクロサービス開発に着手し、現在はデジタル庁を支えたNext.jsによるHP作成やSaaS開発のプロジェクトに携わりながら、React.js・Node.js・TypeScriptによるモダンなウェブアプリの個人開発を趣味でも行う。
フロントエンドからバックエンドまで一貫したアジャイルなフルスタック開発を得意とし、ウェブマーケティングや広告デザインも必要に応じて担当、広告運用・SEO対策・データ分析まで行う低コストかつ高品質な顧客体験の提供が好評。
国内外から200万人を超える人々に支えられ、9周年を迎えるITブログ「yuipro」の開発者、デザイナーでありライター。現在ベータ段階の自作SNS「nyapp.buzz」を日本一の国産SNSとするべく奮闘中。