【入門編】初心者向け:VB.NETのConsoleアプリケーションにおける標準入出力制御:StreamReaderとStreamWriterでログを確実に書き出す基本 – Visual Basic (VB / VB.NET)解析バイブル

スポンサーリンク

コンソールアプリの「呼吸」を整える:StreamReader/Writerによる確実な入出力術

こんにちは。現場で泥臭い自動化を積み重ね、いつしかシステムという巨大な機械のアーキテクトになった私が、今日は君たちに「プログラムの呼吸」について話をしよう。

VBAの「マクロの記録」から一歩踏み出し、Visual Basic (VB.NET) という本格的な武器を手にした君たちへ。コンソールアプリケーションは、いわば「黒い画面」との対話だ。ここで入出力を正しく制御できるかどうかは、君が書いたプログラムが「ただ動くだけの玩具」になるか、「現場を支える堅牢なツール」になるかの分かれ道だ。

今日は、最も基本的であり、かつ最も重要な「StreamReader」と「StreamWriter」による入出力の極意を伝授する。

1. なぜ「Console.ReadLine」だけでは不十分なのか?

初心者の多くは `Console.ReadLine()` で入力を受け取り、結果を画面に出力して終わりにする。だが、実際の業務ではどうだ? 処理結果はログファイルとして保存しなければならないし、膨大なデータを読み込ませることもある。

ここで登場するのがストリーム(Stream)という概念だ。

ストリームとは、データが流れる「管(パイプ)」のこと。`StreamReader` は管からデータを取り出し、`StreamWriter` は管にデータを流し込む。この「管」を意識するだけで、君のコードの質は劇的に向上する。

2. 確実に書き出すための「StreamWriter」レシピ

まずは、処理結果を安全にファイルへ書き出すコードを見てみよう。ここで重要なのは、「使い終わったら確実に閉じる(解放する)」ということだ。

Imports System.IO

Module Program
Sub Main()
Dim logPath As String = “process_log.txt”

‘ Usingブロックを使うのがエンジニアの流儀。
‘ これにより、処理が終わった瞬間にメモリが解放され、ファイルも安全に閉じられる。
Using writer As New StreamWriter(logPath, append:=True)
writer.WriteLine($”[{DateTime.Now}] 処理を開始しました。”)

Try
‘ ここにメインの処理が入る
Dim result As Integer = 100 / 2
writer.WriteLine($”[{DateTime.Now}] 成功: 結果は {result} です。”)
Catch ex As Exception
‘ エラーが発生した時こそ、ログの真価が問われる
writer.WriteLine($”[{DateTime.Now}] エラー発生: {ex.Message}”)
End Try
End Using ‘ ここで自動的にDisposeが呼ばれ、リソースがクリーンになる

Console.WriteLine(“ログの書き出しが完了しました。”)
End Sub
End Module

ここがプロのポイント!

  • `Using` ステートメント: これを使わないコードは、メモリリーク(メモリの食い逃げ)の温床だ。VB.NETでは `Using` を使うだけで、例外が発生しても確実にファイルを閉じてくれる。
  • `append:=True`: これを忘れると、毎回ファイルが上書きされて過去のログが消える。「追記モード」はログ出力の基本中の基本だ。

3. 「StreamReader」で巨大なデータも安全に読み込む

次に、外部ファイルから設定値を読み込む場合だ。全部を一度に読み込むとメモリを圧迫するが、ストリームなら一行ずつ処理できる。

Using reader As New StreamReader(“config.txt”)
While Not reader.EndOfStream
Dim line As String = reader.ReadLine()
‘ ここで読み込んだ一行を処理する
Console.WriteLine($”読み込み中…: {line}”)
End While
End Using

4. 初学者が陥る「3つの罠」

現場でよく見る「動くけれどダメなコード」の特徴を挙げておこう。これを避けるだけで、君は一歩抜きん出た存在になれる。

1. 例外処理を無視する: `Try…Catch` を書かないコードは、爆弾を抱えて走っているようなものだ。予期せぬ入力(空文字や不正な形式)で即座にクラッシュさせてはいけない。
2. リソースの解放忘れ: `File.Open` を連発して `Close` を忘れると、プログラムがファイルを掴んだまま離さず、他のツールがそのファイルを開けなくなる。`Using` を使えば解決だ。
3. パスの直書き: `C:\Users\Name\…` のように書くと、他人のPCで動かなくなる。プログラムと同じフォルダに置くなら `AppDomain.CurrentDomain.BaseDirectory` を活用しよう。

最後に:君のコードを「作品」にするために

コンソールアプリの標準入出力は、地味かもしれない。しかし、これこそがシステム開発の「血流」なんだ。

画面に文字を出すだけでなく、背後で静かにログを刻み、必要な情報を正しく吸い上げる。そんな「静かなる堅牢性」を持つプログラムを書けるようになった時、君はもう初心者ではない。

まずはこのコードをコピーして、自分の手で実行してみてほしい。そこから見える景色が、今までとは少し違っているはずだ。

何か詰まったら、いつでも戻ってきなさい。次のステップへ進むための準備は、いつでもできているよ。

タイトルとURLをコピーしました