ラベル java の投稿を表示しています。 すべての投稿を表示
ラベル java の投稿を表示しています。 すべての投稿を表示

2014年12月18日木曜日

[書評] Gradle徹底入門

はじめに

このエントリーは Java Advent Calendar 2014 の 15日目として書かれたものです。

14日目は、@bitter_foxさんの「Load to an Author -Contributing OpenJDK-」です。

16日目は、@zephiransasさんの「Lambda-behaveでテストを書こう」です。

Gradle徹底入門とは


Gradle徹底入門
http://www.shoeisha.co.jp/book/detail/9784798136431

まずはじめに、献本して下さった@nobusueさん、ありがとうございました。

この本を読んでまず思ったのは、これまで手厚くサポートされたビルドツールの本を見たことがありませんでした。
過去に日本語で発売されたantやmavenの本でここまで詳しく、且つプロジェクトのプロセスにまで踏み込んだ本は、無いと思います。

個人的にこの本を読んで欲しいのは、未だにEclipseでビルドして、手作業でdeployしてるような残念なプロジェクトに配属されている人です。
読んで世の中には便利なツールがあることを知ってほしいと思います。

JJUG CCC 2014 FallでGradleで始めるGroovy expandというセッションを行う機会にも恵まれまして、この本の紹介をさせて頂きました。
そのセッションでは、Groovy, Gradleの入門編ということで導入に関する箇所を紹介いたしました。

今回は、どういった場面でこの本を使っていくと良いかを紹介したいと思います。

パターン

まず、そもそもGradleの名前だけ知っていて、ちょっと興味がある人の場合は、まず「導入編」だけを読んでどういったものかを知ってほしいと思います。

AndoridStudioを使い始めて、Gradleの世界に連れて来られた人は、「導入編」、「第9章 Androidプロジェクトでの運用」を読んでひとまず記号や文字列が何を意味しているのか知って、次にAndroid Pluginの更新に追従できるように頑張ってください。

今までAntしか使ってこなかった人は、「導入編」、「基礎編」、「実践編」、「第11章 Jenkinsとの連携」、「第12章 アーカイブの作成とファイルの公開」「第14章 ほかのビルドツールからの移行」を実際に書きながらやっていくといいと思います。

Mavenを使っていてGradleに興味がある人は、おそらく2種類だと思います。

まずは、今のプロジェクトがMavenのレールから外れてしまってどうにかしたい場合ですが、利用してるMavenプラグインが少なく、Antや他のスクリプト言語と併用しているような場合は、この本を全部読むことで何とか出来る可能性があります。

次に、どうしても特殊なMavenプラグインに依存していて、Gradleのサードパーティプラグインにも無いような場合は、全部読んだ後に「第13章 エキスパートへの道」を実践してみてプラグインを自作する価値があるかを決めてください。

Javaのライブラリのソースを見たらGradleのプロジェクトだった場合は、「基礎編」を重点的に読んで、タスクがどういった手続きを表しているのか、どういったプラグインに依存していて設定されているのかを知る武器を手に入れてください。

特にGradleはGroovyのDSLを作りやすい機能を活用して省略や簡略化されているのおり、同じ内容でも表現が違う場合があるので、「基礎編」や付録に付いているGroovyリファレンスを読んでください。
それでも足りない場合は、Groovyを知らない人のためのbuild.gradle読み方書き方入門を見てください。

おわりに

この本では、Gradle 2.0を基にしています。
今後のバージョンアップについて不安になっていらっしゃる方もいると思いますが、2.x系であればこの本に書かれている内容のAPIが変わることは無いでしょう。
また、APIにも実験的要素であれば、しっかりドキュメントにも載っているので、使う際には確認しておくといいと思います。

おそらくページ数の多さで迷っている人がいるのであれば、今後もJavaのプロジェクトでMavenのレールから外れる可能性が高かったり、AndroidStudioの様にGradleでしかビルドが出来ないプロジェクトに関わるような可能性があるのであれば、是非購入して役立てて頂ければと思います。

また、まだ公開されているプラグインの数が少ないので、自分の困っていることを解消したいと思ったら、プラグインを作って見て公開するまでの手順も載っていますので、挑戦してみてはいかがでしょうか。

2014年11月19日水曜日

JJUG CCC 2014 Fallに参加してきました #jjug_ccc

JJUG CCC 2014 Fall


きっかけ

これまで使ってきたGradleについてJJUG CCCで発表してみようかなと思って春に応募してみましたが、あえなく落選してしまいました。
秋にはリベンジしたいと思って、どんなネタがいいかなと考えていましたが、JJUG ナイト・セミナー 「ビール片手にLT&納涼会」で話した内容から、Groovyに繋がるような内容にしてみようと思い、応募してみたところ何故か当たってしまいました。

今までLTや長くても15分くらいしか人前で話すことが無かったので、50分をどう扱ったら良いのかいろいろ悩みました。

スライド

セッションは、Gradleで始めるGroovy expandです。
発表した資料はこちらです。



補足

Gradle徹底入門が出版されたということで、本の内容の紹介を含め、Gradleで使うにはGroovyでどんなことを知っておくと良いか等を話すことにしました。

初めはAndroid Studio使ってGradle Tutorial : Part 5 : Gradle App Engine PluginからGradle Tutorial : Part 7 : Android Studio + App Engine + GradleをGroovy, Groovy on Androidでやってみたいなとか考えてましたが、当日までの準備してると間に合わない状況になったのと、トラブルを避けようと思い、全編スライドでの説明にしました。
いずれ何かの機会でチャレンジしてみたいと思います。

スライドや発表では紹介しきれていない箇所がGradleにはあるので、まずは徹底入門を購入していただいてもらうといいと思います。
ちょっとしたスクリプトを書く場合にも使えますし、Javaのライブラリを駆使してタスクを組み上げたりすることも出来ます。

現場ではAntやMavenでレールを外れることもあると思います。
そういった場合にXMLではなく、ビルドスクリプトとしてGroovyを使うことが出来るので、無理をせずにやりたいことが出来るのがGradleの良い所だと思います。
自分がまとめで言いたかった事は、Javaを知っているとGradleやGroovyを使うハードルは低いので、まず試してみて日頃の業務を改善してみてはいかがでしょうか。ということです。

最後に

