はじめに
Windowsで、PowerShellとAnacondaとWSLのUbuntuを使う開発をやってます。役割は、PowerShellはgit、Anacondaはpythonの環境とか、Ubuntuでdockerを使ってます。よくあるのでは・・・?
それをWindowsのTemrinalで3つのタブでやってるんですけど、毎日きっちり同じ作業をするだけで、数分かかってめんどくさい。指の準備運動みたいな感じ。とにかくめんどくさい。
ということでそれを自動化したメモです。
どなたかのご参考になれば。
またよりよい方法があればコメント欄で教えてください。
最初に結論、全コード
下記の.ps1
ファイルを作って、右クリックからPower Shellで実行
することで解決してます。
# 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. 最初の呪文
# 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起動
# 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
# 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
# 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では、下のように設定しているからできることです。
この設定方法は私の下記の記事とか、「windowsターミナルの設定追加方法」でググって調べてみてください。基本的にはショートカットを見て、マネして作ります。ご要望があればAnacondaの設定方法版も書きます。
話がそれたので戻して、Anacondaを起動するときの^
とか+
は、下記をご覧ください。^
はCtrl、+
はShiftだけど、結構癖があります。
そのあとなんとなく2秒ほど待ち、自動だったら不要だけど人だったらやるconda info -e
をなんとなくしておいて、使う環境をconda activate
しています。ここは普通のanacondaの操作方法。
5. Ubuntu
# 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もとか、さらに改善していきます!