タグ別アーカイブ: java

MacでJava7環境の日本語扱いの問題について(eclipse, IntelliJ IDEA)


Macに標準でインストールされているJavaはAppleから提供されているJDK1.6系のものです。JDK1.7系はすでにリリースされているのでその最新のJDK1.7(java7)を利用するようにしたいと思いますよねー!!
Oracleのサイトから最新のJavaをインストールするには、以下を確認すればインストールできると思います。
http://www.java.com/ja/download/faq/java_mac.xml

■インストール後にバージョンを確認してみる

% java -version
java version "1.7.0_10"
Java(TM) SE Runtime Environment (build 1.7.0_10-b18)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)

これで、java7系が無事インストールできていると思います。

そこでテストコードを書く時などをわかりやすくするために、 日本語でテストメソッド を書くことも多いと思います。そんな時に日本語がうまく認識できずに「ClassNotFoundException」となってしまいます。どうにか解決するようにちょっと試行錯誤してみました。

EclipseやIntellij IDEAなどのIDEからテストを実行する時に発生する問題で、コマンドラインからテストを実行すればとくに問題はおきません。

自分の場合はMavenを利用してHogeTestというテストを実行するために「mvn test -Dtest=HogeTest」のコマンドを実行しても問題無く実行することが出来ました。


Eclipseでの日本語問題の解決方法

以下の様なテストクラスがあったとします。

public class HogeTest {

    @Test
    public void テストメソッド() {
        assertTrue(true);
    }

}

単純に実行した時点では「ClassNotFoundException」になってしまいます。
次の記事を参考にEclipseで実行時に使用するVMの引数に「-Dsun.jnu.encoding=UTF-8」というオプションを指定してあげれば日本語メソッドも解決出来ます。
JUnit のテストメソッド名に日本語を使ったときの問題の解決法 (Java 7)

しかし、以下のようにEnclosedを用いてネストしたテストクラス名を日本語とした場合

同じく「ClassNotFoundException」になってしまいます。

@RunWith(Enclosed.class)
public class HogeTest { 
    public static class ネストしたテストクラス {
        @Test
        public void ネストテストメソッド() {
            assertTrue(true);
        }
    }
}

これはちょっと、謎なんですが、以下のコマンドでeclipseを起動してあげると解決します。今のところこの方法で起動するようにすればとりあえず日本語のクラス名やメソッド名でも問題無く実行できるようになります。

% open /Application/eclipse/Eclipse.app

なんとなく、腑に落ちないのですがとり上記コマンドをエイリアス貼って起動するようにしています。


Intellij IDEAでの日本語問題の解決方法

基本的にはEclipseと同様に日本語のクラス名やメソッドがある場合「ClassNotFoundException」となってしまいます。
以下の2つの手順を実行すれば解決します!

  1. IntelliJ IDEA の日本語テストメソッド名の実行で再度ハマった話
    Run => Edit Configrations => Defaults => JUnit の VM options に “-Dsun.jnu.encoding=UTF-8” を追加する。

  2. IntelliJ IDEA + Spock で日本語テストメソッド実行時にハマった話
    「/Applications/IntelliJ\ IDEA\ 12\ CE.app/Contents/Info.plist」ファイル(Info.plist)を開いて、VMOptions の string の最後に「-Dgroovy.source.encoding=UTF-8 -Dfile.encoding=UTF-8」を追加する。 IntelliJ IDEAまでのPathは環境に合わせて適宜変更してください。

「1」 についてはEclipseのVM引数と同じですねー。
「2」 については記事内にもあるのですが、テストクラスでテストメソッドを指定して実行しようとした時の対処です。この設定を入れなくてもテストクラス全体を一気に実行する場合は問題無く実行できます。

これでそれぞれのIDE上でとりあえず日本語の問題は解決できると思います!

TDDBC大阪3.0外伝 参加しました!


2013年はじめのTDD Boot Camp in 大阪 外伝
開催日:2013年01月13日

午前は講演、午後は演習(ペアプロ)の2段構成でした。 10時から18時までと長丁場でしたが本当に楽しかったし、周りの皆さんと色々話もできてモチベーションが上がった!!


午前の講演時のメモ

いろふさん(@irof)、渡辺さん(@shuji_w6e : 資料)のお話を聞きました!

テストの価値は失敗することにある.

  • テストを失敗させる
    • 失敗するバグを埋め込む
      ちゃんと失敗してくれる、 失敗は最小、 失敗をわかりやすく

  • 他人の書いたテストはわかりづらい
    • テストはわかりづらいだから当たり前にしよう
    • 特別なことを当たり前にする