セッションに参加して下さった皆様ありがとうございました。
初めての発表で、ご期待に添えない、説明が至らない箇所、お聞き苦しい点などあったと思います。
それでも最後の拍手はとても暖かく、嬉しい気持ちでいっぱいでした。

発表の途中でいろいろGroovyやGradleについて質問をしてみましたが、使っている人が増えてきているのを実感しました。
主催しているYokohama.groovyを、今回の発表で興味を持って下さった方々にとってより良いコミュニティにしていきたいと思いました。

今回のJJUG CCCはどのセッションも魅力的で楽しい内容でした。
昼食や懇親会では、普段はtwitterでしかやりとりをしてない人とお会い出来て楽しかったです。

あと、Java養成読本の著者の方がいらっしゃっていたのでサインをしてもらうことも出来て良かったです。

JJUG、セッションの発表者、スポンサー、参加者の皆様、ありがとうございました。

2014年4月28日月曜日

東京Node学園 12時限目 に参加してきました #tng12

東京Node学園 12時限目

http://connpass.com/event/5835/

キッカケ

今回LTをするキッカケとなったのは、日本Node.jsユーザグループ代表が次のようなツイートをしていたのを見かけたからです。



NodynがVert.xで作られていたのは知っていたので、これを機にいろいろ調べてまとめておこうと思い、応募しました。

スライド

今回のスライドはこちらです。
http://www.grimrose.org/tng12/

node.jsということでbespoke.jsを使ってみました。

Jadeをテンプレートとして使っているので、すんなりと利用する事が出来ました。

bespoke.jsのいいところは、githubで公開するtaskが用意されているので、localで確認したら grunt deploy でGithub Pagesにデプロイがすぐに出来るのはありがたいです。

Node.js APIとNodynとVert.x

スライドの最後の方にあるデモのコードですが、実際に下のような感じのコードにしてみました。



このコードをvertx run demo_server.jsで動かしてみると、普通に http://localhost:1337 と http://localhost:8080 でアクセス出来ます。

もちろんこのコードではnodeのコマンドは動きません。

ということで、このコードが動くということは、Vert.xのmoduleが使えることが出来ると考えていいと思います。

同居は可能だとしても、「混ぜるな危険」の部類に当たるのであまりおすすめはしません。

Nodyn自体は、まだまだこれからというフレームワークです。

Nodynが全てのNode.jsのAPIを導入したとしても、既にnpmのエコシステムがこれだけ広がってしまっていると、そのままでは厳しいのではないかと思います。

ですので、NodynはVert.xがNode.jsに繋がるためのインターフェースになっていくのではないかと期待しています。

Vert.xに触れるようになってから、他のEvent-Drivenなフレームワークにも興味を持つようになったので、基礎となるNettyを本格的に学ぶ必要があると考えるようになりました。

Netty in Actionも出るみたいなので、楽しみです。

おわりに

参加者のほとんどが初参加だったということで、JVMでしかもニッチなフレームワークの話をしてしまって、本当に大丈夫だったのだろうか心配です。

しかも、LTの一番手なのにいきなり時間オーバーしてしまって申し訳ありませんでした。

東京Node学園の皆様、会場と食事まで提供して下さったDeNA様、ありがとうございました。

2013年11月18日月曜日

第四回 #渋谷java に参加してきました #渋谷Java

第四回 #渋谷java
http://connpass.com/event/3744/
第四回 #渋谷java まとめ
http://togetter.com/li/591537

ゆるふわjava LTイベント

なかなか日程が合わず参加することが出来なかったのですが、今回ようやく参加することが出来ました。

雰囲気が全くわからないので、自己紹介も兼ねてLTにする側に応募してみました。

スライドとデモで利用したコードはこちらです。

https://github.com/grimrose/shibuya-java-04



スライドは、問題なく出来たのですが、初めに書いたantをGradleから利用するデモのサンプルがあまりにもツライので、捨てました。
なので、新しいサンプルには最近趣味で使っているvert.xのシェル環境であるCRaSHを使ってみました。

デモは時間切れで、最後まで出来なかったのが心残りでした。

その他の発表者の方々の話も、多岐に渡ってとても楽しい内容でした。

  • Grails
    • Grailsもガッツリやらないとなぁ
  • DBflute
    • JDBC Driverって中で結構泥臭い事やってるんだなぁ
  • JUnit
    • equalsはlombokに任せっきりだったなぁ
  • UrlRewriteFilter
    • OSSのパッチを投げられるのすごいなぁ
  • RxJava
    • Java8から本領発揮しそう
  • HashMap
    • ConcurrentLinkedHashMapなんてものがあるのか
  • Thymeleaf
    • デザイナーさんと仕事するtemplateとしては一番なのではないかな
  • Juzu FrameWork
    • プロトタイプ作るような規約が緩い時に使えそう

おわりに

java-jaやJJUG、JGGUGとはまた違った雰囲気で楽しかったです。
ちょっとGroovy推しが強かったかなと思ったので、次回以降はもう少しJava寄りの事が話せればいいなと思いました。

主催の@seri_kさん、参加者の皆様、会場を提供して下さった株式会社ビズリーチ様ありがとうございました。

2013年7月20日土曜日

『JUnit実践入門』写経・実践会 in 横浜 #8 (最終回) に参加してきました #junitbook

『JUnit実践入門』写経・実践会 in 横浜 #8 (最終回) #junitbook
http://connpass.com/event/2590/

2013/07/06 『JUnit実践入門』写経・実践会 in 横浜 #8 (最終回) #junitbook
http://togetter.com/li/529598

はじめに

今回は最終回ということで、書籍全体を通してのディスカッションとTDD/ペアプロ実践が内容でした。

最終回

ディスカッションでは、会社で行なっている新人研修でこの書籍を用いてやっているので、その内容についてと個人的な見解を話すことが出来ました。
主な内容については、Javaの研修が終わった新人に対してこの書籍を利用して、JUnitを利用してどうやってユニットテストを書いていけばよいのかを話しました。
この書籍にはサンプルが公開レポジトリに掲載されていますので、これを解答として行き着く手順をこの会で得られた経験も併せて説明しました。
実際にコードを書いてもらってmavenで動かしてみて確認しながら進めて行き方は、評判も良かったように感じました。

最終回ということで、これまでの参加レポートを列挙してみます。


#1には@kyon_mmさんが、#3には@t_wadaさんが、#6には@irofさん、著者の@shuji_w6eさんがゲストとして参加してくださいました。

