• システムリプレイス・レガシー刷新

AS/400のデータ移行で気をつけること|EBCDIC・パック10進数・外字・日付の変換

AS/400のデータ移行で気をつけること|EBCDIC・パック10進数・外字・日付の変換

AS/400(IBM i)からWebシステムやクラウドのデータベースへデータを移すとき、「CSVに書き出せば済む」と考えると、文字化けや金額のずれで苦労することになります。AS/400のデータは、文字コードも数値の持ち方も、一般的なPCやLinuxのサーバーとは違うためです。

この記事では、AS/400のデータ移行でつまずきやすい点を、技術的な内容も含めて解説します。発注を検討している方は、委託先がこれらを理解しているかを確かめる材料としてもお使いください。

この記事の結論
  • AS/400の文字はEBCDICで、日本語はCCSID(5026・5035・1399など)によって変換の表が違う
  • 2バイト文字はシフトコードで囲まれ、項目の長さの計算が変わる。外字は個別の対応表が必要
  • 金額や数量はパック10進数・ゾーン10進数で保存されていることが多く、符号の扱いに注意
  • 移行の品質は、件数・合計値・サンプルの突き合わせを自動で繰り返すことで担保する
目次
  1. 文字コード:EBCDICとCCSID
  2. シフトコードと項目の長さ
  3. 外字
  4. 数値:パック10進数とゾーン10進数
  5. 日付と時刻
  6. 移行の品質を担保する検証
  7. よくある質問
  8. まとめ

文字コード:EBCDICとCCSID

AS/400では、文字をEBCDICという文字コードで保存しています。一般的なPCやWebで使われるUnicode(UTF-8)やShift_JISとは、文字と数値の対応がまったく違います。さらに、日本語の環境では、どの文字の対応表を使うかをCCSIDという番号で区別しています。

CCSID概要注意点
5026日本語(半角カタカナ優先)半角の英小文字が使えない。英小文字が入っているはずの項目は要確認
5035日本語(英小文字が使える)5026と半角カタカナの位置が異なる
1399日本語(Unicodeとの対応を拡張)比較的新しい環境で使われる

ファイルやフィールドごとにCCSIDが違うこともあります。また、CCSIDが65535(変換しない)に設定されたファイルでは、データ転送の際に自動の変換が行われず、文字化けの原因になります。最初に、全ファイルのCCSIDを一覧にすることが大切です。

シフトコードと項目の長さ

EBCDICでは、半角と全角が混ざる項目で、全角の文字の前後にシフトアウト(0x0E)とシフトイン(0x0F)という制御コードが入ります。そのため、AS/400で「20バイト」の項目に入る全角の文字数は、シフトコードの分だけ少なくなります。移行先のデータベースで文字数と桁数をどう定義するかは、この違いを考えて決める必要があります。

外字

人名や地名の旧字体など、標準の文字にない外字を独自に登録している会社は少なくありません。外字は、AS/400の中だけで意味を持つコードのため、変換の表に含まれず、文字化けや欠落の原因になります。外字の一覧を作り、Unicodeの文字に対応づけるか、代わりの文字にするかを、業務の担当者と一緒に決めます。

変換できない文字を見逃さない変換の処理で、変換できない文字を「?」や空白に置き換えて先に進んでしまうと、後から気づくのが難しくなります。変換できなかった文字は、件数とともに必ず記録に残す作りにしましょう。

数値:パック10進数とゾーン10進数

AS/400では、金額や数量を、一般的な整数や小数の形ではなく、10進数の形のまま保存していることが多くあります。

形式持ち方例:-123(3桁)
パック10進数(packed)1バイトに数字を2つ詰め、最後の半バイトに符号(C=正、D=負、F=符号なし)を置く12 3D(2バイト)
ゾーン10進数(zoned)1バイトに数字を1つ置き、最後のバイトの上位に符号を置くF1 F2 D3(3バイト)

