0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

WindowsのTerminalを使う開発時の初期設定

Last updated at Posted at 2023-05-21

はじめに

Windowsで、PowerShellとAnacondaとWSLのUbuntuを使う開発をやってます。役割は、PowerShellはgit、Anacondaはpythonの環境とか、Ubuntuでdockerを使ってます。よくあるのでは・・・?

それをWindowsのTemrinalで3つのタブでやってるんですけど、毎日きっちり同じ作業をするだけで、数分かかってめんどくさい。指の準備運動みたいな感じ。とにかくめんどくさい。

ということでそれを自動化したメモです。
どなたかのご参考になれば。
またよりよい方法があればコメント欄で教えてください。

最初に結論、全コード

下記の.ps1ファイルを作って、右クリックからPower Shellで実行することで解決してます。

初期設定.ps1
# 1. import
Add-Type -AssemblyName Microsoft.VisualBasic
Add-Type -AssemblyName System.Windows.Forms

# 2. Terminal起動
Start-Process wt.exe
sleep -Milliseconds 1000
$app = Get-Process -Name "WindowsTerminal"
[Microsoft.VisualBasic.Interaction]::AppActivate($app.ID)

# 3. Powershell
[System.Windows.Forms.SendKeys]::SendWait("cd C:\path_to_dev_dir{ENTER}") 
[System.Windows.Forms.SendKeys]::SendWait("git status{ENTER}") 

# 4. anaconda
[System.Windows.Forms.SendKeys]::SendWait("^(+2)") 
sleep -Milliseconds 2000
[System.Windows.Forms.SendKeys]::SendWait("conda info -e{ENTER}") 
[System.Windows.Forms.SendKeys]::SendWait("conda activate using_environment{ENTER}") 
[System.Windows.Forms.SendKeys]::SendWait("cd C:\path_to_dev_dir{ENTER}") 

# 5. Ubuntu
[System.Windows.Forms.SendKeys]::SendWait("^(+3)") 
sleep -Milliseconds 3000
[System.Windows.Forms.SendKeys]::SendWait("cd /mnt/c/path_to_dev_dir{ENTER}") 
[System.Windows.Forms.SendKeys]::SendWait("sudo service docker start{ENTER}") 
[System.Windows.Forms.SendKeys]::SendWait("docker-compose up{ENTER}") 

順に説明します。

1. 最初の呪文

初期設定.ps1の1/5
# 1. import
Add-Type -AssemblyName Microsoft.VisualBasic
Add-Type -AssemblyName System.Windows.Forms

あとで鍵かっこの[System.Windows.Forms.SendKeys]::SendWaitとかを使うためのimport文です。
これを書かないと、型 [System.Windows.Forms.SendKeys] が見つかりません。というエラーが出ます。

2. Terminal起動

初期設定.ps1の2/5
# 2. Terminal起動
Start-Process wt.exe
sleep -Milliseconds 1000
$app = Get-Process -Name "WindowsTerminal"
[Microsoft.VisualBasic.Interaction]::AppActivate($app.ID)

Terminalを起動して、アプリケーションを最前面に送ります。
このタイミングで別の作業をやろうと最前面に来たTerminalのウィンドウより前に何かをやると、そっちにキーを押す信号が送られる(SendKeyされる)ので触ってはいけないです。(ここはダサいから、本当はなんとかしたい)

wt.exeが、ターミナル(Windows Temrinal)のプログラムですね。準備ができるまで1秒待ってます。(ここもダサいけど、まじめに待つ処理を書いても数秒早く終わるということしか得られないので、費用対効果的にこれでいいかなと)

Get-Processでプロセス情報を得ます。ここで指定している「WindowsTemrinal」ですが、ほかのアプリでこの作業をしたいときのために書いておきます。
これはPowerShellの画面で、Get-Process | Select-Objectとやると一覧をざーっと見ることができます。出てくる表のProcessNameを指定します。なので起動中の秀丸エディタを呼び出したいときの指定方法は?というと、秀丸エディタを起動した状態で上のコマンドを実行してみたらなんとなくわかります。ちなみにHidemaruでした。exeファイル名とほとんど同じかもしれませんが、一応コマンドで見た方がよいかと。

