エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

Java Advent Calendar 2015のまとめ

Java Advent Calendar 2015

Adventカレンダーが終わったのでまとめ。
今年からAdventカレンダーを見るようになりました。
JavaのAdventカレンダーは、憎き12/25まですべて埋まっていたので、退屈しませんでした。
JavaのAdventカレンダーで情報提供していただいた皆さん、ありがとうございました。
各記事の内容で、個人的に感じたことと内容のまとめです。

qiita.com

[12/01] G1 GC おさらいと #jjug_ccc で発表した話

cco.hatenablog.jp

久保田さんのJJUG CCC 2015 Fall で話したG1GCの補足説明です。
詳しくは上記のリンク先か、このブログでまとめたJJUG CCCの記事にまとめているのでそちらを参照してください。

suzaku-tec.hatenadiary.jp

発表資料の補足

  • JDK9ではG1GCがデフォルト
  • G1GCは大きなメモリを効率的に管理するためのものなので、小さいメモリだとデメリットが大きくなる
  • 人間が決めるより、JVMに任せた方が効率的になることがほとんど

勉強するには下地の知識が必要。(なくてもいいけど、あると理解が早い)
メモリ管理の分野に関して、ある程度知識があると理解が早いかも。
JJUG CCC 2015 Fall でまとめたので、軽く流します。

[12/02] Webアプリ開発/テストのお供に『WAITT』

qiita.com

作ったMavenプラグインの紹介でした。
実際に使ってみて、SpringBootと同じような感覚で使えたので、楽ちんでした。
また、サーバーを複数pom.xmlに指定していれば、起動時にどれで起動できるか選べるので、テストだけでなく、性能比較でも使えるプラグインだと思いました。
環境を用意するのは辛いですからね。。。

特に便利だと思ったのが、コードのカバレッジレポートが見れることです。
今の現場が、ユニットテスト軽視で、テストケースのレビューがろくにないのです。 カバレッジ測定して品質担保できる機能がないか探していて、これがまさに探していたものに当てはまり、現場でもこっそり使ってみようと思いました。
GitHub上にサンプルがうまく出来ていて、簡単に機能を試すことができました。
ユニットテストテストがゆるい現場にいる人は、このライブラリを使ってカバレッジ測定して、ユニットテストの精度を高めてみるといいと思います。

[12/03] WindowsJavaな人に捧げる素敵なスクリプティングツール jrunscriptの使い方

www.susumuis.info

jrunscriptを使用したJavaScript実行のお話。
JavaからJavaScriptを実行したりできるのは知っていましたが、バッチ的に使おうという概念がなかったので、結構衝撃的でした。
これを使って何が嬉しいかというと、Windows環境で楽にバッチができることです。
DOSは使いにくいし、サクラエディタとか秀丸でマクロ作るのは非効率的なので、JavaScriptを使っていろいろファイル操作したりできるのは便利だと思いました。
ワンライナーで記述したりできるのも、DOSやマクロより優れていると思います。 ここでは基本的な使い方を紹介していますが、JavaScriptを知っている人ならもっと発展的なことができる。
なにより、Javaを知っている人は、業務上でJavaScriptを使っている可能性が高く、特殊なスキルセットがいらないので、便利だと思いました。

[12/04] Spring Boot+周辺ライブラリでJava8日時APIを使う!

blog.rakugakibox.net

Java8で新しく入ったDateTimeAPIを、SpringBootで使うためにやったことの紹介。
お恥ずかしい話、Java8はラムダ式やStreamAPIを中心に勉強したため、DateTimeAPIは本格的に使ったことがありませんでした。
サンプルソースが多めに乗っており、流して見てましたが、直感的に記述できるようになった印象を受けました。
今後、日付は徐々にDateTimeAPIに置き換わっていくと思いますので、早めにキャッチアップしたいです。
参考資料として、とても有益なものでした。

[12/05] Javaの例外処理について

d.hatena.ne.jp

Javaで例外を扱う基本的なお話。
たまに例外系の処理がうまく出来ていない人を見かけることがある。
直近だと、Throwableをchatchしようとしているソースを見た。
基本と抑えるべきポイントがまとまっていて、見やすかった。
できれば、自社の後輩に見せておきたい。

