PowerShell を使っていると、次のようなエラーが急に表示されることがあります。
初見では意味が分かりにくいエラーですが、原因と対処法さえ理解してしまえば、再発防止が簡単になります。
本記事では、このエラーの意味、よくある発生原因、そして具体的な対処方法まで分かりやすく解説いたします。

◆ “Cannot index into a null array” の意味
このエラーは直訳すると「null の配列にインデックス指定してアクセスできません」という意味です。
つまり $array[0] のように要素を参照しようとした時、その配列そのものが存在しない(null) 場合に発生します。
例:
PowerShell では空配列 @() と null は異なる扱いになります。
| 状態 | 値 | OK/エラー |
|---|---|---|
| 配列が空だが存在する | @() | $array[0] → エラー(ただし null ではない) |
| 配列が存在しない | $null | $array[0] → Cannot index into a null array が発生 |
◆ よくある発生原因
● ① コマンドレットの結果が返ってきていない
例:ファイル検索結果を変数に入れている場合
→ フォルダが存在しない、またはファイルが1つも無い場合 $files は $null になります。
● ② ループや条件分岐の前提が間違っている
配列前提で $result.Count を使うなど、変数の状態を確認せずに処理しているケースです。
● ③ Web API・JSON変換・正規表現などの結果が期待通りでない
例:
→ items が存在しない場合、同じく null になります。
◆ 対処法
✔ 方法1:変数が null か確認する
✔ 方法2:@() を使って配列として扱う(推奨)
最も効率の良い対処方法です。
@() を付けることで、結果が1件でも0件でも必ず「配列」として扱えるため、エラー防止になります。
✔ 方法3:?.(Null 条件演算子)を使う
PowerShell 7 以降なら Null 安全演算子が使えます。
→ null の場合もエラーにならず、結果は空になります。
◆ 再発防止ポイント
-
外部コマンドの結果は必ず null になる可能性がある前提で書く
-
返り値は
@()で配列化すると安全 -
PowerShell 7 以上なら
?.演算子を活用する
特に @() パターンはスクリプト全体の安定度が大きく向上いたします。
◆ まとめ
| 項目 | 内容 |
|---|---|
| エラー原因 | null の配列に対してインデックス指定でアクセスしたため |
| よくある原因 | 検索結果・API結果・条件分岐ミス |
| 対処方法 | $null チェック、配列強制 (@())、Null 条件演算子(?.) |
PowerShell の配列は柔軟ですが、null が混ざると突然エラーになる場合があります。
今回の対処パターンを覚えていただくことで、より安定したスクリプト設計が可能になります。
