艦これサポートソフト「航海日誌」をDropbox経由で複数PCで共有する

航海日誌が便利なので最近使ってます。今まではGoogle Docsでドロップ履歴やら建造・開発履歴を管理していたけどこれだと自動でとってくれるので幸せ!
なのでDropbox上にディレクトリを作ってその中で動かせば複数PCで共有できて便利♪ってやっていたところ、PCによってうまく記録されていないことが判明。原因と対策を調べてみました。

原因

config/internal.xmlのプロパティreportPathにログの出力先ディレクトリが保存されているが、この出力先パスは絶対パスで保存される。そのため、端末Aと端末Bでユーザ名が違うとこんなことになる。

端末 ユーザ名 期待するログ出力先 ログ出力先のある場所
A yaizawa C:\Users\yaizawa\Dropbox\航海日誌 C:\Users\yaizawa\Dropbox\航海日誌
B Administrator C:\Users\yaizawa\Dropbox\航海日誌 C:\Users\Administrator\Dropbox\航海日誌

…まぁ、そりゃそーだわな。

対策

航海日誌 (というかJavaVM) からの見えるパスを同じにしてやればいいので、ユーザ名を揃えましょう…なんてやってられないので、Symlinkを…というのがUNIX的発想。で、Windows (NTFS) でもSymlinkを作れるので使ってみましょう。

想定環境

Dropbox上に次のようなディレクトリ構成で航海日誌を配置しているとします。

航海日誌/ 航海日誌関連ファイルを格納するルート
logbook/ 航海日誌のパッケージ本体
航海日誌ログ/ ログ出力先
Symlinkは次のように貼るとします。

C:\logbook 航海日誌のパッケージ本体
C:\航海日誌ログ ログ出力先

免責事項

Copyright (c) 2014, yaizawa

All rights reserved.

ソースコード形式かバイナリ形式か、変更するかしないかを問わず、以下の条件を満たす場合に限り、再頒布および使用が許可されます。

  • ソースコードを再頒布する場合、上記の著作権表示、本条件一覧、および下記免責条項を含めること。
  • バイナリ形式で再頒布する場合、頒布物に付属のドキュメント等の資料に、上記の著作権表示、本条件一覧、および下記免責条項を含めること。

本ソフトウェアは、著作権者およびコントリビューターによって「現状のまま」提供されており、明示黙示を問わず、商業的な使用可能性、および特定の目的に対する適合性に関する暗黙の保証も含め、またそれに限定されない、いかなる保証もありません。著作権者もコントリビューターも、事由のいかんを問わず、 損害発生の原因いかんを問わず、かつ責任の根拠が契約であるか厳格責任であるか (過失その他の) 不法行為であるかを問わず、仮にそのような損害が発生する可能性を知らされていたとしても、本ソフトウェアの使用によって発生した (代替品または代用サービスの調達、使用の喪失、データの喪失、利益の喪失、業務の中断も含め、またそれに限定されない) 直接損害、間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害について、一切責任を負わないものとします。

準備

楽をするために、Dropbox航海日誌/に次のようなバッチファイルを作っておきます。

MKLINK /D C:\logbook "%~DP0logbook"
MKLINK /D C:\航海日誌ログ "%~DP0航海日誌ログ"
@PAUSE

ミソは

  • MKLINK /Dディレクトリのシンボリックリンクを作成する
  • Dropboxのパスが変動するため、シェルの変数%0を活用。%~DP0とすることで実行しているバッチファイルのドライブ名 + パスに展開される
  • 実行結果を目視確認するため、あえてECHO OFFしない。ただしPAUSEが見えると気持よくないのでここだけ@で出力抑制

このバッチファイルをそれぞれの端末で叩いてやると、C:\直下にシンボリックリンクが作成される (要管理者権限なので、右クリックして [管理者として実行] すること)。DIRで確認すると次のように表示されるようになる。

2014/05/25  15:41         logbook [C:\Users\Administrator\Dropbox\航海日誌\logbook]
2014/05/25  15:41         航海日誌ログ [C:\Users\Administrator\Dropbox\航海日誌\航海日誌ログ]

あとは航海日誌を立ち上げて、ログの出力先をシンボリックリンクの方に変更してあげればOK。

MacFreeBSDLinuxなどの方へ

(そーいやFreeBSDだとDropbox動かなかったな…)
POSIX系だとドライブレターなどが悪さをするので、個々のファイル、ディレクトリのシンボリックリンクを作ってあげましょう…。多分こんな感じでいける? 未確認です。

mkdir /home/hoge/logbook
mkdir /home/hoge/logbook/config
ln -s /home/hoge/dropbox/航海日誌/logbook/logbook.jar /home/hoge/logbook/
ln -s /home/hoge/dropbox/航海日誌/logbook/readme.txt /home/hoge/logbook/
ln -s /home/hoge/dropbox/航海日誌/logbook/logbook_lib /home/hoge/logbook/
ln -s /home/hoge/dropbox/航海日誌/logbook/logs /home/hoge/logbook/
ln -s /home/hoge/dropbox/航海日誌/logbook/sound /home/hoge/logbook/
ln -s /home/hoge/dropbox/航海日誌/logbook/config/group.xml /home/hoge/logbook/config/
ln -s /home/hoge/dropbox/航海日誌/logbook/config/item.xml /home/hoge/logbook/config/
ln -s /home/hoge/dropbox/航海日誌/logbook/config/kdock.xml /home/hoge/logbook/config/
ln -s /home/hoge/dropbox/航海日誌/logbook/config/ship.xml /home/hoge/logbook/config/

ミソはinternal.xmlDropboxから引っ張ってこないところ。internal.xmlは各環境で生成してあげてください。きっと動く…といいな。