なげやりろぐ

フテイキコウシン

 シンボリックリンクでアレコレ

うーん、ナニから書き始めようか・・・
つらつらと書いていくとまとまりが無くなりそうなので(汗)

コトの始まりはTwitter

ある方がつぶやいていたんです、他の場所に移動したHLRのdatをシンボリックリンクで参照させられないだろうか・・・と。
コレにはどういう意味合いがあるのかというと、たとえばネットワーク上にある他のマシンにインスコしてあるSleipnirからメインマシンのHLRのdatを参照させることが出来れば既読を再度チェックする必要が無くなるので(゚д゚)ウマー ということなワケです。
以前は鯖マシンもWindowsだったのでネットワーク越しに同期を取ってそれぞれのSleipnirの状態を同一にしていたのですが、ここ最近会社のPCでSleipnirを利用する際に自宅マシンとHLRのdatおよびスパムフィルタのdatを同期させたいと思うようになりまして、こっそり会社のマシンにVPNを導入して自宅マシンとの同期*1を行ったりしていました。

シンボリックリンクについて

UNIXやソレに準じたOSであるMac OSXやLinuxあるいはSolarisをお使いの方にはお馴染みの機能ですけど、実はWindowsでもファイルシステムにNTFS5を扱えるWindows2000以降であればソレっぽいモノが利用できるんですね。
ただしWin2000やXPでいうところのシンボリックリンクとはNTFS5から実装されたリパースポイント機能を利用したジャンクションと呼ばれるモノでありファイルに対してリンクすることは出来ないため、本来の意味でのシンボリックリンクとは趣を異にします。*2しかしVistaやServer2008においては本来の意味でのシンボリックリンクが利用できるようになっています。

で、シンボリックリンクってナニ? ということになりますけど、いわゆるショートカットというモノとは別物でして・・・って、これ以上書いても二番煎じになりますのでこちらへ丸投げ(笑)

で、今回の目的としてはsettings\《ユーザ》\以降にあるheadlinereaderディレクトリ(フォルダ)に対するリンクが作成できればいいのでWin2000やXPで作成できるジャンクションで良いことになります。詳細は後述。

シンボリックリンクVistaで利用する

いまのところGUIによるツールは見あたらないようですが、コマンドプロンプトから簡単な記述で作成できちゃいますので問題ないでしょう。
また、Vistaシンボリックリンクを作成するためにはAdministratorsでなければいけません。コマンドプロンプトを立ち上げる際に管理者として実行することで作成できますが、頻繁に利用するようならば管理ツールのローカルセキュリティポリシーから現在のログオンユーザーを追加しておくことで次回以降簡単になります。


書式は以下のようなモノです。

mklink [[/d] | [/h] | [/j]] 《リンクの名前》  《ターゲットまでのパス》

オプションスイッチに /d , /h , /j の三種類ありますが、コレはリンクの種類を決めるためのモノです。

    • /d ディレクトリへのリンク
    • /h ハードリンク (ディレクトリへは不可)
    • /j ジャンクション

オプションスイッチを指定しない場合はファイルへのシンボリックリンクとなります。*3
/d と /j の違いはナニかということに気づくかと思われますが、 /j で作成されるディレクトリへのジャンクションは同一PC内のHDDに限定されるという制限があり、ネットワーク上のファイルを参照できないというトホホな仕様なんですね。*4
そこで /d を指定して本来のシンボリックリンクをディレクトリに対して作成することでネットワーク越しにリンクを利用することが出来るようになるワケです。

《リンクの名前》は新しく作成されるシンボリックリンクの名前です。
《ターゲットまでのパス》は元になるディレクトリ(フォルダ)までのフルパスか、現在コマンドプロンプトを開いているパスからの相対パスを指定します。

実際にフォルダに対してシンボリックリンクを作成する手順の一例。



ここではSleipnirのインストールフォルダに対して、My Document内にtestという名前でフォルダへのシンボリックリンクを作成しています。



マイドキュメントフォルダを開いてみると、testというフォルダが出来ています。
リンク先を確認してみるとSleipnirのインストール先になっています。



