黙々とC#

"In a mad world of VBA, only the mad are sane" 『VBAという名の狂った世界で狂っているというのなら私の気は確かだ』

Nanoc4、Windows10環境下でSCSSを使おうとしたらエラーが発生して解決できなかった話

f:id:d_ymkw:20170316234838j:plain

nanoc で、SCSSファイルのコンパイルもまとめてできることを知ったので、やろうとしたのだけど、Windows特有のエラーが発生して上手く行かなかった話。

目次

SCSSの使い方(基本)

Nanoc4では、最初からfilterが用意されている。

compile '/**/*.scss' do
  filter :sass, syntax: :scss
  write item.identifier.without_ext + '.css'
end

上記で良いっぽい?

今回は、複数ファイルに分割(複数の_*.scssを作成)してimportするようにしていたので、下記記事を参考に

Rulesファイルはこんな↓感じにして、_で始まるファイルをスルーするように

compile '/stylesheets/**/_*' do
  # do not compile
end
compile '/stylesheets/**/*' do
    filter :sass, syntax: :scss
end

…

route '/stylesheets/**/_*' do
  nil
end
route '/stylesheets/**/*' do
  item.identifier.chop + '.css'
end

発生したエラー

nanocを実行すると下記のエラーが発生した。

Error: Invalid Windows-31J character “\xXX”

ってやつ。

原因がよくわからなかったので、sassを直接叩いてみたのだけど、同じエラーが。

さらに後述の方法で、一部のファイルは問題が解消したと思ったら、今度はSyntaxエラーが発生した。(MacOSX環境下でgulp-sass (内部でlibsassを呼び出す)なら問題のないコード)

Windows環境でよく起きるらしい文字エンコーディング問題

昔からよくある話らしく、原因と対策がいろいろな場所で解説されている。

巷で出回っている解決策

  • scssファイルの先頭に@charset “UTF-8”;を指定
  • sassコマンド呼び出し時に -Eutf-8 オプションを指定
    • もしくは環境変数にRUBYOPTを追加。コマンドラインからなら set RUBYOPT=-EUTF-8
  • Compassを用いて、configファイルに Encoding.default_external = ‘utf-8’を記載
  • set LANG=ja_JP.UTF-8を指定

今回は、いずれも効果が無かった。

原因は不明。