キッズプレート、パスタおかわり

プログラミングやデジモノについてあれこれ
--.--.-- --:--|カテゴリ:スポンサー広告| コメント(-)

スポンサーサイト


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2009.01.31 01:30|カテゴリ:自作アプリコメント(0)

Macの同一ボリューム名問題(DoMountヴァージョンアップ)


 さて今回は完全開発系のお話ですよぉー、長くなっちまったい!

 OS Xでネットワークボリューム等をマウントする際、こんな問題に直面したことはないでしょうか?
「同一ボリューム名」
 私はかなり悩んでいるんですが、ぐぐってもそんなに悩んでいる人が出てこなかったので、これってばレアな問題なんでしょうか。ちなみに私と同様の悩みを抱えている方は、
Mac OS X のネットワーク上のボリュームの認識方法
 とまあこんな感じです。あぁ、激しく同意です。ほんとうにLAN上の絶対アドレス指定がマックでも可能になったらどんなに楽ちんなことか。。。

 さて、この問題が具体的に私にどう降りかかっているのか説明したいと思います。

 仮にWorkというマウントポイントを設定しているマシンがLAN上に2台存在するとします。
 AのWorkとBのWorkです。OS Xでネットワーク上のボリュームをマウントするとデスクトップ上にアイコンが表示されます。AのWorkをマウントした後BのWorkをマウントするとどうでしょう?

「おぉ、同じ名前でアイコンがデスクトップに表示されてるじゃないか!」

 そうなんです。Finder上では同じ名前で表示されます。全くもってややこしいですよね。ただこのボリューム名、実際には連番を付与してマウントされています。
 特別な設定をしない限りマウントされたボリュームは起動ディスクにある
「/Volumes」
 以下に名前が表示されます。Workというマウントポイントを二つマウントした場合は、
「Work」と「Work 1」
 がこの/Volumesの下に存在することになります。当然のことながらAのWorkを先にマウントするかBのWorkを先にマウントするかでこの連番はくるくる変わってしまうわけです。

 私はよくプログラムの中でPOSIX pathを使用します。仮に「Work 1」に「a.txt」があったとして、そのファイルのPOSIXパスを取得すると、
「/Volumes/Work 1/a.txt」
 となる訳です。このような値をアプリケーションの設定ファイルに保存したりして後で利用しています。しかしこの値、当然のことながら
「AのWorkを先にマウントするか、BのWorkを先にマウントするかで使えたり使えなかったりしてしまうんです」
 仮に「Work 1」としてマウントされたAのWorkにあるa.txtのPOSIXパスを設定ファイルに保存しておきます。後日、

「そうだこの前AのWorkにあるファイル触ったよな。アプリの履歴から開いてみよう」

 といった感じで開く際にAのWorkをマウントすると「/Volumes/Work」でマウントされてしまいます。そうなるとアプリの履歴にある「/Volumes/Work 1/a.txt」が無効ということになってしまうのです。 私はネットワーク上のボリュームにマウントをする「DoMount」というアプリをリリースしています。このアプリケーションでも設定ファイルにPOSIXパスを利用しており同一マウントポイント名は悩みの種でした。

 DoMountではサーバへのログイン情報とPOSIXパスを利用することでネットワーク上のボリューム内にあるフォルダであってもボタンひとつで、

「ログイン→マウントポイントの選択→マウントポイント内の指定フォルダをFinderで開く」

 という処理が行われます。ところが同一のマウント名がある場合はマウントポイントの選択で既にプログラム上ではどっちのマウントポイントがどのサーバのマウントポイントなのか区別がつかなくなってしまうんです。ただこれだけならばマウントポイント内指定フォルダの存在を連番を含めて全ボリュームチェックすればいいのですが、このフォルダ名まで複数存在するともう完全にお手上げです。

 この問題を解決する一番の方法は「/Volumes」以下のボリュームがそれぞれどのサーバのボリュームなのかを取得することです。しかしこれは手続きがかなり複雑な上に下手をするとFinderの表示がおかしくなってしまう恐れがあるということで、もっと簡単な方法がないかと考えていました。そこでふと思いついたのがマック特有のAliasレコードです。いやー、UNIXからOS Xに入った身としてはこの存在に気がつくのに少々時間がかかってしまいました。9な人ならすぐに思いついたんだろうなあ~(言い訳)

 Finderでエイリアスを作成すると同じボリューム名が複数あっても正しいサーバのアイテムにちゃんと参照がとおります。であればこのエイリアス情報を利用するのが一番手軽で簡単じゃね? ということでDoMountをヴァージョンアップしました。

「おぉー、ばっちりじゃないか」

 ただ従来のテキストベースによる指定とは異なりエイリアスレコードを使用するのでマウント時にユーザ名とパスワードの入力が必要になります。但し、キーチェーンに登録されているサーバであればユーザ名とパスワードの入力は必要ありません

【今回のヴァージョンアップで可能となったこと】
・複数の同一名ボリュームをマウントしている状態でも正しいサーバの正しいアイテムを表示できます
・OS XからAppletalkの日本語マウントポイント名へワンクリックで接続できます
※多くの人が自動マウントにApplescript等を使用しているかと思いますが、Applescriptの「mount volume」やシェルコマンドの「mount_afp」ではOS Xから日本語文字列で公開されているAFPマウントポイントへ直接接続することは出来ません※Tigerで確認

 そして何より変わったのが、

・ボリュームやフォルダをアプリにドロップするだけでアプリに登録可能となりました

 が一番大きいやもしれません。今まではテキストファイルを開いてちまちまと項目名・IPアドレス・ユーザ名・パスワード・マウントポイント名・フォルダのパスを書かなければいけなかったので面倒なことこの上ないアプリでした。そんな訳でドラッグアンドドロップで簡単に管理できるようになったのが一番大きい変更かなと思います。ただテキストファイルによる設定もちゃんとできるようにしているので玄人さんはそちらのほうが便利やもしれません。

 ぶっちゃけエイリアスファイルをフォルダにまとめて入れて管理しているのと変わりませんがこのアプリを使えばかなりスマートにその管理を行えると思います。さらに今後追加予定の機能もありますのでお楽しみに。

 DoMountのダウンロードはこちらから
コメントの投稿












管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL

プロフィール

ひらくん Author:ひらくん
どもども、ひらんくんどす。
日々まったり過ごしております。
仕事はDTP関連のスプリクト&アプリケーション開発。
Follow happyscript on Twitter

ブログ内検索



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。