[12/06] JSR 363 Units of Measurement を調べてみて

qiita.com

Javaの物理演算APIのお話。
意外なことにJavaでは物理計算のAPIがないそうな。。。
Java Day Tokyoで海外の偉い人が誰かが作っているような話を聞いた記憶があるが、なんだったけ?
※外人の方は、申し訳ないけど、みんな同じ顔に見えてしまう。。。。
調査メモを見ると、2001年くらいから活動はあるみたいですが、紆余曲折して今に至ったみたいですね。。
今はセンサー系のハードが充実していることと、IoTの実現が間近に迫っているので、早くJavaSE入りしてほしいものですね。
電子工作に最近興味を持ち始めたので、正式採用が決まったら要調査しようと思います。

[12/07] JavaのOptionalのモナド的な使い方

qiita.com

Java8で導入されたOptionalの使い方紹介。
Optionalの基本から応用的な内容を、サンプルソースとともに紹介しています。
Optionalは使い方を間違えると、普通にif分を書いて処理分けしているのと同じになってしまいます。
Optionalで包まれた値を取り出すことなく処理するやり方がまとめられています。
OptionalはifPresent()くらいしか使い方を覚えていなかったので、map/flatmapの使い方について知ることができました。
まだ、OptionalはifPresent()しか使ったことがない人は、一読してみることをおススメします。

[12/08] JavaでHttpのGETとかPOSTをさくっと実装したい

qiita.com

JavaでHTTP通信のクラスを作ったお話。
執筆当時が中学生だと思うと驚愕する。
自分が中学生の時は、ギャザやってたり、野球してたり遊び呆けていた。。。
※学業はそれなりにできてましたよ
初心に帰る意味で見ました。

[12/09] パフォーマンスを意識したJavaコーディング

namihira.hatenablog.com

Javaのパフォーマンスに関するお話。
基本的に書いてある内容は「Javaパフォーマンス」に書いてあるもの。

Javaパフォーマンス

Javaパフォーマンス

簡単にまとめると以下の点に注意する。

この本は既に読了済み。
JITコンパイラの動きと合わせて、どうコーディングすべきか述べられているため、なぜこれでパフォーマンスが上がるのか理解しやすい。
ある程度コーディングに慣れてきたら、一度読むことをおススメします。
きっと、理解しきれなかった情報に出会えるはず。

[12/10] JavaFXのUIをJUnit形式でテストする

kokuzawa.github.io

TestFXでJavaFXユニットテストをするお話。
Java Magazineにあった内容の調査結果。
Java Magazineは購読していますが、内容を全然読めていないので、コレを機に読もうと思います。
内容は、seleniumに近いことをやっているイメージ。
seleniumを知っていれば、難なく理解できる内容でした。
UI周りのテストは自動化すべきか悩ましいところです。
テスト系のライブラリが充実してくると、開発しやすくなるので、JavaFXには期待できそうですね。

[12/11] DeprecatedがJDK9で変わるかもしれない件(JEP 277: Enhanced Deprecation)

d.hatena.ne.jp

JavadocのDeprecatedに関するお話。 Deprecatedといえば、非推奨にしたいクラスやメソッドにつけて開発者にEOLを伝えるものですが、それがJava9で変わるかもしれないということでした。
このままでも何も問題ないように感じていましたが、現状の問題点がいくつかあることが説明されており、「なるほどね」と思いました。
まだ、本決まりしていないようですが、ライフサイクルの管理は、開発者にとっても使用者にとっても重要なので、行末を見守りたいと思います。

[12/12] Stream APIをつくろう

d.hatena.ne.jp

flatMapの使い方とStreamAPIの実装方法(提供側としての)とAWSでのStreamAPIの使い方の説明でした。
お恥ずかしいながら、自分もStreamAPIを利用することで頭がいっぱいで、Streamを拡張する方法を知りませんでした。
IteratorとStreamSupportを使ってStreamを実装する話は、非常にためになりました。
利用は完璧という方は、今度は拡張方法について勉強してみると面白いと思います。

[12/13] JRE をカスタマイズ

Java in the Box Annex: JRE をカスタマイズ - jlink

