~/blog/opening-commands-in-new-tabs-in-conemu-or-hyper
Published on

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

2474文字5分で読めます–––
閲覧数
Authors
  • avatar
    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/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を使ったこのようなスタートアップコマンドの実行方法はとても素晴らしいと思う。

avatar

Shou Arisaka

情報技術者 / Z世代プログラマー / SaaSアプリやSNSを開発
今すぐ話そう!

15歳でWordPressサイトを立ち上げ、ウェブ領域に足を踏み入れる。翌年にはRuby on Railsを用いたマイクロサービス開発に着手し、現在はデジタル庁を支えたNext.jsによるHP作成やSaaS開発のプロジェクトに携わりながら、React.js・Node.js・TypeScriptによるモダンなウェブアプリの個人開発を趣味でも行う。
フロントエンドからバックエンドまで一貫したアジャイルなフルスタック開発を得意とし、ウェブマーケティングや広告デザインも必要に応じて担当、広告運用・SEO対策・データ分析まで行う低コストかつ高品質な顧客体験の提供が好評。
国内外から200万人を超える人々に支えられ、9周年を迎えるITブログ「yuipro」の開発者、デザイナーでありライター。現在ベータ段階の自作SNS「nyapp.buzz」を日本一の国産SNSとするべく奮闘中。

Created with Fabric.js 5.2.4 何かご質問がありますか?