読者です 読者をやめる 読者になる 読者になる

White Box技術部

WEB開発のあれこれ(と何か)

【Scala/Java】sbtの文字化け問題(sbt.batに惑わされた話)

※新しい対策記事を上げました(2014/07/20)

-【解決済み】【Scala】WindowsでGit Bash利用時のsbt文字化け問題とその対策 - White Box技術部


もーーーーーーーーーーーーーーーーーーーーーーーー!!

・・・おはようございます。

書きたいプログラムがあって作っていたのですが、sbt周りで躓いてしまって、出社前までに完成しそうにないので、残りの時間で詰まったところを書こうと思います。

事の発端: Scala学習 => sbtで詰まった

先日からScalaの勉強を再開したのですが、しばらくぶり過ぎて完全に忘れていました。

手持ちの「Scalaプログラミング入門」は読んでると眠くなる、コップ本は細かすぎるということで、 「Scala逆引きレシピ」を通勤中に読みながらちまちまやっています。

Javaが後ろにあるからなのか、Scalaの文法を学んでいると、どうしてもGroovyと比較してしまうのですが、今のところ自分の感覚としては

といった感じです。

HTTP通信がしたいので

Scala逆引きレシピの168を参考にsbtの設定をしてsbt compileをしたところ、Dispatchが見つからないと怒られました。
Dispatchの公式を見に行ったところ、sbtへの書き方が変わっていたようなので、build.sbtの記述を以下のように修正します。
#build.sbtは設定の間に改行が必要です。

libraryDependencies ++= Seq(
  "net.databinder.dispatch" %% "dispatch-core" % "0.11.1"
)

これでライブラリの取得は成功しました。

が、コンパイルが失敗する

ライブラリの取得後にコンソール上に出てきたのはおびただしい文字化けの嵐。

というわけで次はsbtの文字化けについて調べたところ、Qiitaで詳しく書いてくれていた人がいたので参考にさせて貰いました。

自分の環境はWindowsなので、sbtインストールフォルダ配下のconfig/sbtconfig.txtの先頭付近に「-Dfile.encoding=UTF-8」を記述します。
#ここも周りに倣って、設定行の間に改行を入れています。

  • sbt\conf\sbtconfig.txt
# Set the java args to high

-Dfile.encoding=UTF-8

-Xmx512M

-XX:MaxPermSize=256m

-XX:ReservedCodeCacheSize=128m

# Set the extra SBT options

-Dsbt.log.format=true

文字化け直らず

実施後もscala.io.Codec.default.charSetは変わらずwindows-31jを指し、文字化けが治りません。

ややあって気付くのですが、自分がGit Bashで作業していたため、sbt.batではなくsbtの方が実行されており、うまくいっていないようでした。

文字化け解決

sbtに直接エンコード設定を書く方法もありそうですが、面倒だったので.bashrcを作成し、bashJava実行オプションを固定で設定して対応することにしました。

自分は環境変数に「HOME」を設定しているので、そのパスにGit Bashで移動してvimから.bashrcを作成し、以下を記載しました。

  • ~/.bashrc
export JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8

Git Bushから以下のようにsourceコマンドを叩いて再実行したところ、今度は無事文字コードUTF-8になりました。

source ~/.bashrc

良かった良かった。
ではいってきます。