IntelliJ IDEAでCompassを使う方法（設定の最適化）

インストールまではできたけど、IntelliJ IDEAで（おそらくPhpStormやWebStormも同様に）自動でコンパイルさせるための設定がよくわからない！というわけで調べました。

# 事前準備

* Compassをインストール。`$ compass -v`で確認する
* IntelliJ IDEAにFile Watcherプラグインをインストール

# プロジェクトにCompassをセットアップする
## ディレクトリ構造

今回のディレクトリ構造はこんな感じにしてみます
![filetree.png](https://qiita-image-store.s3.amazonaws.com/0/37334/6bb5d61c-e6bc-332e-2609-8e32d943cdf9.png)

## セットアップコマンドを叩く

IntelliJ IDEAのTerminalを開き、以下のコマンドを叩きます。（場所はプロジェクトルートのままでOK）

```sh
compass install compass --sass-dir "web/sass" --css-dir "web/css" --javascripts-dir "web/js" --images-dir "web/img"
```

このコマンドは、こちらのページからプロジェクトのディレクトリ構成に合わせて自動生成したものです。
http://compass-style.org/install/

## 設定ファイルを作るコマンドを叩く

```sh
compass config --sass-dir "web/sass" --css-dir "web/css" --javascripts-dir "web/js" --images-dir "web/img"
```

先ほどのコマンドの`install compass`の部分を`config`に変えてみたら、勝手に`config`ディレクトリが作られて、その中に`compass.rb`ファイルが作られました。こんなんでいいのか？まあ、後で考えることに。

`compass watch`を試してみると、きちんと自動コンパイルされるようです。これでも作業はできますが、裏で書き換えられるためIntelliJ IDEAがファイルの変更を認識しなかったりするようです。ちゃんと設定して、コマンドの入力さえも手抜きできるようにします。

# IntelliJ IDEAを設定

実はここが上手くいかなかった。

ひとまず、こちらのガイダンスに従います。
[WebStorm(やその他のJetBrains IDE)でCompassを使う方法](http://blog.jetbrains.com/jp/2013/12/10/326)

簡単に設定するためリンク先を見ていただくのがオススメですが、要約すると…

* Compass実行ファイル、compass.rbファイルのpathをそれぞれ設定する
* File Watcherに監視ファイルを追加する

※Compassの有効化しました
![compass.png](https://qiita-image-store.s3.amazonaws.com/0/37334/61db40c6-807e-0816-ab77-052c94c868d4.png)

※表示される緑のサジェスションのメッセージからFile Watcherに追加しました
![filewatcher.png](https://qiita-image-store.s3.amazonaws.com/0/37334/54d0d8fd-2c59-b652-e16a-487e2473857b.png)

ここまではよかったのですが…

## エラーが出る、または上手くいかない

SCSSファイルを変更すると、こんなエラーが出る。

```
Individual stylesheets must be in the sass directory.
```

Configファイル`compass.rb`を上手く見つけられないために起きているのだと推測。なにかやり方が間違っているのかもしれないが、今回はConfigファイルの場所をコマンド引数に追加することにしました。

## コマンドの修正

### コマンドの使い方を確認

```sh
$ compass compile -h

Usage: compass compile [path/to/project] [path/to/project/src/file.sass ...] [options]

Description:
compile project at the path specified or the current directory if not specified.

Options:

...(中略)...

    -c, --config CONFIG_FILE         Specify the location of the configuration file explicitly.
```

### File Watcherの設定を修正

引数に--config（または-c）を追加して、設定ファイルの場所を教えてあげる。

Argument（コマンドに渡す引数）:

```sh
compile $ProjectFileDir$ $UnixSeparators($FilePath$)$ -c $ProjectFileDir$/config/compass.rb
```

`$ProjectFileDir$`はプロジェクトディレクトリのパスに置換されるマクロです。

Working Directory、Output path to refreshも設定します。
Output path to refresh（リロードする場所）が誤っていると、IntelliJ IDEAがファイルの変更を検知するのが遅れます。

最終的にこうなりました。
![Screen Shot 2015-04-30 at 2.34.44 AM.png](https://qiita-image-store.s3.amazonaws.com/0/37334/46d98cc1-5218-9b29-4584-8654564673f4.png)

これで、上手くいくはず！ 先ほど表示されたエラーはXボタンで消しておきます。

# 動作確認

SCSSファイルに何か書いてみると…
![sass.png](https://qiita-image-store.s3.amazonaws.com/0/37334/d19ec798-4991-7cb6-f8bf-243f24b3b298.png)

エラーが出ることもなく、CSSファイルが更新された！
![css.png](https://qiita-image-store.s3.amazonaws.com/0/37334/af24260f-62d6-d65e-30e8-4a7038ac6347.png)

# おまけ

## Apacheでweb/sass/以下を見えなくする

web/sass/に以下のファイルを追加してアクセス拒否。

```apache:.htaccess
<IfModule mod_authz_core.c>
    Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
    Order deny,allow
    Deny from all
</IfModule>
```

## `.sass-cache/`を.gitignoreに登録

.sass-cacheディレクトリが作られるみたいなので、gitを使っている場合は`.gitignore`ファイルに追加します。

```text:.gitignore
.sass-cache/
```

# おわりに

Sass自体まだ使い始めですが、使っていくうちにより詳しい情報を追記していきたい思います。