しかしプロパティを開くとわかりますがショートカットとは違い、リンク先などがグレーアウトして編集出来なくなっています。
ですがXPの場合はプロパティから編集出来る手段があります。


他にもハードリンクといったモノが利用できますが、コレはディレクトリ(フォルダ)に対してリンクすることは出来ないので詳細については割愛。でもコレも便利なのでXPでの項でちょっとだけ触れます♪

シンボリックリンクをXPで利用する

先に記したようにXPにおけるシンボリックリンクとはジャンクションになりますのでネットワーク越しには利用できないということを念頭に置いておく必要があります。
但し、後述する新しいネットワークストレージサービスを利用する分にはこの制限を受けませんので導入する価値はあると思います。


XP(及びWin2000)におけるシンボリックリンクの作成・利用法については検索すると結構Hitするようになりました。しかし本来のシンボリックリンクではないですし、コマンドラインでの操作ということも手伝ってちょっと試してみようかという向きには抵抗がありそうです。


そこで今回はコマンドラインではなく、シェルと統合してお手軽にフォルダに対するジャンクションを作成できるリンク作成シェル拡張 for Windows 2000/XPというモノを利用してみました。(このツールではファイルに対してリンクを張るとハードリンクになります)
※スクショはこのツールによって作成したジャンクションのプロパティタブに追加されたシンボリックリンクの情報です。


このツール、すでに作者のサイトは消失してメンテナンスが行われていませんが、SourceForgeから入手するか最終版を再配布をしてくださっている方がいますのでそちらから落としてきてください。

Vectorにもありますけどバージョンが古いままですので素直に最終版を落としてきましょう♪

このツール導入後にはエクスプローラのコラムの表示内容も拡張されて、正確なファイルサイズやシンボリックリンクのパス情報などなどが利用できるようになります。(コラム右クリで設定)


ソレともう一つ、シンボリックリンク絡みで見つけたのですが、NTFS Utilsというコレもシェル拡張型のツールですけどコチラはハードリンクの作成およびリパースポイント(ジャンクション)の作成が出来るのはモチロンですが、プロパティタブを拡張してファイルストリーム情報も編集できるようになりますので一緒に導入しておくと(゚д゚)ウマーです♪
※スクショはこのツールによって拡張されたプロパティタブです。ここからファイルストリーム情報の編集が可能です。

どちらのツールもシェルを拡張していますので、通常のファイル・フォルダに対する右クリ及び作成されたリンクを右クリするとメニューが拡張されています。これがまたイロイロと便利♪
※ただしどちらのツールもインスコ後には再ログオンかシステムの再起動を行わないと正常に動作しませんので注意が必要です。


上記ツールを導入後にフォルダを右クリでD&Dすると《リンクを作る(L)》というメニューが追加されているのでクリックするとジャンクションが作成される。
コレはリンク作成シェル拡張の機能。


ファイルを右クリでD&Dすると《ここにハードリンクを作成(L)》というメニューが現れる。
コチラはNTFS Utilsの機能。
このとき上部の《リンクを作る(L)》を選択するとNTFS Utilsと同様にファイルに対するハードリンクが作成される。コレはリンク作成シェル拡張の機能。
ハードリンクの名前は自由に変更できるがオリジナルの名前は変更されない。

どちらもショートカットキーが(L)になっているのが笑えるトコロですけど、気になる方はシェル編集アプリで書き変えるとイイでしょう。
なお、ハードリンクはヒトツのファイルに対していくつでも作成可能です。ただし、オリジナルファイルの削除はハードリンクをすべて削除したあとでないと行えません。

で、ここからがようやく本題(遅っ!)

シンボリックリンクをXP(コチラはジャンクションね)及びVistaでディレクトリ(フォルダ)に対して作成出来ることは確認できましたので、今度はコレを利用して自宅のPCと出先のPC間でHLRのdatやspamurl.dat、favorite.ffvやfavorite.ffg、user.iniさらにはサードパーティプラグインやユーザースクリプトが作成したデータベースを常に同じモノを参照するような方法を考えてみました。*5

単純にSleipnirを起動しただけで自宅と同じになっていて欲しい(あるいは帰宅後に出先での変更が反映)というのがそもそもの目的ですしね。

