仕様書約8000ページ、NTTドコモが巨大レガシーシステムをクラウドネイティブ化できた理由既存の構造、方式からの完全脱却

NTTドコモは、1サービス当たりのソースコードが約50万ステップという巨大なレガシーシステムをマイクロサービスに分割し、コンテナ基盤で再構築した。どのようにモダナイゼーションを進めていったのか、同社の担当者が語った。

» 2022年05月31日 10時00分 公開
[PR/@IT]
PR

 DX(デジタルトランスフォーメーション)の実現が経営課題となる中で、企業はレガシー化したシステムをモダナイズさせる取り組みを加速させている。だが、ふたを開けてみれば従来のレガシーシステムのアーキテクチャを変えることなくクラウドに移し替えるだけで、インフラのモダナイズができたとするケースもある。

 通信大手事業者のNTTドコモは、同社の大規模なレガシーシステムについて「付加価値をもたらさないモダナイズ」を避けるため、システムを移し替えるのではなく、マイクロサービスに分割し、コンテナ基盤の上で再構築する「クラウドネイティブ化」を選択した。

 本稿では、2021年12月2日にオンラインで開催されたOpenShiftのユーザー、パートナー、技術者などが集まったイベント「OpenShift Commons Gathering」で、NTTドコモの担当者が語ったモダナイズのいきさつと成功のポイントをお伝えする。

大規模レガシーシステムのクラウドネイティブ化で重要な「7点セット」とは

 NTTドコモは、1999年から稼働してきた「iモード」「spモード」の急拡大に伴って構築したレガシーシステムのクラウドネイティブ化に取り組んだ。NTTドコモの永原崇範氏はレガシーシステムの状況をこう話す。

NTTドコモ 永原崇範氏 NTTドコモ 永原崇範氏

 「iモードの急拡大を受けて構築したシステムでした。サービス1つを見ても『画面数約800、仕様書約8000ページ、ソースコード約50万ステップ』という規模感です。10年以上にわたって改修を繰り返してきていましたが、迅速なセキュリティ対策の実施や継続的なコスト削減が課題でした。またユーザビリティ向上、運用業務の効率化といった課題も抱えていましたが、システムに精通した有識者は分散しており改善が難しい状況でした」(永原氏)

 IPA(情報処理推進機構)が発表している「ソフトウェア開発分析データ集2020」に基づくと、約50万ステップのシステムを再開発するにはおよそ9万5000人時(600人月)の工数が必要となる。大きく作り替えるのは非常に困難なケースだ。NTTドコモはそれでも「ビジネスルール管理システム」を活用してレガシーシステムをマイクロサービスで構成されるクラウドネイティブなシステムにモダナイズするという、大規模システムとして非常にまれな取り組みを実施した。

 永原氏は「クラウドネイティブ化に当たって、計画段階から7つのポイントに注力しました」と説明した。永原氏が挙げた7つのポイントは次の通りだ。それぞれ見ていこう。

  1. 断捨離
  2. ソースコード分析
  3. モデル化
  4. ベストプラクティス活用
  5. パイプライン化
  6. テストファースト導入
  7. 新旧比較ツール

断捨離から始め、ユースケース単位で再モデル化

 1つ目の断捨離は、利用していない機能を思い切って省くことだ。過去3年分の操作ログを調査したところ、機能の半数以上が未使用の状態だったという。

 「関連部署と調整した結果、システムの画面を75%削減して200画面まで低減できました。こうした断捨離がシステム規模の削減に大きく貢献すると考え、ソースコード分析に取り掛かりました」(永原氏)

 2つ目のソースコード分析はコードの削減効果を確認するために実施したが、結果は想定外だったという。

 「画面削減による効果は限定的だと判明しました。というのも、アプリケーション層やデータ層のプログラムが複雑に入り組んでおり、画面そのものと一緒に削減できなかったためです。特に、画面のデータが複数のテーブルに分散していることが大きな問題となりました。10年以上にわたる開発により、各画面が参照、更新するテーブルは複数に分散しており、少しだけ異なるチェックロジックやデータ操作が大量に存在している状況でした」(永原氏)

 こうしたソースコードの状況を踏まえて次に取り組んだのが3つ目のモデル化だ。ユースケースを基準に再モデリングを実施した。

 「約200の画面群を15グループに再整理し、テーブル間の関連性をユースケースに沿って見直しました。そしてテーブルの統合や削減により、テーブル数を約30%削減しました。さらに、分散していたチェックロジックをデシジョンテーブルで一元管理できるようにしました」(永原氏)

再モデリングのイメージ(提供:NTTドコモ) 再モデリングのイメージ(提供:NTTドコモ)

 7つのステップにおける前半部分をまとめると、断捨離として75%の画面削減を実施することにしたが、ソースコード分析の結果、データが分散し、異なるロジックが大量に存在するという問題点を発見。そこで、ユースケース単位に再モデル化を実施し、テーブルの統合とロジック一元化を実施したというわけだ。

 テーブルやチェックロジックの分散は、COBOLやJavaのプログラムの長期運用で起こりやすい問題だ。同社の取り組みでは、検証を通じてこうした問題を発見し再整理したことがポイントといえる。