Java9で登場するJigsawのサンプル紹介 概念的な話はわかるようになってきましたが、まだ実際に試していないのが現状です。。。
サンプル見ただけだとわかった気になって終わってしまうので、守破離にならって、真似から入ろうと思います。

[12/14] Byteman 使い方メモ+α

qiita.com

Byteman(ばいとまん)というava プログラムの任意の場所に任意のコードを差し込むことができるライブラリの紹介。
ライブラリ名が愛と勇気だけが友達のヒーローにパンチをもらいそうな名前だと思いました。(コナミ感・・)
やれることはテストでモックの役割を担ってくれそう。
やれることが幅広いだけに、いろいろとできそうだと思いました。

[12/15] Java で引数の null チェックで迷った話

yukung.hatenablog.com

Optional以前のnullとの付き合い方についての話。
そういえば、NullPointerException投げるか、IllegalArgumentException投げるか、あんまり意識したことないなぁ〜と思いました。
思い返すと個人的には初期化時はNPE、処理時はIAEを使っていました。
ここは結構シビアな問題なのかとも感じました。
フレームワークは全体的にNPEを返す傾向にありますが、使う側はどうしているのだろうが気になりました。
ただ、実装するならどの例外を投げるにしろ、ちゃんとJavadocに書いて開発者に意図がわかるようにしてあげるべきだと思いました。

[12/16] Javadocに何を書こうか

irof.hateblo.jp

Javadocとの付き合い方の考察。
あまりJavadocに長文を書いた記憶はないですが、仕様をきっちり伝える場合は、長文になるなぁ〜と今更ながら考えました。
HTMLで出力した内容を見る機会は、Javaの標準のライブラリ以外では滅多にないので、自分の場合は、短く処理の内容と注意点だけ記載してますね。
長文書いてもIDE上だと見難いですし。。。。
(ただ、書かなきゃいけないことがわかってないだけかもしれませんが。)
これはケースバイケースとしか言えないですね。
メインとなる読者が、開発者なのか、保守担当者なのかで記載する内容が全然違ってくるはずです。
今後は、読者がだれなのか意識して書こうと思います。
※大抵開発者になると思いますが。。。

[12/17] で、結局 Optional のインスタンスに対して ifNotPresent 的なことをやりたいときはどうしたらいいんで

qiita.com

Optionalでnull以外の場合の処理をどう実現するかの話です。
そういえば、nullの時はなにもしないことが多いからあんまり気にかけていませんでした。
実際にやるとしたら、orElseを使うだろうなぁ〜と個人的には思います。
最後のコメントにあるJava9のifPresentOrElseが入るのは知らなかった。。。orz

[12/18] OkHttpを使ってHTTP/2で通信する + おまけ

matsumana.info

OkHttpというライブラリのHTTP/2に関する話。
OkHttpは使ったことがないので、初見でした。
記事内では、サンプルソースとともにHTTP/2の通信の実装を紹介していました。
ソースを見た感じ、ライブラリがHTTP/1とHTTP/2の違いを吸収してくれているので、特殊なコーディングをすることなく書けていました。
使い方さえ覚えてしまえば、違いを意識することなく使えるのはライブラリの腕の見せ所ですね。
使いやすそうなので、機会があれば試したい。
HTTP/2はSoftwareDesign 2015年11月号が非常によくまとまっていたので、まだキャッチアップできていない人は早めに見ることをおススメしますぞ。

自分のブログにも、この雑誌を読んだ内容をまとめたので、ご参考までに見ていただければと。

suzaku-tec.hatenadiary.jp

[12/19] 文字列連結について検証しようと思ったらそもそも検証の仕方が予想していたのと全然違った件

文字列連結について検証しようと思ったらそもそも検証の仕方が予想していたのと全然違った件hotchpotchj37.wordpress.com

文字連結に使うStringBuilder, StringBuffer, concat, +演算子の性能比較の話です。
Javaの性能比較は、トーシローには結構シビアです。
まず、ウォームアップを考慮しなければいけないことが最初の罠。。。
(自分も最近知りました。。。)
あとはコンパイラの問題。
ちょっと前まではコンパイラって単語が思考停止のキーワードみたいなもんでした。。。
JMHは、自分も知らなかったので、性能検証する機会があったら使ってみたいと思います。

