書いて覚えるSwift入門

第50回 新元号「令和」対応

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

Apple Devices meet 令和

2019年5月14日にiOS 12.3およびmacOS Mojave 10.14.5がリリースされ,Appleデバイスにも令和がやってきました。iOSでは[設定]⁠⁠一般]⁠⁠言語と地域][暦法][和暦]を指定することで西暦2019年5月1日以降の日付が令和になります。余談ですがタイ仏暦もサポートされているのですね図1)⁠

図1 元号対応の様子

図1 元号対応の様子

図1 元号対応の様子

macOS ⁠System Preferences]⁠⁠Language & Region][Calendar][Japanese]にすることで同様の効果が得られます。こちらはiOSよりもさらに多くの暦法がサポートされています図2)⁠

図2 macOSでの設定画面

図2 macOSでの設定画面

図2 macOSでの設定画面

なお,元号と西暦の対応は,Swiftという言語ではなくOSのAPIでなされている点に留意する必要があります。2019年5月現在が令和元年なのか平成31年なのかはOSで決まります。実際,次のSwiftプログラムをmacOS Mojave 10.14.5で走らせると,

Swiftのサンプルコード

#!/usr/bin/env swift
import Foundation;
let df = DateFormatter();
df.locale = Locale(identifier:"ja_JP")
df.calendar = Calendar(identifier:.japanese)
df.dateFormat = "Gy年MM月dd日HH時mm分ss秒ZZZZZ"
print(df.string(from:Date()))
令和元年05月23日16時37分10秒+09:00

と表示されましたが,Ubuntu 18.04 LTSでは本原稿執筆現在も令和を知らないので,

平成31年05月23日16時37分10秒+09:00

と表示されました。なお,Ubuntuも19.04にはすでに令和が届いている模様です。

Unicode 12.1はまだ

元号の処理は基本的にはOSの処理ですが,そうでないものが1つあります。Unicodeにおける文字の正規化の扱いです。これに関してはOSのAPIというものはなく,対応は言語ごとです。具体的には次のSwiftコード,

Swift

"\u{337E}".decomposedStringWithCompatibilityMapping // "明治"
"\u{337D}".decomposedStringWithCompatibilityMapping // "大正"
"\u{337C}".decomposedStringWithCompatibilityMapping // "昭和"
"\u{337B}".decomposedStringWithCompatibilityMapping // "平成"
"\u{32FF}".decomposedStringWithCompatibilityMapping // "令和"じゃない!

のような正規化がそれに該当するのですが,iOSおよびmacOSでは\u{32FF}⁠対応のフォントは搭載されても正規化は未実装でした。macOS図3とUbuntu図4のREPLの結果です。

図3 macOSでの対応

図3 macOSでの対応

図4 Ubuntuでの対応

図4 Ubuntuでの対応

メソッド名にもCompatibilityMappingとあるとおり,これら本来はUnicodeとレガシー文字コードの相互変換を担保するために仕方なく用意されていたコードポイントでした。にもかかわらずU+32FFがUnicode 12.1に用意されてしまったのは呆れるよりほかありません。これを認めるのであれば,U+3004が〄に割り当てられてしまった以上,新JISマークも別途コードポイントを割り当てられるべきという無茶さえ通ってしまいかねません。

もっとも,元号という概念自体がレガシーではあるのですが……。

次回予告

次回はWWDC特集を予定しております。

Software Design

本誌最新号をチェック!
Software Design 2019年7月号

2019年6月18日発売
B5判/192ページ
定価(本体1,220円+税)

  • 第1特集
    “速い”Webアプリケーションの作り方[バックエンド編]
    ボトルネックの見つけ方,キャッシュ・CDNの活用
  • 第2特集
    IT業界ビギナーのためのDocker+k8s入門講座[Kubernetes編]
    図解で深く理解して最先端にキャッチアップ!
  • 特別企画
    完全マネージ型のメリットを堪能する
    Amazon SageMaker入門
  • 特別企画
    クラウドへのルータ接続実践ノウハウ
    【2】AWSとヤマハルータをつなぐ
  • 一般記事
    「WebAuthn」が導く新時代のパスワードレス認証
    【後編】WebAuthnを利用したFIDO導入のための考え方
  • 短期連載
    Mattermost[導入+構築]入門
    【最終回】ご存じですか? chat導入のメリット

著者プロフィール

小飼弾(こがいだん)

1969年生まれ,東京都出身。元ライブドア取締役の肩書きよりも,最近はPokemon GOのガチトレーナーのほうが有名になりつつある……かもしれない永遠のエンジニアオヤジ。

活躍の場はIT業界だけでなく,サブカルからアカデミックまで多方面にわたり,ネットからの情報発信は気の向くまま毎日毎秒! https://twitter.com/dankogai,ニコニコチャンネルは,http://ch.nicovideo.jp/dankogai,blogはhttp://blog.livedoor.jp/dankogai/

当社刊行書籍は『小飼弾のアルファギークに逢ってきた』『小飼弾のコードなエッセイ』など。他にも著書多数。