スポンサーリンク

SublimeText2 – CompassパッケージでビルドするとRubyのプロセスが残ったままファン全開

同じ症状を検索しても見つからないので、この問題はたぶん私の環境だけなのでしょう。

SublimeText1を使い始めてから、1週間ほどたちました。ふと以前よりメモリ使用量が増えたような気がします。さらに、少し暑い部屋でMacを放置し、しばらくして戻ってきたら、ファンが全開で回っていました。起動しているアプリをあらかた落としてみましたが、ファンは止まることなく「ぶ〜ん」と回っています。

アクティビティモニタで確認します。

Ruby がいっぱい。CPU使用率で並べ替えてみると上位独占。一つ一つは大した事がないですが、常に高め、メモリもまぁまぁ、でも、Rubyを使った記憶がない・・・。

原因はCompass

そういえばCompassを入れるときにRubyがどうのこうのしたなぁと思い出しました。

当たり前ですが、 Compassを実行すると、Rubyプロセスが起動します。sh経由なので、shプロセスも増えます。 ~/Library/Application Support/Sublime Text 2/Packages/Compass/Compass.sublime-buildファイルを確認すると compass watchが実行されています。ファイルを監視して更新されると自動でコンパイルしてくれるようです。

一度だけコンパイル
compass compile sass/style.scss
ファイルを監視して更新されるとコンパイル
compass watch sass/style.scss
上記に加えて圧縮
compass watch –output-style compressed sass/style.scss
nested、expanded、compact、compressed
ディレクトリ内のファイルをすべて監視
compass watch

ここまではいいのですが、SublimeText上で実行するとコンソールに >>> Compass is polling for changes. Press Ctrl-C to Stop.が表示されます。このメッセージは、Compassが出力しているので、SublimeText上で Ctrl+c を押しても、何も起こりません。ターミナルでCompassを実行した場合は、 Ctrl+cで止まります。sublime-keymapを確認しましたが、Crtl+cには何も割り当てられてないようです。

てっきりSublimeTextを終了させると、一緒にcompass(ruby)も止まってくれるのかと思ったのですが、ずーっと、居座るようです。そんな訳で、プロセスを落とさないと、うっかりCompassのビルドを実行するたびに、rubyプロセスが増えます。まぁ、compass watchは、一度だけ実行すればいいので、忘れなければ大丈夫ですね。私は大丈夫ではなかったです・・・

まとめて終了させる

結局、ターミナルかアクティビティモニタで終了させることになるのですが、面倒なのでシェルスクリプト(killcompass.sh)を作成します。Compassのrubyプロセスを全て終了させます。初めてシェルスクリプトなるものを書いたので、正しいかどうかはわかりません。期待通りに動けばOKです。


#!/bin/sh

USER='ユーザ名'

pids=`ps ux | grep ${USER} | grep 'compass watch' | grep 'ruby' | grep -v grep | awk '{print $2;}'`

for pid in ${pids[*]}
do
	kill ${pid}
done

せっかくなので、SublimeTextから呼び出せるようにします。

~/Packages/Compass/Compass.sublime-build~/Packages/User/へコピーします。

コピーした @Compass.sublime-build@ に下記を追加、


"variants": [
    {
    	"shell": "false",
        "name": "Kill Compass",
        "cmd": ["$project_path/killcompass.sh"]
    }
]

こうしておけば、Compass利用時にCmd+Shift+pでコマンドパレットを開き、kill compassを実行すれば、rubyプロセスを落とすことができます。

と、あれこれしてみたのですが、SublimeTextを終了させるときに忘れていたらどうしようもないので、Compassパッケージを使うことをやめました。

結局・・・

そこで、フリーウェアのScout2を試してみました。他のエディタでも汎用的に使えるので、これでいいかなと思いました。

が、Javaも動いているらしく、本体と合わせて250MB程度と、何もしなくてもわりかしメモリそしてCPUを食うのであきらめました。お手軽で便利なんですけどね、MacbookAirのメモリが4GBなので無意味にメモリを使うアプリは使いにくいです。

結局、シェルスクリプトファイルを作って、そこから呼び出すようにしました。ターミナルが表示されるので落とし忘れも無さそうです。

  1. http://www.sublimetext.com/

  2. http://mhs.github.io/scout-app/