はじめに
前回作成したコード変換プログラムを使用して,汎用機(COBOL環境)及びWindows(COBOL環境)から新システム基盤へ環境を移し,新しいバッチ処理環境を構築します。そのためのテスト環境として,以下のような環境を機能要件として検討します。
- MySQLサーバを立ち上げる
- Python実行環境を立ち上げる
- 各種ファイルを移行する
- telnetサーバを立ち上げる
- telnet接続で処理実行,結果表示(文字表示)が正しく行える
環境
MySQLが依存関係のチェックをしてくれるので,以下の順番でインストールしておくと,後から遡ってインストールする手間が省けます。
- Windows 2012 R2
- Microsoft Visual Studio 2015
- .Net Framework 3.5
- Python 3.6
- MySQL Installer 8.0.26(以下の機能が選択でインストールできます)
- MySQL Community Server 8.0.26
- MySQL Shell 8.0.26
- MySQL Workbench 8.0.26
- Connector/Python 8.0.26
その他,Python及びC#のサーバ上での開発環境として,VSCode及び.Net Coreも同時にインストールしています。
工数
調査及び構築で以下のとおりです。
- 総工数 2人日
- 調査及び文字環境検証(1人日)
- 構築(1人日)
背景
以下の理由で,社内システムの若返りを図りたいと考えています。
- COBOL技術者が足りないため,過去から引き継いだ資産が保守できない
- 環境の選択肢が非常に狭い(COBOL実行環境がベースになるため)
- データの利用が難しい(必ず難解な文字コード変換を挟むことになる)
今回用意したもの
各種サーバ及び環境系の整備を以下のとおり実施しました。
作業詳細
1 オリジナル文字コード to UTF-16(CSV)
以前,作成した以下の文字コード変換ツールを用いて,UTF-16に変換します。
詳細については,「オリジナル文字コードからユニコード(UTF-16)へ変換する文字コード変換プログラム」を参照。
2 メーカー独自文字コード to UTF-16(CSV)
-
1 に習い,テーブルだけを変更して,メーカー独自コードから,UTF-16に変換します。その際,以下の手順を踏みます。
- 2-1 FTPでデータ取得(ASCIIモードでデータ取得することでEBCDICからJISに文字コード変換される)。RFC:385を参照。
- 2-2 メーカー独自JISからUTF-16に変換(その際,1 のプログラムをそのまま利用できる。)。
3 UTF-16 to UTF-8
PowerShellでUTF-16からUTF-8に変換する。「Powershellでファイルの文字コードを変換」を参照。ただし,リンク先の説明と少し齟齬し,必ずBOMが入ってしまうようなので,先頭3バイトをtruncateします。
4 インポート
通常のMySQLコマンドを使用し,DB及びテーブル作成を行う。
- 本番DB(手動クリア)及びテストDB(自動クリア)を作成する
- テーブル名はファイル名と共通にする(ファイル名に*** .(ドット)が含まれる場合, _(アンダーバー)***に変更)
- 事前に各ファイル項目定義の用意をお願いし,数値及びテキストに変換する
5 Python及びC#でのデータ参照
PythonからMySQL connectorを通して,特定の DB にアクセスできるかを確認します。
「PythonからMySQLへ接続する」を参照。
6 遠隔端末での処理実行及び文字表示
コマンドプロンプトでUTF-8で文字表示がされることを確認する。本環境では,独自フォント及び独自コード体系を使用しているため,コマンドプロンプトで確認できる範囲に制約がある。そのため,正確にデータを確認したい場合は,以下のコマンドで外部出力し,確認する。
select @@secure_file_priv;
SELECT 列1, 列2, 列3
FROM テーブル名
INTO OUTFILE 'ファイル名(外部出力先確認した配下)'
課題
- UTF-16のみで環境構築するつもりでしたが,コマンドプロンプトがUTF-8にしか対応していなかったため,以下のとおりになっています。
- 入力データはUTF-16からUTF-8に変換しています
- UTF-8ベースでデータベースへロードしています
- UTF-8で文字データを扱っています
- Unicodeの独自フォントを表示させたかったができなかった。具体的には,「cmd.exe のフォントを変更する」にある方法を試したができなかった(継続検討)。
- FaceNameの変更では,表示が変わらなかった
- レジストリ変更では,コマンドプロンプトのタイトルバーの右クリックメニュー→プロパティ→フォントで選択しようとしても,当該フォントが出てこなかった(そのため,選択できなかった。)