ほとんど毎日の作業としてこんなものがあります。
- Windows Terminalを起動する(スタートアップ起動)
- winget実行してアプリケーションを最新にする
- npm installを(同上)
- dotnet global packageを(同上)
- PowerShellのパッケージを(同上) ....
シェルのヒストリーがあるとはいえ、まぁまぁめんどくさい。バッチにして、Terminalのタブ起動時に実行してもいいけど、空振りすることがわかっているのに実行されるのもちょっと嫌だなぁ、と思っていたらはせがわようすけさんがこんなことを書かれていました。
Windows Terminalで、最初の一つ目のタブを立ち上げたときにだけ特定コマンドを実行するようにって、いいかんじに設定できないの?
— Yosuke HASEGAWA (@hasegawayosuke) June 20, 2024
そうだよなぁ、まさにそうと思って簡単なツール作ってみるか?とGitHubにレポジトリ作ったのがこの後すぐ…だけど、めんどくさくなってきて(笑。ほかにもやることあったし)、長い間放置していました。
当時からRustもあり、勉強がてらいいかな?と思ったけど、C/C++のほうがわかるし別に起動してすぐ終わるツールだからC++でいっかと思ってつくりはじめたものの、時間とられすぎて放置していたのです。でもやっぱり面倒になったところに出てきたのがGitHub Copilot(とエージェント)。コード補完やAskしかなかった頃は「違うそうじゃない」と思って、やはりあきらめたのです。
しかし、GPT-5以降のモデルの利用やAgentモードになって自分が作るよりも立派なものをより早くできるようになったので冬休み頑張って仕上げました(Copilotが)。Coding Agentは今のところUbuntuで動いていたので、WindowsのC++は駄目だろう?と思っていたのですがビルドは当然してくれないものの、コンパイルエラーにならない程度のものを作ってくれてびっくりでした。
あとはローカルのVisual Studioで仕上げます。最初「GoogleTestとcmakeがデファクトだよ」と言われて(Ubuntuで動いていたのもあったのでしょうが)、そのまま承諾していたらローカルでGoogleTestがさっぱり動かない。DLLがないっぽいのですが、ちょっとわからなかったし動かせる自信もモチベーションもなかったので、MicrosoftのC++ Testing Frameworkに変えて、cmakeもやめました(のでコミット記録が結構残っています)。この辺の変更もAgentにやってもらいました。
この辺は最初にちゃんとカスタムイントラクション作らなかったのがいけなかったかな、と反省しています。
あと、レポジトリのルートにあるreadme.mdをVisual Studioが認識しない?っぽいのでそこも結構困る。いぜんかずきさんが似たこと(.NETのプロジェクト)で困られていて、「GitHubにあるものであれば大丈夫そうだ」と書かれていましたが、C++のプロジェクトでは認識していないようにも見えます。この辺は要調査。
とまぁ長々と書きましたが、Copilotのおかげで割と自分が納得いくツールになったと思うので良ければ使ってください。wingetへの登録も後ほど…。Visual Studio 2026使っているのにツールセットが2022なのはGitHub Actionsのhosted runnerにVisual Studio 2026が入っていないからです。
最初はNTFS代替ストリームに最終実行時間を書こうかなとか思っていましたが、起動パラメータとかjsonにするんだからjsonでもいいかと思いなおしました。200KB程度の小さいバイナリーにしましたが、できれば100KB程度にしたかった。