個人的に印象に残った回を挙げるとすれば、やはり#6の特別編を挙げたいと思います。
cucumberとseleniumを組み合わせることで、ここまで振る舞いをテストが出来るんだよというのが実際に手を動かすことで実感できました。
そのおかげでGebを用いてSpockで似たようなことが出来るようになりました。

おわりに

今回で、この写経・実践会も終わりとなりました。
この本が出た後の半年で自分自身多くのことを学ぶ事ができました。
それもこれもこの会があったおかげだと思います。
書籍は積読では何も身につかないので、こういった会に参加することで他の方が実践している経験や知見を学ぶことが出来る事を実感出来ました。
他にもまだ読んでいない本があるので読書会が開催されていたら、積極的に参加してみたいと思います。



主催の@shinyaa31さん、参加者の皆さん、会場の横浜タネマキさん、ありがとうございました。

2013年7月3日水曜日

Javaで実践するリーダブルコード ぷらす に参加してきました #readablecode

Javaで実践するリーダブルコード ぷらす
http://atnd.org/event/E0016341/0

はじめに

アジャイルサムライ横浜道場でお世話になっている@terahide27さんが主催されるということで、なにかお手伝いできることはないかと考え、スタッフとして参加しようと思いお願いしてみたところ承諾を得ることが出来ました。

リーダブルコード自体は購入直後に読んでおり、出来る限りプロジェクトに反映できるよう努力していました。



当日は、多くの人に集まってもらえたのはとてもありがたいと思うのと同時に、出来る限り良い経験をしてもらえるようにしたいと思いました。

ハンズオン

今回のハンズオンでは、ペア毎にお題を含めどのように進めていくのかなどを決めてもらいました。
全てのペアが提案されたボーリングのお題をやっていましたが、リファクタリングを重視しダメなコードから始めたり、初めからTDDで行なっていたりと進めて行き方はバラバラでした。


印象に残ったのは、手続き型でprimitiveな型しか使わないダメなコードから始めたペアは、どこもスペアの実装しようとした時点で破綻していた事でした。

最終的にコードレビューの時間でその違いがはっきりしてました。
途中からリファクタリングを始めたペアは、何とかして綺麗なコードにしようとしたが時間が足りず、修正に手一杯で名前を変える余裕が無かった様に感じました。
初めからリーダブルコードの内容を意識して書くことでリファクタリングやユニットテストのしやすいコードになっていくのではないかと思いました。

JUnitの使い方も経験によってばらつきが見られ、慣れていないとどのように書いたら良いのか分からなかったり、使い方そのものを知らなかったりと様々でした。
JUnit実践入門が出版されたおかげで始めるキッカケが出来たと思うので、これを機会に読みやすいコードにしていく為にもJUnitをどう使えばいいのか知ってもらえればいいなと思いました。

テストを全く書かなかったペアが最後になってテストを書いて実行してみたら、間違った結果を返したまま時間切れになったのを見かけ、やはり実装を確認しながら開発するのは大切なことだと感じました。

おわりに

TDDBC Tokyo 2013-07が開催される前にTAとして良い経験をさせて頂きました。
上手くお手伝いできたか不安ではありますが、参加者の皆様が今回の経験を活かして現場でも読みやすいコードを残していってもらえれば幸いです。

主催の@terahide27さん、スタッフの皆様、参加者の皆様、会場を提供して下さった株式会社アクシスウェア様、ありがとうございました。

2013年5月20日月曜日

『JUnit実践入門』写経・実践会 in 横浜 #6 (特別編) に参加してきました #junitbook

『JUnit実践入門』写経・実践会 in 横浜 #6 (特別編)
http://connpass.com/event/2270/

2013/05/12 『JUnit実践入門』写経・実践会 in 横浜 #6 (特別編) #junitbook
http://togetter.com/li/490112

はじめに

前回の写経・実践会のレポートはこちら→『JUnit実践入門』写経・実践会 in 横浜 #5 に参加してきました #junitbook
今回は、@irofさんの「テスト駆動開発を継続する」と、著者の@shuji_w6eさんのJUnit実践入門には含まれなかった幻の章についての講演とハンズオンでした。

テスト駆動開発を継続する



テストの価値は失敗することにあるというのは、現在の状況と目的が一致している状態から変化があったことを分かりやすくしたものだと思いました。
アサーションを分かりやすく一つづつ実施することで、どの状態が意図している目的で、どうして目的に合致しなかったのか見つけやすくなるのかなと思います。
大きなオブジェクトの状態を確認しようとするとアサーションの行が増えますし、本当に確認したいことが埋もれてしまっては、元も子もないと思います。
設計を見なおしたり、リファクタリングをする際に、目的の状態になっていることを確認するためのテストを書き、その状態を維持しつつ小さく分かりやすいテストにしていくことが重要なことだと感じました。
そういった小さいテストを継続的に積み上げることで、ひとつの変更が影響する範囲を視覚的に捉えることが可能になるのではないかなと、思います。
小さいテストであれば、わざと目的通りのRedにした場合でも、意図している動作であるか確認しやすいのではと思いました。

ハンズオン

後半は、@shuji_w6eさんの「受け入れテストの自動化とユースケース駆動開発 -Pre Cucumber Boot Camp-」と「cucumber + selenium」による受け入れテストのハンズオンでした。

元々はmavenとeclipseを対象にしたプロジェクトでしたが、IntelliJ IDEAとGradleでやってみようと思い、前日にGradle 1.6のBuild Setup Pluginを利用してbuild.gradleを作っておきました。



無事、IntelliJ IDEAでもcucumberを使えるようになりました。
また、h2databaseやjettyについてもtaskを追加しておいたお陰で、コマンドを実行するだけで起動や初期化が出来るようになりました。

途中でフィーチャファイルの補完が効いてないのかなと思いました。

が、IntelliJ IDEAを12.1.2から12.1.3に上げて見たところ、シンタックスハイライトとコードジャンプも出来るようになりました。
さすがJetBrains様です。

なんとか、ハンズオンの進行に付いていくことが出来ましたし、seleniumの残念な箇所も体験することが出来ました。
前回のBDDにてイマイチ使い所が分からなかったcucumberも、seleniumと組み合わせることでどうやって使ったら良いのか体験することが出来たのは良かったと思いました。

おわりに

懇親会では、@enumさんも参加して下さり、とても楽しい充実した時間でした。

