テックカリキュラム

ファイル操作・帳票出力・外部連携

ファイル操作・帳票出力・外部連携

本章では、VB.NETにおけるファイル操作、帳票出力、外部システム連携について学習します。

業務システムでは、データベースだけでなく、CSV、TSV、固定長ファイル、Excel、PDF、帳票、外部API、FTP、SFTPなど、 さまざまな形式でデータを入出力する場面が多くあります。

たとえば、基幹システムから出力されたCSVを取り込む、売上データをExcelで出力する、 請求書をPDFで作成する、外部サービスのAPIへデータを送信する、 取引先のサーバーへSFTPでファイルをアップロードする、といった処理は実務で頻繁に発生します。

これらの処理では、単にファイルを読み書きできればよいわけではありません。 文字コード、改行コード、区切り文字、ファイルロック、例外処理、再実行性、ログ、セキュリティ、外部システムとの整合性などを考慮する必要があります。

本章のゴールは、VB.NETでファイルや外部システムを扱えるようになることではなく、 業務システムとして安全で保守しやすい入出力処理を設計・実装できるようになることです。


1. 業務システムにおける入出力処理の重要性

業務システムでは、システム内部だけで処理が完結することは多くありません。 多くの場合、他システム、取引先、社内部門、会計ソフト、販売管理システム、物流システムなどとデータをやり取りします。

代表的な入出力処理

  • CSVファイルの取込
  • CSVファイルの出力
  • TSVファイルの取込・出力
  • 固定長ファイルの取込
  • Excelファイルの出力
  • PDF帳票の作成
  • 請求書・納品書・注文書の出力
  • 外部APIとの連携
  • JSONデータの送受信
  • FTP / SFTPによるファイル転送
  • ファイル監視による自動取込

これらの処理は、業務の境界に位置するため、障害が起きると影響が大きくなりやすいです。 たとえば、CSV取込に失敗すると売上計上が遅れたり、帳票出力に不具合があると取引先への請求に影響したりします。

そのため、入出力処理では、正常系だけでなく異常系を含めた設計が重要です。

入出力処理で考慮すべきこと

  • ファイル形式は正しいか
  • 文字コードは一致しているか
  • ヘッダー行の有無は決まっているか
  • 必須項目が空ではないか
  • 日付や数値の形式は正しいか
  • 同じファイルを二重に取り込まないか
  • 途中で失敗した場合に再実行できるか
  • 処理結果をログに残しているか
  • エラーデータを利用者が確認できるか
  • 機密情報を安全に扱っているか

2. CSV / TSVファイルの読み書き

CSVは、Comma Separated Valuesの略で、カンマ区切りのテキストファイルです。 TSVは、Tab Separated Valuesの略で、タブ区切りのテキストファイルです。

業務システムでは、CSVやTSVは非常によく使われます。 理由は、Excelで開きやすく、他システムとの連携にも使いやすいからです。

CSV読み込みの基本例

Dim filePath As String = "C:\work\users.csv"

Using reader As New IO.StreamReader(filePath, Text.Encoding.UTF8)

    While Not reader.EndOfStream
        Dim line As String = reader.ReadLine()
        Dim columns As String() = line.Split(","c)

        Dim userId As String = columns(0)
        Dim userName As String = columns(1)
        Dim email As String = columns(2)

        Console.WriteLine(userId & ":" & userName & ":" & email)
    End While

End Using

この例では、1行ずつCSVを読み込み、カンマで分割しています。 ただし、実務ではこの単純なSplitだけでは不十分な場合があります。

単純なSplitが危険なケース

1,"Tanaka,Taro",tanaka@example.com

このように、項目内にカンマが含まれる場合、単純なSplitでは正しく分割できません。 CSVでは、ダブルクォーテーションで囲まれた値の中にカンマが含まれることがあります。

そのため、本格的なCSV処理では、CSVパーサーを利用するか、 ダブルクォーテーションやエスケープを考慮した読み取り処理を実装する必要があります。

CSV出力の基本例

Dim filePath As String = "C:\work\users_export.csv"

Using writer As New IO.StreamWriter(filePath, False, Text.Encoding.UTF8)

    writer.WriteLine("UserId,UserName,Email")

    For Each user As User In users
        writer.WriteLine(user.UserId & "," & user.UserName & "," & user.Email)
    Next

End Using

この例では、ユーザー一覧をCSVとして出力しています。 ただし、出力時も値にカンマ、改行、ダブルクォーテーションが含まれる可能性を考慮する必要があります。