データベースの定義(DDS・SQL)を読めば、項目の桁数と小数点以下の桁数が分かります。CSVで書き出す場合は、IBM iの機能で文字に変換されるため扱いやすくなりますが、プログラムが独自の形式で書いた物理ファイルや、項目の定義と中身が食い違っているデータでは、生のバイト列を読み解く必要があります。

  • 符号:負の数が正しく変換されているか(Dの符号の扱い)
  • 小数点の位置:定義上の小数点以下の桁数で、値を割り戻しているか
  • 不正な値:初期化されていない項目に入った空白(0x40)などを、どう扱うか

日付と時刻

AS/400の古いシステムでは、日付が日付の型ではなく、数値で保存されていることが一般的です。

形式の例内容
8桁の数値(YYYYMMDD)20261114
6桁の数値(YYMMDD)261114。世紀の判定のルールが必要
7桁の数値(CYYMMDD)1261114。先頭の1が2000年代を表す
和暦元号を表すコード+年月日。元号の追加のたびに改修されていることがある
0や99999999「未設定」「無期限」の意味で使われていることがある

特に、0や99999999のような特別な値は、業務上の意味を確認してから、移行先でNULLにするか、特定の日付にするかを決めます。

移行の品質を担保する検証

  1. 件数の一致ファイルごとに、移行前と移行後の件数が一致するか
  2. 合計値の一致金額・数量の項目ごとに、合計値が一致するか(符号や小数点のずれを検出できる)
  3. 文字の検証変換できなかった文字の件数と一覧、外字の変換結果を確認する
  4. サンプルの目視確認業務の担当者に、よく知っている取引先や商品のデータを画面で確認してもらう
  5. 業務の集計の一致月次の売上や在庫など、業務で使う集計が、新旧で一致するか

これらの検証は、手作業ではなくスクリプトで自動化し、本番の移行までに何度も繰り返します。リハーサルのたびに同じ結果が出ることを確かめてから、本番に臨みます。

AS/400のデータ移行の支援オーバーエックスは、AS/400(IBM i)からWebシステムへの移行で、DDSの定義の読み解き、CCSIDと外字の調査、パック10進数・日付の変換、検証の自動化までを担当しています。データ移行の難しさは、最初の現状調査(30万円〜・税別)で見積もり、報告書でご説明します。

よくある質問

AS/400のデータは、CSVで書き出せば移行できますか?
IBM iの機能でCSVに書き出すと、多くの項目は文字に変換されて扱いやすくなります。ただし、CCSIDの設定、外字、独自の形式のファイル、日付の形式などは別に確認が必要です。
外字はどのくらいの数がありますか?
会社によって大きく違います。数個の会社もあれば、数百個登録している会社もあります。最初に一覧を作ることで、対応の工数を見積もれます。
移行のリハーサルは何回行いますか?
規模によりますが、本番の前に2〜3回のリハーサルを行い、件数・合計値・業務の集計が毎回一致することを確かめるのが一般的です。

まとめ

AS/400のデータ移行では、EBCDICとCCSID、シフトコード、外字、パック10進数・ゾーン10進数、数値で保存された日付の変換に注意が必要です。最初に全ファイルの定義を一覧にし、件数・合計値・業務の集計の突き合わせを自動で繰り返すことで、移行の品質を担保できます。

OX

TechBase 編集部(株式会社オーバーエックス)

東京・秋葉原のシステム開発会社。業務システム・Webシステム・基幹システムの受託開発、システムリプレイス、自社パッケージ開発、要件定義の支援を手がけています。オーバーエックスの特徴を見る

この記事に関連するサービス システムリプレイス 老朽化したシステムやサポートが終わるシステムを新しく置き換えます。仕様書がないシステムも、画面・データ・プログラムの解析から対応し、段階的な移行で業務を止めずに切り替えます。 サービスの詳細を見る

Contact

今すぐ無料相談

全国対応

Page Top