Blog

powershellでdialogを実装する

この記事は、ニフティグループ Advent Calendar 2023 10日目の記事です。

「CLIを使っていて、複数の選択肢から1つ選びたい。なおかつ値を入力するのではなく、カーソルを移動して選択したい。」と思ったことはありませんか?少なくとも私にはありました。
bashにはdialogコマンドが実装されており、予め設定した選択肢から1つを選択するような操作画面を出すことができます。
しかし、powershellにはそういった機能はありません。正確にはあるにはあるのですが、.NET Frameworkの機能を使って別ウィンドウを新たに生成するといったものになっています。できれば別ウィンドウは開かず、dialogのようにCLI上ですべて完結したいですよね。
そこで今回は、powershellを用いてdialogを実装してみようと思います。

つくってみた

array を渡すと選択肢が表示されて、選択した要素のindexが返ってくるようなpowershellコマンドを作ります。

環境

powershellのモジュールについて

powershellモジュールのディレクトリ構成は以下の様になります。

作成したモジュールは、.psm1で保存します。

保存するディレクトリ名とモジュールファイル名は同じにしてください。powershellはモジュール置き場に置かれたディレクトリ名と同じpsm1モジュールを検索して読み込みます。

どこに置けばよいかは、$env:PSModulePathで確認することができます。

ここで表示されているいずれかのディレクトリにファイルをモジュールディレクトリを格納してpowershellを再起動すると、自動でモジュールが取り込まれます。

実装

MyPsModule.psm1

動作確認

選択肢が表示され、カーソルが動くことを確認しました

まとめ

今回はpowershellでdialog機能を作成してみました。まだまだ荒削りなので、エラー処理ができていなかったり、カーソルが1度でも改行された状態でコマンドを使うとバグが出たりします。

今後はそのあたりもつめつつ、より実用性のあるパッケージにしていきたいです。

参考記事

シェルスクリプトでカーソルメニューつくる | matsub

Powershellでプロセスのメモリ使用量をロギングする

ニフティでは、
さまざまなプロダクトへ挑戦する
エンジニアを絶賛募集中です!
ご興味のある方は以下の採用サイトより
お気軽にご連絡ください!

ニフティに興味をお持ちの方は
キャリア登録をぜひお願いいたします!

connpassでニフティグループに
参加いただくと
イベントの
お知らせが届きます!