Windows7におけるMATLABバージョン混在法

最近ずっと超絶忙しいです。。。いつになったら平常にもどるのだろう。。。というわけで、今回も小ネタを。

MATLABは、1年に2つもリリースされます。できれば混在させておきたいところですね。実際、XPの頃は、全然問題なく混在できていました。

ところが、Windows7ではうまくバージョン混在できないケースがあります。それは、MATLABパス設定です。MATLABの各バージョンにおいて、なぜかパス設定が共通になってしまう場合があります。これはもう、大迷惑!

R2010aはR2010a、R2010bはR2010bと、各バージョンのMATLABは極力独立させておきたいのが人情というもの。

そこで、なぜこのようなことが起きてしまうのか?についてご説明したあとで、どうやったら回避できるのか?についてご提案します。

どうしてこうなるの?

(ご興味のない方は、こちらは飛ばしてください。)

MATLABのパス情報は、pathdef.m というMスクリプトに保存されています。問題は、このpathdef.mの保存位置です。

MATLABでは伝統的に、Program Filesの下の、MATLAB/R2010b/toolbox/local の中に保存されます。

c:\program files\MATLAB\R2010b\toolbox\local\pathdef.m

Program Filesの下っていうところがミソです。もしも、アプリケーションがProgram Filesの中身をいじりたい放題だったら・・・セキュリティ的にかなりマズい事になりますよね。

そのため、Windows7では、アプリケーションが勝手にProgram Filesの中身をいじれないようになっています。

さぁ困った。という事で最近のMATLABでは、pathdef.mをProgram Filesの外にも保存できるようになっています。その代表的な場所が、マイドキュメントの下のMATLABフォルダです。

マイドキュメントの下の「MATLAB」フォルダ

これで、Program Filesの中身をいじらなくても良くなりました。しかしその代わり、マイドキュメント / MATLAB フォルダは、最近のMATLABが共通して使用しています。これがいけないんですね。

じゃあMATLABのバージョン毎に、違うフォルダにpathdef.mを保存したらいいじゃないか!と思うのですが、そうもいきません。なぜなら、MATLABは起動時のカレントディレクトリにある pathdef.m しか読んでくれないからです。困りましたね。。。

回避方法その1:ちょっとゴーイン

私は、この方法を使用しています。やり方はとってもカンタン。MATLABを起動する際に、「管理者として実行」するだけです。

右クリックして、「管理者として実行」をクリックする

そうすると、MATLABはProgram Files以下のファイルにも書き込み放題になります。

そのため、パス設定の結果は、MATLAB/MATLABのリリース名/toolbox/local/pathdef.m に保存されます。

MATLABのバージョン毎に別々のpathdef.mがあって、それぞれ別々に書き込まれるため、バージョンの混在が出来ます。XPでは、こういう状態で混在しているわけですが、Windows7でもムリヤリそうしてやろう、というわけです。

回避方法その2:セキュリティにも配慮

回避方法その1を見て、オイオイと思われた方もいらっしゃることでしょう。せっかくのWindows7のセキュリティ機能が台無しじゃないか!と。

そういう場合には、ちょっと面倒ですがこうしましょう。

ステップ1:pathdef.m を、MATLABのバージョン毎に用意する

たとえば、マイドキュメントのMATLABフォルダの下に、R2010bなどのフォルダを用意します。そして、そこにpathdef.mを置いてやりましょう。

マイドキュメントの下の「MATLAB」フォルダの下に、さらに「R2010b」フォルダを作成

ステップ2:MATLABのスタートフォルダを、pathdef.mのあるフォルダに設定してやる

MATLABのショートカットを右クリックして、プロパティをクリックします。

そして、作業フォルダに、先ほどpathdef.mをおいたフォルダを指定してやります。

これでOKです。

この状態でMATLABを起動すると、「現在のフォルダー」が先ほど指定したフォルダになります。

そして、そこに置いてある pathdef.m が自動的に適用されています。

もう、「管理者として実行」しなくても良いため、セキュリティ的に少しだけマシな状態になります。

オマケ

この問題は、Windows7の、「いちどEXEを起動したら、あとからそいつに管理者権限を与えることはできない」という制限がネックになっています。

私がMATLABを作るのであれば、「pathdef.mを設定するだけ」のEXEを作って、MATLABからそいつをキックしてやります。キックする際に管理者権限を与える事はできるため、これで問題なくいけるはずです。(もちろん、いつもの「実行していいの?」ダイアログはでますが。)

ただ、そうするといつまでたってもProgram Filesの中身をいじる方式から抜けられません。それはそれで美しくないため、MATLABの開発チームは現状の仕様を選択したのだと思います。それにしても、MATLABバージョン毎にフォルダは分けて欲しかったなぁ。。。