エムスリーテックブログ

エムスリー(m3)のエンジニア・開発メンバーによる技術ブログです

世界のシステムに令和が反映されるまで

こんにちは、Androidエンジニアの星川 (id:oboenikui) です。

いよいよあと5日で令和となりますね。幸いにもAndroidではアプリ側で扱おうとしない限り和暦は使用されないので安心して改元を迎えられそうです。
(iOSにはシステム設定で和暦表示に切り替える機能があるので若干無視できなかったりします)

さて、この改元ですが、ほぼ日本国内でしか使われていないものではあるものの、OSをはじめ世界中で使われているプロダクトにも影響を与えることは皆さまご存知の通りかと思います。今回はUnicode CLDR (Common Locale Data Repository) のチケットから、どのような流れでこの改元に対応したのか、また改元に合わせてどのような変更が行われたのかを見ていきたいと思います。

f:id:oboenikui:20190425120244p:plain
By 内閣官房内閣広報室 - 首相官邸ホームページ, CC 表示 4.0, Link

Unicode CLDRとは?

ロケールデータをソフトウェアで扱うためのUnicodeのプロジェクトです。公式サイト内で「最大かつ最も広範」と説明されている通り、様々なデータが登録されています。例を挙げると、以下のものが含まれています。

  • 日付、時間など、ロケール固有のパターン
  • 単位など名前の翻訳
  • 使われる文字集合など、言語や文字の情報
  • 使われる言語など、国の情報
  • キーボードレイアウトなどその他の情報

またこのデータは数多くのソフトウェアで用いられています。(以下公式サイトから引用)

Some of the companies and organizations that use CLDR are:

  • Apple (macOS, iOS, watchOS, tvOS, and several applications; Apple Mobile Device Support and iTunes for Windows; …)
  • Google (Web Search, Chrome, Android, Adwords, Google+, Google Maps, Blogger, Google Analytics, …)
  • IBM (DB2, Lotus, Websphere, Tivoli, Rational, AIX, i/OS, z/OS,…)
  • Microsoft (Windows, Office, Visual Studio, …)

and many others, including:

  • ABAS Software, Adobe, Amazon (Kindle), Amdocs, Apache, Appian, Argonne National Laboratory, Avaya, Babel (Pocoo library), BAE Systems Geospatial eXploitation Products, BEA, BluePhoenix Solutions, BMC Software, Boost, BroadJump, Business Objects, caris, CERN, Debian Linux, Dell, Eclipse, eBay, EMC Corporation, ESRI, Firebird RDBMS, FreeBSD, Gentoo Linux, GroundWork Open Source, GTK+, Harman/Becker Automotive Systems GmbH, HP, Hyperion, Inktomi, Innodata Isogen, Informatica, Intel, Interlogics, IONA, IXOS, Jikes, jQuery, Library of Congress, Mathworks, Mozilla, Netezza, OpenOffice, Oracle (Solaris, Java), Lawson Software, Leica Geosystems GIS & Mapping LLC, Mandrake Linux, OCLC, Perl, Progress Software, Python, QNX, Rogue Wave, SAP, Shutterstock, SIL, SPSS, Software AG, SuSE, Symantec, Teradata (NCR), ToolAware, Trend Micro, Twitter, Virage, webMethods, Wikimedia Foundation (Wikipedia), Wine, WMS Gaming, XyEnterprise, Yahoo!, Yelp

http://cldr.unicode.org/

このCLDR、先日4月17日にバージョン35.1として令和対応バージョンがリリースされています。バージョン1.0のリリースが2003年ですので日本の改元に対応するのははじめてのことのようです。私は特にこのプロジェクトに関わっているわけではありませんが、改元対応というのは滅多に発生することではないのでissueを追ってみることにしました。チケットはこちらから確認ができます。

新しい元号になるらしい

2016年7月、天皇陛下が退位の意向を示されました。それから1年4ヶ月が経過した2017年11月7日に最初のチケットが起票されます。

CLDR: #10750 (New Japanese era name) – CLDR

