ICUロケール形式の有効化
公開日: 2023.02.02
目次
この記事で学べること
- ICUロケール形式の有効化の背景と適用時期
- ICUロケール形式の有効化における変更点
- ICUロケール形式の有効化までの推奨アクション
- ICUロケール形式の有効化の方法
- ICUロケール形式に関するFAQ
ICUロケール形式の採用の背景
Salesforce システム管理者は組織のデフォルト を設定できます。またユーザは個人設定ページで各自が使用するロケールを設定できます。このロケールにより、日付、時刻、通貨、住所、名前、数値などの表示形式(フォーマット)が制御されます
この表示形式について、現在の Salesforce Platform では Java Development Kit (JDK) ロケール形式を使用していますが、JDKロケール形式は定期的な更新がなく、国際標準との差異が発生しています。
Salesforceでは、Salesforce Platform を常に最新の国際標準に準拠させる取り組みの一環として、Winter '20 で新しいロケール形式(ICUロケール形式)を採用しました。ICUロケール形式の採用により、世界中の ICU 準拠のアプリケーションとのインテグレーションが向上します。
参考情報 : 新しい国際ロケール形式によるグローバル対応
ICUロケール形式が有効化される時期
Winter'20 のリリース以降に作成された組織では、ICU ロケール形式が既定で有効になっています。
のリリース(2019年10月)以前に作成された組織については、JDKロケール形式が使用されています。JDKロケール形式が使用されている組織が ICU ロケール形式を適用できるように、Salesforceでは リリース更新を提供しています。
*上記は設定画面のメニューより「リリース更新」を選択したときの画面です。
[ICUロケール形式を有効化]の自動適用
時期が以下の通り変更となりました。- Spring'24のリリースですべての組織で[ICUロケール形式を有効化]を適用をするのではなく、Spring'24以降で を進めます。
- [ICUロケール形式を有効化]が適用される30 ~ 60 日前にSalesforceは管理者様にメールで通知します。
- [ICUロケール形式を有効化]の段階的な適用はSpring'25のリリースまで継続されます。
参考情報 : WInter’24 リリースノート Enable ICU Locale Formats (Release Update)
なお、システム管理者様は設定メニューを使用して、[ICUロケール形式を有効化]の自動
をSpring'25のリリースまで延期させることができます。[ICUロケール形式を有効化]の適用をSpring'25のリリースまで延期する場合は、以下の手順を実施します。- 設定メニューのクイック検索ボックスに「ユーザーインターフェース」と入力します。
- 「ユーザーインターフェース」をクリックし、設定画面を表示させます。
- 「ユーザーインターフェース」セクションにある という設定項目があるので、OFFにします。
*この設定はJDKロケール形式が使用されている組織でのみ表示されます。
*設定項目の名称は、今後日本語に翻訳される場合があります。
参考情報 : JDK ロケール形式の廃止
組織で使用しているロケール形式の確認方法
現在のSalesforce Platformでは、JDKロケール形式とICUロケール形式の両方がサポートされています。
Salesforce 組織でどちらのロケール形式が採用されているかを確認するためには「リリース更新」を確認します。
▼ICUロケール形式のリリース更新でテスト実行が有効化されている
- [設定]→[リリース更新]→[要対応]タブを押下。
- [ICUロケール形式の有効化]の[使用開始]をクリック
- [この更新は、テストできる状態になりました。]と表示されていたら、テスト実行によりICUロケール形式を利用中。それ以外の場合、組織は JDK ロケール形式を使用しています。
▼ICUロケール形式のリリース更新が適用されている
- [設定]→[リリース更新]→[アーカイブ済み]タブを押下
- [ICUロケール形式の有効化]の有無を確認。
- [完了]とマークされており、リリース更新の適用によりICUロケール形式を利用中。
参考情報 : 組織が ICU と JDK のどちらのロケール形式を使用しているかの判断
ICUロケール形式を有効化したときの変更点
ICUロケール形式がSalesforce 組織に適用されることで変更が発生する項目は以下のものがあります。
- 日付(Date)
- 日付時間(Datetime)
- 時刻(Time)
- 通貨(Currency)
- 数字(Number、Integer)
すべてのロケールにおいて上記項目で変更が発生するのではなく、ユーザが使用しているロケールによって変更点は異なります。例として、日本語、日本語(日本)、英語(アメリカ)の3つのロケールにおける変更点をご紹介します。
ロケール毎の各データタイプ(形式種別)への影響は JDK と ICU ロケール形式の相違点 に掲載されていますが、影響のあるデータタイプは標準画面やカスタム画面では使用されない場合もあります。ICUロケール形式が有効化されたときの動作イメージは次のセクションでご紹介します。
参考情報 : JDK と ICU ロケール形式の相違点
ICUロケール形式有効化時の動作イメージ
「日本語(日本)」のロケールを選択している場合におけるICUロケール形式が適用された際の標準画面のイメージは以下のとおりです。
Lightning Experienceの標準画面ではChatterの日付に「Date:Long」のデータタイプが使用されています。そして「日本語(日本)」ロケールの場合、「Date:Long」のデータタイプはICUロケール形式が有効化されたときの形式変更対象なので、表示形式が「2022/03/15」から「2022年3月15日」に変更されていることがわかります。しかし標準画面の他の項目では通常 Short のデータタイプが使用されており、ICUロケール形式が適用されていても表示形式に変更はありません。それでは次に、「日本語(日本)」のロケールを選択している場合におけるICUロケール形式が適用された際のVisualforceページのイメージを見てみます。
Visualforceページを使用していたとしても通常は Short のデータタイプが使用されているため、[日本語(日本)]の
ICUロケール形式が適用されても表示形式は変わりません。
「日本語(日本)」のロケールを使用していた場合の標準画面とVisualforceページを例にして動作イメージをご紹介しましたが、異なるロケールを使用していた場合の例として、「英語(アメリカ)」のロケールを使用していた場合の標準画面の動作イメージをご紹介します。
「英語(アメリカ)」のロケールではICUロケール形式の有効化において「Date:Long」は形式変更対象ではなく、「Date Time:Short」が形式変更対象に含まれています。そして日付時間型項目では「Date Time:Short」のデータタイプが使用されているため、該当の項目において、「8/1/2022 12:00PM」から
に表示形式が変わっている(カンマが追加されている)ことが確認できます。このように、使用しているロケールによって表示形式が変更される項目が変わっていることが確認できます。
Apex クラス/トリガ、および Visualforce ページを使用している場合の留意点
ICUロケール形式はAPI バージョン 45.0 以降で使用できます。ApexやVisualforceページなどのカスタマイズで ICU ロケール形式を使用するには、Apex クラス、Apex トリガ、および Visualforce ページを最新の API バージョンに更新します。
ApexやVisualforceページなどのカスタマイズが API バージョン 44.0 以前を使用している場合、JDKロケール形式が返されるため、データの整合性の問題やエンドユーザの困惑が発生するなどの影響が発生する可能性があります。
以下に影響例の1つとして、API バージョン 44以前のVisualforceページを使用した場合の例をご紹介します。
*この例は[英語 (アメリカ)]ロケールを使用している場合の例です。[英語 (アメリカ)]ロケールでは日付時間項目[Date Time:Short]について影響がありますが、[日本語 (日本)]ロケールでは[Date Time: Short]や[Date:Short]は形式変更対象ではないため、この例に示すパターンのエラーは発生しません)
[英語 (アメリカ)]ロケールを使用している場合、[Date Time:Short]は形式変更対象であり、[Date Time:Short]は日付時間型項目で使用されているので、APIバージョン45以降のVisualforceページでは表示形式が変わります。しかし、VisualforceページのAPIバージョンが44以前の場合は、ICUロケール形式が使用できずJDKロケール形式が使用されるため、表示形式が変わりません。
APIバージョン44以前のVisualforceページは表示形式が変わらないのですが、Visualforce ページのインライン編集の処理では最新のAPIバージョンが使用されます。つまり、ICUロケール形式を使用します。しかし、APIバージョン44以前のVisualforceページでは、ICUロケール形式が使用できないためエラーが発生します。
以上がAPIバージョン44以前のVisualforceページを使用していた場合の影響例です。
もう1つ影響例をご紹介します。
Apexクラスで以下のメソッドのようにロケール形式に依存するメソッドを使用している場合やLightningコンポーネントで$Localeを使用している場合には、ロケール形式の変更によって影響が出る可能性があります。
- ロケール形式に依存するApexメソッド例
- Date.format()
- Date.parse()
- DateTime.format()
- DataTime.parse()
- など
ロケール形式を意識したカスタマイズを実装されている場合、形式の変更により現在のカスタムロジック(文字列の判定など)が正しく動作しなくなる可能性があります。
参考情報 : Apex クラス、Apex トリガ、および Visualforce ページの API バージョン
ICUロケール形式の有効化までの推奨アクション
ICUロケール形式が適用されると、使用しているロケールによって日付・時刻・通貨等の表示形式が一部変更されます。
該当項目を使用した検索条件が利用されている場合(レポート、入力規則など)、なんらかの影響が発生する可能性があります。また、Apex クラス、Apex トリガ、Visualforceページにて、API バージョン44.0以前をご利用の場合はJDKロケール形式が返されるため、エラー等の問題が発生する可能性があります。
そのため、事前にSandbox等でICUロケール形式を有効化して動作テストを実施し、Salesforce組織での影響有無を確認の上で、本番環境で有効化することを推奨します。(Salesforceによる自動適用を待つのではなく、管理者様にて事前にテスト/評価、有効化していただくことを推奨します。)動作テストでは、表示上の確認だけではなくVisualforce ページのインライン編集やカスタムコードの挙動、インストール済みパッケージの動作等についても御確認ください。
参考情報 : ICU ロケール形式の採用に関する考慮事項
ICUロケール形式の有効化の方法
ICUロケール形式の有効化は「リリース更新」から実施します。最初にSandboxでICUロケール形式を有効化し、動作テストを実施します。影響がないことが確認されたら、本番環境でICUロケール形式を有効化してください。「リリース更新」を使用してICUロケール形式を有効化する方法は以下のとおりです。
1.[設定]→[リリース更新]→[要対応]タブを押下して、[ICUロケール形式の有効化]の[使用開始]をクリック
2.[テスト実行を有効化]をクリック。
3.[このリリース更新の影響を評価]の「完了」ボタンをクリックし、有効化
動作テストにあたっての事前確認事項
- Salesforce組織で現在使用されているロケールとユーザの確認
SOQL クエリを使用して、組織で使用されているロケールと各ロケールのユーザ数を確認し、影響調査や動作テストが必要なロケールの種類を調べます。
<SOQLクエリ>
SELECT toLabel(LocaleSidKey) LocaleName, LocaleSidKey, Count(id) UserCount FROM User where IsActive=true GROUP BY LocaleSidKey
<クエリ実行結果のイメージ>
*上記は開発者コンソールを使用してSOQLクエリを実行した結果のイメージです。この結果の例では、日本語/日本語(日本)/英語(アメリカ)が使用されていることが確認できます。
参考情報 : 使用中のロケールの判断
- Apexクラス、Apexトリガ、Visualforceページ のAPIバージョンの確認
ICUロケールを適用するには APIバージョンが 45.0以上の必要があります。APIバージョンが45.0未満の場合は、45.0以上に更新します。API バージョン 45.0 以上にアップグレードしない場合、ユーザに「無効な日付と時間です」といったParseException エラーが表示される可能性があります。
参考情報 : Apex クラス、Apex トリガ、および Visualforce ページの API バージョン
- Apexクラスで使用しているメソッドの確認
Apexクラスで以下のメソッドのように、ロケール形式に依存するメソッドで影響が無いか確認します。
Date.format(),Date.parse(),Date.toStartOfWeek(),DateTime.format(),DataTime.parse(),DateTime.formatLong()等
影響がある場合は、ロケール形式に依存しないコードとするためのガイドラインを適用します。
・標準メソッドを利用
- 日付形式のデータから”月”を抽出する場合は、Dateクラスの month()を利用する。
- 整数値と通貨値は、書式設定する必要が生じるまで書式設定のない整数として処理。 など
・値に追加の処理を行う場合、ロケールに依存しない形式を使用
・ユーザが選択しているロケール形式へのデータの変換は、そのデータ処理の最後のステップとする。
参考情報 : コードでのロケールに依存しないメソッドの使用
- Lightningコンポーネントの確認
$Localeを使用していると、ユーザが選択しているロケール形式が使用されるので、ICUロケール形式の適用によって影響を受ける可能性があります。そのため使用箇所がないか確認します。
参考情報 : Lightning コンポーネント開発者ガイド
ICUロケール形式の有効化に関するFAQ
Q:ICUロケール形式の有効化後、[日本語(日本)]や[日本語]のロケールを使用した場合、Classicの標準画面では影響がありますか。
A:Lightning Experience と Classicで差異はありません。Chatterの投稿時間等では表示形式に変更があります。
Q:ICUロケール形式の対象範囲は、REST APIや、SOAP API、Bulk APIも含みますか。
A:SOAP/REST/Bulk APIではロケールに依存しないデータ型が使用されます。ただし、Apex クラスを公開するApex SOAP/REST web servicesではロケールに依存するデータ型が使用可能な為、影響がでる可能性があります。
Q:ApexやVisualforceを多用しているのですが、全てについてバージョンを上げる対応が必要でしょうか。
A:例えばVisualforceページについては、44以下のAPIバージョンのままICUロケールを有効化すると、インライン編集での保存時にエラーが発生する可能性があります。予期せぬ問題が発生しないようにする為に、Sandbox上でAPIバージョンは45以上の新しいバージョンに上げて頂いた上で、動作確認テストを実施して頂く事を推奨しています。APIバージョン44以下のものが残る場合でも、Sandbox上でICUロケール形式を適用しての動作確認テストは十分に実施するようにしてください。
Q:ICUロケール形式が強制適用される時期は延長可能ですか。
A:Spring'25までであれば、管理者様にて設定画面から延期することが可能です。
Q:ICUロケール形式が自動適用されたら、表示内容が変わったり、エラーが表示されるようになるのでしょうか。
A:使用するロケールや、カスタマイズ内容によって影響が異なります。ICUロケールが適用された際に本番環境で影響が出ないように、事前にSandboxでの動作確認テストの実施をお願いいたします。
公開日: 2023.02.02
この情報は役に立ちましたか?
ご意見お待ちしております。
フィードバックありがとうございます。
より役に立つために
役に立たなかった一番の理由を教えてください。