Mac OS X + SublimeLinterでJavascriptの日本語エラーを回避する方法

エディタ Sublime Text 2 には SublimeLinter というlintを使って構文エラーをエディタ上で強調してくれるプラグインがある。これを使っているのだがJavascript上で日本語があるともれなくそこが構文エラーとして強調されてしまう。この問題を放置して使っていたのだがちょっと調べて対応してみることにした。

まず本家のサイトをみてJavascriptのlinterの選択方法をみてみた。

Javascript-based linters

If you plan to edit files that use a Javascript-based linter (Javascript, CSS), your system must have a Javascript engine installed. Mac OS X comes with a preinstalled Javascript engine called JavaScriptCore, which is used if Node.js is not installed. On Windows, you must install the Javascript engine Node.js, which can be downloaded from the Node.js site.

On Mac OS X, you must install Node.js if you plan to edit Javascript or CSS files that use non-ASCII characters in strings or comments, because JavaScriptCore is not Unicode-aware.

つまり、Mac OS Xの場合デフォルトでJavaScriptCoreというJavascriptエンジンがインストールされておりNode.jsが見つからない場合はこちらが使われるが、JavaScriptCoreがUnicodeに対応していないため日本語がエラーと誤認識される。この問題はNode.jsをインストールすることで回避するようだ。

よくSublimeLinterにはNode.jsが必要というエントリーを見かけるのだが、SublimeLinterの実行がNode.jsに依存しているわけではなく、SublimeLinterが構文チェックを別のプログラム(lint)に委譲しており、Javascriptの構文チェックにNode.jsを使うことがあるというのが正しい。使う言語によってはNode.jsのインストールは必要ないことがあるし、JavascriptであってもOS XではJavaScriptCoreがあるのでNode.jsを使わないという選択肢は残されている。

今回はJavascriptの日本語問題を解決するためにNode.jsをインストールしてみる。何も考えずにhomebrewからインストール。

$ brew install node
$ which node
/usr/local/bin/node

/usr/local/bin/nodeにインストールされた。

SublimeLinterはNode.jsを検索して使うようなのでSublime Text 2を再起動したら問題が解決されていた。

JavaScript – If the “javascript_linter” setting is “jshint” or “jslint”, this linter runs jshint (or jslint respectively) using Node.js. See “Javascript-based linters” above for information on how to install Node.js.

If the “javascript_linter” setting is “gjslint”, this linter runs the closure linter (gjslint). After installation, if gjslint cannot be found by SublimeLinter, you may have to set the path to gjslint in the “sublimelinter_executable_map” setting.

You may want to modify the options passed to jshint, jslint, or gjslint. This can be done by using the jshint_options, jslint_options, or gjslint_options setting. Refer to the jshint.org site, the jslint.com site, or run gjslint –help for more information on the configuration options available.

SublimeLinter supports .jshintrc files. If using JSHint, SublimeLinter will recursively search the directory tree (from the file location to the file-system root directory). This functionality is specified in the JSHint README.

SublimeLinterはJavaScript用のlinterとしてjshint, jslint, gjslintが利用できる。デフォルトの設定をみるとjshintが使われるようだ。いまいちSublimeLinterとNode.jsとjshint/jslintの関連がわからなかったのだがプラグインの中身を見ていたらjshint/jslintのソースファイルがSublimeLinterに梱包されていた。どうやらNode.jsが実行できる場合には同梱しているjshint/jslintを使って構文チェックをしているようだ。というわけでNode.jsだけインストールしておけばSublimeLinterがよきに計らってくれる。

ちなみに構文エラーの内容を知りたい場合はCommand Paletteから SublimeLinter: Show Error List を実行すればいい。

JSHint for Sublime Text 2というJSHintを使う専用のJavaScript構文チェックプラグインがあるのだが、SublimeLinterがjshintが使えたら使うといっていて、プラグインが競合しそうな気がするのでインストールは保留している。

なお今回確認したSublimeLinterのバージョンは1.5.1です。バージョンが異なる場合は本家の https://github.com/SublimeLinter/SublimeLinter を確認してください。