今回のハンズオンは、プレと冠していましたがとても実践的でスタートラインまで連れて行ってもらえる内容でした。
今後は、どうやってシナリオを書いて行ったら良いのかなど、教えていただいた書籍を参考にやってみようと思います。

また、GroovyではGebがあるので、これとSpockを組み合わせることで、seleniumの残念な箇所をカバーしてくれて、なおかつシナリオもコードで書けるようになるので、同じ課題を挑戦してみたいと思います。

講師の@irofさん、著者の@shuji_w6eさん、主催の@shinyaa31さん、参加者の皆さん、会場の横浜タネマキさん、ありがとうございました。

残りの章も少なくなって来ましたが、次回もよろしくお願いします。

2013年3月3日日曜日

『JUnit実践入門』写経・実践会 in 横浜 #4 に参加してきました #junitbook

『JUnit実践入門』写経・実践会 in 横浜 #4 - DBTest Boot&Boost Camp? -
http://connpass.com/event/1694/

2013/03/03 『JUnit実践入門』写経・実践会 in 横浜 #4 #junitbook
http://togetter.com/li/463129

はじめに

前回の写経・実践会のレポートはこちら→ 『JUnit実践入門』写経・実践会 in 横浜 #3 に参加して来ました。 #junitbook

今回は、「第12章 データベースのテスト」が範囲でした。
主にH2Database + DBUnitの使い方を知る内容でした。

データベースのテスト

個人的には、DBUnitを使うのもいいのですが、Groovyでテストを書くとあまりDBUnitに依存しなくても出来てしまうので、Groovyをおすすめします。
DBと連携したテストを行う際に一番のネックとなるのはテストデータの準備だと思われます。
RDBMSであれば、xls、csvあたりが一般的だと思いますが、ORMを使うのがほとんどだと思われますのでそうなってくるとオブジェクトの構造を用意できるようなフォーマットのファイルが必要になってくると思います。
今回は、YAML形式のファイルを読み込んでDBUnitと似たようなことが出来ることをテーマとして取り組んでみました。

テストクラスはこのような感じ→こちら

SnakeYamlとGroovyは、相性がいいため記述量が少なく、さらにGroovyが用意するSQL周りのクラスと組み合わせることで、データの登録も簡単です。

この他にもDBのマイグレーションはどのようなツールを使ったら良いかや、Rails、RSpecのコードを見たりして学ぶことが出来たので、とても勉強になりました。

おわりに

JUnit実践入門に載っていることは、本当に入門なので、この先に待ち受けているDBとの連携周りのテストのような現実とどう向き合っていけばいいのかは、「レガシーコード改善ガイド」や「データベース・リファクタリング」といった本を片手に勉強していくことになると思います。

主催の@shinyaa31さん、参加者の皆様、横浜タネマキさんありがとうございました。
次回もよろしくお願いします。

2013年2月4日月曜日

『JUnit実践入門』写経・実践会 in 横浜 #3 に参加して来ました。 #junitbook

『JUnit実践入門』写経・実践会 in 横浜 #3
http://connpass.com/event/1668/

2013/02/02 『JUnit実践入門』写経・実践会 in 横浜 #3 #junitbook
http://togetter.com/li/448707

はじめに

前回の写経・実践会のレポートはこちら→『JUnit実践入門』写経・実践会 in 横浜 #2 に参加してきました #junitbook

今回は「Part.3 ユニットテストの活用と実践 第11章 テストダブル」が対象でした。
範囲はそんなに広くなかったので、写経は早めに終えることが出来ました。
なので、Groovyで書いた場合を試してみました。

レポジトリはこちら→https://github.com/grimrose/junit-boost-camp

一つどうも動かない箇所がありました。



デバッガーで見てみた時


GroovyのmetaClassを使ってみたコードはこちら


どうも、Interceptしてないみたいです。

次のDelegateObjectSampleTestでは、エラーにならなかったので、多分そうかと。


余裕があるときにもう少し突っ込んでみたいと思います。

リファクタリング

ディスカッションの際、privateメソッドをテストするかという質問が挙がったのですが、
突如参加してくださった@t_wadaさんのお陰で、納得することが出来ました。
個人的には、privateメソッドの処理を別のclass(大抵パッケージプライベートのstatic class)として切り出して、
Quick JUnitでテストクラスを作成します。

そうすれば、黒魔術を使うこと無く呼び出し元のメソッドをテストすることが出来ます。
オブジェクト指向養成ギブスとは違う異質な縛りがあるようなプロジェクトもあるそうなのですが、そんなピヨピヨなプロジェクトでも、自動テストと責務に応じたリファクタリングを行うことで、適切に対応できると思います。

モック、スタブ、スパイ

以前にServletRequestに依存したオブジェクトを利用したクラスのテストを実施するためにjmockitを利用したことがありました。
その時は、他のモックライブラリに比べて色々出来るのでいいのかなと思っていましたが、
今回@t_wadaさんのお話を聴いてやりすぎると痛い目に合うということと、それを経験して戻ってくるのがいいのを教えて頂きました。

他のモックライブラリでは日本語の情報がなかなかなかったのですが、今回、この本が出たお陰でプロジェクトに導入するきっかけになるのではないかと思います。

おわりに

今回は、@t_wadaさんのお陰でモックを利用したテストに対してモヤモヤしていた箇所が少しづつ晴れてきたように感じました。
それに、監訳された「SQLアンチパターン」にサインを頂くことも出来ました。

主催の@shinyaa31さん、突然の参加で講師役?までされた@t_wadaさん、参加者の皆様、横浜タネマキさんありがとうございました。
次回もよろしくお願いします。

2013年1月14日月曜日

『JUnit実践入門』写経・実践会 in 横浜 #2 に参加してきました #junitbook

『JUnit実践入門』写経・実践会 in 横浜 #2
http://connpass.com/event/1557/

2013/01/12 『JUnit実践入門』写経・実践会 in 横浜 #2 #junitbook
http://togetter.com/li/437795

はじめに

前回の写経・実践会のレポートはこちら→『JUnit実践入門』写経・実践会 in 横浜 #1 に参加してきました。 #junitbook

前回に引き続き参加して来ました。
今回は、「Part.2 JUnitの機能と拡張」が対象でした。
初めの方の参加条件として写経のレポジトリを登録するというのがあったので、
年末にやってみましたが第8章までしか出来ませんでした。
出来れば全てこなしたかったので、残念です。