で、各種あるWebベースのストレージサービスをいくつか試用してみたのですがどれもコレもインターフェースが名前の通りブラウザを通してしか利用できないモノばかり。
以前から利用しているJustSystemのインターネットディスクであれば、iDiskツールを導入することでエクスプローラから普通のファイルと同様に操作できるので今回の目的には合致していました。で、試してみたところバッチリだったのですが誰もが皆利用している(出来る)という性質のモノではないので他に同様のことが出来るモノはナイだろうかということなのですが・・・

Dropboxを利用する

Dropboxはまだ正式サービスが始まっておらず現在はクローズドβとして登録してあるユーザーしか利用できませんが、近いうちに正式サービスになりそうな気配ですのでちょっとだけ先走って紹介してみたいと思います。
ちなみに正式サービス後は有料化されそうな気配ですけど・・・それでも使ってみる価値はあります♪


3ヶ月ほど前、存在を知った時点でメルアドを登録してあったのですが、ちょっと前にやっと返信メールが来て利用可能になりましたので早速クライアントをインスコ。
コレが件のインターネットディスクと同様にエクスプローラから操作できる上にファイルは上書き保存されるわけではなくバージョン管理されて残っていくというとってもスグレモノ♪ 
つまり間違って上書きしちゃっても以前のファイルに書き戻すことが出来るわけです。Mac OSX Leopardのタイムマシンみたいな感じといえばいいのでしょうか。*6


Dropboxのクライアントをインスコすると、My Document以下にMy dropboxというフォルダが出来ます。(画像はワタシのXPのエクスプローラです)



タスクトレイにはアイコンが常駐し、ココからMy dropboxフォルダやWebインターフェースへとアクセスできるようになっています。

実際に使えるようにしてみる(コレが目的ね)

以下でXPと表記してあるモノに関してはWin2000でも同様のハズです。(未検証ですけど・・・)

  • Dropboxのパブリックフォルダを開き、Sleipnirのインストールフォルダにあるsettingsフォルダを右クリしながらD&Dし、シェルメニューから《ここにコピー(C)》を選択。
    アップロードが終わったあとにインデックスの作成が行われるのでしばし待つ。(ファイルを登録した初回のみ)
    タスクトレイアイコンのアニメーションが終了したら利用可能。
  • 上記で《ここに移動(M)》をしても良いが、念のため再度インストールフォルダにあるsettingsフォルダをデスクトップなどに右クリしつつD&Dして《ここに移動(M)》を選択。
    以後の操作で問題がなければこのフォルダはどこかにバックアップしておくなり削除するなり・・・
  • Sleipnirのインストールフォルダには現在settingsフォルダがナイ状態。ここへDropbox上のsettingsフォルダからシンボリックリンク(XPではジャンクション)を作成。
  • XPの場合は先に記してあるシェル拡張ツールを導入し、Dropbox上のsettingsフォルダを右クリしながらSleipnirのインストールフォルダへD&Dし、シェルメニューから《リンクを作る(L)》を選択。同一PC内にあるフォルダに対する操作なのでジャンクションでOK!
    ココまでできたら一旦Sleipnirを起動し正常起動するのを確認後、普通にブラウジングやHLRのフィードチェック、スパムURL登録などを行ってみてクライアントを閉じ、正常に終了するか確認する。
    問題がなければSleipnirが終了時に書き出した各種設定などがDropbox上のsettingsフォルダへ書き込まれ、タスクトレイのアイコンがアニメーションする。
  • ココまでで一応各種設定のバックアップ*7が自動的にDropboxへ作成されたことになります。
  • Vistaの場合はコマンドラインからシンボリックリンクを作成します。今回の場合は /j オプションによるジャンクションでも /d オプションによるディレクトリへのシンボリックリンクでもかまわない。
凡例
    • インストールパスはワタシの場合なので適宜変更が必要。
    • あらかじめcdコマンドでSleipnirのインストールパスへ移動しておかないと現在のディレクトリにリンクが作られるので注意。
      あとでそのリンクを移動しても良いけどね。
    • なお、パスに空白が含まれている場合にはダブルクォーテーションでくくる必要がある。
cd "C:\Program Files\Sleipnir\unicode"
 
