2018年4月26日木曜日

失われたソースを求めて

先日、日本語MOD作成関連のファイルを収めたハードディスクがクラッシュしました。この中には、各種ゲームの日本語化MOD作成ツールのソースや作業環境が全て入っていました。このため、現在公開している日本語化MOD関連ツールの殆どが失われたことになります。

今までの日本語化の環境

  • Cドライブ:OSやVisual Studioなどの製品
  • Eドライブ:日本語化MOD作成やゲームアップデート時の作業で使用
  • Oドライブ:ツール開発用でプログラムソースやテスト環境

今回クラッシュしたディスクにはEドライブとOドライブが割り当てられていました。同じディスクに作ったのが悪かったです。せめて別ディスクにしておけばリスク分散できたのに・・・

とりあえず、個人の作業用メモとして記録しておきます。




1.被害調査


■失ったもの
公開中のツール
  • Terraria v1.3.5対応 日本語化MOD

非公開のツール
  • Low Magic Age 日本語化MOD作成用ツール
  • Torchlight 2(FONT+SynergiesMOD_JP) 日本語化MOD作成ツール
  • Divinity Original Sin Classic & Enhanced Edition 日本語化MOD作成ツール
  • Two Worlds 2 日本語化MOD作成ツール
  • Terraria用フォント作成ツール
  • フォント文字種調査ツール その他多数・・・


■助かったもの
公開中のツール
  • Tyranny会話ツリー表示ツール

非公開のツール
  • Divinity Original Sin Classic と Enhanced Edition 日本語化MOD作成ツール
  • IWD:EE版 日本語化MOD作成キット
  • BG2:EE版 日本語化MOD作成キット
  • IETlkTools v1.0.0
  • Drakensang 日本語化MOD作成ツール
  • Pillars of Eternity MOD Launcher (PEM-Launcher)
  • Pillars of Eternity 日本語化MOD作成ツール
  • Pillars of Eternity会話ツリー表示ツール(PoECV)
  • Tyranny 日本語化MOD作成ツール
  • Lords of Xulima 日本語化MOD作成ツール


2.サルベージ


全てのディスクを検索しましたが、過去にバックアップを取った形跡はなく、ソースは見つかりませんでした。しかし、「C:\Users\(ユーザー名)\AppData\Local\Microsoft」フォルダー内に、いくつかの実行モジュールを発見しました。このフォルダーには直近で開発していた実行モジュール(exe,DLL)の一部が残っていたようです。

サルベージできたのは改良版「会話ツリー表示ツール」の一部と開発中のゲーム用OCRツール。そして常用していたディスクの空き領域を表示するツール。

これらを元にプログラムソースを復元することにしました。復元できるのはC#で作成したツールに限ります。復元には ILSpy と言う.Net Framework のプログラムを逆コンパルするツールを使用します。

「icsharpcode/ILSpy: .NET Decompiler」
https://github.com/icsharpcode/ILSpy


3.逆コンパイル


使い方は簡単で ILSpy を起動し、解析したいプログラムやDLLをD&Dすればソースを表示できます。コツとしては解析したいモジュール(exe,dll)を同じフォルダー内に入れておくことです。そうすることにより、依存関係にあるモジュールを自動的にロードしてくれます。

このツールはPillars of Eternity 改行ツール作成時に大活躍しました・・・


4.プロジェクトファイルの復元


次に、[File]-[Save Code...]でソースファイルをプロジェクトとして保存します。これで、Visual Studio で開くことができるプロジェクトが作成されます。後は、Visual Studio を使って細かな調整とデバッグを行います。

【復旧時の注意事項】
逆コンパイルは完璧ではない。

  • 当然の事ですがコメントは復旧できません。
  • 一部の変数名は適当な名前に置き換わります。
  • Windows Forms のフォームは一本のソースに纏められます。
  • 一部の文字はUnicode文字のエスケープシーケンス(\uxxxx形式)になります。例えば日本語の長音「ー」は「\u30fc」となりました。
  • 定数は復旧されません。

フォームに付いては新しく作り直したほうが早かったです。フォームを新規に作成し、フィールドやメソッドを手作業でコピーしました。定数についてはVisual Studioのリファクタリング機能定数化。


5.根本的な対策


とりあえず、サルベージ作業でソースの復旧とデバッグを行っていますが、根本的な問題の解決にはなりません。そこで、プログラムのバックアップを行う仕組みを検討することにしました。

GitHubとBitbucketのアカウントはすでに取得済みなので、どちらを使うかを悩みました。完成した物をアップするのであればどちらの公開リポジトリーでも良いのですが、今回はローカルにあるリポジトリーのバックアップが目的です。そうなるとプライベートな環境が作れることが条件となります。
結果、今回は Bitbucket のGitサービスを利用することにしました。理由は、
  • 個人用プライベート/パブリック リポジトリーが無制限に無料で利用できる。


6.Bitbucketへの移行


取り急ぎ対応が必要なものからBitbucketに移行していきます。

今の所、作成したリポジトリは、
  • Terraria JpMod Maker(TMM)
    TMMはソースの復旧が完了、現在テスト中。
  • Tyranny 日本語化MOD作成ツール
    これは被害がなかったのでリポジトリー登録まで完了。
  • Low Magic Age 日本語化MOD作成ツール
    リポジトリーの作成まで完了。プログラムは一から作り直し。
  • 改良版会話ツリー表示ツール
    リポジトリーの作成まで完了。一部残骸が残っていたので今後サルベージの予定。どちらにせよプログラムは一から作り直し。

むむ~、今回は高い授業料でした。
やっぱりバックアップは必須ですね。

あ! ブログ用の元画像も動画も全部消えちゃったのか・・・

では・・・






0 件のコメント:

コメントを投稿

Raspberry Pi 3 Model A+ で広告ブロックサーバーを作る(その2)

前回作成した 広告ブロックサーバー の稼働状況をAmbientにアップロードするスクリプトを書いたのでメモを残しておきます。