Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHPの新元号対応について / About the new era fixes of PHP language

PHPの新元号対応について / About the new era fixes of PHP language

sapi_kawahara

March 27, 2019
Tweet

More Decks by sapi_kawahara

Other Decks in Education

Transcript

  1. 第136回 PHP勉強会@東京 #phpstudy ㍻31年3月27日(水)
    PHPの新元号対応について
    第136回 PHP勉強会@東京
    ㍻31年3月27日(水)
    1

    View full-size slide

  2. 第136回 PHP勉強会@東京 #phpstudy ㍻31年3月27日(水)
    自己紹介
    ● さっぴー川原 @sapi_kawahara
    ● 埼玉県川越市在中、五反田の中小企業で働いてます。
    ● エンジニア暦:30年目、最初はコンシューマーゲーム機
    の開発、のちにLAMPでの開発にジョブチェンジ、言語に
    こだわらない性格、最近はPythonをメインでやってま
    す。
    2

    View full-size slide

  3. 第136回 PHP勉強会@東京 #phpstudy ㍻31年3月27日(水)
    PHPのスキル
    ● 私のPHP歴です。
    ● PHP4からPHP7までの経験あります。
    ● フレームワークはMojaviスタートで、CodeIgniterを経
    由してCakePHP2,CakePHP3をやりました。
    ● 趣味でFuelPHPもやってました。
    3

    View full-size slide

  4. 第136回 PHP勉強会@東京 #phpstudy ㍻31年3月27日(水)
    いきなり
    質問です
    4

    View full-size slide

  5. 第136回 PHP勉強会@東京 #phpstudy ㍻31年3月27日(水)
    E860

    32FF
    5

    View full-size slide

  6. 第136回 PHP勉強会@東京 #phpstudy ㍻31年3月27日(水)
    この数値の意味わかりますか?
    6

    View full-size slide

  7. 第136回 PHP勉強会@東京 #phpstudy ㍻31年3月27日(水)
    答え
    ● 新元号で割り当てられる合字のコードポイントです。
    ○ E860はEBCDICで割り当てられた新元号の合字です。
    ○ 32FFはUNICODEで割り当てられた新元号の合字です。
    ● 合字とは複数の文字を1文字のフォントで表現したもので
    す。
    ○ ㍉ ㌔ ㌢ ㍍ ㌘ ㌧ ㌃ ㌶ ㍑ ㍗ ㌍ ㌦ ㌣ ㌫ ㍊ ㌻ ㎜ ㎝ ㎞ ㎎ ㎏ ㏄ ㎡ № ㏍
    ℡ ㈱ ㈲ ㈹
    ● 元号では㍾(U+337E)、㍽(U+337D)、 ㍼(U+337C)、㍻
    (U+337B)が対応してます。
    7

    View full-size slide

  8. 第136回 PHP勉強会@東京 #phpstudy ㍻31年3月27日(水)
    ※注意
    ● 新元号の文字コード、UNICODEは「

    View full-size slide

  9. 第136回 PHP勉強会@東京 #phpstudy ㍻31年3月27日(水)
    アジェンダ
    1. 新元号の概要
    2. dateとDateTime::format()クラスの対応
    3. strftimeの対応
    4. Normalizerの対応
    5. 合字の対応
    6. One more thing
    ※データーベースなどについては言及しません。
    9

    View full-size slide

  10. 第136回 PHP勉強会@東京 #phpstudy ㍻31年3月27日(水)
    新元号の概要
    ● 新元号の発表は㍻31年4月1日(月)午前11時30分です。
    なお公表時間は決まってません。

    View full-size slide

  11. 第136回 PHP勉強会@東京 #phpstudy ㍻31年3月27日(水)
    新元号の概要
    ● Windows 10、Mac OSX、iOS、Android OSなど、元号
    を表示するOSは、新元号発表後にアップデート配布で対
    応されます。
    ○ 和暦表示対応と合字フォント対応
    ● UNIX系ではLinux系の一部が和暦に対応しているので
    アップデートが必要です、(BSD系は非対応、Mac OSX
    もBSD系)確認方法はこちらです。
    ○ LC_TIME=ja_JP.utf8 date +'%EY'
    11

    View full-size slide

  12. 第136回 PHP勉強会@東京 #phpstudy ㍻31年3月27日(水)
    dateとDateTime::format()クラスの対応
    ● 和暦に対応していないので、対応は不要です、PHPの
    バージョンアップも不要です。
    ● 独自実装なら、エポックミリ秒「1546300800000」を
    判定に使ってください。
    ● なお、JavaなどはGGGGとかで平成が出るので、新元号
    対応JVMの差し替えが必須です。
    12

    View full-size slide

  13. 第136回 PHP勉強会@東京 #phpstudy ㍻31年3月27日(水)
    strftimeの対応
    ● こちらはC言語のライブラリーから表示をしているだけな
    ので、対応は不要です、PHPのバージョンアップも不要
    です。
    ● 概要にも書きましたが、和暦に対応したLinuxのみ対応が
    必要、Linuxのアップデートが必要です。
    ● 確認方法はこちらです、平成31年と表示されます。
    ○ setlocale(LC_TIME, "ja_JP.utf8", "Japanese_Japan.932");
    ○ print strftime('%EC%Ey年');
    13

    View full-size slide

  14. 第136回 PHP勉強会@東京 #phpstudy ㍻31年3月27日(水)
    Normalizerの対応
    ● 対応が必要です。
    ● 文字コードの正規化のことです。
    ● 半角文字、全角文字、記号などが混ざると、文字判定処
    理が面倒です、正規化するとこれを統一できます。
    ● NFKC(Normalization Form Compatibility
    Composition)を使うことが多いようです、こちらの命令
    を実行すると合字の㍻ではなく平成と出ます。
    ○ print normalizer_normalize("㍻", Normalizer::FORM_KC);
    14

    View full-size slide

  15. 第136回 PHP勉強会@東京 #phpstudy ㍻31年3月27日(水)
    Normalizerの対応
    ● 新元号発表後、PHPなどのアップデートがあれば、PHP5
    系はPHP自体の差し替え、PHP7系はPECL intlとintl
    (国際化用拡張)モジュールの差し替えが必要です。
    ● CakePHP3はintlモジュールが必須なので、元号を使って
    なくても更新するのが望ましいと思われます。
    15

    View full-size slide

  16. 第136回 PHP勉強会@東京 #phpstudy ㍻31年3月27日(水)
    合字の対応
    ● 合字は表示の話なので、クライアント側の対応です、
    PHP側は関係ない?!
    16

    View full-size slide

  17. 第136回 PHP勉強会@東京 #phpstudy ㍻31年3月27日(水)
    本当に、そう思ってます?
    17

    View full-size slide

  18. 第136回 PHP勉強会@東京 #phpstudy ㍻31年3月27日(水)
    正しく侮ヲできると思ってます?
    18

    View full-size slide

  19. 第136回 PHP勉強会@東京 #phpstudy ㍻31年3月27日(水)
    合字の対応
    ● スライドの最初に出した合字のコードはEBCDICと
    UNICODEです、Shift-JISとEUC-JPは割り当てが無いで
    す。
    ● つまり、Shift-JISとEUC-JPで書かれたソースコードで
    元号表示しているのは、そのままでは対応ができませ
    ん、ソースコードをUNICODEに変換する必要がありま
    す。
    19

    View full-size slide

  20. 第136回 PHP勉強会@東京 #phpstudy ㍻31年3月27日(水)
    合字の対応
    ● ソースコードをShift-JISで書くのは止めましょう!
    ● 関連のテンプレートファイルなどもUNICODEに変換した
    ほうが良いと思います。
    ● 合字は一番楽な対応と思われておりますが、一番面倒な
    対応になります。
    ● 出力されるHTMLのエンコードも忘れずにね!
    20

    View full-size slide

  21. 第136回 PHP勉強会@東京 #phpstudy ㍻31年3月27日(水)
    新元号対応まとめ
    ● アップデートが必要
    ○ Linux
    ○ PHP5
    ○ PHP7系PECL intl
    ○ intlモジュール
    ● ソースコードの改修が必要
    ○ 独自実装で元号を表示している
    ○ ソースコードがShift-JISとEUC-JPで書かれいる
    21

    View full-size slide

  22. 第136回 PHP勉強会@東京 #phpstudy ㍻31年3月27日(水)
    One more thing
    22

    View full-size slide

  23. 第136回 PHP勉強会@東京 #phpstudy ㍻31年3月27日(水)
    天皇誕生日について
    ● 今上天皇の誕生日は、12月23日で平日に戻ります。
    ● 昭和天皇の誕生日は、4月29日で「みどりの日」として祝
    日になりましたが、のちに「昭和の日」に名前が変わり
    ました。
    ● 大正天皇の誕生日は、8月31日で現在も平日です。
    ● 明治天皇の誕生日は、11月3日で「文化の日」祝日です。
    23

    View full-size slide

  24. 第136回 PHP勉強会@東京 #phpstudy ㍻31年3月27日(水)
    天皇の即位の日について
    ● 神武天皇(初代天皇)の即位の日は、2月11日(旧暦は1
    月1日)で「建国記念日」祝日です。
    ○ 両陛下が神武天皇陵で「退位報告」の儀式 奈良・橿原市
    https://www.mbs.jp/news/kansainews/20190326/GE0000000000
    00027130.shtml

    View full-size slide

  25. 第136回 PHP勉強会@東京 #phpstudy ㍻31年3月27日(水)
    ゴールデンウィークについて

    View full-size slide

  26. 第136回 PHP勉強会@東京 #phpstudy ㍻31年3月27日(水)
    祝日について

    View full-size slide

  27. 第136回 PHP勉強会@東京 #phpstudy ㍻31年3月27日(水)
    平成最後のLT大会&PARTY㍻31年4月30日開催
    ● 新元号に興味が出てきました?それなら平成年越しイベ
    ントどうでしょうか?Let’s Party!
    ● https://connpass.com/event/123175/
    27

    View full-size slide