//インストーラ版では"C:\Program Files\Fenrir & Co\Sleipnir"...だったかな?

mklink /d settings "C:\My Documents\My Dropbox\Public\settings" 
  • 以上でSleipnirインストールフォルダにsettingsフォルダへのシンボリックリンクが作成される。
    あとの操作はXPと同様で、特に意識しなくてもSleipnirの設定ファイルに変更があれば自動でアップロードされる。
  • 出先のPC(モバイル用ノートPCとか会社のPCとか)でもXPならばシェル拡張ツールとDropboxのクライアントをインストールして自宅PCと同じアカウントでログイン設定をし、My Dropbox上のsettingsフォルダからジャンクションを作成すれば、起動時には自宅PCで変更されたファイルが読み込まれてHLRの既読フィードが重複することはなくなる。
    VistaならDropboxのクライアント導入とコマンドラインからのシンボリックリンク作成で同様になる。

resourcesもモチロン同様に出来ますが・・・

Sleipnirのインストールフォルダ全部をDropboxへ・・・という暴挙も試しましたが、Skinやらナニやら拡張しまくりのワタシの環境ではDropboxがインデックス作成し終わるまでエライ時間がかかっちゃいましたので現実的ではないですね。
ただ、overrideフォルダに入れても認識してくれないxmlファイルが一部あるようなので、ココはresourcesフォルダ内にあるlanguagesフォルダだけを対象にしておいた方が良さそうです。


ソレともう一つ、Vistaにおいては設定の格納場所がAppDataとかに替わっている場合もあるようですが、ワタシの場合はアーカイブ版利用で各種設定ファイルはインストールフォルダにおくようにしていますので、それぞれの環境に合わせてシンボリックリンクを作成する必要があるかと思われます。この辺りの実際については検証する気も起きませんのでご容赦くださいね。


以上、Dropbox(及びインターネットディスク)限定のアプローチでしたけど、Dropboxは登録ユーザーであれば10人まで招待できるという機能があります。
現在ワタシのアカウントにおいては7名分の枠が残っていますので、今回のエントリーを見て試してみたいと思われた方はコメント欄にその旨を書き込んだ上で私宛にメール(キキの画像をクリックすればメルアドがわかります)をくだされば招待いたします。
正式サービスまで待てない方のための措置ですが早い者勝ちですので♪
ルールは簡単。コメントしたのちメールです。そうでないと何名希望したかが他の方にワカリマセンので・・・
また、コメント時に使用した名前がメールで確認できるようにしてください。



現在、Sleipnirでは独自お気に入りのデータであるfavorite.ffvが参照先を指定できるようになっていて、コレを他のPC上のSleipnirから利用すればメインマシンと同じ状態のお気に入りを利用できるのですがHLRには残念ながらまだこういったオプションは用意されていません。*8
と、いうことで長くなっちゃいましたがこういったアプローチもあるということを参考までに。

*1:同期には最近リリースされたばかりのMS謹製SyncToy2.0を利用。コマンドラインツールも付属しているのでコレを利用してSleipnirのprograms.iniに記述し、起動時に同期させていました。

*2:この辺りの詳細については[http://homepage1.nifty.com/emk/symlink.html:title=コチラを参照]。

*3:この場合当然ですがディレクトリを指定するとエラーになります。

*4:この制限、身近なところではMy Documentのプロパティでリンク先をネットワークドライブに出来ないことでわかるかと。コレが一般ユーザーが目に出来るジャンクション機能かな。

*5:シンボリックリンク利用以前、直感的に思いついたのはFTPを利用してプロバイダから与えられているホームページスペースにSleipnirのsettingsフォルダをコピーしておいて自宅・出先共にSleipnirの使用前に同期を取っておくという方法だったのですが、設定が煩わしい上に同期を明示的に行わなければイケナイしブラウザ起動前の作業が一手間増えることになりますので却下

*6:UIはエクスプローラなワケですけどWebインターフェースでイロイロと出来ます。

*7:起動・終了を繰り返すたび、変更のあったファイルだけバージョン管理された状態で追加されていきます。不具合が起きたときは過去のファイルから書き戻すことが可能。

*8:そのうち気が向いたらよろしくお願いします>t.oさん