そして2017年12月頭に退位日が2019年4月30日と決定します。この時点では新元号がいつ発表になるか判明していなかったためプレースホルダーで対応することになりました。そこでバージョン34では、 QQ(漢字表記)および Q(短縮表記)というプレースホルダーを用い、2019年5月1日からこちらに切り替えるという設定を追加した上で2018年10月15日にリリースされます。

CLDR: ja.xml in tags/release-34/common/main – CLDR

1989年1月8日は平成何年?

さて、無事プレースホルダーで拡張されましたのであとは元号発表を待つだけ、と言いたいところですが、和暦に関連してもう1つ比較的大きな変更が行われます。

ここで突然ですが質問です。1989年1月8日は平成何年でしょうか?

……そう、正解は「平成元年」ですよね?

しかしCLDRでは、デフォルトでは「平成1年」と表示されるようになっていました。iOSやMacをお持ちの場合は、設定で和暦を使うようにできますので、カレンダーなどで表記を確認してみてください。

f:id:oboenikui:20190425121243p:plain
Macのカレンダーでは「平成1年」と表示される

これは日本人の感覚としてはおかしいので、デフォルトで元年表記を用いる、というチケットが作られます。

CLDR: #11819 (Use 元年 for the first year of Japanese calendar era by default) – CLDR

またこれをXMLで表現するために、新しい番号付けシステム jpanyear が作成されます。(元, 2, 3, … と番号付けするシステムです)

CLDR: #11843 (Add new jpanyear numbering system) – CLDR

これにより、和暦表示の場合はちゃんと「平成元年」とフォーマットされるようになりました。

これらの変更は2019年3月27日にリリースされたバージョン35にて取り込まれています。

CLDR: numberingSystems.xml in tags/release-35/common/supplemental – CLDR

新しい元号は令和であります

2019年4月1日に「令和」が発表されました。それに先立ち、発表から実際に切り替わるまで1ヶ月しか猶予がないということで、対応のチケットが作られていました。

CLDR: #11796 (Japanese new era work with the actual name) – CLDR

発表されてからはスピーディに対応されており、当日の12時半頃にはステータスがreviewingに、4日後にはfixedになっていますね。また関連して以下のようなチケットもありました。

CLDR: #11970 (Update ja collation to add square era symbol for new Japan era) – CLDR

CLDR: #11969 (Japan new era localized names in non-Latin script locales other than ja) – CLDR

特に面白いと思ったのは後者で、実はCLDRには日本の元号の各言語表記が収められているのです。しかもなんと「大化」から全て実装されている言語がいくつもあります。そのため、Reiwaと同じ読みの表記を各言語に割り当てる必要があるのです。

なお、現在でもアストゥリアス語、ブルトン語、ラオ語では平成までしか実装されていないようですので、もしこれらの言語に精通している方がいらっしゃったらチケットを起票されると良いと思います。

この令和対応は2019年4月17日にリリースされたバージョン35.1にて取り込まれています。

CLDR: ja.xml in tags/release-35-1/common/main – CLDR

所感

私自身改元直前に気になって調べただけで何の貢献もできませんでしたが、遡っていてこの分野の日本人コントリビューターが少数であるのが気になりました。

例えば、関連リポジトリのICUでは、元年対応のテストデータを誤ったままマージされてしまったことがありました(本来 H1/1/15 となるべきところが H元/1/15 となっている)。幸いにも修正されていますが、日本語話者がもっと参加すべき話題だったようにも思います。

ICU-20441 force Gannen use if ja@calendar=japanese, non-numeric fmts, no override by pedberg-icu · Pull Request #474 · unicode-org/icu · GitHub

また、元年対応自体も今まで対応していなかったのか、という驚きがありました。

そもそもCLDRの認知度自体低いという話も聞きますので、こういうプロジェクトがあるということ、また、こちらから誰でもチケットを起票できるということを知っていただけたら幸いです。私も何か発見したら積極的に関わっていこうと思います。

We are hiring!

弊社では令和に活躍できるエンジニアを募集中です!

OSSの実装を深く追っていくことが好きなエンジニアや、OSSに貢献しているエンジニアがいる会社です。

ご興味を持っていただけたら是非以下のページからコンタクトしてください!

jobs.m3.com