記事検索

検索ワードを入力してください。
Sky Tech Blog
【PowerShell】意図しない​挙動を​防ぐ​Set-StrictModeの​ススメ

【PowerShell】意図しない​挙動を​防ぐ​Set-StrictModeの​ススメ

PowerShellでは、未初期化変数は$nullとして扱われ、タイプミスなどが原因で意図しない不具合を生むことがあります。本記事では、この挙動を変更し、未初期化変数への参照をエラーとして検出する「Set-StrictMode」コマンドレットの使用方法を解説します。簡単なコード例を交えながら、厳格なチェックを有効にすることで、いかにして潜在的なバグを早期に発見し、コードの堅牢性を高めることができるかを紹介します。

PowerShellでは未初期化変数は$null値として扱われます。
この挙動は、意図しない不具合の原因となることがあります。

例えば以下のコードは一見、"Hello, World!"と表示されそうに見えます。

$message = "Hello, World!"

Write-Host $mesage

しかし、このコードを実行すると実際には何も表示されません。
これは、1行目 ($message) と2行目 ($mesage) で変数名がタイプミスにより異なっているためです。
結果として、2行目では初期化されていない変数を参照し、何も表示されません。

このコードは短いのですぐにタイプミスであると気づくことができますが、コードが複雑になるにつれ、このような問題には気づきにくくなります。

PowerShellではこのような挙動を変更するSet-StrictModeというコマンドレットがあります。
先程のコードの先頭に

Set-StrictMode -Version 1.0

と入力して再度、コードを実行します。

すると、以下の結果が表示されます。

変数 '$mesage' は、設定されていないために取得できません。
発生場所 C:\Users\sky\Documents\test.ps1:3 文字:12
+ Write-Host $mesage
+            ~~~~~~~
    + CategoryInfo          : InvalidOperation: (mesage:String) []、RuntimeException
    + FullyQualifiedErrorId : VariableIsUndefined

これなら未初期化変数を使ってしまっていた、ということがすぐに気づけます。

このようにSet-StrictModeコマンドレットではデフォルトの挙動を変更して厳格なチェックを行うモードに切り替えることができます。
Set-StrictModeコマンドレットでは指定するバージョンに応じて未初期化変数以外にも厳格なチェックを行うことができますので、ぜひご活用ください。


\シェアをお願いします!/
  • X
  • Facebook
  • LINE
キャリア採用募集中!

入社後にスキルアップを目指す若手の方も、ご自身の経験を幅広いフィールドで生かしたいベテランの方も、お一人おひとりの経験に応じたキャリア採用を行っています。

Sky株式会社のソフトウェア開発や製品、採用に関するお問い合わせについては、下記のリンクをご確認ください。
お問い合わせ
ホーム