写経のレポジトリはこちら→https://github.com/grimrose/junit-boost-camp

JUnit Boost Camp

第6章のディスカッションの時にうまく説明出来なかったので、この場を借りて言いたかった事を説明してみます。

対象のクラスのメソッドに対するテストと対象のクラスの状態をテストするためのテストが混ざっているような場合があると思います。
そんな場合@Enclosedを使うことで、テストを構造化出来るようになりました。
static classにすることで、明示的にお互いに依存しないように記述出来るようになります。
例えば、JUnit4.xの形式で書かれていたテストを構造化するのであれば、以下のような手順で出来ます。
  • 「@RunWith(Enclosed.class)」を追加する。(import句も)
  • 「public static class コンテキストの名称など {}」を追加する。
  • 内容をそのままstatic classに移動する。
このように新しいstatic classを作ってテストを追加することで、今までのテストも構造化することが出来ます。
新しいフィクスチャが必要になった場合も、新しいメソッドに対してテストを追加する場合も、必要に応じて追加することが出来ます。

JUnit3.xの場合は、TestCaseを継承しただけのテストであれば、setUpとtearDownなどをそれぞれ修正することで対応出来ますが、TestCaseを継承したテスト用の基底クラスを使っている場合は、いろいろと対応しなければならないことが多いので、優先順位とコストなどで判断してください。

もくもくと

後半はGroovyで書かれたテストにJUnitとSpockが同居することが出来るのか試してみました。
参考にさせて頂いたのは、@irofさんのこちらの記事です。→GroovyでJUnitなテストを書くときの注意点……なんて無かった #gadvent2012
同居させるために、Spockのversionを0.6から1.0へ上げました。
0.6では出来ないということに気づいたのは終盤だったので、ちょっと勿体無かったです。

おわりに

今回は、対象範囲が広かった為か終盤はスタミナ切れしてました。
次回は、適度につまめるような何かしらスイーツを用意して見たいと思います。

一番の収穫としては現場でも使えそうな@Ruleや@RunWith(Categories.class)を知ることが出来たので、活かして行きたいと思います。

主催の@shinyaa31さん、参加者の皆様、横浜タネマキさんありがとうございました。
次回もよろしくお願いします。

2012年12月1日土曜日

『JUnit実践入門』写経・実践会 in 横浜 #1 に参加してきました。 #junitbook

『JUnit実践入門』写経・実践会 in 横浜 #1
http://connpass.com/event/1487/

『JUnit実践入門』写経・実践会 in 横浜 #1 #junitbook
http://togetter.com/li/415943


はじめに

Cucumberハンズオン際に@shinyaa31さんがJUnit実践入門読書会を受けての開催したいといったことをおっしゃっていたので、
こういうのあったらいいよねとか、こういうのやると面白そうだよとか、いろいろ意見を出してみました。
初回ということで人数や需要も読めない中、無事開催することが出来ました。

いざ実践

条件にTDDBCに参加された方にしたためか、環境設定などほぼ済んだ状態で進めることが出来たのは良かったと思います。
16章から始めてみましたが、TDDBCではあまり触れられていなかった箇所を見ることでいい準備運動になったと思います。
3章までは、Introductionの箇所なので疑問に思ったことだったりしたことを、議論してました。

以下の本の話が出てました。TDDBCに参加された方々だったので自然かもしれませんね。

XUnit Test Patterns
http://xunitpatterns.com/

Growing Object-Oriented Software Guided by Tests
http://www.growing-object-oriented-software.com/

帰ってから気づいたのですが、xUnitの日本語関連のサイトということとなるとコチラを忘れてはならないと思います。

ぺけま
http://devtesting.jp/pekema/


終盤に、突如@kyon_mmさんが来襲されて、いろいろと3章までの内容について話してくださいました。
生業としている方の話が聞けるのはとても勉強になりました。

次回から本格的にJUnitに触れていきますが、個人的には特にルールについて知っていると得するような項目が並んでいるので楽しみです。

おわりに

今後もこの会を続けて行くにあたって、なかなか読んだだけでは分からないところも、
実際に書くことで実感したり、疑問をお互いに解決していけるようなそんな会になればいいなと思います。

@shinyaa31さん、参加された方々、@kyon_mmさんありがとうございました。

2012年11月12日月曜日

JJUG CCC 2012 Fall に参加してきました。 #jjug #jjug_ccc

JJUG CCC 2012 Fall – 開催概要

