日々常々

ふつうのプログラマがあたりまえにしたいこと。

brewのversionsで最新がとれなくなったとき

Mac OS X 開発環境構築手順:Groovyインストール(※導入バージョン切替方法含む) - Shinya’s Daily Report

最後のとこが気になったので。


手元の環境で brew versions groovy をしてみる。

$ brew versions groovy
2.0.1    git checkout affc4c8 /usr/local/Library/Formula/groovy.rb
2.0.0    git checkout 278a37d /usr/local/Library/Formula/groovy.rb
1.8.6    git checkout b688a91 /usr/local/Library/Formula/groovy.rb
1.8.5    git checkout d90e061 /usr/local/Library/Formula/groovy.rb
1.8.4    git checkout b9c0c5d /usr/local/Library/Formula/groovy.rb
(略)

うん。で、1.8.6をインストールしてみる。

$ git checkout b688a91 /usr/local/Library/Formula/groovy.rb
$ brew upgrade groovy
==> Upgrading groovy
==> Downloading http://dist.groovy.codehaus.org/distributions/groovy-binary-1.8.6.zip
Already downloaded: /Users/irof/Library/Caches/Homebrew/groovy-1.8.6.zip
(略)

$ brew info groovy
groovy: stable 1.8.6, devel 2.0.0-rc-4
http://groovy.codehaus.org/
/usr/local/Cellar/groovy/1.8.6 (39 files, 17M) *
/usr/local/Cellar/groovy/2.0.1 (59 files, 25M)
https://github.com/mxcl/homebrew/commits/master/Library/Formula/groovy.rb

==> Caveats
You should set the environment variable GROOVY_HOME to
  /usr/local/Cellar/groovy/1.8.6/libexec

はいった。
ここで brew versions groovy をする。

$ brew versions groovy
1.8.6    git checkout affc4c8 Library/Formula/groovy.rb
2.0.0    git checkout 278a37d Library/Formula/groovy.rb
1.8.5    git checkout d90e061 Library/Formula/groovy.rb
1.8.4    git checkout b9c0c5d Library/Formula/groovy.rb
(略)

おお、2.0.1が消えた。

対処

Library/Formula/groovy.rbを戻せば良いです。git status 叩けばmodifyになってるのがわかります。*1

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	modified:   Library/Formula/groovy.rb
#	modified:   Library/Formula/scala.rb
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#	Library/Formula/adamem.rb
#	Library/Formula/asterisk.rb
(略)

てことで戻しましょう。

$ git checkout master Library/Formula/groovy.rb
$ brew versions groovy
2.0.1    git checkout affc4c8 Library/Formula/groovy.rb
2.0.0    git checkout 278a37d Library/Formula/groovy.rb
1.8.6    git checkout b688a91 Library/Formula/groovy.rb
1.8.5    git checkout d90e061 Library/Formula/groovy.rb
1.8.4    git checkout b9c0c5d Library/Formula/groovy.rb
(略)

めでたしめでたし。

どうでもいいこと

これ書きながら何度も git versions… とか brew checkout… とか叩いて半ばパニックになってました。

*1:あ、scalaもcheckoutしたままになってた……。他のUntrackedはなんだろう。わからん。

JUnitのテストメソッド名に日本語を使ったときの問題と対処

メソッド名を日本語にする話 - 日々常々とかにも書いてるんですが、テストメソッド名に日本語を使うのはザラです。むしろ使わない理由がありません。こんなのですね。

import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import org.junit.Test;

public class HogeTest {

	@Test
	public void ほげはほげのはず() throws Exception {
		assertThat("hoge", is("hoge"));
	}
}

例が悪い?そこは気にしないでくださいませ。

さて、メソッド名に日本語を使った時に、一部IDEでは問題が起こることがあります。一部と言いつつ私はEclipserなのでEclipseの話です。

Eclipseメソッド名がを含むテストクラスの実行

単純に実行するだけです。えいや。

いけますね。余裕です。

メソッド単位で実行する

ちょっと脇道にそれてEclipseの話。
Eclipseはいつからかテストメソッドを選択して実行できるようになっています。確か昔はクラス単位で実行した後、テスト結果の出ているところで選択してからならメソッド単位での実行も出来たんですが、今は一気に出来ます。
やり方は簡単で、実行したいメソッドを選択して実行するだけです。カーソル合わせて*1実行するだけ。えい。

実行結果を見てもらえば testMethod だけが実行されていることが判って貰えると思います。

なお、QuickJUnitでは昔からメソッド単位の実行ができて、こちらだと「実行したいテストメソッド内にカーソルがあれば」そのテストメソッドが実行されます。対してEclipseでは「実行したいテストメソッドを選択していれば」になります。若干挙動が違ったりします。

メソッド名が日本語のテストメソッドを実行する

先と同じように、メソッドを選択して実行します。てい。

だめですね。これで行けるならわざわざこのエントリなんて書きません。*2

対処: eclipse.iniに書く

参考: MacOSX上でQuick JUnitをお使いの皆様へ。日本語クラス名、メソッド名の対応方法 - Fly me to the Juno!
はい、このままです。eclipse.ini に書いてください。QuickJUnitに限ったことではなく、そう言うことです。Macかどーかも関係無く、Winでもeclipse.iniに書けばおっけーです。

-Dfile.encoding=UTF-8

これでいけるはず。と思って素直に再起動……してもだめでした。cleanしてもだめ。なんでだろう。

対処2

正直よくわかってないです。eclipse.iniに追記して、DockにあるEclipse.appを実行ではだめでしたが、ターミナルから

open (Eclipseインストール先)/Eclipse.app

を実行したらいけました。ほら。

なんでだろう。でもそれでいけてるんで、上記のalias作って起動するようにしてます。
うごきゃーいいんだようごきゃー………いや、出来ればちゃんと解決したいんですけど……。

おまけ:プロダクトコードで使わない理由

補完が効かせにくいとか、その辺の理由でプロダクトコードに積極的に日本語メソッド名や変数を使うことはありません。積極的に使わない以上、無理に一部に導入したところで混乱が加速するだけです。プロダクトコードに日本語を使うかどうかは別の議論があるかもしれませんが、現時点では使うことは考えないことにしています。

*1:ここではメソッド名の背景がグレーになっているのがわかると思います。

*2:たまにTDDBCで「これでRedを確認した」となってるのを見ます。ちゃんとエラーメッセージ見て欲しいなーと思いつつ、Greenにならないからすぐ気づくんですけど。仮実装重要ですね。