エンターテイメント!!

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

Java Advent Calendar 2019 まとめ

Java Advent Calendar 2019 まとめ

12/01 Junit5の整理した書き方

Junit5の整理した書き方 - Qiita

DisplayNameのアノテーションで、テスト内容を書けるのか。
個人的に、日本人だけがメンテする機能なら、メソッド名をDisplaNameの内容に置き換えてもいいのでは?と思ってる。

そのうち、DisplayNameの国際化とか出てきそう。
もう、あるのかな?
調べた感じ、まだなさそう。

12/02 Apple の servicetalk について

https://mike-neck.hatenadiary.com/entry/jax-rs-on-servicetalk-with-spring

12/03 LombokのBuilderパターン解説

LombokのBuilderパターン解説 - Qiita

Builderパターンは、知ってたので、特に違和感はない。
どっちかと言うと、Lombok適用によるプロジェクトの変化が気になる。
getter/setterを書かなくなるのはメリットだと思うけど、裏で色々やっている印象があるから、意外なところでデメリットが発症しそうな気がする。

12/04 thymeleafでenumを扱うためのtips

https://qiita.com/n_slender/items/d0e2a861dcc806b5882e

画面のセレクトボックスに出すようなコード定義系は、全部enumにするべきというのが持論。
特に違和感はなかった。

enumでまとめていると、コードと値とかの紐付けが分散することもないし、変更が集約されるから、積極的にやるべきだと思う。

ただ、そのenumを直接テンプレートから直接参照するのは、ロジックとビューが密結合になるから、冒頭で紹介されていた例は、俺も受け入れられない。
やはり、一旦、modelに格納してからテンプレートに渡すほうが無難だと思う。
面倒くささを感じるかも知れないが、今後の改修を考えると、そうした方がいい。

12/05 IntelliJ IDEAとGradleでのJavaFXアプリケーション開発 〜環境構築からサンプルコードまで〜

IntelliJ IDEAとGradleでのJavaFXアプリケーション開発 〜環境構築からサンプルコードまで〜 - Qiita

最後のSceneBuilderが気になった。
IntelliJでもタブでSceneBuilderを開けるんだっけ?
前にwindowsでいろいろ調べて設定したけど、別ウィンドウで開いていた気がするが。。。。
よくよく見たら、OSは、macだな。。。
windowsで試したら、まだ別ウィンドウで開くようになっていた。。。
設定で回避できるのだろうか?
やり始めるとハゲそうなので、時間があるときにmacでどうなるか見てみる。

12/06 Spring-bootでWebAPIをaglioで仕様書ごとgradleでビルドしてみる

Spring-bootでWebAPIをaglioで仕様書ごとgradleでビルドしてみる - Qiita

aglioは、swaggerみたいなものかな?
ドキュメントツールは、swaggerがデファクトスタンダード取った感がある。
環境構築が簡単だった。
swaggerは、前に試そうとしたが、環境構築が面倒で辞めたまま。。。

UIは、どこかで見たような気がしないでもないが、かなりシンプルだった。
CSS適用させて変えることもできるのだろうか?

12/07 JavaMailとOSGiとUnsupportedDataTypeException

JavaMailとOSGiとUnsupportedDataTypeException - Qiita

JavaMailは、よく分からんとです。。。

12/08 Visual Studio CodeでParaya MicroのWebアプリケーションを作る準備をする

http://memory.empressia.jp/article/186866284.html

環境構築で挫折した。。。
vscode使うのはいいんだけど、環境構築がネックになると思うんだよね。

12/09 JFRをBigQuery/Metabaseのオレオレダッシュボードで可視化する

JFRをBigQuery/Metabaseのオレオレダッシュボードで可視化する - ブログなんだよもん

JFRは知ってるんだけど、なかなか触ろうという気持ちにはならない。。。
仕事で必要にならない限りは、触るのは難しい。
計測するためのモノも作らないといけないので、完成までに挫折してしまうんだよね。。。
github上で計測用のプロジェクトとかあったりするものなのだろうか?

12/10 Object#clone() メソッドからスローされる CloneNotSupportedException はどのようにハンドリングするべきか

Object#clone() メソッドからスローされる CloneNotSupportedException はどのようにハンドリングするべきか - Qiita

JavaScriptやってると、「例外はすべてRuntimeExceptionでいいのでは?」って思うようになってきた。
RuntimeException/Exceptionの概念が別れてる理由があれば、知りたい。

たまに、握り潰すことをやっていました。。。
記事を読んでいて、AssertionErrorでラップするほうがしっくりきたので、今度からは握りつぶさずにAssertionでラップするようにしよう。

12/11 人生最後に学ぶプログラム言語とは? (生涯給与3億円クラブに追いつきたい場合)

人生最後に学ぶプログラム言語とは? (生涯給与3億円クラブに追いつきたい場合) - Qiita

今年に入って学んだ言語は、SwiftとRubyかな?
Rubyはちょっと怪しいが、Swiftは、業務で使えるレベルまでにはなった。

老後ねぇ。。。
まったく考えてないのだが、みんなはどのくらいで考え始めるのだろうか?

12/12 JavaのanyMatchって、C#でいうAnyだっけ?つまり、JavaScriptのsomeだよね?もう対応表つくるわ!

JavaのanyMatchって、C#でいうAnyだっけ?つまり、JavaScriptのsomeだよね?もう対応表つくるわ! - Qiita

