2009 . 04 . 10

パス指定で環境変数と相対パスを効果的に利用する

Rainmeterではリソースの読み込みの際、そのファイルのパスを指定する必要があります。

また、他のプログラムにコマンドを送る場合にも、やはり同様に、そのプログラムのパスを指定します。

この場合に最も確実なのは、ルートドライブからそのファイルやプログラムまでのパス、すなわち絶対パスで指定するのが定石となっていますが、この他にもRainmeterでは、相対パスでの指定や環境変数を利用したパス指定ができ、これらを活用することで絶対パスの指定では難しいケースに対応することができます。


さて、はじめに言っておくと今回の記事はエンドユーザー、つまりスキンを使うだけの人、あるいは自分でつっくたスキンを自分だけで使うの人にとっては大した情報ではありません。

(なぜなら、自分のディレクトリ構成にあわせて自らが、目的のファイルなりプログラムの絶対パスで直接設定してやればいいだけのことだからです。)

今回は特に、スキン製作者が不特定なユーザー環境に配慮したスキン製作をするためのちょっとしたアドバイスです。

環境変数を利用したパス指定

例えばマイドキュメント内のマイピクチャーにある画像を表示させたいと考えた場合、絶対パスでの指定では以下のようになるでしょう。

C:\Documents and Settings\user\My Documents\My Pictures\

前述のとおりユーザー自身が設定するのであれば、userに自分のユーザー名を入れて設定すればいいことですが、スキン製作者があらかじめユーザー名で設定することはもちろん不可能です。

そこで考えられる対応策の一つが環境変数を使ったパス指定で、実際には下のようになります。

%USERPROFILE%\My Documents\My Pictures\

%USERPROFILE%が変数にあたり、そのユーザーの環境に合わせて適当なパスに置き換わるというもので、この場合%USERPROFILE%という変数は以下のように扱われるようになります

  • XPの場合 C:\Documents and Settings\[ユーザ名]
  • Vistaの場合 C:\Users\[ユーザ名]

この他にも環境変数はたくさん存在し、WIndowsではデフォルトでこれらの変数が定義されているます。参考資料も多くWEBで検索可能なので調べてみるとよいでしょう。

また、環境変数を使用したパス指定はファイルの読み込みに用いる他にも、他のプログラムへのコマンド送信のためのパス指定にも使用できます。

  • 環境変数を含んだパスはRainmeterの[Variables]を使ってさらに変数にすることはできません

相対パスを利用したパス指定

次に相対パスでの指定ですが、こちらは主にファイルの読み込みに用いると便利です。

相対パスの特徴は絶対パスが常にドライブを基点としているのに対し、相対パスでは各INIファイル、あるいはRainmeter.exeを基点にするということで、環境の違いで絶対パスが分からなかったり、仮に途中で変化した場合でも、基点との相対関係さえ保っていれば機能するというものです。


  • ファイルがスキンと同じ階層にある場合
.\example.jpg
  • ファイルがスキンと同じ階層のAAフォルダ内にある場合
.\AA\example.jpg
  • ファイルがスキンの上の階層にある場合
..\example.jpg
  • ファイルがスキンの上の階層のAAフォルダ内にある場合
..\AA\example.jpg
  • ファイルがスキンが2つ上の階層にある場合
..\..\example.jpg
  • 「.\example.jpg」と「example.jpg」は同義

相対パスの指定を用いた特殊なケースとしてはプラグインとSOUNDで使われる音声ファイルの読み込みが挙げられます。

プラグインはデフォルトではプラグインフォルダに収められていますが、Rainmeter.exeから相対パスで指定さえしてやれば、大抵は動作します。

Plugin=.\Skins\example\ExamplePlugin.dll

もしもサードパーティーのプラグインをスキンと同梱して配布するような場合には、あらかじめこのように設定しておけば、わざわざプラグインフォルダに移す必要がなくなります。

音声ファイルの場合も同様に、Rainmeter.exeを基点にして指定すればいいだけです。

PLAY .\Skins\example\example.wav
  • さて、相対パスで注意としては環境変数の時と異なり、他のプログラムへのコマンド送信のためのパス指定には使うには、かなり難があります
    まずはディレクトリ/ファイル名にロングネームが使えないことや、深い階層のファイルだと失敗するケースなどがあり注意が必要です

Rainmeterの動作不良のもっとも多い原因の一つにパス指定が挙げられますが、このようなことを踏まえてスキンに反映させると、より少ない不具合に繋がるかと思います。

また、先日のエントリーでも取り上げたように、今後、Rainmeterのデータのインストール先が変更される可能性もあり、そういう意味でも今回の情報はちょっとした手助けになるかもしれません。