Ubuntu Weekly Recipe

第567回 令和を言祝ぐ

この記事を読むのに必要な時間:およそ 5 分

LibreOffice

LibreOfficeについては,6.2.3で令和に対応しています。今のところ,Ubuntuの各リリースごとのLibreOfficeのバージョンは次のようになっています。

  • Ubuntu 16.04 LTS: 5.1.6 rc2
  • Ubuntu 18.04 LTS: 6.0.7
  • Ubuntu 18.10: 6.1.2
  • Ubuntu 19.04: 6.2.2
  • Ubuntu 19.10(開発版): 6.2.2

つまり公式リポジトリにおいては,2019年4月28日時点では令和対応版は入っていません。19.04についてはうまくいけば今後のリリースで対応されるかもしれません。

どうしても令和対応版のLibreOfficeが今すぐ必要なのであれば,一つの選択肢としてsnap版のLibreOfficeを使うという手があります。

$ sudo snap install libreoffice

パッケージサイズは543MBと大きいのでストレージ容量やネットワークに注意してください。

snap版のLibreOfficeはDash上だと「LibreOffice 6...」と表示されます。パッケージ版のアイコンと同じなので混乱するかもしれませんが,うまくエスパーして選択してください。もしくはAlt+F2で表示されるダイアログから「libreoffice.calc」と実行するという手もあります。

セルに「2019/04/28」と入力し,セルの書式設定から「日付」「平成11年12月31日」「H11.12.31」を選択します。その後,そのセルの右下をShift+クリックで下方向にドラッグすれば,日付がインクリメントされ,5月1日の時点で令和になるはずです。

図4 LibreOffice Calcで日付の連番表示

画像

snap版ではなくパッケージ版のLibreOfficeが必要であれば,こちらのブログ記事を参照してください。

OpenJDK

OpenJDKにも元号に対応したAPIがあります。よって日本の元号に依存したソフトウェアを使っている場合,OpenJDK(のJRE)を更新する必要があります。

Ubuntuの場合,各リリースのOpenJDKパッケージのバージョンは次のような状態です。

  • Ubuntu 16.04 LTS: 8u191-b12 / OpenJDK 11は非対応
  • Ubuntu 18.04 LTS: 8u191-b12 / 11.0.2+9
  • Ubuntu 18.10: 8u191-b12 / 11.0.2+9
  • Ubuntu 19.04: 8u212-b01※4)⁠ / 11.0.3+7
  • Ubuntu 19.10(開発版): 8u212-b03 / 11.0.3+7
※4
19.04リリース直後はOpenJDK 8のパッケージがリポジトリから削除されていましたが,4月29日に復活しました。

つまりOpenJDK 8だと19.10以降,OpenJDK 11だと19.04以降で対応していることになります。

ただこれまでの慣習的にOpenJDKのセキュリティアップデートは,ほぼ新バージョンへのアップグレードと等価なので,おそらくOpenJDK 8/11いずれも,近いうちに令和対応版に更新されるものと思われます。

glibc

実はglibcにも元号に関する情報が含まれています。たとえば次のような方法で,元号を表示する際に使われます。

$ LC_ALL=ja_JP.UTF-8 date +%Ex -d 20190501
平成31年05月01日

これはglibcのlocalesパッケージが提供する,/usr/share/i18n/locales/ja_JPで設定されています。2019年5月1日以降を令和にしたいのであれば,このファイルを編集する必要があるのです。

上記修正はすでにglibcの本体には適用されています。また,19.04のglibcにもs390向け修正にひっぱられる形でglibc本体の修正が取り込まれています。

もし古いリリースで同様の対応を行いたい場合は,localesファイルを修正することになるでしょう。しかしながら/usr/share/i18n/locales/ja_JPを直接編集してしまうと,glibcのアップデート時に上書きされてしまいます。ここでは/usr/local/share/i18n/locales/ja_JPを作成し,そこに令和対応を記述することにします。

$ sudo mkdir -p /usr/local/share/i18n/locales
$ sudo cp /usr/share/i18n/locales/ja_JP /usr/local/share/i18n/locales/
$ sudo vi /usr/local/share/i18n/locales/ja_JP