ぶっちゃけ、×印が付いてるのは、他の言語でも、あまり使ったことがない。
JavaScriptは、reduceとmap、Javaは、mapとfilterをよく使う。
C#は、使ったことがないのでよく分からんとです。

12/13 【Java】OS依存な標準ライブラリを挙げてみる

【Java】OS依存な標準ライブラリを挙げてみる - Qiita

JavaなのにOS依存なんてあるのか?って思ったら、たしかに、入出力やファイルシステム系は、OS依存だね。。。
他にもありそうな気がするが、パッとは思いつかない。

12/14 Exceptionをもみ消すなって言われた人のためのエラーハンドリングの話。

Exceptionをもみ消すなって言われた人のためのエラーハンドリングの話。 - Qiita

例外処理はlogだせばいいんじゃないの?って思ったけど、ログに出力しちゃいけないパターンもあるのか。。。
安易なログ出力は、危険な場合があることも、覚えておかないとダメだと思った。

booleanで結果を返す は、昔の俺も思っていた時期はある。
例外処理を理解していれば、これはないなって思うはず。

3: 別の例外を実装し、投げられた例外を包んで呼び出し元に投げるJavaではよく使う印象。
例外処理を見てると、JavaScriptのPromiseのやり方が一番シンプルではなかろうか?と思いました。

12/15 SpringBoot1.5 + Gradle4.4 + Java8 + Docker 環境を Java11 に対応させる

最近、Javaのバージョンをどう管理していたのか思い出せない。。。
Java周辺の環境は、SDKmanで簡単に構築できるのは覚えているんだが。。。。

環境準備が面倒なんだよね、Javaは。

12/16 【Java】【Stream API】オレオレCollectorによるヘッダ・明細Bean生成で学ぶ独自Collectorの実装方法

Streamをカスタマイズできるのは知っているけど、黒魔術感が増す。
なるべく素のStreamを使うようにしたほうが良いのでは?と記事を見ながら思った。

12/17 【Javaクイズ】無理にラムダ使うな、使うなら格好良く使え

reduce使うのが正解な気がするが、Javaのreduceは、使いづらいんだよね。。。
JavaScriptならreduceを間違いなく使う。

12/18 Javaでマルチスレッドを処理を安全に記述する方法

synchronized でも、完璧なスレッドセーフにはならなかった気がする。
うろ覚えなので、若干怪しい。。。

プロセスレベルで分けるのが一番安全だと思いました。

12/19 ラムダ式シリアライズして異なるJVM上で実行してみる

ラムダ式は、内部クラスを流用して作られているから、考えてみればシリアライズは可能か。。。
わざわざシリアライズ・デシリアライズをしてまで渡す必要性を感じなかったのだが、結果を渡すじゃダメだったのだろうか?

12/20 段階的に理解する O/R マッピング

O/Rマッパーは、日本と海外(米国?)で、結構、印象が違うイメージがある。
日本だと、domaみたいなのが好まれ、海外だと、Hibernateが多いようなことを聞いたことがある。

俺も、どっちかと言うと、domaやMybatisみたいな方が直感的でわかりやすい。
レベルの話を聞いていると、レベル3くらいがそうなのだろう。

このライブラリは、どのレベルに属するか考えて技術選定を行うってのは、アーキテクトっぽいなって思った。

12/21 Spring WebFluxのチュートリアルをやってみる

そういえば、WebFluxやるの忘れてたな~と思い、記事見ながらサンプルを作成。
Routerがリクエスト・レスポンスの受け口で、実際の処理はHandlerでやる感じか。。。

意外とすんなり動いた。
自分の環境は、java14-earyでも動いていたので、後方互換はしっかりしているなと思った。
Swiftだと、結構大胆にAPIが変わってたりするから、それが少ないJavaは、バージョンをある程度無視できて、検証が楽だと思った。

12/23 jib-maven-pluginを使ってSpringBootアプリをイメージ化してDockerで起動

jib-maven-pluginを使ってSpringBootアプリをイメージ化してDockerで起動 - Qiita

jib-maven-pluginは、初めて聞いた。
gradle版もあるみたいだな。

コンテナ化のメリットは、動かす環境を汚さないことだと思ってる。
コンテナ化することでサービス同士の組み合わせをいち早くできるのがメリットだと思うので、これから使う場面が増えていきそうな気はしている。
実際、今の現場でもdockerのimageを使う場面が増えてきているし。

12/24 [検証]SpringBoot vs Micronaut 起動速度の比較

[検証]SpringBoot vs Micronaut 起動速度の比較 - Qiita

結果だけ見ると、NativeImageが圧倒的だな。。。
計測方法が単一だったので、複数視点で見たときにどうなるのかが気になった。

逆にNativeImageが遅くなるときがあるとかだったら、ビルド方法によってコーディングを変える必要があるなとか妄想した。

感想

12/29時点で、読めるものは全部読んだ。
気になったのは、jib-maven-pluginかな?
あとは、だいたい既知の知識である程度は把握できてる。
Javaを触ることは少なくなってきたが(そういえば、今年は仕事で触ってない。。。)、比較的に、ついては行けているのかなと感じる。
今年は、LTSがなかったから、インパクト大きな変更がなかったとも考えられるかもな。。。
来年は、LTSのリリースがあるから、注視はしていきたい。