AS400 / IBM i のデータをCSVとして出したい時、CPYTOIMPF が候補になります。便利な一方で、対象ファイル、抽出条件、文字コード、IFS(統合ファイルシステム)の出力先、権限、機密情報を確認しないまま実行すると、文字化けや情報漏えいにつながります。
CPYTOIMPF前に確認すること
| 確認項目 | 見る理由 | 関連ページ |
|---|---|---|
| 対象ファイル | 物理ファイル、論理ファイル、メンバー、ライブラリを取り違えないため | DSPFFD/DSPPFM |
| 抽出条件 | 全件出力や条件漏れを避けるため | データ抽出ガイド |
| 文字コード | Excel、FTP、外部システムで文字化けを避けるため | CCSID・文字化け確認 |
| 出力先IFS | 置き場所、権限、削除ルール、共有範囲を確認するため | IFS・NetServer確認 |
| 機密情報 | 個人情報、取引先、単価、原価を不用意に出さないため | 機密保護・権限確認 |
CSV出力で事故になりやすいポイント
- 本番ファイルを全件CSVにしてしまう
- 抽出条件の日付範囲や状態区分を間違える
- テスト用ライブラリではなく本番ライブラリを見ている
- IFSの共有フォルダに誰でも読める状態で置く
- Excelで開いた時に先頭ゼロ、日付、文字コードが崩れる
- 出力後の削除ルールがなく、CSVが残り続ける
CPYTOIMPFで出す前にSQLで件数と条件を確認する
CPYTOIMPFの前に、DSPFFDでフィールド定義を、承認されたSQLや抽出定義で対象条件・件数を確認します。DSPFFDでは件数や抽出条件は分かりません。集計自体の負荷にも注意し、文字コード、機密項目、出力先と容量を確認してください。特に顧客情報や請求情報を扱う場合は、出力先、保存期間、受け渡し方法まで決めてから実行します。抽出全体の考え方はAS400データ抽出ガイド、SQL確認はIBM i SQL Services入門も参考にしてください。
UTF-8のCSVへ出す指定例
以下は、承認済みの架空テストデータをCSVへ出す設定例です。参照するだけの操作ではなく、IFSへ書き込みます。TESTLIB、EXPORTPF、EXPORTPFメンバーと出力ディレクトリは例示名で、実在を前提にしません。管理者が用意した検証環境で、少量のダミーデータ、許可された専用出力先、アクセス権を確認してください。
CPYTOIMPF FROMFILE(TESTLIB/EXPORTPF EXPORTPF) +
TOSTMF('/approved-test/export-check.csv') +
MBROPT(*REPLACE) STMFCCSID(1208) +
RCDDLM(*CRLF) DTAFMT(*DLM) +
FLDDLM(',') STRDLM(*DBLQUOTE)
*REPLACEは既存出力を置き換えます。実行前にファイルがないこと、または破棄してよいテスト出力であることを確認します。この例は出力対象を絞るWHERE条件を持たないため、FROMFILEには事前に許可範囲へ絞ったファイルとメンバーを指定します。1208はUTF-8、CRLFは行区切り、カンマは項目区切りです。元のCCSIDや項目の型によって変換結果は異なり、指定だけで文字化けの解消を保証しません。
出力後は、想定件数、日本語、先頭ゼロ、カンマ・引用符を含む文字、空欄とNULLの扱いを受渡先の仕様に照合します。CSVの引用符で囲まれた値に改行を含める場合、テキストの行数とレコード数は同じとは限りません。これはIBMの構文との照合であり、読者の環境で実行検証済みの手順ではありません。IBM公式:CPYTOIMPFで対象リリースの条件を確認してください。
QUERY/400やSQLとの使い分け
既存のQuery定義を使っている現場では、いきなりCPYTOIMPFへ置き換える前に、抽出条件と出力項目を確認します。SQLで抽出する場合も、件数、条件、並び順、NULL、文字コード、権限を比較してから進めます。
CSV出力は「相手がどう開くか」まで確認する
CPYTOIMPFでCSVを作るときは、AS400側で出力できたかだけで終わらせない方が安全です。実際には、相手がExcelで直接開くのか、基幹システムへ取り込むのか、UTF-8を要求しているのか、Shift-JISを要求しているのかで、確認すべき内容が変わります。
| 確認項目 | 見る内容 | トラブル例 |
|---|---|---|
| 文字コード | Shift-JIS、UTF-8、BOM付きUTF-8の指定 | Excelで開いた瞬間に文字化けする |
| 区切り文字 | カンマ、タブ、ダブルクォートの扱い | 列ずれ、項目ずれが起きる |
| ヘッダ行 | 項目名の有無、1行目の扱い | 取り込み側で1行目をデータ扱いする |
| 改行コード | CRLF、LF、固定長との違い | 相手側で1行として読まれる |
| 検証方法 | テキストエディタとExcelの両方で見る | 片方では正常、片方では異常に見える |
CSV連携は、AS400のコマンドだけでなく、相手側の開き方や取り込み仕様まで含めて確認する必要があります。文字化けが絡む場合は、CCSIDと文字化けの確認手順も合わせて見ると原因を切り分けやすくなります。
大量出力で容量を圧迫した実体験は、QRYでディスク使用率95%を超えた話で、結合条件と出力先を確認する理由を説明しています。
参考:IBM公式ドキュメント(CPYTOIMPF)
本記事で扱った CPYTOIMPF の全パラメーターと指定できる値は、IBM公式ドキュメントで確認できます。指定できる値や既定値はOSリリースによって異なるため、本番環境では自社のリリースに合わせて確認してください。
