なぜ「Option Explicit On」なしでコードを書くのか?――VB.NETでバグを撲滅する「守りの技術」
業務自動化ツールを開発しているあなたに問いたい。
「なぜ、プログラムが意図しない挙動をしたのかわからない」という理由で、深夜までデバッグに時間を溶かすのですか?
VB.NETの世界において、「Option Explicit On」をオフにする、あるいは軽視することは、ブレーキのないスポーツカーで時速200kmを出すのと同じくらい無謀な行為です。
今日は、初心者から中級者へステップアップするあなたへ、伝説的なエンジニアだけが知っている「堅牢なコードの書き方」を伝授します。
—
1. 「Option Explicit On」はあなたの最良のデバッグツール
VB.NETのコード冒頭に必ず書かれている `Option Explicit On`。これは単なるおまじないではありません。「変数宣言を強制する」という、コンパイラに対する最強の命令です。
もしこれを `Off` にしているとどうなるか?
‘ Option Explicit Off の悲劇
Dim userName As String = “Taro”
userNmae = “Jiro” ‘ ここでスペルミスが発生!
‘ プログラムはエラーを出さず、意図しない新しい変数 “userNmae” を勝手に生成する
Console.WriteLine(userName) ‘ 結果は “Taro” のまま。なぜ変わらないのか悩むことに…
このコードでは、スペルミスが「エラー」ではなく「予期せぬ新しい変数」として解釈されます。規模が大きくなればなるほど、この種のバグを特定するのは困難を極めます。「コンパイル時に検知できるミスを、実行時に持ち越すな」。これがプロの鉄則です。
—
2. 現場で生き残る「堅牢なコーディング規約」
ただ `Option Explicit On` を付けるだけでは不十分です。実務で保守性を担保するためには、以下の規約をチームの標準にしてください。
① 宣言と初期化は同時に行う
変数は使われる直前で宣言し、可能な限り初期値を与える(`Dim` と同時に代入する)。これにより、スコープ(変数の有効範囲)を最小化し、メモリのライフサイクルを明確にします。
② 暗黙の型変換(Option Strict On)を併用する
`Option Explicit` とセットで必須なのが `Option Strict On` です。これは「型」の曖昧さを許さない設定です。
Option Explicit On
Option Strict On ‘ これで型の不一致による潜在的なバグを防ぐ
Module Module1
Sub Main()
‘ 明示的に型を指定し、曖昧な代入を防ぐ
Dim count As Integer = 10
Dim price As Double = 100.5
‘ DoubleをIntegerに代入しようとするとコンパイルエラーになる
‘ つまり、データ精度の欠落を未然に防げる
Dim total As Integer = CInt(count price)
Console.WriteLine($”合計: {total}”)
End Sub
End Module
—
3. 実践:保守性の高いファイル・DB連携コード
業務自動化で最も多い「ファイル操作」や「DB連携」においても、この厳格な型管理が真価を発揮します。
Imports System.IO
Public Class DataProcessor
”’
”’
Public Sub ProcessFile(ByVal filePath As String)
‘ ファイル存在チェックは必須。例外処理(Try-Catch)で囲むのがプロの設計
If Not File.Exists(filePath) Then
Throw New FileNotFoundException($”指定されたファイルが見つかりません: {filePath}”)
End If
Try
‘ Usingステートメントでリソースを確実に解放する(メモリリーク防止)
Using reader As StreamReader = New StreamReader(filePath)
While Not reader.EndOfStream
Dim line As String = reader.ReadLine()
If String.IsNullOrWhiteSpace(line) Then Continue While
‘ データを処理するロジック
ParseLine(line)
End While
End Using
Catch ex As Exception
‘ ログ出力の際は、単にエラーを表示するだけでなくスタックトレースを記録する
Console.WriteLine($”重大なエラーが発生しました: {ex.Message}”)
End Try
End Sub
Private Sub ParseLine(ByVal data As String)
‘ ここでも型を意識した分割を行う
End Sub
End Class
—
4. なぜこれが「最強の設計」なのか
1. コンパイラを味方にする: `Option Explicit On` / `Option Strict On` を使うことで、人間が見逃すミスを機械にチェックさせる。これが最も安上がりなテストです。
2. リソースの寿命を管理する: `Using` ステートメントを使うことで、ファイルハンドルやDB接続などのリソースを、スコープ終了時に確実に解放する。
3. 可読性と保守性: 変数の型が明示されていれば、後からコードを見た同僚(あるいは3ヶ月後の自分)が、データの性質を即座に理解できる。
まとめ:伝説のエンジニアへの第一歩
「動けばいい」コードは、明日には負債になります。
VB.NETの持つ厳格なルールを使いこなし、コンパイラをあなたの優秀な助手にしてしまいましょう。
今日から、すべてのソースファイルの冒頭に、この2行を刻んでください。
Option Explicit On
Option Strict On
この「守りの姿勢」こそが、業務を自動化する最強の武器になるのです。次の現場では、泥臭いデバッグ作業から解放されたあなたに会えることを期待しています。
