hidekatsu-izuno 日々の記録

プログラミング、経済政策など伊津野英克が興味あることについて適当に語ります(旧サイト:A.R.N [日記])

JEF4J をリリースしてみた。あるいは、メインフレームの文字コードの話。

富士通社のメインフレームと連携する必要のある仕事があった。

仕事では単に使える文字のチェックだけが行えればよかったので、結果さほど知識は必要なかったのだけど、個人的に興味がありプライベートで調べていたら結構詳しくなってしまったので備忘録も兼ねて Java 用の JEF漢字文字コードサポートライブラリを作って公開してみた。*1

世代的なこともあるけれど、ホスト系はまったく触れたことがなくレガシーな文字コードには毎度苦労させられる。もちろん、構築するシステム自体はいわゆるオープン系なので、 UnicodeWindows-31JEUC-JP あたりが中心になるのだけど、移行元のシステムはレガシーなのでホストの知識がないと解決出来ない問題が発生することがある。

今回 JEF 漢字コードを調べることになり、まず驚いたのが、そもそも文字コード表が公開されていない、ということ。あったとしても、せいぜい 1990年以前に出版された辞書のように分厚い書籍だけだったり。

思うに、メインフレームを抱える各メーカーとしてはデータ移行自体も重要なビジネスとなっているため、なかなか公開しづらいところがあるのだろう。JEF4J では「JHT(ホスト連携ツール)SIMPLE版」からリバースでマッピングを作り、これをベースに拡張非漢字や後述の字体変更を反映したものを使用している。このツールがなければJEF4J は実現できなかった。*2

次に驚いたのが、Unicode ですらマッピング出来ない文字が多数存在するということ。*3古い文字コード体系だからと言って符号化文字集合自体は決していい加減なものではなく、むしろ公共機関でも安心して使えるぐらい幅広い漢字がサポートされている。

さらに驚いたのが(これはメインフレームのせいではないけれど) JISコードの標準字体の変更の酷さ。なんと全改定で字体が変更された文字すらある。

PC世代の人が馴染みある字体は 83JIS(新JIS)だが、メインフレームが開発されていた時代はそれよりも前なので、富士通の JEF、NECのJIPS、日立のKEIS いずれも 78JIS(旧JIS)をベースに開発されている。78JISと83JISでは一部のマッピングや字体が変更されているため、同じ JIS コードとはいっても単純に変換できない部分がある。*4

この問題に拍車をかけるのが JIS 2004 での字体変更だ。JIS 2004 では、83JISでの新字体への変更を旧字体に戻した部分がある。現在のフォントの多くは JIS 2004 標準字形をベースとしてはいるが、古いフォントの多くは 83JIS をベースにしている。過渡期の現在においては同じ文字をどちらにマッピングすべきか確定することができない(JEF4Jでは JIS 2004 字体を基準にしている)。

JIS 2004 での字体変更の経緯を知ると納得できないこともない(真の犯人は83JIS)けれども、互換性を破棄するこの決定はシステム屋の常識ではあり得ない選択だとは思う。とはいえ、もはや決まってしまった以上、JIS 2004 を基準にし、これ以上変えないことが重要だろう。*5

メインフレームは、インターネット以前の存在ということもあり、メーカーの協力なしにオープンな場所から情報を得るのが難しい状況にある。とはいえ、まだまだ現役で稼働しているシステムは多数あり、今後もデータ移行などで関わらざるを得ない人もいるのではと思う。そういう人たちの参考になれば幸いだ。

*1:単なる知識とは言え、仕事で仕入れた知識を Web で公開していると思われるとあらぬ誤解を受けかねないので、調査・開発ともに完全にプライベートで実施していることは強調しておきたい。実情を言うと、きっと仕事で使うだろうと思って先回りして調べていたら、結果そこまでのものは必要なかったというオチだったりする。結局、実機すら触ってない。

*2:JIPSやKEISもサポートしたかったがJEF漢字以上に情報がなく断念した。

*3:厳密に言えば、最近ようやく完全に標準化できた異体字領域まで使えば漢字のマッピングまではできるとは思う。

*4:サイトによっては JEF の基本漢字領域は EUC-JP と同じと書かれているが、実際には元規格の差異による違いがある。

*5:でもまだ幽霊文字が残っている……