CSVエスケープ処理の例

Public Function EscapeCsv(value As String) As String

    If value Is Nothing Then
        Return ""
    End If

    Dim needsQuote As Boolean =
        value.Contains(",") OrElse
        value.Contains("""") OrElse
        value.Contains(vbCr) OrElse
        value.Contains(vbLf)

    value = value.Replace("""", """""")

    If needsQuote Then
        Return """" & value & """"
    End If

    Return value

End Function

CSV出力では、値にカンマやダブルクォーテーションが含まれる場合に備えて、 適切なエスケープ処理を行う必要があります。

CSV出力でエスケープを使う例

Using writer As New IO.StreamWriter(filePath, False, Text.Encoding.UTF8)

    writer.WriteLine("UserId,UserName,Email")

    For Each user As User In users
        Dim line As String = String.Join(",", {
            EscapeCsv(user.UserId.ToString()),
            EscapeCsv(user.UserName),
            EscapeCsv(user.Email)
        })

        writer.WriteLine(line)
    Next

End Using

CSV / TSV処理の注意点

  • 区切り文字を確認する
  • ヘッダー行の有無を確認する
  • 文字コードを確認する
  • 改行コードを確認する
  • 項目内のカンマやタブを考慮する
  • ダブルクォーテーションのエスケープを考慮する
  • 空文字とNULLの扱いを決める
  • 日付や数値の形式を統一する

3. 固定長ファイルの読み書き

固定長ファイルとは、各項目の桁数が決められているテキストファイルです。 古い基幹システム、銀行連携、物流システム、汎用機連携などで使われることがあります。

CSVのように区切り文字で分割するのではなく、文字位置と桁数によって項目を切り出します。

固定長ファイルの例

00001TANAKA    20260701
00002SUZUKI    20260702

たとえば、以下のようなレイアウトだとします。

項目開始位置桁数
ユーザーID15
ユーザー名610
登録日168

固定長ファイル読み込み例

Using reader As New IO.StreamReader(filePath, Text.Encoding.UTF8)

    While Not reader.EndOfStream
        Dim line As String = reader.ReadLine()

        Dim userId As String = line.Substring(0, 5).Trim()
        Dim userName As String = line.Substring(5, 10).Trim()
        Dim createdDateText As String = line.Substring(15, 8).Trim()

        Console.WriteLine(userId & ":" & userName & ":" & createdDateText)
    End While

End Using

固定長ファイルでは、桁数や文字コードの扱いが非常に重要です。 特に日本語を含む場合、文字数とバイト数が一致しないことがあるため注意が必要です。

固定長ファイル出力例

Public Function ToFixedLength(value As String, length As Integer) As String

    If value Is Nothing Then
        value = ""
    End If

    If value.Length > length Then
        Return value.Substring(0, length)
    End If

    Return value.PadRight(length)

End Function
Using writer As New IO.StreamWriter(filePath, False, Text.Encoding.UTF8)

    For Each user As User In users
        Dim line As String =
            user.UserId.ToString().PadLeft(5, "0"c) &
            ToFixedLength(user.UserName, 10) &
            user.CreatedAt.ToString("yyyyMMdd")

        writer.WriteLine(line)
    Next

End Using

固定長ファイルの注意点

  • 文字数固定かバイト数固定かを確認する
  • 全角文字を含む場合はバイト数に注意する
  • 数値項目はゼロ埋めか空白埋めか確認する
  • 文字項目は左詰めか右詰めか確認する
  • 日付形式を明確にする
  • レイアウト定義書と実装を一致させる

4. 文字コード問題

ファイル連携で非常に多いトラブルが文字コード問題です。 同じCSVファイルでも、UTF-8、UTF-8 BOM付き、Shift_JIS、Windows-31Jなど、 文字コードが異なると文字化けや読込エラーが発生します。

代表的な文字コード

文字コード特徴利用場面
UTF-8現在広く使われるUnicode系文字コードWeb、API、現代的なシステム連携
UTF-8 BOM付きExcelで文字化けしにくい場合があるExcelで開くCSV
Shift_JIS日本語Windows環境で古くから使われる古い業務システム、取引先連携
Windows-31JShift_JISのWindows拡張日本語Windows業務システム

UTF-8で読み込む例

Using reader As New IO.StreamReader(filePath, Text.Encoding.UTF8)
    Dim content As String = reader.ReadToEnd()
End Using

Shift_JISで読み込む例

Dim encoding As Text.Encoding = Text.Encoding.GetEncoding("shift_jis")

Using reader As New IO.StreamReader(filePath, encoding)
    Dim content As String = reader.ReadToEnd()
End Using

.NET Core以降でShift_JISなどのコードページを扱う場合は、 EncodingProviderの登録が必要になることがあります。

Text.Encoding.RegisterProvider(Text.CodePagesEncodingProvider.Instance)

Dim encoding As Text.Encoding = Text.Encoding.GetEncoding("shift_jis")

UTF-8 BOM付きで出力する例

Dim utf8WithBom As New Text.UTF8Encoding(True)

Using writer As New IO.StreamWriter(filePath, False, utf8WithBom)
    writer.WriteLine("ユーザーID,ユーザー名,メールアドレス")
End Using

文字コード設計のポイント

  • 連携先と文字コードを事前に決める
  • Excelで開く前提か、システムで読む前提かを確認する
  • UTF-8 BOM付きが必要か確認する
  • 古い業務システムではShift_JIS指定が多い
  • 機種依存文字や外字に注意する
  • 文字化けしたファイルを再保存すると復元できない場合がある

5. Excel連携

業務現場では、Excelとの連携が非常に多くあります。 検索結果をExcelに出力する、テンプレートに値を埋め込む、 ユーザーが編集したExcelを取り込むなど、さまざまな用途で利用されます。

VB.NETでExcelを扱う方法には、いくつかの選択肢があります。

Excel連携の代表的な方法

  • Microsoft Office Interopを使う
  • ClosedXMLなどのライブラリを使う
  • EPPlusなどのライブラリを使う
  • CSVとして出力し、Excelで開く

Office Interopの特徴

Office Interopは、実際のExcelアプリケーションを操作する方法です。 Excelの細かい操作が可能ですが、サーバー環境での利用には向きません。 また、Excelプロセスが残る問題にも注意が必要です。

Interopを使う例

Dim excelApp As Object = CreateObject("Excel.Application")
Dim workbook As Object = excelApp.Workbooks.Add()
Dim sheet As Object = workbook.Worksheets(1)

sheet.Cells(1, 1).Value = "ユーザーID"
sheet.Cells(1, 2).Value = "ユーザー名"

sheet.Cells(2, 1).Value = 1
sheet.Cells(2, 2).Value = "Tanaka"

workbook.SaveAs("C:\work\users.xlsx")
workbook.Close()
excelApp.Quit()

この方法は簡単に見えますが、COMオブジェクトの解放を適切に行わないと、 Excelプロセスが残ることがあります。

Excel連携で注意すべきこと

  • サーバー上でExcelアプリケーションを起動しない
  • Excelプロセスが残らないようにする
  • 大量データ出力ではセル単位書き込みを避ける
  • テンプレートファイルの管理方法を決める
  • ユーザー編集ファイルの入力チェックを行う
  • 数値、日付、文字列の型変換に注意する

Excel出力設計のポイント

Excelは利用者にとって扱いやすい反面、自由に編集できるため、 取込処理では不正データが入りやすくなります。 入力欄の位置がずれたり、列名が変更されたり、日付が文字列になったりすることもあります。

そのため、Excel取込では、テンプレートのバージョン、必須シートの存在、列名、型、必須項目などを厳密にチェックする必要があります。


6. PDF出力と帳票レイアウト設計

業務システムでは、請求書、納品書、見積書、注文書、申請書、報告書などの帳票をPDFとして出力する場面があります。

PDF帳票では、単に文字を出力するだけでなく、レイアウト、ページング、明細行、金額集計、印影、ロゴ、罫線、フォントなどを考慮する必要があります。

帳票出力で必要な要素

  • 帳票タイトル
  • 発行日
  • 宛先情報
  • 自社情報
  • 明細行
  • 小計、消費税、合計金額
  • 備考欄
  • ページ番号
  • ロゴや印影

帳票データクラスの例

Public Class InvoiceReportDto
    Public Property InvoiceNo As String
    Public Property IssueDate As DateTime
    Public Property CustomerName As String
    Public Property Details As List(Of InvoiceDetailDto)
    Public Property TotalAmount As Decimal
End Class

Public Class InvoiceDetailDto
    Public Property ItemName As String
    Public Property Quantity As Integer
    Public Property UnitPrice As Decimal
    Public Property Amount As Decimal
End Class

帳票出力では、画面やDBの構造をそのまま使うのではなく、 帳票専用のDTOを用意すると保守しやすくなります。

帳票設計のポイント

  • 帳票専用DTOを作成する
  • レイアウトとデータ取得処理を分離する
  • 明細行が複数ページになる場合を考慮する
  • 金額計算の丸め処理を明確にする
  • フォントや文字切れを確認する
  • 印刷時の余白やページサイズを確認する
  • 出力ファイル名の命名規則を決める

帳票出力でありがちな問題

  • 明細行が多いとレイアウトが崩れる
  • 長い会社名や住所が枠からはみ出す
  • 金額の丸めが画面表示と一致しない
  • 出力したPDFのファイル名が重複する
  • 出力途中で失敗した一時ファイルが残る
  • フォントが環境によって変わる

帳票は、利用者や取引先が直接見る成果物です。 内部処理以上に見た目や正確性が求められるため、テストデータのパターンを多く用意して確認することが重要です。


7. ファイル監視

ファイル監視とは、特定フォルダにファイルが作成・変更されたことを検知し、 自動で処理を開始する仕組みです。 VB.NETでは、FileSystemWatcherを使うことでファイル監視を実装できます。

FileSystemWatcherの例

Private watcher As IO.FileSystemWatcher

Private Sub StartWatch()

    watcher = New IO.FileSystemWatcher()
    watcher.Path = "C:\import"
    watcher.Filter = "*.csv"
    watcher.EnableRaisingEvents = True

    AddHandler watcher.Created, AddressOf OnFileCreated

End Sub

Private Sub OnFileCreated(sender As Object, e As IO.FileSystemEventArgs)

    Console.WriteLine("ファイルが作成されました:" & e.FullPath)

End Sub

この例では、C:\importフォルダにCSVファイルが作成されたときにイベントが発生します。

ファイル監視で注意すべきこと

  • ファイル作成直後はまだ書き込み中の可能性がある
  • 同じイベントが複数回発生することがある
  • 大きなファイルでは処理開始タイミングに注意する
  • 処理済みファイルの移動先を決める
  • エラーファイルの退避先を決める
  • 監視サービス停止時の未処理ファイルを考慮する

ファイルが使用可能になるまで待機する例

Public Function WaitUntilFileReady(filePath As String) As Boolean

    For i As Integer = 1 To 10
        Try
            Using stream As IO.FileStream = IO.File.Open(filePath, IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.None)
                Return True
            End Using

        Catch ex As IOException
            Threading.Thread.Sleep(1000)
        End Try
    Next

    Return False

End Function

ファイル監視では、ファイルが検知された瞬間に処理を開始すると、 まだ他プロセスが書き込み中で読み込めない場合があります。 そのため、ファイルが読み取り可能になるまで待機する設計が必要です。


8. 外部API連携

外部API連携では、HTTP通信を使って他システムとデータを送受信します。 近年の業務システムでは、REST APIやJSON形式での連携が多く使われます。

HTTP GETの例

Public Async Function GetUserAsync(userId As Integer) As Task(Of String)

    Using client As New Net.Http.HttpClient()

        Dim url As String = "https://api.example.com/users/" & userId
        Dim response As Net.Http.HttpResponseMessage = Await client.GetAsync(url)

        response.EnsureSuccessStatusCode()

        Dim json As String = Await response.Content.ReadAsStringAsync()
        Return json

    End Using

End Function

HTTP POSTの例

Public Async Function PostUserAsync(json As String) As Task(Of String)

    Using client As New Net.Http.HttpClient()

        Dim content As New Net.Http.StringContent(json, Text.Encoding.UTF8, "application/json")

        Dim response As Net.Http.HttpResponseMessage =
            Await client.PostAsync("https://api.example.com/users", content)

        response.EnsureSuccessStatusCode()

        Return Await response.Content.ReadAsStringAsync()

    End Using

End Function

外部API連携では、通信失敗、タイムアウト、認証エラー、レート制限、レスポンス形式変更など、多くの異常系を考慮する必要があります。

外部API連携で考慮すべきこと

  • 認証方式
  • タイムアウト設定
  • リトライ制御
  • レート制限
  • HTTPステータスコード
  • JSON形式の変更
  • 通信ログ
  • 個人情報やトークンの扱い
  • API停止時の代替処理

APIレスポンスをDTOへ変換する考え方

Public Class ApiUserResponse
    Public Property Id As Integer
    Public Property Name As String
    Public Property Email As String
End Class

外部APIのJSONをそのまま全処理で使い回すのではなく、 APIレスポンス用DTOに変換して扱うことで、型安全性と保守性を高められます。

API連携のログ設計

  • リクエスト日時
  • APIエンドポイント
  • HTTPメソッド
  • ステータスコード
  • 処理時間
  • エラー内容
  • リトライ回数

ただし、アクセストークン、パスワード、個人情報などをログに出力しないよう注意が必要です。


9. HTTP通信とJSON処理

JSONは、JavaScript Object Notationの略で、Web API連携で広く使われるデータ形式です。 VB.NETでは、JSON文字列をDTOに変換したり、DTOをJSON文字列へ変換したりして扱います。

JSONの例

{
  "id": 1,
  "name": "Tanaka",
  "email": "tanaka@example.com"
}

対応するDTOの例

Public Class UserJsonDto
    Public Property Id As Integer
    Public Property Name As String
    Public Property Email As String
End Class

JSON処理で注意すべきこと

  • プロパティ名の大文字小文字
  • 日付形式
  • NULL項目
  • 数値と文字列の型違い
  • 配列構造
  • ネストしたオブジェクト
  • レスポンス形式のバージョン変更

JSON連携の設計ポイント

外部APIのJSON形式は、自社システムの都合だけで決められるとは限りません。 そのため、外部API用DTOと内部業務用Entityを分けることが重要です。

Public Class ExternalUserDto
    Public Property id As Integer
    Public Property user_name As String
    Public Property mail_address As String
End Class

Public Class User
    Public Property UserId As Integer
    Public Property UserName As String
    Public Property Email As String
End Class

外部APIの命名規則に合わせたDTOを内部の業務Entityとして使い回すと、 外部仕様変更の影響がシステム全体に広がります。 API連携層で変換することで、影響範囲を小さくできます。


10. FTP / SFTP連携

業務システムでは、取引先や外部システムとファイルをやり取りするために、 FTPやSFTPを利用することがあります。

FTPは古くから使われているファイル転送方式ですが、通信が暗号化されないため、 現在ではSFTPやFTPSの利用が推奨されることが多いです。

FTP / SFTP連携で行う処理

  • ファイルアップロード
  • ファイルダウンロード
  • 転送済みファイルの削除
  • ファイル一覧取得
  • 処理済みフォルダへの移動
  • 転送失敗時のリトライ

SFTP連携で考慮すべきこと

  • 接続先ホスト
  • ポート番号
  • ユーザー名
  • パスワードまたは秘密鍵
  • 転送先ディレクトリ
  • ファイル名ルール
  • 再送時の扱い
  • 転送完了判定

ファイル転送の設計ポイント

ファイル転送では、アップロード途中のファイルを連携先が読み込んでしまう問題を避ける必要があります。 そのため、一時ファイル名でアップロードし、完了後に正式ファイル名へリネームする設計がよく使われます。

1. data.csv.tmp としてアップロードする
2. アップロード完了後に data.csv へリネームする
3. 連携先は .csv のみを処理対象にする

FTP / SFTP連携の注意点

  • 認証情報をソースコードに直接書かない
  • 通信エラー時のリトライを設計する
  • 二重送信を防止する
  • 転送済みファイルの管理方法を決める
  • ファイル名に日時や連番を含める
  • 送信ログと受信ログを残す

11. 実務でありがちなファイル・外部連携の問題

文字コードが合っていない

CSVを読み込んだときに文字化けする場合、多くは文字コード不一致が原因です。 連携先とUTF-8なのかShift_JISなのか、BOM付きなのかを明確に決める必要があります。

CSVを単純なSplitで処理している

項目内にカンマや改行が含まれると、単純なSplitでは正しく読み取れません。 CSV仕様に沿ったパース処理が必要です。

ファイル取込に再実行性がない

途中でエラーになった場合、どこまで処理されたのか分からない設計は危険です。 取込結果、エラー行、処理済みファイルを記録し、再実行できるようにする必要があります。

外部APIのエラーを考慮していない

APIは常に正常に応答するとは限りません。 タイムアウト、認証エラー、レート制限、メンテナンス停止などを考慮した設計が必要です。

Excelファイルの自由編集を信用している

ユーザーがExcelを編集する場合、列の削除、項目名変更、日付形式変更、数式混入などが発生します。 取込時にはテンプレートチェックと入力チェックを必ず行う必要があります。

認証情報をソースコードに書いている

APIキー、SFTPパスワード、DB接続情報などをソースコードに直接書くのは危険です。 設定ファイル、環境変数、シークレット管理サービスなどを利用するべきです。


12. 入出力処理の設計パターン

ファイル操作や外部連携は、画面やServiceに直接書きすぎると保守が難しくなります。 そのため、役割ごとにクラスを分離することが重要です。

CSV取込のクラス分離例

クラス役割
CsvReaderCSVファイルを読み込む
CsvParserCSV行をDTOへ変換する
ImportValidator入力値や業務ルールを検証する
ImportService取込処理全体を制御する
RepositoryDB登録を行う
ImportLogger取込結果やエラー内容を記録する

ファイル出力のクラス分離例

クラス役割
ExportService出力処理全体を制御する
Repository出力対象データを取得する
ExportDto出力用データを保持する
CsvWriterCSV形式でファイル出力する
FileNameGenerator出力ファイル名を生成する

このように責務を分離することで、CSVからExcelへ出力形式を変更したり、 ファイル保存先をローカルからSFTPへ変更したりする場合でも、影響範囲を小さくできます。


13. 演習課題

演習1:CSVファイルを読み込む

ユーザーID、ユーザー名、メールアドレスを持つCSVファイルを読み込み、 List(Of UserImportDto)へ変換してください。

演習2:CSVファイルを出力する

List(Of UserExportDto)の内容をCSVファイルとして出力してください。 値にカンマやダブルクォーテーションが含まれる場合も正しく出力できるようにしてください。

演習3:文字コードを指定してファイルを読み込む

UTF-8とShift_JISのCSVファイルをそれぞれ読み込み、 文字化けが発生しないようにEncodingを指定してください。

演習4:固定長ファイルを読み込む

ユーザーID5桁、ユーザー名10桁、登録日8桁の固定長ファイルを読み込み、 DTOへ変換してください。

演習5:ファイル監視を実装する

特定フォルダにCSVファイルが配置されたら自動で検知し、 ファイルが読み取り可能になってから取込処理を開始する仕組みを実装してください。

演習6:外部APIへJSONをPOSTする

ユーザー情報をJSON形式に変換し、HttpClientを使って外部APIへPOSTする処理を実装してください。 HTTPステータスコードがエラーの場合はログを出力してください。

演習7:帳票出力用DTOを設計する

請求書PDFを出力する想定で、請求書ヘッダ、明細、合計金額を持つ帳票用DTOを設計してください。


14. まとめ

本章では、VB.NETにおけるファイル操作、帳票出力、外部連携について学習しました。

業務システムでは、CSV、TSV、固定長ファイル、Excel、PDF、JSON、API、SFTPなど、 多様な形式でデータをやり取りします。 これらの入出力処理は、システム間連携や業務運用に直結するため、非常に重要です。

CSVやTSVでは、区切り文字、ダブルクォーテーション、改行、文字コードなどを考慮する必要があります。 固定長ファイルでは、桁数、文字数、バイト数、ゼロ埋め、空白埋めなどを正確に扱う必要があります。

文字コード問題は、ファイル連携で特に多いトラブルのひとつです。 UTF-8、UTF-8 BOM付き、Shift_JIS、Windows-31Jなど、連携先と事前に仕様を合わせることが重要です。

Excel連携では、利用者にとって扱いやすい反面、自由編集による不正データ混入に注意が必要です。 テンプレートチェック、入力チェック、型変換、日付形式の確認などを行う必要があります。

PDFや帳票出力では、帳票専用DTOを設計し、レイアウトとデータ取得処理を分離することが重要です。 明細行のページング、金額計算、文字切れ、ファイル名重複なども考慮する必要があります。

外部API連携では、HTTP通信、JSON処理、認証、タイムアウト、リトライ、ログ、セキュリティを意識する必要があります。 API仕様変更の影響を抑えるため、外部API用DTOと内部Entityを分ける設計が有効です。

FTPやSFTP連携では、認証情報の管理、転送完了判定、一時ファイル名、二重送信防止、転送ログなどを設計する必要があります。 特に認証情報をソースコードに直接書かないことは重要です。

本章のゴールは、VB.NETでファイルや外部システムを扱えるようになることではなく、 業務システムとして安全で再実行可能、保守しやすい入出力処理を設計できるようになることです。 この知識は、実務でのシステム連携、帳票作成、データ移行、外部サービス連携に直結します。