あたりまえのこと(特別なことはない)

  • テストは落ちるもの
  • テストは読みにくいもの

TDDは開発手法

良いプログラムは開発できるが、良いシステムを開発できるわけじゃない。
TDDはテストリストが起点
良いシステム = 顧客の求めるシステム

「何を構築するか?」を考える
顧客の言葉を使ったシステムの使い方
ユースケースユーザストーリ
システムの外部的な振る舞い

ユースケース駆動開発

ユースケースを開発の起点として定義する。

  • システムとユーザインタラクションを記述
  • 一行で一つのアクション
  • 〜すると記述(できるは避ける)

外部設計 => システムを外から見た時の利用者視点

ユースケースから実装を導く

  • ロバストネス分析
    バウンダリ
    コントローラ
    エンティティ

ユースケース中の名詞 -> ドメイン として定義
ユースケース中の動詞 -> メソッド として定義

抽象的なユースケースのシナリオから、具体的な例として変更する => 具体的な値を入れることでユースケースから受け入れテスト(機能テスト)を導く事ができる。ユースケースを用いることでシステム全体を設計する

(例)自動販売機にお金を入れる => 自動販売機に100円入れる


午後の演習

@oota_kenさんと@kyon_mmさんとペアを組ませて頂きました。Groovyを触ってコツを掴んだ気がします。新しい言語でコードを書くときはいつもプログラミングは楽しいなーと感じます。
そして、GroovyとSpockはホントテストが簡潔に書けると実感。これは覚えるべきだなと思いました!!

演習の時のコードをアップしてもらいました。TDDBC Osaka Groovy

和田さんのペアプロでのレビュー