[12/20] 「mavenと書いて達人と読む」という勉強会を4日連続でやった話

nabedge blog: 「mavenと書いて達人と読む」という勉強会を4日連続でやった話

mavenがどういったものか、自社内に展開した話。
自分も自社内に技術情報を展開していますが、納得させるのは難しい。
みんな萎縮してしまって、質問も積極的にしてくれる人はいない。
この記事を見て、やっぱり実演大事だと思いました。
mavenがどういったものか、教えられるかというと怪しい。。。
自分のなかではdependencyにゴニョゴニョ書けば、ライブラリが自動で追加されるくらいの認識しかない。。。
ライブラリ管理は、開発する上で無くてはならないものになってきているので、自社内に展開できるくらいの知識は付けたいものだ。
※今の現場では使ってないけど。。。

コレを参考に、maven周りの知識を掴みたいところ。
年末は時間があるので、勉強してgradleへの足掛かりとします。

[12/21] PlayFramework 2.4 Java Ebeanでのアプリ開発

qiita.com

PlayFrameworkを使ったアプリの開発で得た知識のまとめ話。
EbeanがEdenに見えたら中二病
どのFW使おうが、学習範囲が広すぎると集中して学習できないみたいな話が共感できました。
最初の頃は、学習範囲が広すぎると頭に入ってこないのが普通ですからね。。。
後輩に物事を教える際には、話の範囲を限定して話せば、伝わるのかなぁ〜と思った次第です。 SpringBoot熱がすごくて、別のFWに触る機会があまりありませんでした。技術の固定化は避けたいので、参考にPlayFWのサンプルアプリでも作ってみようと思います。

[12/22] ReactiveSocket について

okapies.hateblo.jp

ReactiveSocketというプロトコル仕様の話。
ReactiveSocketについてあまり理解できませんでしたが、効率的なデータ転送の仕組みみたいな認識でいます。
Reactive~は、どうも理解しにくいですね。。。
実際にやってみないと実感がわかないのが、正直なところ。

[12/23] GS Collections Kata で Eclipse Collections をはじめよう!

qiita.com

ゴールドマン・サックスフレームワークであるEclipse Collectionsの紹介です。
最近、どのJavaイベントに言っても耳にしますね。
ここでの紹介を見ると、GS Collections Kataは、Eclipse Collectionsの入門向けコンテンツのようです。
時間的に余裕があればやってみようと思います。

[12/24] jOOQ: DBにSQLライクにアクセスするライブラリの紹介

qiita.com

jOOQというORマッパーについて紹介です。
Hibernateみたいなものかと思いましたが、メソッドの記述がSQLに近いので、SQLを知っていれば、なんとなく意味がわかりました。
Hibernateは実際に実行されたSQLが想像しにくいので、敬遠していましたが、jOOQはよりSQLに近い記法ができるので、可読性が良いです。
普段は2waySQL記法が使えるORマッパーをよく使うのですが、この紹介記事を見たら、jOOQありじゃね?って思えてきました。
主要なDBはすべてカバーされているようなので、暇な時にサンプルを実行してみたいと思いました。

[12/25] lambda式の遅延実行を利用したログ出力

qiita.com

既存のログ出力とラムダ式を使ったログ出力の比較話。
ログ出力のためにif文を描くことはよくあって、うっとしいと常日頃から思っていました。
記事はわかりやすくラムダ式を使うことによるログ出力のメリットを説明されていました。
実行順序が今までと変わり、無駄な文字列が生成されなくなるので、遅延実行とログ出力は相性がいいことがよくわかります。

感想

最後の方が少し雑になってしまった。
以下に勉強不足かを痛感する1ヶ月。。。orz
もっと精進しなければと改めて感じました。
来年はここに出れるようなエンジニアになりたいものです。
基礎的なことは十分理解できているなと各記事を見て思いました。
複数のFWを使ったり、新しいライブラリを試すような試みを、来年はしていこうと思います。 あとは、少し他言語も扱えるようになれればいいかな? 個人的には、Scala/Python/Ruby/Elixirあたりを覚えたいです。