環境構築なしでらくらくプログラミング、やりたくないですか?
この記事はFUN Advent Calender 2022 part3の15日目の記事です。
遅刻です!!!昨日の記事は、こちらでした。
あなた誰?
Squatarolaと申します。
17期生でした。
今はキーボードのボタンをランダムに押して怪しげな魔術を生成しています。
前置き
手元でパッとプログラムを書いて動かしたいとき、ありませんか?
そんなときにプログラムを動かす環境を構築するのは正直面倒です。
そんなときはWindowsにデフォルトでインストールされているPowerShellを使いましょう
スタートボタンを押して「powershell」と入力、なんか出てきたらEnterキーを押すだけです。
MacOSやLinuxの方は後述するpwshを使いましょう。
そもそもPowerShellってなに?
PowerShellは2006年に発表されたMicrosoft製のCLIシェルおよびプログラミング言語です。Windows 7から標準搭載されています。
.NET FrameworkやCOMオブジェクトなどのWindowsの色んなところを触ることができます。
記事内ではPowerShell v5.1を対象とします。
pwshについて
記事の作成時点でのPowerShellの最新バージョンはv7.3.1です。
PowerShellはv6系からオープンソース化され、MacOSやLinuxでも動作するようになりました。
しかし、Windowsを含めてインストールを含めた環境構築が必要な点とそれなりに破壊的変更が加えられています。(.NET Coreを使うようになったりとか)
そのため、本記事では詳しく解説しません。もしかしたら動かないコードもあるかもしれません。
ダウンロードして使いたいという方はこちらからどうぞ。
本題
PowerShellはPythonとC#に近い言語です。(実際C#のコードをインポートして使うことができます)
早速使ってみましょう。
(Windowsを使っていれば)起動は簡単です。
1.「スタート」を押す
2.「powershell」と入力
3. エンターキーを押す
大抵の人は怪しげな青いウィンドウが出てくるかと思います。
私の環境ではWindowsターミナルに内包されているので黒い画面ですが同じです。
これがPowerShellです。
名前の通りシェルなのでコマンドを入力して結果を得ることができます。
よく使うコマンド(正式にはコマンドレットといいます)はデフォルトでエイリアスが入っています。
パイプで処理を繋くことも簡単です。
スクレイピングもお手のものです。
bashでは一癖ある配列やマップも簡単です。
.NETの強力なメソッドも一行で呼び出せます。
ここではパス文字列からディレクトリと拡張子を除いたファイル名を取得しています。
ちなみにタブがなかなか強力に効きますよ。
基本的に近代的なプログラミング言語にできてPowerShellでできないことはないと思っていいと思います。
プログラミング言語なのでスクリプトもかけます。
class Maru {
$profile = @{
"name" = "Maru"
"age" = 21
"food" = 0
}
[void] addFood([string] $food) {
$this.profile."food" += 1
Write-Host "$($food)ありがとずら~"
}
}
$food_list = @("サラダ", "パン" , "ステーキ", "パスタ", "ワイン", "ケーキ")
$maru = New-Object -TypeName Maru
$food_list | ForEach-Object {
$maru.addFood($_)
}
実行結果
サラダありがとずら~
パンありがとずら~
ステーキありがとずら~
パスタありがとずら~
ワインありがとずら~
ケーキありがとずら~
PowerShellはMicrosoft製品にしては珍しくドキュメントがあるので言語仕様等はこちらをご覧ください。
ちなみにスクリプトを実行する際には以下のコマンドを使って、セキュリティ設定を変更しておく必要があります。
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
まとめ
マイナーに思われがちな言語であるPowerShellですが、Windowsの出荷数が出ているという優位性から、想像以上に実社会では使われています。
紹介した他にもGUI操作の自動化なんてのもできます。
ぶっちゃけC#がわかればなんとなく使えるので、みなさんもひとかじりやってみるといいと思います。
明日(というか12/16)の記事はこちらです。
余談
Excel等のMicrosoft製品の多くはCOMオブジェクトを持っています。
PowerShellはCOMオブジェクトに対してアレコレできるので、結果としてVBAと同等の自動化処理をこなすことができます。
Git等のCVSでdiffがでないExcelマクロなんかやめてPowerShellを始めましょう。
全人類はつまらない反復作業に時間を取られていないで自動化をしなさい。
余談2
PowerShellの罠について
Discussion