$ diff -u /usr/share/i18n/locales/ja_JP /usr/local/share/i18n/locales/ja_JP
--- /usr/share/i18n/locales/ja_JP       2018-04-17 05:14:20.000000000 +0900
+++ /usr/local/share/i18n/locales/ja_JP 2019-04-28 21:18:59.414194981 +0900
@@ -14946,7 +14946,9 @@

 t_fmt_ampm "%p%I<U6642>%M<U5206>%S<U79D2>"

-era    "+:2:1990//01//01:+*:<U5E73><U6210>:%EC%Ey<U5E74>";/
+era    "+:2:2020//01//01:+*:<U4EE4><U548C>:%EC%Ey<U5E74>";/
+       "+:1:2019//05//01:2019//12//31:<U4EE4><U548C>:%EC<U5143><U5E74>";/
+       "+:2:1990//01//01:2019//04//30:<U5E73><U6210>:%EC%Ey<U5E74>";/
        "+:1:1989//01//08:1989//12//31:<U5E73><U6210>:%EC<U5143><U5E74>";/
        "+:2:1927//01//01:1989//01//07:<U662D><U548C>:%EC%Ey<U5E74>";/
        "+:1:1926//12//25:1926//12//31:<U662D><U548C>:%EC<U5143><U5E74>";/

これでファイルの変更は完了です。追加された行は上から順番に「令和2年以降を表示する期間」⁠令和元年を表示する期間」⁠平成2年以降を表示する期間」となります。

さらに実際にlocalesファイルからロケールデータを生成しましょう。

$ sudo locale-gen ja_JP.UTF-8
Generating locales (this might take a while)...
  ja_JP.UTF-8... done
Generation complete.

実際にdateコマンドを実行すると期待通りの動作になっていることがわかります。

$ LC_ALL=ja_JP.UTF-8 date +%Ex -d 20190501
令和元年05月01日
$ LC_ALL=ja_JP.UTF-8 date +%Ex -d 20190430
平成31年04月30日
$ LC_ALL=ja_JP.UTF-8 date +%Ex -d 20200501
令和2年05月01日

その他のパッケージ

今回は代表的なパッケージを紹介しましたが,他にも関連しそうなパッケージはいくつも存在します。

たとえば5月上旬にはU+32FFに対応したUnicode 12.1がリリースされる予定です。このUnicodeの情報はUbuntuだとunicode-dataパッケージで提供されています※5)⁠unicodeコマンドは,このunicode-dataを元に,文字の各種属性を教えてくれるツールです。

※5
Unicodeの各文字の属性を元に挙動を変える必要があるソフトウェアは多々あります。有名なのがEast Asian Widthの中で定義されている「東アジア圏だと全角だけどそれ以外の地域だと半角になる文字」です。ソフトウェア側できちんとハンドリングしないと,文字幅がずれてしまうことになります。よってlessコマンドのように,Unicodeが提供するデータをソフトウェアが保持していることが多々あるのです。
$ unicode ㍻
U+337B SQUARE ERA NAME HEISEI
UTF-8: e3 8d bb UTF-16BE: 337b Decimal: &#13179; Octal: \031573
㍻
Category: So (Symbol, Other)
Unicode block: 3300..33FF; CJK Compatibility
Bidi: L (Left-to-Right)
Decomposition: <square> 5E73 6210

$ unicode ㋿
U+32FF  - No such unicode character name in database
UTF-8: e3 8b bf UTF-16BE: 32ff Decimal: &#13055; Octal: \031377
㋿ (㋿)
Uppercase: 32FF
Category: Cn (Other, Not Assigned)
Unicode block: 3200..32FF; Enclosed CJK Letters and Months

unicode-dataはまだ古いままなので,⁠平成」は期待通りの結果ですが,⁠令和」のほうは「No such unicode character」と言われてしまってますね。

同じくUnicode由来のソフトウェアとして,ICU(International Components for Unicode)が存在します。ICUは64.2でUnicode 12.1に対応したようです。しかしながらUbuntuは最新の19.04でも63.1のままです。

ICUのライブラリであるlibicuXXは,Node.jsやLibreOfficeなど,かなり多くのパッケージから依存されています。よってリリース後のアップグレードは難しいのですが,必要になる理由を丁寧に説明できれば,取り込んでもらえる可能性はあります。

U+32FF用のグリフについてはCMapが更新されているため,poppler-dataもAdobe-Japan1-7へ追随する必要があるかもしれません。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。