ICUロケール形式の設定有効化について
こんにちは!
Spring ’23から全てのSalesforce組織でICUロケールが有効化されますが、
一体ICUロケールとは何なのか、具体的に何が変わってどう対応する必要があるのか
まとめているサイト等が少なかったため今回はICUロケールの影響や有効化に伴う修正について
具体的な手順を踏まえてご紹介します。
目次
1.ICUロケールとは?
国や言語ごとに日付や時刻、数値などを表示するために形式を規定するものをロケールと呼び、
Salesforceでは以下の二つの形式が存在します。
一つ目はJDKロケールです。 JDKとはJava Development Kitの略称で、Oracleが提供しているJavaの開発環境に則った形式のことです。
Winter ’20よりも前に作成されたSalesforce組織で使用されていたロケールはこちらになります。
しかしこちらのJDKロケールには以下の三つの問題点があります。
・定期的な更新が行われない
・国際標準との整合性が不足
・より新しいバージョンのJDKでは使用できない
これらの理由により全ての組織が次のICUロケールへと切り替わっていくこととなりました。
ICUとはInternational Components for Unicodeの略称です。
このロケールは最新の国際標準に対応でき、国際的なメンテナンスと管理が行われているため、
JDKロケールの問題点を全て対処することが出来ます。
Winter ’20以降に作成されたSalesforce組織では、ICUロケール形式がデフォルトで有効になっています。
しかしWinter ’20以前に作成された組織においてはデフォルトがJDKロケールであり、
この更新によって既存機能が正常に動かなくなる可能性があります。
よって一部のプログラムを修正する必要が出てきます。
どちらのロケールを現在使用しているかわからない方は
こちらのナレッジ記事の対応を行って確認することが出来ます。以下がその対応となります。
組織で ICU 形式が使用されているかどうかを判断するには、リリース更新を確認します。
・[設定] から、[クイック検索] ボックスに「リリース更新」と入力し、[リリース更新] を選択します。
[アーカイブ済み] タブに [ICU ロケール形式を有効化] が表示され、完了とマークされている場合は、
リリース更新が完了しており、組織でICU が使用されています。
リリース更新カードに緑のチェックマークが付いていて、右上隅に「完了」と表示されます。
・[ICU ロケール形式を有効化] リリース更新がリリース更新コンソールの別のタブに表示されている場合は、
[開始] をクリックして更新の詳細を確認します。
「ステップバイステップガイドに従って、この変更の影響を理解して最小限に抑える」セクションに
「この更新は、テストできる状態になりました。」と表示された場合は、組織で ICU 形式が使用されています。
それ以外の場合は、組織で JDK 形式が使用されています。
2.ICUロケールの適用時期と影響
ICUロケールの適用時期について、初めはSpring ’22に適用されるという話だったのですが、
2021年11月29日にリリースノートの変更で延期がアナウンスされ、Spring ’23での適用となりました。
具体的には2023/1/10以降に適用されます。
また、この適用で何が変わり、どのような影響を受けるのかについてですが、 ロケールを日本語(日本)にしている場合、次のような変化があります。
これによってパッケージまたはコードなどで明示的に今回対象となる部分(日付等)の
フォーマット(表示形式)指定をしている場所は影響を受けることが予測できます。
3.実際に必要な作業
作業内容についてはこちらのHelpを参考に具体的な手順をまとめました。
新しいロケール形式の採用方法 また、ICUロケール有効化の際は初めにSandBoxで
確認してから本番環境の有効化を行ってください。
実際に影響を調査・修正を行う為の手順は以下になります。
- 1.ICUロケール有効化前の確認
- 2.ICUロケール有効化前のApex等のプログラム修正内容の整理
- 3.プログラムの修正
- 4.ICUロケール有効化
- 5.ICUロケール形式有効後の動作確認
- 6.本番環境へリリース、本番環境での動作確認
ICUロケール有効化前の確認 まずsalesforce組織にインストールしたパッケージについて
ICU形式と互換性がある事をパッケージプロバイダに確認しましょう。
組織へインストールしているパッケージについては、下記手順から確認して互換性を調査確認してください。
「設定」 → クイック検索ボックスに「パッケージ」を入力 → 「インストール済みパッケージ」を参照
例)パッケージ「A」と「B」をインストールしていた場合 → AとB両方のヘルプページやサポートサービスを確認する
次に下記ヘルプページによるとICU形式はAPIバージョン45.0以降で使用可能となっている為、
ICU形式が使用可能なAPIバージョンかどうかを確認する必要があります。
この際、組織とAPEXのAPIバージョンを両方確認してください。
確認は以下の手順で行います。(Salesforcdeサポートに確認済み)
1.組織のAPIバージョンが45.0以上であることを確認
2.APEXのAPIバージョンが45.0以上であることを確認(SOAP APIやREST APIも対象)
3.APEXのAPIバージョンが45.0未満である場合、その対象が外部パッケージにて利用されている場合は、
ご提供元企業様へ影響があるか確認する。
4.「APEXのAPIバージョンが45.0未満かつ外部パッケージ」以外について、
バージョンアップが必要
(バージョンアップを行わない場合、salesforceサポートは責任を持てないとのことなのでその際は自己責任となります。)
組織のAPIバージョンを確認する手順はこちらになります。
・Salesforce Classicの場合 「設定」 → クイック検索ボックス「API」入力 → 「開発」下の「API」クリック →
「Enterprise WSDLの生成」クリック → Installed Packageの一覧で「Generate」ボタンをクリック
・Lightning Experienceの場合 「設定」 → クイック検索ボックス「API」入力 → インテグレーション下の「API」クリック →
「Enterprise WSDLの生成」クリック → 「Generate」ボタンをクリック
※Sandbox環境の場合はGenerateせずにキャンセルをクリックしてください。(試したらエラーになりました。)
参考) Salesforce の Edition および API バージョンを確認する方法
ApexのAPIバージョンを確認する場合は
「設定」 → クイック検索ボックス「Apex」入力 → 「カスタムコード」下の「Apexクラス」及び
「Apexトリガ」クリック → APIバージョン45.0未満の物がないか確認する
ICUロケール有効化前のApex等のプログラム修正内容の整理
APIバージョンに問題がない事が確認できたら修正内容を整理するため、組織のロケールを取得しましょう。
下記のSOQLを実行することで組織のロケール状況を確認することができます。
SELECT toLabel(LocaleSidKey) LocaleName, LocaleSidKey, Count(id) UserCount FROM User where IsActive=true GROUP BY LocaleSidKey
このような環境の場合、日本のユーザーしかいないため先ほど確認した変更点にのみ対応します。
(他の国、言語のユーザーがいる場合はそれぞれのロケールに基づいた変更に対応します。)
変更対象となるデータ型などを確認の上、Apexや各コンポーネントにおいての使用状況を整理しましょう。
確認対象は、レポート、数式、入力規則、自動ワークフロー、項目ルックアップ検索条件等です。
どこに注意して整理すればいいのか?
・例えば月の桁数が新形式では変化しているため(01 → 1)。年月日を桁数で取っている場合などは注意します。
・検索条件でハードコード化された日時値を使用している場合、 検索条件が上手く機能せず、値を新しい形式に合わせる必要があります。
・日本ではありませんが、新しい形式で新たにカンマが追加されているロケールがあります。(英語(カナダ)等)
カンマは検索条件の区切りに使用されるため、検索条件の誤動作に気を付けましょう。
また、Apexの調査をする際には下記の対象メソッド群をGrepして検索するなどして整理します。
Date.format(),Date.parse(),DateTime.format(),DataTime.parse(),DateTime.formatLong()等
Auraコンポーネントの場合、$Localeグローバル値プロバイダがSF Platformから形式を取得して使用しているため $Localeを使用している部分がないか整理する。
→$Localeについて プログラムの修正
影響のありそうな部分を整理出来たら実際に修正していきます。
注意点や公式Helpのコード例を参考に修正していきましょう。
修正を行った後は実際に有効化を進めます。
ICUロケール有効化
下記手順に従って有効化を行います。
「設定」 → クイック検索ボックス「リリース更新」入力・選択 → 「ICU ロケール形式を有効化」 → 「使用開始」 → 手順に従って進める
※英語 (カナダ) ロケール (en_CA) では、下記に沿って個別の有効化が必要です。
「設定」 → クイック検索ボックス「ユーザインタフェース」入力・選択 → 「通貨表示設定」の「en_CAロケールのICU形式を有効化」 → 「保存」クリック
ICUロケール形式有効後の動作確認
有効化後はまず「ICUロケール有効化前のApex等のプログラム修正内容の整理」にて整理した修正対象と実際の
修正内容から、テストケースを作成して、実行します。
※この時、単体レベル(各項目が正しく修正されていること)だけでなく、業務的な面まで全体的な処理が通ることまで確認できるようテストケースを作成するようにします。
問題なければSalesforce上などで動作確認します。
この際、有効後においてもレコードの詳細画面上表示の変化を確認できませんでした。(タイムゾーンや地域で日本を指定していた場合)
例:タイムゾーンが「日本標準時(Asia/Tokyo)」、地域が「日本語 (日本)」の場合
リリース更新(ICU ロケール形式)無効:(日付項目)2021/12/24 (マイナスの通貨項目)- ¥ 1,000
リリース更新(ICU ロケール形式)有効:(日付項目)2021/12/24 (マイナスの通貨項目)- ¥ 1,000
実際に表記の変更を確認できる手段としてChatterの日付が挙げられます。
変更後は投稿日日が2021/08/25/(11:31)のような形式から以下のように年月日表記となります。
もしICUロケール有効化前の確認でサードパーティアプリケーションを使用していた場合データが新形式で解析されることを確認します。
ほとんどのインテグレーションはデータ形式を中立保存するようですが、入力または出力専用でデータ形式が設定される場合もあるとのことです。
本番環境へリリース、本番環境での動作確認
「ICUロケール有効化」を参照の上本番環境でも有効化を行い、リリースします。その後テスト同様動作確認を行いましょう。
問題がなければ対応は終了です。
4.まとめ
・今後は全ての組織がSpring’23(2023/1/10)にICUロケールへと切り替わる。
・切り替わることによって既存機能に不具合が起きる可能性がある。
・Winter ’20以前に作成された組織ではJDKロケールを使用している可能性があるため 現在の形式を確認する。
・ICUロケールを使用していない場合は手順に従って有効化を行う必要がある。
・レコードなどの表示形式は変わらないが、ロケールに基づくメソッドを使用した箇所など影響の出そうな場所を
修正する必要がある。