Crystal があちこちに .crystal というディレクトリを作ってつらい

これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の7日目の記事です。

qiita.com

Crystal を何の気無しに使っていると、気がつくと .crystal というディレクトリがあちこちにできています。

Crystal はコンパイル時に .crystal というディレクトリを作るためです。 Ruby でスクリプトを実行するときのように crystal hoge.cr のように実行していても、実際にはコンパイルして実行しているので、やはり .crystal が作られます。

% ls -a
.  ..  hoge.cr
% crystal hoge.cr
% ls -a
.  ..  .crystal  hoge.cr

.crystal はプログラムがどこのディレクトリに置いてあるかに関わらず、カレントディレクトリに作成されます。

カレントディレクトリにたまたま .crystal というファイルがあったり、.crystal ディレクトリをカレントディレクトリに作成するパーミッションがなければ、エラーになりコンパイルできません。

これはつらい。CRYSTAL_CACHE_DIR 環境変数を設定することで場所を固定化できるので、指定しておいた方が良いと思います。 自分は次のように $HOME の下に作るようにしています。

CRYSTAL_CACHE_DIR=$HOME/.crystal

追記 2016-05-14

Crystal 0.16 で、CRYSTAL_CACHE_DIR 環境変数を設定しなくても、デフォルトで $HOME の下にキャッシュディレクトリを作るようになりました。

$HOME/.cache/crystal または $HOME/.crystal が使用されます。