2012/11/10(#jjug)JJUG CCC 2012 Fall_(〜12:00)
http://togetter.com/li/404735

2012/11/10(#jjug)JJUG CCC 2012 Fall(13:00〜16:00)
http://togetter.com/li/404815

2012/11/10(#jjug)JJUG CCC 2012 Fall(16:00〜)
http://togetter.com/li/404881

はじめに

JJUGのクロスコミュニティカンファレンスが休日に開催されるということで参加してきました。
今回は、Twiiterでフォローしている方が登壇されるセッションが多いのが楽しみでした。

セッション

JJUG CCC 2012 Fall – タイムテーブル

午前のセッションは、諸事情によりセッションが前後しましたが、これからどうしてくのかという視点に経った時に役に立つ内容でした。

午後のセッションは以下のセッションを選択してみました。
  • Spock’s World
  • クラウド時代のSpring Frameworkの新たな試み。~Spring Dataの全貌~
  • テストコードのリファクタリング
  • Java プラットフォームにおける HTML 5 対応 !!
  • Twitter4Jのプロモーション戦略
  • 作って学ぶデータベース ~まずスモールデータから始めよう~

どのセッションも興味深いことがたくさんあったのが収穫でした。

一番印象に残ったのは、@yusukeさんの以下のような内容でした。
  • 全てのメソッドに対するテストコードを用意する。
  • スタックトレースにバージョンと検索用のコードを埋め込むこと
自社の商品をオープンソースにしている会社にいても、ここまでしたことはありませんでした。
ここまでしていることで、黎明期にいろいろ存在してた他のJavaライブラリとの差別化ができて、デファクトスタンダードになったのかなと思いました。

テストコードについては、@shuji_w6eさんの本「JUnit実践入門」を購入して、会社の人達にも読んでもらえるようにしていきたいと思います。

おわりに

ほぼ半日まるまるJavaの講演を聞いたのは、JavaOne以来だったので、楽しかったです。
年齢層も幅広くて、改めて歴史のある言語なんだと感じました。

ただ、いくらユーザ会のコミュニティが活発とはいえども、JavaEE6ですらもう3年前の技術なのに未だにStruts1.x使っているところが33%もあるという状況を生み出している会社のマネジメント層に進歩の欠片が見られないというのは、非常に残念で仕方ありません。
言語の進化に合わせて成長できるようになりたいものです。

主催してくださった日本Javaユーザーグループの皆様、ありがとうございました。

2012年9月4日火曜日

Java基礎勉強会 に参加してきました #JavaBase

Java基礎勉強会 #JavaBase
http://kokucheese.com/event/index/44210/

Java基礎勉強会 #JavaBase -日本で最もJavaの基礎を勉強する会-
http://togetter.com/li/362176

はじめに

今回は、あの#なごやこわいで有名な名古屋でJavaの勉強会が開かれるということで参加しました。
お盆の後のちょうどいいタイミングということで、帰省も兼ねて名古屋に向かいました。

セッション

  • Javaの基礎
  • ジェネリクスの基礎
  • Java並行処理の基礎
  • スタックマシンとしてのJava VM
  • ClojureではじめるASM入門
  • 無名関数とretrunで小話を一席
  • Javaで(嵐を)呼ぶSML#
  • J2EEの基礎Struts
  • オレオレLINQで学ぶJava基礎
これだけ見ても「基礎≠入門」というのがひしひし伝わってきます。
初めて動く@bleisさんを見ることが出来ました。
あと、前の方に座った方々の熱心な姿を見て、名古屋の人たちとjava-jaの人たちに似たような雰囲気を感じました。
知らなかったり、コードを見たことがない言語がバンバン出てきたので、一瞬なんの言語の勉強会だったのか忘れそうになるほどでした。

特に印象深かったのはJVMに関するセッションでした。
普段使っているにもかかわらず、深いところは全く体系だって勉強したことが無かったので、とても勉強になりました。

日本語の本ですとJava言語仕様は第3版、Java仮想マシン仕様が第2版です。
最新はこちら。
http://docs.oracle.com/javase/specs/
Java8が出る前までには、どれだけかかるか分かりませんが、ひと通り読んでみたいなと思いました。

LINQについては、Java8でも取り入れられるものがあるそうなので、予習しておくのもありかなと感じました。
Javaで実装されたライブラリもあるそうなので探してみたいと思います。

懇親会

マサカリとはどういうものかを見ることができました。やっぱり#なごやこわい

おわりに

次回は言い出しっぺがいない限りないそうなので、残念です。(次回、本当のJava基礎勉強会とかのツイートが流れていたのは気のせいかな…)

主催された@kyon_mmさんのように知りたいから勉強会開いてみるというのは、慣れないと難しいと思いますが、いろいろと勉強会で知り合った人に声かけてとりあえず集まって話しあうだけでもいろんな話を聞けて面白いと思うので、そこから始めてみるのはありなんじゃないかなと思いました。

@kyon_mmさん、発表者の皆様、会場を提供して下さった日本オラクル中部支社様ありがとうございました。

2012年7月8日日曜日

第 7 回 JavaFX 勉強会 に参加してきました #jjfxug

第 7 回 JavaFX 勉強会
http://atnd.org/events/29880

2012/07/02_第 7 回 JavaFX 勉強会( #jjfxug )
http://togetter.com/li/330960

きっかけ

JavaOne 2012でJavaFXの紹介があって面白そうと思っていました。
勉強会が開かれるということで、どんなのか知りたいと思ったため参加しました。

NetBeans 7.2とScene Builder

NetBeans 7.2にScene Builderの設定をしておくことで、FXMLをグラフィカルに編集できるようです。
xmlを手動で編集するのは人間には酷な作業だと思いますので、こういうツールが無いまたは、使えないと正直つらいと思います。
ただ、Scene Builderもまだ洗練されていないみたいなので連携が不十分みたいです。今後連携できるようになると楽になりそうです。
表示構成をFXMLに任せることで、イベントの処理をViewModelへ移動して「MVVMモデル」になっているそうです。
個人的にはWebにアクセスする方法が思っていたより簡単だったので、jsonとか吐くサイトからJavaBeansに変換して取り込みとかやってみたいですね。

まとめ

デスクトップアプリは仕事でBiz/Browserでしか作ったことがないので余り経験が無いですが、今回の勉強会でWebと繋がる方法があることが分かったので、仕事用のツールとか使ってみようと思いました。

主催して下さった日本 JavaFX ユーザグループの皆様、LTをして下さった皆様、会場を提供して下さった日本オラクル様ありがとうございました。

2012年6月30日土曜日

LOG.debug("nice catch!") に参加してきました #java_ja

LOG.debug("nice catch!")
http://connpass.com/event/607/

2012/06/27 java-ja 『LOG.debug("nice catch!")』#java_ja #javaja
http://togetter.com/li/328035

前回の温泉回に引き続いて、通常回(?)に参加しました。

きっかけ


今回の主催者である@yamashiroさんのtweetからたどってまず目に入った以下の内容。
try {
    java-jaで例外とロギングについて勉強します
    話していただくのは
    俺たちのt-wadaこと和田さんと
    PFIの田中英行さん
    歩く萌え要素こと西尾泰和さん
    歩くモヒカン太一
    です
    try {
         LT.add(ヨシオリ)
         LT.add(crexista, 'クライアント側でナイスキャッチ')
         LT.add(@shomah4a, 'PyconJPのCfPの宣伝')
    } catch (LTTimeoutException lte) {
        LOG.debug(ドラ)
    }
    try {
        他にも発表いただくかもです
        あとLTやりたい人連絡ください
        発表、LTしていただける方は、人数が埋まっていても参加可能です。
    } catch (Exception e) {
        //OK
    }
    例のごとく懇親会をそのまま会場でビアバッシュ形式でやりたいと思います。
    2000円の予定です
} catch (Exception e) {
    //nice catch
}
今回のテーマに相応しいjavaらしい告知なので即、登録しました。

@t_wadaさんの講演は昨年のTDDBC横浜以来なので、約半年ぶりになります。
前回の温泉回でお世話になった方々の話が聞けるというのも、楽しみでした。

資料

[勉強会][Java]java-ja『LOG.debug("nice catch!")』に参加してきた #java_ja
@shinyaa31さんのブログに詳細な資料があるので、そちらを参照してください。
(@shinyaa31さんありがとうございます)

例外設計における大罪

「契約による設計」は、一番印象に残った内容でした。
実装していく上で呼び出し側と呼ばれた側の関係のそれぞれの役割を考えていないと、それぞれで同じような処理を書いてしまいがちです。
青いレンガについては、ジュンク堂あたりで探して見たいと思います。
Effective Javaを読んでいても活かしきれていないと実感しました。
特に「例外状態の時だけ例外を使用する」については、技術的例外とビジネス例外の振り分けを考えていないとJTAを利用して例外発生時にロールバックが発生するようにしたい・させたくないといったことができなくなります。
そのインターフェースのメソッドにthrow句がついていないのはなぜかということを意識して、実装していかないと非チェック例外でラップして無理やり投げて、呼び出し側でcatchしたり、nice catchして握りつぶしたりしてしまいます。また、インターフェースを作る場合もそれを考えて投げなければいけない例外を投げるようにしなければと感じました。

ログ、その時の為に。

ロギングポリシーが曖昧だと必要な場合に限って欲しいログがないということがありがちです。
すでに運用しているシステムの場合、足りないことのほうが多いのも関わらず増やす手段を取るのを忌避されてしまいます。
ログ系のミドルウェアとの連携を考慮して他のインターフェースとの境界を厚めにするというのは、意識していきたいと思います。

SLF4JのMarkerの話があって早速やって使ってみたのですが、同じクラス内の処理でも処理の境界がはっきり見えてくるので、ソースを追わなくても流れをつかむことができます。
出来ればAOPでも使えるようになるとさらにいいと思いました。
SLF4J + logbackは、他のロギングライブラリに比べて使いやすいし、他のロギングライブラリのブリッジも充実しているので、是非新規の場合は利用しましょう。

エラー処理の抽象化

「すごいH本」こと「すごいHaskellたのしく学ぼう!」の翻訳者のかたが基調講演をしてくださいました。
戻り値に処理結果とエラー結果を入れて返すということをやったことありますが、受け取り側で状態ごとで分岐しなければいけないので、めんどくさいですね。
Haskellではモナドというものを使えばできるそうですが、javaにおける例外処理抽象化ライブラリってどんな感じになるんでしょうか。
「すごいH本」に興味が湧いたので読んでみたいと思います。

最後に

LTでは、クライアント側での例外処理はユーザのこと考えてやろうね。とか運用から見たログについてとかLTじゃもったいない内容が多かったという印象を受けました。
今後DevOpsが増えていくのであれば、地味な印象を受けてしまうログが一番重要なのではないかと思うのでそういった観点での勉強会とかセミナーとか面白そうだと思いました。
fluentdは名前しか知らなかったので、実際にどうやって使っていけばいいのかとか調べてみたいと思います。

主催してくださったjava-jaの皆さん、登壇者の方々、会場を提供して下さったGREE様ありがとうございました。

GREEさんパネェな!

2012年6月9日土曜日

GlassFish Users Group Japan 勉強会 June 2012 に参加してきました #glassfishjp

GlassFish Users Group Japan 勉強会 June 2012
みんなの Java EE 6/GlassFish 再入門
http://atnd.org/events/28235

GlassFish Users Group Japan 勉強会 June 2012 #glassfishjp
http://togetter.com/li/315293


JavaOne2012に参加してからJavaEEについて、もっと知りたいと思うようになり、
Beginning JavaEE6を購入しました。
それ以来、少しづつBeginning JavaEE6の内容を進めてみました。
出来れば自分が携わっている今のプロダクトをJavaEEに置き換えていきたいと思っています。
GlassFishであれば参照実装なので、知っておくと他のアプリケーションサーバでも使えるのではないかと思います。

加藤田 益嗣 (@den2sn) 氏「GlassFishを4年間使ってきて思う事」




GlassFishを使っている方がどういった使い方をしているかなど体験談を聞く機会を持てたのが今回一番の収穫でした。
プレゼンのサービスも動きがあって面白いので、一度使ってみたいと思います。

久保 智 (@megascus) 氏「JavaEE6 First Application」


Beginning JavaEE6読みましょう。
NetBeansで作るときにMavenプロジェクトで作れば、IntelliJ IDEAやeclipseでも取り込めます。
NetBeansの自動生成機能を有効に使いつつ、慣れているIDEでいつもどおりにということもできるので個人的にオススメです。

久保田 (@sugarlife) 氏「Glassfishと他の (OSS) APP Server の取り巻く状況の比較」


コミュニティの状況から見たアプリケーションサーバの違いというのは、面白い発想だと感じました。

Tomcatが生き残り続けているのも、構築手順が他のアプリケーションサーバに比べ枯れているのと、
Linuxであればレポジトリに登録されているというのも大きいのではないかと思います。

蓮沼 賢志 (@btnrouge) 「GlassFishユーザー認証ワンポイントレッスン」

http://www.coppermine.jp/documents/programming/
GlassFishで利用できる認証と認可についてでした。

  • 認証(Authentication)
    • 主にサーバーで行いアクセスしてきたユーザに対して行う処理。
  • 認可(Authorization)
    • 認証されたユーザに対してアプリケーションが役割(Role)を割り当てる処理。
LDAPやJDBCのレルムについてまだわからない部分が多いので、じっくりやって行きたいと思いました。

Toshiaki Maki (@making) 氏 「Pure Java EE or Spring?」

JavaEE6BootCampで大変お世話になったスライドを作った方というのを初めて知りました。

Spring2.xのxmlの多さは異常だと思いますし、今の自社プロダクトもだんだんxmlが増えてきたてちょっと危険な兆候かなと感じてます。
Spring3.xからアノテーションとxmlの役割分担が出来るようになって、だいぶマシになってきているのではないでしょうか。
Springのいい点はDIから始められるということだと個人的には思っています。
徐々に他のコンポーネントと連携していくことが出来るので、こつこつ積み上げていくのが得意な人に向いているのではないでしょうか。

始めたばかりの私が思ったJavaEE6のいいところは、多少、実装によって細かい点は違うかもしれませんが、コンテキストを共有しやすいという点だと思います。
どちらも、チームがメンバーのスキルや保守のことを考えて決められるのが、一番望ましい結果になると思います。
上から押し付けられたとか、予め決まっていてそれしか使えないという理不尽な選択になることが多いと思いますが…

最後に

主催してくださった蓮沼さん、登壇者の皆様、会場を提供して下さった日本オラクル様
ありがとうございました。

2012年4月7日土曜日

JavaOne Tokyo 2012 2日目 に参加してきました #javaonejp

1日目はこちら
http://grimrose.blogspot.jp/2012/04/javaone-tokyo-2012-1-javaonejp.html

2日目の参加したセッションは以下のとおりです。

  • 4/5(木) 11:15-12:15 [JS2-01]  The Java EE 6 Programming Model Explained
  • 4/5(木) 13:15-14:15 [JS2-13]  Java EE 6時代のJ2EEパターン再考
  • 4/5(木) 14:30-15:30 [JS2-21]  How to Write Low Latency Java Applications
  • 4/5(木) 15:45-16:45 [JS2-33]  [一般公募セッション] JSR 353: Java API for JSON Processing
  • 4/5(木) 17:00-18:00 [JS2-41]  Java Persistence API on the Grid
  • 4/5(木) 18:15-19:15 [JS2-52]  [一般公募セッション] Java開発をよりアジャイルに!現場改善ガイド


Java EE 6


web.xmlがオプション扱いになったのはありがたいですね。
だんだんMETA-INFに設定ファイルが集まってきているのは、ありかなと思います。
あと、jsをjarにまとめてresoucesにおいた場合の扱いがどうなるのかとか気になります。

J2EEパターン再考


J2EEは古典だってのが一番印象的でした。
古典しか知らない人が上にいるから、しなくてもいいのに無駄なことをさせられるのだなと感じました。

Low Latency Java Applications


GCについてすごく分かりやすい内容でした。ぜひ日本語化して欲しいですね。
JITについては「気にしないでもいいけど、気をつけるとこは気をつけてね」ってことでした。

JSON


javaでJSONを扱う仕様について。
世界にメンバーが散らばっていると大変そうだなぁと感じました。
でも、JSRがどうやって決まっていくのか見られるのは面白いと思います。
@yusukeyさん期待してます。

JPA


EclipseLinkとOracle TopLinkの関係と、Coherenceの関係のお話でした。
Coherenceは使うことはなさそうなので、もう少し一般的なJPAの話だと思っていただけに残念でした。

Birds Of Feather


Groovy使ってちょっとづつでも改善していこうという内容です。
Gradleは使えるようになるとだいぶ楽になりそうだなと思います。


パネルディスカッション


コミュニティとエンジニアの関係と、コミュニティの今後について。
コミュニティごとに性格が違うのは集まる人達の特徴が出ているからではないかなと思います。
会社以外のコミュニティとも関わりを持つことで、エンジニアとしての寿命をのばすことが出来るのではないかなと思います。


2日目終了後、JJUGのパーティに参加しました。
@yoshioteradaさんがどれだけ愛されているのか分かりました。
来年も同じようなイベントをするためにも、コミュニティの力が必要だなと感じました。

今後のJavaの未来と現実を知った2日間でした。
これからも、Javaを見守っていきたいと思います。

最後に、スタッフの皆様、イベントを主催したOracle様ありがとうございました。

JavaOne Tokyo 2012 1日目 に参加してきました #javaonejp

JavaOne
http://www.oracle.com/javaone/jp-ja/index.html

事前予約して参加したセッションは以下のとおりです。

  • 4/4(水) 11:15-12:15 [JS1-01] Introduction to JavaFX 2.0
  • 4/4(水) 13:15-14:15 [JS1-11] The Heads and Tails of Project Coin
  • 4/4(水) 14:30-15:30 [JS1-24] [一般公募セッション] PlayFrameworkでつくるWebSocketアプリケーション
  • 4/4(水) 15:45-16:45 [JS1-31] Project Lambda: To Multicore and Beyond
  • 4/4(水) 17:00-18:00 [JS1-42] JAX-RS 2.0: What's in JSR 339?
  • 4/4(水) 18:15-19:15 [BoF1-04] トラブルシューターの頭の中身 ~7年間のJavaトラブルシュートサービスから

JavaFX2.0


1日目のKeynoteでJavaFXのデモがありましたが、あれでNetBeansをRefineしたらかっこいいのにと思いました。
その他にもいろいろと洗練されているので、デスクトップアプリとか作ってみたくなりました。

Project Coin


Java SE 7での変更で一番大きいなと感じたのは、try-with-resoucesです。
よく使うのがcsvファイルの読み書きや設定ファイルの読み込みなので、これは助かります。
AutoCloseableをimplementしているクラスは、以下のクラスです。

http://docs.oracle.com/javase/7/docs/api/java/lang/AutoCloseable.html

stream以外にもsqlまわりも含まれているので、jdbcのサンプルとか変わるんでしょうかね。

Playframework2.0


PlayBayの時から2.0-Finalになってスライドの内容の変更箇所が多く、とても興味深かったです。
今後、利用する案件が増えていくと面白くなると思うフレームワークなので、ぜひ導入してみたいですね。

Project Lambda


Java SE 8から導入される予定のLambda Expressionについて。
Fork/JoinFrameworkと組み合わせることで真価を発揮するそうですが、並列処理についてあまり知識が無いので、groovyに似てるとか、コードが綺麗に書けるといった印象しかありませんでした。
多分、関数型の言語の勉強とかするとより面白くなると思うので、scalaを勉強すべきなんでしょうね。

JAX-RS 2.0


「JavaによるRESTfulシステム構築」をあらかじめ読んでおいてよかったと感じました。
APIを生やすにはうってつけだと思うので、実際の案件でも使ってみたいです。

Birds Of Feather


1日目の中でも一番次の日からでも実践できるセッションでした。
Tomcat周りのトラブルでJConsoleやVisualVMを触ったことはありますが、有効な方法を知りませんでした。
トラブルの対応に必要な心構えから、対処の方法など勉強になりました。

Special Lightning Talk


  • 銅鑼
  • キャーヨシオリサーン
  • 160kの正規表現ライブラリ
  • Groovyっていいよね!
  • マサカリXSSテスト
  • きのこる
  • なんでSolarisだけ?
  • 使う機会のないハイレベルな知識

1日目終了後、懇親会があったので参加しました。
twitterでフォローさせていただいてる方々とお話できて良かったです。


2日目に続く…
http://grimrose.blogspot.jp/2012/04/javaone-tokyo-2012-2-javaonejp.html