標準技術を採用し、パイプライン化とテストファースト開発を推進

 では、レガシーシステムのモダナイゼーションに当たって、どのような開発を進めていったのか。永原氏は7つのポイントにおける4以降を続けて説明した。

 4つ目のベストプラクティス活用とは、市場で標準的に利用されているベストプラクティスを積極的に採用することだ。

 「レガシーシステムの技術は年月とともに陳腐化します。ポイントは標準技術を継続的に取り入れることです。外部有識者のアドバイスを得られ、かつ、優良なサンプルプログラムでの検証が実施できるようになります。モダナイズに当たって『Red Hat OpenShift(※1)』と『Red Hat Decision Manager(※2)』と『Red Hat Fuse(※3)』を採用し、『Keycloak』『Vue.js』『Jenkins』『Argo CD』『Git』『Selenium』などのOSS(オープンソースソフトウェア)を積極的に活用して開発に取り組みました」(永原氏)

※1:Kubernetesをベースとしたコンテナアプリケーション基盤
※2:「Drools」や「Kogito」に基づくビジネスルール管理システム
※3:「Apache Camel」をベースとしたアプリケーション統合ミドルウェア

 こうした標準技術に追随することは、これまで手作業だった運用を自動化していく取り組みにもつながったという。5つ目のパイプライン化は、そうした自動化を支援する取り組みだ。

 「開発チームがソースコードを作成すると、自動でビルドされ、静的解析され、単体テストが実行され、コンテナがビルドされ、開発環境にデプロイされ、シナリオテストが開発環境で実施される仕組みが整いました。検証環境以外にも、性能環境や対向試験環境、受け入れ環境、最終的には商用環境など、複数の環境にデプロイできるような一連のパイプラインを構築しました」(永原氏)

 このように環境構築を自動化することで、常に新しい標準に追従できる体制が構築できた。その上で導入したのが6つ目のテストファーストだ。テストファーストとは、アジャイル開発やスクラム開発における「テスト駆動開発」の方法論を採用したことを指す。

 「ウオーターフォール開発では工程を順番に実施し、手戻りは起きません。知識、ノウハウはドキュメントに蓄積されていきます。一方、テストファースト開発では、スプリント期間(1〜4週間)ごとにユーザーストーリーと受け入れ基準を定義し、テストはパイプラインで繰り返し実行します。知識、ノウハウはドキュメントだけでなくパイプラインにも常に蓄積されるため、担当者が知識、ノウハウを簡単に確認できるようになりました」(永原氏)

新旧比較ツールの導入で、開発生産性がさらに向上

 最後の新旧比較ツールは、開発前の旧システムと開発後の新システムを常に比較するためのツールだ。

 モダナイズを進めようとしても、仕様書や設計書が大量にあり、ソースコードやテーブル構造が複雑で、有識者は分散していた。仕様書や設計書を読み解き、ソースコードを解読し、任意のデータを入力し、その出力を確認するといった作業が大量に発生する。新旧比較ツールは、こうした手間や時間を大幅に削減するものだ。

 「新旧比較ツールを利用すると、新旧システムの出力差異が自動抽出されて確認できるため、仕様調査を大幅に効率化できます。当初は、新旧比較ツールの導入を検討していませんでしたが、開発期間中にスプリント期間の約半分が仕様調査に費やされていることに気が付き、急いで実施したという事情があります」(永原氏)

新旧ツールで仕様調査を効率化(提供:NTTドコモ) 新旧比較ツールで仕様調査を効率化(提供:NTTドコモ)

 このように、計画後半の施策をまとめると、OSSをベースとした標準技術の採用でベストプラクティスを活用し、パイプライン化で開発運用作業を自動化し、テストファーストの導入でパイプラインへのテスト組み込みとノウハウを蓄積し、新旧比較ツールによる旧システムの仕様調査を効率化したことがポイントとなる。

 クラウドネイティブ化はこの「7点セット」を駆使しながら、25人体制(2チーム)、開発期間13カ月、総工数約332人月という規模で進められた。

 「最大で約4倍の生産性に到達しました。とはいえ、決して平たんな道のりではありませんでした。停滞と進展を繰り返しながらチームが成長してきています。半ばでは、アンチパターンと知りつつも、開発リーダー制を導入し、コミュニケーション負荷が高まったことで作業が停滞することも経験しました。新旧比較ツールの導入で、仕様調査の効率化を図ったことで、徐々に生産性は向上していきました」(永原氏)

ソースコードを5割以上削減、リリースサイクルは8分の1に短縮――クラウドネイティブ化のメリットを実感

 クラウドネイティブ化の恩恵として、永原氏は大きく分けて2つを挙げた。1つはソースコードの削減だ。クラウドネイティブ化で約52%のコード削減に成功した。もう1つは、リリースサイクルの短縮だ。以前は、トラブル発生後3〜5日かかっていたが、クラウドネイティブ化後は、約半日で対応できるようになった。設計書の修正やテストの作成、テスト環境の準備、実行、リリース手順の作成、手動リリースが不要になり、テスト作成からリリースまでを自動化することでリリースサイクルは8分の1に短縮した。

迅速なリリースサイクルを実現(提供:NTTドコモ) 迅速なリリースサイクルを実現(提供:NTTドコモ)

 永原氏は「7点セットを駆使することで、大規模レガシーシステムでもクラウドネイティブ化を完遂できました。クラウドネイティブ化のメリットを享受するために、皆さんも楽しみながら開発に取り組んでほしい」と結んだ。

Copyright © ITmedia, Inc. All Rights Reserved.


提供:レッドハット株式会社
アイティメディア営業企画/制作:@IT 編集部/掲載内容有効期限:2022年6月13日

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。