これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の7日目の記事です。
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 が使用されます。