Next: , Previous: , Up: ASDFを設定する   [Contents][Index]


4.2 ASDFがシステムを見つけられるように設定する(古いスタイル)

初心者はこのセクションを飛ばしてかまいません。初心者はasdf:*central-registry*使わないでください。また、初心者にasdf:*central-registry*を使うよう教えないでください

古いASDFでは、システムを探す場所を設定するのに、asdf:*central-registry*にディレクトリのパス名をpushする、という方法が使われていました。

この変数を設定するのは、ASDF 3以降をロードした、ASDFの機能を使うでなければなりません。このロードと設定は、初期設定スクリプトの一部として実行されなければなりません。典型的には、自分のプロジェクトをビルドするスクリプトか、処理系の初期設定スクリプト(例: SBCLの~/.sbclrc)がこれにあたります。

また、あなたがASDF 2以前を使っていて、ASDF 3以降を後からロードするという場合は、ASDF 1または2がロードされた後にASDF 3の場所をasdf:*central-registry*で設定し、その上でASDF 3を(asdf:operate 'asdf:load-op "asdf")などでロードし、ロード後に再びasdf:*central-registry*を設定する、という流れになります。というのも、ASDF 2からASDF 3へアップグレードする時にasdf:*central-registry*は保持されないからです。もっとも、前セクションの方法で設定されたソースレジストリはアップグレードの影響を受けないので、おそらくそちらを使ったほうが良いでしょう。(ただし、ASDF 2でasdf:initialize-source-registryを引数付きで実行した場合は別で、この場合はASDF 3で再び実行する必要があります。)しかし我々は、あなたがASDF 2以前を使っている場合は、処理系をアップグレードするなり、ASDFを最近のバージョンに置き換えるなりすることを強く推奨します。(→ 処理系付属のASDFを置き換える

asdf:*central-registry*は、ASDF 2または3ではデフォルトで空であり、ASDF 1との互換性のために残されています。この変数を使った設定は、上記のソースレジストリの設定に優先します。7

例として、/home/me/src/foo/foo.asdがASDFに見つかるようにしてみます。お使いの処理系の初期設定ファイルに、次のようなフォームを加えてください:

(require "asdf")
(push "/home/me/src/foo/" asdf:*central-registry*)

末尾のスラッシュが必要なことに注意してください。システムを探すとき、ASDFはasdf:*central-registry*のそれぞれの要素をパス名に変換します。正確に言うと、それぞれの要素はevalされます。つまり、S式をasdf:*central-registry*pushすることも可能です。文字列やパス名は自己評価オブジェクトなのでevalは何もしませんが、S式を使うと、シェル変数やユーザーに応じた値を返すなど、コンテキストに依存した設定をすることができます。なお、nilに評価された場合、その要素はスキップされます。

このように、asdf:*central-registry*は「システムディレクトリ指示子」のリストであると言えます。システムディレクトリ指示子(system directory desinator)はシステムを探すときに実行されるフォームであり、ディレクトリ(あるいはnil)を返さなくてはなりません。ここでいう「ディレクトリ」とは「空でないディレクトリコンポーネントを持つパス名の指示子」8のことです。

パス名の末尾のスラッシュは、ファイルではなくディレクトリを指していることを示すのに必要です。このスラッシュがないと、(古い)ASDFは/home/me/src/foo/ではなく/home/me/src/を探してしまうおそれがあります。現在のバージョンでは、単にエラーを通知し、asdf:*central-registry*からこのエントリを取り除くリスタートが起動するでしょう。

多くの場合、.asdファイルは大量にありますから、それらの存在するディレクトリを1つ1つasdf:*central-registry*pushするよりは、各.asdファイルのシンボリックリンクを1つの共通ディレクトリに置き、そのディレクトリだけをpushするという方法が使われていました。ASDFはシステムへのシンボリックリンクを適切に解釈することができます。9

例えば#p"/home/me/cl/systems/"*central-registry*に含まれているとき、次のようにセットアップすればfooシステムを使えるようになります。

$ cd /home/me/cl/systems/
$ ln -s ~/src/foo/foo.asd .

なお、このセクションの設定方法は古いやり方であり、新しいユーザーには推奨されません。古くからのユーザーや、ASDFのパスをプログラムによって簡単にコントロールしたいユーザーのために残されています。


Footnotes

(7)

.asdファイルの探索をさらにカスタマイズすることも可能です。これは発展的な使い方になるので、後に扱います。*system-definition-search-functions*で検索してください。

(8)

[訳注] 実装を見る限りでは、evalの返す値がuiop:directory-pathname-pを満たせば良いようです(満たさない場合はエラーが通知される)。

(9)

WindowsではPOSIXのシンボリックリンクの代わりにショートカットを使うことができます。MacOSのエイリアスについては、うまく動くかどうかの情報を求めています。