パラレルチェンジ(でかいリファクタリングの時に有効となる方法)でリファクタリングをした。
パラレルチェンジとは(參考

変更箇所が多数ある場合に、リファクタリング前のコードとリファクタリング後のコードを同居させ、1箇所ずつ変更するごとにテストコードで確認しながらリファクタリング後のコードへ移行させていく。

演習中でのパラレルチェンジをする流れ
・お金の扱いをInteger から Moneyクラスにする
・メソッドオーバーロード
・Integerで扱うところをなくしてMoneyを使うことにする

余談(イベント中で印象に残ったこと)

@kyon_mmさんと何気なく話していた時に話していた内容がとても刺激をうけた!!!!

「(@kyon_mm)今日は4時間で20数コミットかー、普段は60コミットくらいはしているけどなー」・・・
なんだって!!!コミット数が全てを物語っていると思う。自分は短時間でこんなにコードに変更を加えた経験はないし、いったとしても4時間で20コミットまで行くか行かないかだと思う。。。こういう所が差なんだろうなーと。

これからは技術書を読むことに加えて、もっとコードに戯れて楽しんでいけるようにしたいなー!!
いろんなコードをコミットしまくれる1年にしたい!

関西Javaエンジニアの会スペシャル!
JavaOne 2012に参加してきた!


関西Javaエンジニアの会がとても面白そうだったので、参加してきました!!
スピーカーの方も豪華ですごかった。そして、じゃんけんに勝ってJavaOneグッズを貰っちゃった。。
JavaOne タンブラーをGet

関西Javaエンジニアの会スペシャル! JavaOne 2012
開催日:2012年12月1日

内容は
JavaOneサンフランシスコの報告やJava8のlambdaなど


JavaOne 2012 サンフランシスコの報告

寺田さん @yoshioterada

JavaOne 2012の紹介されていたもので自分の中で気になったものをメモ

-Nashorn
JVM上で動くJavaScript エンジン
Rhinoに後継(パフォーマンスが良くなる)

-JavaFX Scene Builder
JavaFx用のGUIツール

-NetBeans 7.3 Beta
HTML5, JavaScript, CSS の開発環境を提供
Chromeのエクステンションを提供。(ホットリロードに対応。)
JavaFXを利用するのにも今のところはNetBeans

各プロジェクトの状況

Java SE 8
Lambda式の追加
JavaScriptエンジン統合
JavaFX

Java SE 9
Jigsaw(モジュール化)対応

Java EE 7
HTML5シンプル化

Java EE 8
クラウド化、モジュール化

単純にJavaOneに参加してみたいという思いが強くなったーーー
来年は東京開催のやつには参加しよう!!


Lambdaについて

さくらばさん @skrb
Java in the Box や IT Pro Java 技術最前線 の方。

lambdaを表すと
・Background
・Lambda Syntax
・Iteration API

【lambdaの構文】
(引数, 引数) -> {処理}

こんな感じのAdderインターフェースがある
interface Adder { int add (int x, int y); }

それを lambda で実装する場合、以下のように出来る。
Adder adder1 = (int x, int y) -> { return x + y; };

型推論があるから型を省略、returnも省略出来る
Adder adder2 = (x, y) -> x + y;

※引数なしの場合は () -> 1 + 2;
lambda の Iterator API(Stream API)

【lambdaの前に事前知識としてイテレータとは….以下の2つがある】
・拡張for文(外部イテレータ)
・Iteratorクラスのforeachメソッド(内部イテレータ

【Stream API(終了の制限のないコレクション) 以下のようなメソッドがある】
・filter
・sorted
・map
・reduce

【使用方法】
サンプルとして以下を考える。
「色」と「重さ」のフィールドを持ったShapeクラスのListからカラーが青の重さの合計を計算する。

@irofさんのサンプル https://gist.github.com/4180737

List shapes = new ArrayList();
shapes.add(new Shape("blue", 10));
shapes.add(new Shape("red", 30));
shapes.add(new Shape("blue", 50));
shapes.stream()
      .filter(s -> s.getColor()==Color.BLUE)
      .map(s -> s.getWeight())
      .reduce(0, (l, r) -> l + r);

・filter,map,reduceと 3回ループするように見えるけど filter や mapではループしない。reduceのところで一度ループする
・reduce メソッドは コレクションクラスの各要素を1つずつ処理していく
・stream()のところはparallel()に変更もできる(並列処理が出来る)

【「Default Method」について(インターフェースに対しての追加機能)】
これは使えそう!!!!インターフェースを実装しなくても、デフォルトを返すことができる。でも、意識して使わないとカオスにはなりそうだなー。インターフェース未実装のコンパイルエラーがでないようになりそうだし。

インターフェースにabstractメソッドだけではなくてdefault修飾子を付けられる。
interface foo {
    void sayHello();
    default void sayGoodBye() {
        System.out.println("Default Good Bye");
    }
}

【おまけ】
lambdaで実装した処理をPerlだったらどんな感じかなということで実装してみた。
パッと見、lambdaのメソッドチェーンで書かれているものが直感的で分かりやすいかなーー?!
そして、初めてGistも使ってみた。Gistに書くのいいねー!すぐに共有できるしシンタックスも充実してるし。

なんか、話を聞いているうちに、関数型言語への思いが増大していったー!!


javaEE7 のHTML5対応

寺田さん @yoshioterada
まず、、、最初に言われたのが、
Struts と Tomcat はやめようキャンペーン中」とのことでした!!!笑

http://yoshio3.com/2012/11/12/websocket-twitter-timeline-sample/

-JSF2.2 (Webコンポーネントライブラリ)
XHTML形式で扱える。デザイナー・エンジニア双方が同時に扱える。
プログラマ側が扱うフィールドなどの情報もタグ内に埋め込むことできる。
開発工程でデザイナーが更新したデザインをいちいちWebアプリサーバのコンテナに持っていかなくても扱うことが出来る。
ブラウザ上でタグを変換することが出来る

-サードベンダのコンポーネント
ICEfaces
PRIMEFaces

-WebSocket
TCPベース
双方向、全二重通信

通信の基本的な流れ
1,コネクション確立
2.双方向にメッセージのやりとり
3.コネクション切断

以下のようなアノテーションが提供されている
@websocketEndpoint(“[URL]”)
@webSocketMessage

-Project Avatar
HTML5 アプリ構築フレームワーク
モジュール化対応、JavaScriptフレームワーク
軽量なサーバ・アーキテクチャ(Thin-Server アーキテクチャ)
JavaScript と JavaEEを結びつけることが出来るのが Project Avator

【JSFの感想】
JSFは個人的にもとてもいいViewのライブラリだと思う。自分自身も使ってみた経験から、JavaScriptをガリガリ書かなくてもリッチなコンテンツも作れるし、HTMLのタグ内に属性として追加することもできるから、テンプレートとサーバの処理が分割できるってところはいいよねー!
よくある、デプロイしないとテンプレートのデザインが見れないっていうのが解決できそう。


JavaFXについて

さくらばさん @skrb

・Brand New GUI Library for Java(次の時代のGUIJava)
・Swingの後継 + Java 2D + α
・Java SE 8 includes javaFX
・基本的にはNetBeansの方にも

【Swing とは何が違うの?】
FXML(MVCのViewの部分をFXMLで書く)
Scene Builder 1.0 (Scene Builder)でViewを作る(Linux版も出た)

Swingだったら -> JCOmponent

JavaFXだったら -> Node

  • ControlShape
  • Browser
  • Chart
  • Media
    1. Chart
    2. CSS
    3. Animation / Effect

groovy G*のレポートについて

@kiyOtakaさん

JavaOneの中でG*関連の報告をしてくださいました。

javaOne Report for G*

【Groovy 2.0新機能】
静的Groovy
@TypeChecked アノテーション
@CompileStatic アノテーション
@Log アノテーション

G*のアドベントカレンダーもあるとのことだったので、見てみようと思う!!

PlayFramework関西ビギナーズ in OsakanSpace 第1回に参加した


PlayFramework超初心者向け勉強会ということで、参加してきましたー

とりあえず環境構築だけでも自分でやっておこうということで、事前にhomebrewでscalaとplayFrameworkをインストールして参加しました!!

インストールはとても簡単で

% brew install scala
% brew install play

以上!!

PlayFramework関西ビギナーズ in OsakanSpace 第1回
開催日:2012/11/17

では、聞いてきた内容を自分なりに解釈して、まとめてみたいと思います。


PlayFramework1.x 初心者向け講座

@aa7th さん

JavaでのplayFrameworkの使い方の解説でした。
サンプルを動かす時にフレームワークのいろいろな方法を紹介してくださいました。
公式サイトも日本語の情報で結構ドキュメントが整っているなーって感じがしました。
公式サイト

以下は、説明中に気になったキーワードなどをまとめてみました。

【スコープの話】
・セッションスコープ、フラッシュスコープ(http://playdocja.appspot.com/documentation/2.0.3/ScalaSessionFlash)
cookieに保存される!
文字列のみしか保存できない
通常のサーバサイドアプリで使用する、サーバ側のキャッシュに保存されるセッションとは違う

・キャッシュ
サーバサイドに保存される(ファイルキャッシュ、memcachedなど)
オブジェクトを保存できる(これを利用することで通常のサーバサイドアプリで利用するセッション)

【Model層】
トランザクション管理
特にトランザクションを明示しなくても、デフォルトで、リクエスト受けて start レスポンス返す時にcommitする。(地味に便利かもしれん)
レスポンスを返すまでの間にサーバエラーなど発生したらロールバックする。

(きになったコト)
Modelでsaveとかしてもトランザクションはコミットされない?
(テストなどでは明示的にトランザクションを設定する必要があるのかな)

アノテーションにより、
バリデーション条件。
@Tables(“テーブル名”) アノテーションをクラス名につけることでクラス名と実際に生成するテーブル名を変える事ができる

*モデルに紐付かないフォーム用のバリューオブジェクトは作れるのか?

【モジュール(npm(package.json) や gem(bundler) のようなもの)】
conf/dependencies.yml に定義する
CRUDモジュール (DB管理画面を簡単に作れる。CRUDを継承してあげる)
http://playdocja.appspot.com/documentation/1.1/guide7

SECUREモジュール
  認証などのモジュール

(注意)
モジュールを入れたあとはIDE(eclipse)のclasspathをcleanする必要があるらしい。(eclipsifyコマンドを実行)


PlayFramework2.xの現状 及び 実用事例について

@mumoshuさん、 @daiksyさん

2セッション目はフリュー社のソーシャルゲームでScala,Playを利用した実例について話をしてくださいました。だいぶ話を聞いて、まとめてなかったので、今覚えている範囲で書いてみます。

【関数型言語】
手続き型と違って状態を保持しにくくなる。
変数を書き換えていくんじゃなくて、関数に入力値を与えると出力されるという考え方。
マルチスレッドでもスレッドセーフで動く。関数自体には状態がないから。

【Playを使う魅力】
ドキュメント豊富
プラグインも色々ある

【Scalaについて】
LLの動的型付けではできない型チェックによる静的型付けの言語の良い点を利用できる。
その結果、コンパイル時にケアレスミスをなくす

ScalaのORマッパー
anom
scuery
scalar-query(おすすめ)

ScalaとPlayってやっぱり面白いなー!!!
それと、PlayFrameworkのスコープの話のところは普通の考えて違っていて興味深いなーと感じた。

[読んだ−]リファクタリング―プログラムの体質改善テクニック


読みました−

リファクタリングという名の通り、コードをどうすれば綺麗に保てるかということがとても詳しくそして、分かりやすく書かれている。。
これはとても良書!!

サンプルコードはJavaメイン。今はIDEがカバーしてくれるようなところなど、一部古い書き方もあるが、前はこんなかんじに書いていたんだととても参考になる。
この内容が10年以上も前に書かれていたとは。。。すごすぎると思った。

特に印象に残った言葉。
コンパイラが理解できるコードはだれでも書くことが出来る。優れたプログラマは、人間にとってわかりやすいコードを書く。

やっぱりここに行き着く!!

レビュー(ブクログ)