3分でわかる要約
三菱ふそうトラック・バス(MFTBC)の部品ECサイト「FUSO Shop」は、サイトの土台(SAP Commerce Cloud)と画面側(Spartacus)のサポート期限が、ほぼ同時に迫っていました。Cubastionは、3,400名が登録するこのECサイトの基盤を、受注連携・カード決済・マスターデータ取込を維持したままバージョンアップし、2026年8月9日に本番稼働しました。切替時のダウンタイムは6時間です。
三菱ふそうトラック・バス株式会社(MFTBC)様が運営する部品Eコマースサイト「FUSO Shop」は、SAP Commerce Cloud を基盤に、顧客認証(CIAM)、決済(DT Pay)、受注連携(Siebel)、マスターデータ取込(ホットフォルダー)など、複数の外部システムとつながって稼働しています。Cubastion は、この基盤のバックエンド(SAP Commerce Cloud 2211.45/JDK 17 → 2211-jdk21.11/JDK 21)と、ストアフロント(Spartacus 6.8.0/Angular 15.2 → 221121.11/Angular 21)を、一つのプログラムとして同時に刷新しました。移行中に発生した約40件のビルドエラーと16件の起動時の問題、そして受注・決済・データ取込に関わる3つの業務フローの不具合を、すべて原因を特定したうえで解消し、2026年8月9日に本番稼働を迎えています。
Challenge
SAP の更新を受け続けるために、基盤ごと入れ替える
刷新が必要となった背景と、業務・技術の両面の課題をご紹介します。
Eコマースサイトは、稼働している限り「動いているものには触れない」という判断が続きがちです。しかし、その土台となるソフトウェアには必ずサポート期限があります。FUSO Shop の場合、その期限はバックエンドとストアフロントの双方に、ほぼ同時に訪れていました。
サポート期限を過ぎるとどうなるか
・SAPによるJDK 17版へのセキュリティ修正の提供は、2026年第2四半期末で終了しました
・画面側の実行環境Node.js 20も、2026年4月でサポートが終了しました
・脆弱性が見つかっても、公式の修正を受けられない状態になります
SAP は 2211-jdk21.1 以降、SAP Commerce Cloud のフレームワークを Java 21(JDK 21)と Spring 6 へ移行し、JDK 17 版へのセキュリティ修正の提供は2026年第2四半期末で終了しています(SAP Learning)。ストアフロント側でも、実行環境である Node.js 20 は2026年4月でサポートを終了しました。JDK 17 上で稼働していた FUSO Shop にとって、アップグレードは「いつか取り組む改善」ではなく、SAP のセキュリティ修正とアップデートを受け続けるための前提条件でした。
ビジネス面の課題
- 稼働中のEコマースで、受注・決済・顧客ログインを維持したまま移行すること
- SAP のセキュリティ修正・アップデートを継続して受けられる状態の確保
- 保存済みカードによる決済など、お客様の既存データと利用体験を損なわないこと
- Siebel への受注連携やマスターデータの取込など、後続業務につながる連携の継続
技術面の課題
- Java 21/Spring 6 でパッケージ名前空間が javax.* から jakarta.* へ変わり、カスタムコードがそのままではコンパイルできない
- Apache Commons Lang/Collections、HttpClient 4、Ehcache 2 など、従来利用していたライブラリの削除
- 旧 Spring Security OAuth2 モジュールの廃止に伴う、顧客ログイン(CIAM)とバックオフィスのシングルサインオンの再構成
- pbkdf2 によるパスワードエンコーディングのサポート終了と、argon2 への移行
- ストアフロントは Angular 15.2 から 21.0 へ複数のメジャーバージョンを跨ぐ更新と、サーバーサイドレンダリング方式の変更(nguniversal → @angular/ssr)を伴う
- Spring Integration 6 のように、エラーを出さずに動作だけが変わる仕様変更の検出
補足:技術的な課題は、専門用語を除くと次の3点です。①部品やライブラリの仕様が変わり、既存のプログラムがそのままでは動かない。②ログインの仕組みが廃止され、作り直しが必要。③画面側も複数世代またぎの更新が必要。
Architecture
バックエンドとストアフロント、18項目を同時に刷新
刷新前後のバージョンと、FUSO Shop を取り巻く連携をご紹介します。
FUSO Shop は、SAP Commerce Cloud(CCv2)上のバックエンドと、Angular ベースのヘッドレス・ストアフロントである SAP Commerce コンポーザブルストアフロント(Spartacus)で構成され、両者は OCC(Omni Commerce Connect)API を通じて通信します。今回は Java 実行基盤だけでなく、フレームワーク、検索、認証、キャッシュ、ストアフロントのライブラリ群まで、バックエンド9項目・ストアフロント9項目の計18項目を一つのプログラムとして刷新しました。
Java 実行基盤からストアフロントのライブラリまで、18項目を同時に更新しました。
バックエンド(SAP Commerce Cloud)
- Java 実行基盤:JDK 17 → JDK 21
- Commerce Suite:2211.45 → 2211-jdk21.11
- Integration Pack:2211.5 → 2211-jdk21.7
- 検索(Solr):9.8 → 9.10
- Spring Framework:5.x → 6.2
- Java EE 名前空間:javax → jakarta
- OAuth:Spring OAuth2 → Authorization Server
- パスワードエンコーディング:pbkdf2 → argon2
- キャッシュ:Ehcache 2 → Ehcache 3
ストアフロント(Spartacus)
- Spartacus ライブラリ:6.8.0 → 221121.11
- Angular:15.2 → 21.0
- Node.js:20 → 22
- TypeScript:4.8 → 5.9
- RxJS:6.6 → 7.8
- NgRx:15.4 → 21.0
- サーバーサイドレンダリング:nguniversal → @angular/ssr
- Express:4 → 5
- ng-bootstrap:13 → 20
FUSO Shop は、顧客認証の CIAM、決済の DT Pay、受注を受け取る Siebel、そして顧客・部品・価格などのマスターデータをファイルで受け取るホットフォルダーとつながっています。アップグレードの成否は、Commerce Cloud 単体が起動するかではなく、これらの連携が本番で動くかどうかで決まります。
Approach
自動化ツールで土台を整え、残りを人の手で詰める
計画からハイパーケアまでの8ステップと、6フェーズの進め方をご紹介します。
進め方は、計画からハイパーケアまでの8ステップで構成しました。最初に SAP のアップグレードガイドを精査し、影響を受けるカスタム機能を洗い出したうえで、専用のアップグレードブランチ上に Java 21 と新しい SAP Commerce パッケージを構築。カスタムコードは、SAP が提供する移行ツール(OpenRewrite レシピ)で機械的に変換し、変換しきれなかったクラスと単体テストを手作業で書き換えました。自動化で網羅性を確保し、人の目で精度を担保する——この組み合わせが、メジャーアップデートの工数とリスクを同時に抑える鍵です。
8つのステップを6つのフェーズに沿って進め、業務受入テストとリリース承認を経て本番稼働しました。
- 1. 計画:SAP のアップグレードガイドを精査し、影響を受けるカスタム機能を特定
- 2. 環境構築:アップグレード用ブランチを作成し、Java 21 と新しい SAP Commerce パッケージを導入
- 3. コード更新:SAP の自動移行ツールでカスタムコードを更新し、残りを手作業で修正
- 4. 設定・起動:セキュリティとサーバー設定を更新し、システムが正常に起動する状態まで調整
- 5. ストアフロント刷新:顧客向けサイトを最新の Spartacus・Angular へ移行
- 6. テスト:単体テスト、システムテスト、回帰テスト、業務部門によるテスト
- 7. 本番稼働:バックアップ取得、リリース承認を経て本番環境へデプロイ
- 8. ハイパーケア:稼働中のサイトを監視し、発生した事象に迅速に対応
フェーズは、計画・設計 → 開発 → テスト → 業務受入テスト(UAT)→ リリース・本番稼働 → ハイパーケアの6段階です。テストでは、開発者テスト、システム統合テスト、回帰テストを経て、MFTBC様による業務受入テストを実施し、サインオフを取得しました。本番リリースにあたっては、SAP Commerce Cloud(CCv2)上で標準のデータベースバックアップを取得してロールバックポイントを確保したうえで、リリース承認を経てデプロイしています。
Solution
移行で直面した6つの課題を、原因から解く
何が起き、なぜ起き、どう解決したのかをご紹介します。
フレームワークのメジャーアップデートでは、エラーが出ること自体は避けられません。問われるのは、現象ではなく原因を特定し、同じ種類の問題をまとめて解消できるかです。本プロジェクトで直面した主な課題は、プラットフォーム領域の3件と、業務フロー領域の3件でした。
6つの課題それぞれについて、現象・技術的な原因・対策を特定して解消しました。
プラットフォーム領域
- ① サイトのプログラムが新しい環境で動かない(Java 21・Spring 6 へのコード互換性):カスタムの Java コードが新しい基盤でコンパイルできない状態となりました。原因は、javax.* から jakarta.* へのパッケージ移行、旧 Apache ライブラリ(Commons Lang/Collections、HttpClient 4、Ehcache 2)の削除、各サービスで使用していた @Required アノテーションの廃止です。OpenRewrite レシピで import を自動更新し、残るクラスと単体テストを手作業で書き換えました。
- ② ビルドもサーバー起動もできない(ビルドとサーバー起動のエラー):ビルド(ant clean all)が失敗し、解消後も SAP Commerce(Hybris)サーバーが起動しない状態となりました。原因は、カスタムの型・Bean 定義が SAP 標準に新たに追加された属性と重複したこと(例:Product.size)、Spring Security 6 での XML 設定ルールの厳格化、利用していた Bean の廃止(Ehcache マネージャー、マルチパートリゾルバー)、SAP 標準の Bean 名との衝突です。重複定義の改名・削除、Spring Security の XML とスキーマの更新、廃止 Bean の置き換え、カスタム Bean への固有名の付与で解消しました。
- ③ お客様のログインと社内のシングルサインオンが止まる(OAuth・ログイン・シングルサインオン):CIAM 経由の顧客ログインと、バックオフィスのシングルサインオン(SSO)が停止しました。原因は、カスタムのトークン発行処理が依存していた旧 Spring Security OAuth2 モジュールが SAP 側で削除されたことです。新しい認可サーバー(Spring Authorization Server)は署名付き JWT トークンを発行し、pbkdf2 のパスワードエンコーディングも非サポートとなりました。新しい認可サーバー向けに CIAM 用のグラント変換処理を構築し、SAML による SSO 設定を修正、パスワードを argon2 へ移行しました。
業務フロー領域
- ④ 受注がSiebelに届かない(Siebel への受注連携):受注は SAP Commerce に保存されるものの、Siebel へ連携されない状態となりました。原因は、Siebel への送信処理を起動する SubmitOrderEvent を、イベントリスナーが無視していたことです。ヘッドレス(OCC)構成で B2C サイトのチャネルが登録されておらず、さらに旧来の受注ストラテジーの上書き設定が SAP B2B の Bean と競合していました。B2C サイトチャネルを登録し、受注プロセスを確実に起動するカスタム受注サービスを追加して、Siebel への連携を回復しました。
- ⑤ 保存済みカードで支払えない(DT Pay の保存済みカード決済):チェックアウト時に、保存済みカードでの支払いが失敗しました。原因は、保存済みカードのトークンを署名付き JWT として保持していたところ、従来のライブラリ(JwtHelper)がプレーンテキストに署名していたのに対し、後継の Nimbus JOSE は JSON ペイロードを必須とするため、トークンの生成も読み取りもできなくなったことです。トークンを JSON オブジェクトで包む形式に変更し、デコーダーは新旧両方の形式を読めるようにしたことで、既存の保存済みカードもそのまま利用できます。
- ⑥ 部品・価格などのデータが取り込まれない(ホットフォルダーによるデータ取込):顧客・部品・価格などのマスターデータのファイルは届くものの、取り込まれない状態となりました。原因は Spring Integration 6 の仕様変更です。ファイルルーターにデフォルト出力チャネルを設定すると channelKeyFallback がエラーを出さずに無効化されるため、ファイル名と取込チャネルの対応付けが外れ、すべてのファイルが「未割当」チャネルへ流れていました。channelKeyFallback を明示的に有効化し、ファイル名パターンを修正して取込を回復しました。
6つの課題の背後には、多数の個別修正があります。ビルド段階で約40件のエラー、サーバー起動段階で16件の問題を解消し、あわせてセキュリティ設定とデプロイ手順の修正を行いました。
ビルド段階(約40件)
- 重複する型・Bean 定義の改名・削除(Product.size、AddressData.city、UserWsDTO.email など)
- javax → jakarta への移行と、Apache Commons・HttpClient 5・Ehcache 3 への更新
- Spring 6 の API 変更への対応(@Required の廃止、HttpStatus → HttpStatusCode など)
- 住所の市区町村情報が CityData オブジェクトとなったことに伴う、変換処理とバリデーターの改修
- 単体テストの Mockito ArgumentMatchers・AssertJ への移行
起動段階(16件)
- Spring Security の XML 設定(use-authorization-manager、mvcHandlerMappingIntrospector、https スキーマ)
- OAuth/CIAM プロバイダーの接続設定と、SAML SSO 設定の取込の修正
- 廃止された Spring Bean(EhCacheCacheManager、CommonsMultipartResolver)の置き換え
- SAP 標準 Bean との名前衝突の解消
- イベント処理などのシステム設定値の見直し
設定・デプロイ段階
- デフォルトのパスワードエンコーディングを argon2 に設定し、管理者ユーザーを argon2 エンコーダーで再インポート
- 受注ストラテジーの別名定義が SAP B2B の標準 Bean を上書きしないよう修正し、カスタム受注サービスを追加
- ホットフォルダー用に spring-integration-zip 2.0.0 ライブラリを追加
- メール関連の ImpEx を INSERT_UPDATE から UPDATE へ変更
- 初期化時のメールメディアの重複キーエラー(DuplicateKeyException)を、HAC で孤立したメディアを特定・削除して解消
- 廃止済みのコックピット拡張を使用していないことを確認
Outcomes
新しい基盤でも、受注・決済・データ連携を継続
本プロジェクトの成果をご紹介します。
- 2026年8月9日に本番稼働。稼働後はハイパーケア体制でサイトを監視し、発生した事象に迅速に対応
- バックエンドを SAP Commerce Cloud 2211-jdk21.11(JDK 21・Spring 6.2・Solr 9.10)へ刷新し、SAP のセキュリティ修正・アップデートを継続して受けられる状態を確保
- ストアフロントを Spartacus 221121.11(Angular 21・Node.js 22)へ刷新
- ログインを SAP の新しいセキュリティ基盤(Spring Authorization Server)へ移行し、argon2 によりパスワード保護を強化
- 移行で直面した6つの課題をすべて解消。Siebel への受注連携、DT Pay 決済、マスターデータ取込の3つの業務フローが新基盤で稼働
- 新旧両形式のトークンに対応し、既存の保存済みカードを引き続き利用可能に
- ビルドエラー約40件、起動時の問題16件を解消
このアップグレードの価値は、新しい機能ではなく、「止められないサイトを、これからも更新し続けられる状態に戻したこと」にあります。原因を一つずつ特定しながら進めたことで、受注・決済・データ連携という業務の根幹を、新しい基盤へ引き継ぎました。なお、FUSO Shop の日常運用を支える AMS(アプリケーション運用保守)の取り組みは、FUSO E-Shop の事例でご紹介しています。
経営・DX推進の視点でのまとめ
ECサイトの基盤更新は、新機能の追加ではなく、事業を止めないための保守投資です。この事例では、受注・決済・外部システム連携という業務の根幹を維持し、既存の保存済みカードも引き続き使える形で移行しました。
Capabilities
この事例で実証された提供価値
お客様が Cubastion と取り組める領域の一例です。
本エンゲージメントを通じて、以下の専門領域における実装力を実証しました。
- SAP Commerce Cloud のフレームワークアップデート:JDK 17 → 21、Spring 5 → 6.2 を伴うメジャー更新を、計画からハイパーケアまで一気通貫で遂行
- ヘッドレス・ストアフロントの刷新:Spartacus/Angular を複数のメジャーバージョンを跨いで更新し、サーバーサイドレンダリング方式の移行(@angular/ssr)にも対応
- 認証基盤の移行:旧 OAuth2 モジュールから Spring Authorization Server への移行と、CIAM 連携・SAML SSO の再構成
- 業務連携の保全:Siebel 受注連携・決済・ホットフォルダー取込を、原因特定から修正・検証まで一貫して対応
- 後方互換性への配慮:保存済みカードのトークンを新旧両形式に対応させるなど、お客様の既存データを損なわない移行設計
- 自動化と手作業の組み合わせ:OpenRewrite などの公式移行ツールと手作業の改修を組み合わせ、移行を効率的に推進
用語解説
GLOSSARY
用語のやさしい解説
FUSO Shop 事例ページに登場する専門用語を、ひとことで。
| 用語 |
ひとことで言うと |
| SAP Commerce Cloud |
SAPのECサイト構築基盤 |
| Spartacus |
画面側(ストアフロント)を作る部品群 |
| JDK 21 / JDK 17 |
サイトを動かすプログラム実行環境の新旧の版 |
| CIAM / OAuth / SSO |
お客様と社内のログイン・認証の仕組み |
| Siebel |
受注の連携先システム |
| DT Pay |
決済サービス |
| ホットフォルダー |
置いたファイルを自動で取り込む仕組み |
| OpenRewrite |
コードの書き換えを自動化するSAP提供のツール |
| UAT / ハイパーケア |
利用部門による受入テスト/稼働直後の重点監視 |
よくある質問
-
ECサイトの基盤更新で、サイトは止まりますか。
2026年8月9日の本番切り替えに要した停止時間(ダウンタイム)は6時間でした。切替前にSAP Commerce Cloud標準のデータベースバックアップを取得し、戻せる状態(ロールバックポイント)を確保しています。
-
サポート終了後もそのまま使い続けるとどうなりますか。
SAPによるJDK 17版へのセキュリティ修正の提供は、2026年第2四半期末で終了しています。画面側のNode.js 20も2026年4月にサポートが終了しました。脆弱性が見つかっても、公式の修正を受けられない状態になります。
-
アップグレードで一番大変だったことは何ですか。
エラーが出ないまま動作だけが変わる仕様変更を見つけることでした。例として、ホットフォルダーではファイルが届いても取り込まれず、すべて「未割当」に流れていました。ビルドエラー約40件、起動時の問題16件も、原因を特定して解消しています。
-
保存済みカードは引き続き使えますか。
はい。決済用のトークンを新旧どちらの形式でも読めるようにしたため、既存の保存済みカードをそのまま利用できます。
-
受注・決済・データ連携は移行後も動いていますか。
はい。Siebelへの受注連携、DT Payの決済、マスターデータ取込の3つの業務フローが新基盤で稼働しています。MFTBC様による業務受入テストを実施し、サインオフを取得しました。
SAP Commerce Cloudのアップグレードやバージョンアップ、ECサイトの基盤更新をご検討の方は、お気軽にご相談ください。