ソース・仕様書のないシステム引き継ぎの知識マップ(知識グラフ)
ソースコードも仕様書もない業務システムを引き継いだ場合、最初にすべきは改修ではなく現状の保全で、Disk2vhdによるディスクイメージ化とVSSを使ったバックアップを取得し、復元できることまで確かめる。次に実行ファイル・自動起動・スケジュールタスクなどをAutorunsやProcess Monitorで棚卸しし、業務利用者へのヒアリングや実挙動の観測から仕様を復元していく。中身の復元可能性は技術スタック次第で、通常のIL形式の.NETアセンブリはILSpyでかなり読める一方、Native AOT発行やVB6は逆コンパイルによる復元が現実的でなく、著作権法第30条の4や使用許諾契約の解析禁止条項も事前に確認する必要がある。中身の分からないシステムの調査は準委任契約で進め、仕様が固まった個別改修だけ請負に切り替えるのが健全な進め方である。
ソースコード・仕様書がないシステムの引き継ぎ
開発した会社や担当者と連絡が取れず、ソースコードも仕様書も残っていない業務システムを、動いている状態のまま引き継いで運用・保守を続けること。
レガシーシステムの引き継ぎ
ブラックボックス化したシステムの保守
現状の保全
改修に着手する前に、動いている本番環境とデータベースをバックアップし、復元できることまで確認する最初の工程。
環境の保全
仕様の復元
仕様書がない状態で、ヒアリング・画面や帳票・データベーススキーマ・ログ・実挙動の観測から、システムの仕様を後から組み立てる作業。
仕様復元
Disk2vhd
稼働中のシステムをオンラインのままボリュームシャドウコピーサービス(VSS)で一貫性のある時点のVHD/VHDXへ変換するSysinternalsのツール。
VSS(ボリュームシャドウコピーサービス)
稼働中のボリュームについて、ある時点で一貫性のあるスナップショットを取得するWindowsの仕組み。
構成要素の棚卸し
実行ファイル・自動起動・スケジュールタスク・設定・連携先・アカウントなど、システムを構成する要素を機械的に洗い出して一覧化する作業。
棚卸し
Autoruns
スタートアップ・サービス・スケジュールタスクなど、Windowsの自動起動ポイントに登録されたプログラムを網羅的に一覧表示できるSysinternalsのツール。
Process Monitor(procmon.exe)
ファイルI/O・レジストリ・プロセス/スレッド活動をリアルタイムに監視できるSysinternalsのツール。Advanced Outputを有効にすると、IRPやファストI/Oのカーネル側の語彙で操作を表示する。
業務利用者へのヒアリング
日次・月次・年次の業務の流れに沿って、どの画面で何を入力し何が出てくるかを、実際にシステムを使っている利用者から聞き取ること。
利用者ヒアリング
逆コンパイル
実行ファイルから高級言語のソースコードに近い形を再構成すること。IL(中間言語)やJavaバイトコードのように構造情報が残る形式で有効。
リバースエンジニアリング(コード解析)
ILSpy
オープンソースの.NETアセンブリブラウザー・逆コンパイラで、Visual Studioの逆コンパイル機能の基盤になっている。
.NET逆コンパイラ
.NET(Core以降)
.NET Frameworkの後継となる、クロスプラットフォーム対応の.NETランタイム(.NET 5以降)。
モダンな.NET
Native AOT
.NETアプリを単一のネイティブバイナリへ事前コンパイルする発行方式。非対応リストにC++/CLIが明記されている。
Visual Basic 6.0(VB6)
COMコンポーネントを型付きで呼び出せる、レガシーなVisual Basicの開発環境・言語。
難読化(オブファスケーション)
クラス名・メソッド名を無意味な文字列に置き換えるなどして、逆コンパイル結果を読みにくくする加工。
PDB(プログラムデータベース)
ビルド後の.dll/.exeと、ソースコード上の行・変数名を結びつけるデバッグ情報ファイル。アプリケーションの実行には通常不要だが、デバッグ・例外調査・ダンプ解析に使う。
シンボルファイル
著作権法第30条の4
プログラムの調査解析のような、著作物に表現された思想または感情の享受を目的としない利用を、必要と認められる限度で原則として許容する平成30年改正の権利制限規定。
著作物の享受を目的としない利用
使用許諾契約(EULA)の解析禁止条項
パッケージソフトや納品物の使用許諾契約に含まれる、リバースエンジニアリングや解析を禁じる条項。その効力をどう考えるかは契約上の論点として残る。
EULA解析禁止条項
準委任契約
専門家として業務を行うことに対して報酬を支払う契約類型。受託側は完成責任を負わず、善管注意義務を負う。
準委任
請負契約
仕事を完成させることを約束し、その結果に対して報酬が支払われる契約類型。
請負
何もない状態からシステムを引き継いだら、改修より先に動いている環境そのものを保全することが最初の作業になる
本番環境をディスクイメージとして丸ごと保全する場合、Sysinternalsが提供するDisk2vhdを使う
Disk2vhdは稼働中のシステムをオンラインのまま、VSS(ボリュームシャドウコピーサービス)で一貫性のある時点のVHD/VHDXに変換する
現状保全の次に、実行ファイル・自動起動・タスク・設定・連携先・アカウントを機械的に棚卸しする工程が必要になる
自動起動する項目の洗い出しに絞る場合、SysinternalsのAutorunsを使う
設定ファイルや出力先の場所が分からない場合は、Process Monitorでファイル・レジストリアクセスを観測するのが早道になる
仕様書がなくても、ヒアリングや実挙動の観察から仕様を復元する工程が引き継ぎには必要になる
最大の仕様書は、毎日そのシステムを使っている業務利用者の頭の中にあり、ヒアリングが仕様復元の主要な材料になる
実挙動の観測(ファイル・レジストリ・ネットワークのアクセス)にProcess Monitorを使い、入出力の対応関係をソースコードなしで裏付ける
実行ファイルの中身の挙動を理解する材料として、技術スタックが許す場合は逆コンパイルが仕様復元の選択肢になる
Visual Studioに内蔵の逆コンパイル機能を使う場合、それはオープンソースのILSpyに基づく
通常のIL形式で配置された.NET製アプリの場合、逆コンパイルで得られるC#コードは処理の理解に十分実用的な水準になる
Native AOTで発行されたバイナリはILを含まずネイティブコードに変換済みのため、逆コンパイラでのC#復元は期待できない
VB6の実行ファイルは元ソースに近い形への機械的な復元が現実的でなく、挙動ベースの解析と部分的な再実装が中心になる
難読化が施されている場合、逆コンパイルによって処理の内容を読み取れる度合いが大きく下がる
実行ファイルと一緒にPDB(シンボルファイル)が残っていれば、関数名や埋め込みソースまで復元できる場合があり、解析の助けになる
逆コンパイルを含む調査解析は、著作権法第30条の4が定める『著作物の享受を目的としない利用』の範囲に収まるかどうかの確認を要する
使用許諾契約(EULA)に解析禁止条項が含まれる場合、逆コンパイルの実施可否に契約上の制約がかかりうる
外部に保守を依頼する場合、中身の分からないシステムの調査には完成責任を約束できないため、調査フェーズは請負ではなく準委任契約で進めるのが基本になる。社内担当者による引き継ぎのように契約が発生しない場合は当てはまらない
調査フェーズは準委任で進め、仕様が固まった後の個別改修フェーズになって初めて請負(または成果完成型準委任)へ切り替えるのがフェーズ分けの原則
変更凍結とバックアップによる現状保全を終えてから、構成要素の棚卸しに進む順序が実務の型になる
棚卸しを先に短期間で終えて対象の本数を数えることが、見積もりの精度を上げる近道になるため、仕様復元より先に切り上げるべき工程とされる