AppActivateにプロセスID$app.IDを渡すと、ウィンドウが最前面に来ます。

3. PowerShell

初期設定.ps1の3/5
# 3. Powershell
[System.Windows.Forms.SendKeys]::SendWait("cd E:\Public\github\yo16\bookshelf_2023{ENTER}") 
[System.Windows.Forms.SendKeys]::SendWait("git status{ENTER}") 

最初はPowerShellで開発フォルダへ移動しています。cd ~というキー入力を送って、最後にENTERしてます。
そのあと、git statusして状態を確認してます。

4. Anaconda

初期設定.ps1の4/5
# 4. anaconda
[System.Windows.Forms.SendKeys]::SendWait("^(+2)") 
sleep -Milliseconds 2000
[System.Windows.Forms.SendKeys]::SendWait("conda info -e{ENTER}") 
[System.Windows.Forms.SendKeys]::SendWait("conda activate using_environment{ENTER}") 
[System.Windows.Forms.SendKeys]::SendWait("cd C:\path_to_dev_dir{ENTER}") 

つぎのAnacondaは、Ctrl+Shift+2で起動しています。
これは、私のTemrinalでは、下のように設定しているからできることです。
image.png
この設定方法は私の下記の記事とか、「windowsターミナルの設定追加方法」でググって調べてみてください。基本的にはショートカットを見て、マネして作ります。ご要望があればAnacondaの設定方法版も書きます。

話がそれたので戻して、Anacondaを起動するときの^とか+は、下記をご覧ください。^はCtrl、+はShiftだけど、結構癖があります。

そのあとなんとなく2秒ほど待ち、自動だったら不要だけど人だったらやるconda info -eをなんとなくしておいて、使う環境をconda activateしています。ここは普通のanacondaの操作方法。

5. Ubuntu

初期設定.ps1の5/5
# 5. Ubuntu
[System.Windows.Forms.SendKeys]::SendWait("^(+3)") 
sleep -Milliseconds 3000
[System.Windows.Forms.SendKeys]::SendWait("cd /mnt/c/path_to_dev_dir{ENTER}") 
[System.Windows.Forms.SendKeys]::SendWait("sudo service docker start{ENTER}") 
[System.Windows.Forms.SendKeys]::SendWait("docker-compose up{ENTER}") 

最初の起動手順はAnacondaと同じで、Ubuntuは3にしているのでCtrl+Shift+3です。
OSの起動なのでなんとなく3秒待って、あとはコマンドを送っているだけです。
cdして、Dockerのサービスを起動して(いちいちやらなくていい設定方法があるのでソレやりたい人は調べてください)、docker-composeを使ってるので起動するところまでやってます。

まとめと所感

難しいことはなく、知ってるか知らないかだけの話でした。私は暗記しておくほど脳の記憶容量が大きくないので、すぐ忘れて、次に必要な時にこの自分の記事を見てコピペすることになるでしょう。

意外とこういう自動的に処理をする系の作業は、やらない人はやろうとしないです。できるかどうかすら考えない。ま、やればいっか、という感じで近視眼的。新しいことを調べたり考えたりしないといけないから、ちょっとした敷居があるんですよね。だけど1度やったらもう忘れていいし、こういうことの積み重ねで、仕事の早い人とそうでない人の差が出ると、私は思います。

一方で、退屈なことはPythonにやらせようという本が爆発的に人気になってたりして、自動化勢も割といるとも言えますね。「ま、やればいっか」勢の人は、本当に後れを取るんだと思います。

この記事を読んでくださっている方は自動化勢だと思いますので、まだ始められていない方は、とりあえず簡単なところからやってみたらいかがでしょうか。
私も、このps1ファイルをwindowsを起動したら勝手に連動して起動してもらうためにはどうしたらいいか(shell:startupを検索して入れるだけなんですが)とか、Visual Studio Codeも開くとか、Explorerもとか、さらに改善していきます!

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?