Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
How Unext took in Eclipse Collections in FW
Search
jflute
May 26, 2018
Programming
0
620
How Unext took in Eclipse Collections in FW
for JJUG CCC 2018.
Eclipse Collections, LastaFlute, Gson, Hibernate Validator
jflute
May 26, 2018
Tweet
Share
More Decks by jflute
See All by jflute
How to fork Seasar (LastaFlute)
jflute
0
140
DBFlute bridges between DB and App
jflute
1
2.7k
LastaFlute First Impact
jflute
7
7k
Other Decks in Programming
See All in Programming
LLMとSLMを活用!Azure Functions × モダンフロントエンドでつくる次世代アプリケーション
nahokoxxx
1
960
データ利用者が最速で価値を評価できるDataOpsを目指して / Towards DataOps that Enables Analysts to Deliver Value Rapidly
civitaspo
3
650
誰が作成しても1つの構造になるモデリング作成技術、Theory of Models に夢を見る
mokuo
21
3.9k
Strip Types と Storage
yosuke_furukawa
PRO
3
270
Findy - エンジニア向け会社紹介 / Findy Letter for Engineers
findyinc
3
85k
BigQueryからSnowflakeへ移管して作る最強のデータ基盤 〜Data Ingestion編〜 / The Ultimate Data Platform Migration from BigQuery to Snowflake: Data Ingestion Edition
civitaspo
3
410
詳解 AWS Lambdaコールドスタート
iwatatomoya
0
1.1k
UnJSを使って軽率にCLIを作ってみたらめちゃくちゃ便利だった / create CLI with UnJS
drumath2237
4
1k
range over funcで始めるグラフアルゴリズム
integral0515
0
110
すばやく実装するための戦略とテクニック2024 / speed is power! 2024 #techramen24conf #shoyu
77web
8
3.6k
12年前の『型システム入門』翻訳の思い出話
mame
11
1.5k
JEPs の変遷から眺める Vector API / Tracking the Progress of Vector API via JEPs
mackey0225
1
120
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
52
8.9k
Building Adaptive Systems
keathley
35
2.1k
The Cost Of JavaScript in 2023
addyosmani
38
4.9k
Documentation Writing (for coders)
carmenintech
65
4.2k
Making the Leap to Tech Lead
cromwellryan
128
8.8k
Building Applications with DynamoDB
mza
89
5.9k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
189
16k
Happy Clients
brianwarren
95
6.6k
Bash Introduction
62gerente
608
210k
In The Pink: A Labor of Love
frogandcode
139
22k
Infographics Made Easy
chrislema
239
18k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
248
20k
Transcript
Eclipse Collectionsを 現場に浸透させるための フレームワーク対応 U-NEXT 技術顧問 久保 雅彦 ( jflute
) 2018.5.26 JJUG CCC 2018 Spring
まずは自己紹介 久保 雅彦 ( jflute ) OSS開発 LastaFlute : WEB
Framework DBFlute : DB管理支援ツール & O/R Mapper U-NEXTでは、サーバーサイド技術顧問として 現場フォローを行っている Twitter : @jflute Blog : http://d.hatena.ne.jp/jflute/
Eclipse Collectionsのちょこっと紹介
Eclipse Collectionsのちょこっと紹介 さっそくライヴコーディング jflute が Eclipse で Eclipse Collections 書くよ、バババッ
Eclipse Collectionsのちょこっと紹介 Eclipse Collections自体の詳しい話は、 前回JJUGで発表された、 U-NEXT ながほりさんのスライドを! http://slides.com/nashcft/jjug_ccc_2017_fall/#/
Eclipse Collectionsのちょこっと紹介 ずばりジレンマ 「Java組み込みじゃないので、 フレームワークが対応してない」
Eclipse Collectionsのちょこっと紹介 java.util.List と ImmutableList の往復修行
Eclipse Collectionsのちょこっと紹介 Eclipse Collections便利だけれど... 最後は結局 java.util.List 最初は結局 java.util.List
Gson で ImmutableList 対応
Gsonで ImmutableList 対応 JSONクラスのプロパティの型でも ImmutableList 使いたいよぉ from 現場
Gsonで ImmutableList 対応 (> <
Gsonで ImmutableList 対応 まあ、確かに..... Now Live Coding
Gsonで ImmutableList 対応 さあ、Gsonさんを拡張するぞー
Gsonで ImmutableList 対応 LastaFlute 経由で、できるようになった! Now Live Coding
Gsonで ImmutableList 対応 独自のコレクション型を設定できるように Now Live Coding
Gsonで ImmutableList 対応 実は、思ったより大変だったぞぅ(><
Gsonで ImmutableList 対応 さあ、何が大変だったか? どう実現しているか? Let's ソースコードリーディング !
Gsonで ImmutableList 対応 GsonBuilder の registerTypeAdapterFactory() に到着 Now Reading Source
Code
Gsonで ImmutableList 対応 TypeAdapterFactory を継承したクラスを作って登録 Now Reading Source Code
Gsonで ImmutableList 対応 LaYourCollectionTypeAdapterFactory… La は、LastaFlute の La だよね? でも、パッケージが
com.google.gson.internal.bind だぞぅ。 なぜなぜ? Now Reading Source Code
Gsonで ImmutableList 対応 TypeAdapterRuntimeTypeWrapper が package スコープでした(>< 呼べない.... けど、中で利用したいクラスだし、 重要そうな処理なので、あまり自作したくないので呼びたい。
Now Reading Source Code
Gsonで ImmutableList 対応 そもそも組み込みの CollectionTypeAdapterFactory を継承して... とか考えたけど、final 付いてるし private も多いので
参考するだけ。 それなりに Gson 内部実装を まんま自分でも実装しないといけなかった ! Now Reading Source Code
Gsonで ImmutableList 対応 でもまあ、できたはできた!(^^ Now Live Coding
Hibernate Validator で ImmutableList 対応
Hibernate Validator が ImmutableList で効かないときがあるよぉ from 現場 Hibernate Validatorで ImmutableList
対応
(> < Hibernate Validatorで ImmutableList 対応
Hibernate Validatorで ImmutableList 対応 実はわりとそのまま使えるのもある List 関係ないアノテーションなど
NotEmpty, Length, Size などだと... Hibernate Validatorで ImmutableList 対応
でも、LastaFlute 提供の Required は効く...おや!?なぜ? Hibernate Validatorで ImmutableList 対応
おおぉ、instanceof 先生...んっ? ImmutableList も Collection のインスタンス? Hibernate Validatorで ImmutableList 対応
Now Reading Source Code
いま一度継承関係をおさらい ImmutableList (implements Iterable) ┗ AbstractImmutableList (implements List) ┗ ImmutableArrayList
Hibernate Validatorで ImmutableList 対応 Now Reading Source Code
ImmutableList のインスタンスは java.util.List である! なので、instanceof で判定してるものは動く Hibernate Validatorで ImmutableList 対応
ただ、組み込みのアノテーションは、 (恐らく) 大抵宣言されている型で判断してるっぽいので... とりあえず現場から要求のあった Size を対応 (Required があったので、NotEmpty はあまり必要とされず) Hibernate
Validatorで ImmutableList 対応
LastaFluteで、このようにすると対応できる1 Hibernate Validatorで ImmutableList 対応 Now Reading Source Code
LastaFluteで、このようにすると対応できる2 Hibernate Validatorで ImmutableList 対応 Now Reading Source Code
LastaFluteで、このようにすると対応できる3 Hibernate Validatorで ImmutableList 対応 Now Reading Source Code
つまり、Hibernate Validator の... ImmutableListのSize対応のConstraintValidatorを作って、 DefaultConstraintMappingで定義して、そしてそれを、 HibernateValidatorConfiguration@addMapping() で、登録する。 Hibernate Validatorで ImmutableList
対応
まったく同じ要領で、 NotEmpty や Length も対応できるはず (必要になってないので、まだやってないけど... ) Hibernate Validatorで ImmutableList
対応
めでたしめで... Hibernate Validatorで ImmutableList 対応
まだ冒険あります。 Hibernate Validator を 5.x から 6.x にアップグレードしたら、 ImmutableList の要素のクラスの
バリデーションのエラーメッセージが出なくなった。 (若干記憶が曖昧ですが、確かそのような現象だったような) Hibernate Validatorで ImmutableList 対応
Hibernate Validator から戻ってくるパス文字列が、 5.x: sea[2].mystic 6.x: sea[].mystic … 消えてる! というか、もともとなんで動いてた?
Hibernate Validatorで ImmutableList 対応
深く追えてないのですが、恐らく... ImmutableList (implements Iterable) ┗ AbstractImmutableList (implements List) ┗ ImmutableArrayList
インスタンスの型で、たまたま「動いちゃってた」って 感じなのかもしれない。そこに頼らないほうがいいかも!? Hibernate Validatorで ImmutableList 対応
まあ、とにかく LastaFlute でこのようにして対応1 [App]ActionAdjustmentProvider : Hibernate Validatorで ImmutableList 対応 Now
Reading Source Code
まあ、とにかく LastaFlute でこのようにして対応2 [App]ActionAdjustmentProvider : Hibernate Validatorで ImmutableList 対応 Now
Reading Source Code
つまり、Hibernate Validator の... ImmutableList専用の ValueExtractor クラスを作成して HibernateValidatorConfiguration@addValueExtractor()で、登録する。 Hibernate Validatorで ImmutableList
対応
ふぅ Hibernate Validatorで ImmutableList 対応
Formの受け取り で ImmutableList 対応
普通のHTMLリクエスト受け取る FormのプロパティでImmu… わかったわかった、もうわかった from 現場 Form の受け取りで ImmutableList 対応 from
jflute
セッション残り時間があったら、 コードを読みます! Form の受け取りで ImmutableList 対応
これは完全に LastaFlute だけの話で、 該当箇所は ActionFormMapper クラス。 [App]ActionAdjustmentProvider で、 ImmutableList 情報を登録します。
(要領は今までのとほぼ同じ) Form の受け取りで ImmutableList 対応
とにかく感想は... ImmutableList を使う方はImmutableで嬉しいけど、 ImmutableList に値をマッピングするフレームワークの方は、 「追加でっきーーん」 ...ってまあ、しょうがないしょうがない(^^) とりあえず対応できたのでよし! Form の受け取りで
ImmutableList 対応
あれ、DBFluteは?
(> < DBFluteで ImmutableList 対応
難易度桁違い...断念いや冒険半ば ということで、DB側では手動変換はまだ発生 ※ただ、手動変換も少し楽になる施策も DBFluteで ImmutableList 対応
(DBFlute関係ないけど) static import 補完を前提とした toImmutable() これは現場の方が自ら作成して促進 (Good Job!) ※案外、これでまあまあ楽に。検索したらすぐ toImmutable()
! DBFluteで ImmutableList 対応
stream()と混ざるのどうする?
あーあ、まじめな話になっちゃった Stream() と混ざるのどうする?
ジレンマ どっちでもいいようにする? 混ざると後から読む人つらくない? そもそも存在を知らないで書いちゃう人いるかも? Stream() と混ざるのどうする?
ひとまず、やはり Eclipse Collections に寄せることに 日々成長するサービスなので、積み上げ式の開発。 他の人のコードを読んで実装が日常茶飯事。 そもそも Java8 経験者も少ないのでこれから学べば良い。 Stream()
と混ざるのどうする?
それならそれで、割り切ってちゃんと促進しよう。 投げっぱなしはダメ 「それができないのなら、きっと誰も使わなくなる」 Stream() と混ざるのどうする?
stream()を自動検知するチェックプログラム java.util.Listのプロパティ検出するとUnitTest落ちる ...List.stream() を検出するとUnitTest落ちる (UTFlute の PoliceStory を活用) ※ただ、ちょっと検出タイミングが遅いのが難点... Stream()
と混ざるのどうする?
成長真っ只中、五月雨に人が増える開発現場だと... 「えっ、Eclipse Collections を使うって 知らずに stream() で書いちゃった」 「そもそも、Eclipse Collections 知らない」
Stream() と混ざるのどうする?
入社時のオリエンテーションで アーキテクチャ講義 (後述) ☆ なんだかんだこれが一番 Stream() と混ざるのどうする?
習得するための研修制度
サーバーサイドチームに配属されたら、 オリエンテーションと約二週間の研修! 習得するための研修制度
オリエンテーションでは、 現場のアーキテクチャやそのコンセプト、 開発の歴史などを、1on1でしっかり伝える。 (基本的に、jfluteが講師やっています) 習得するための研修制度
約2週間 DFluteハンズオン をやりつつ、 その中で Eclipse Collections にも慣れてもらう。 ちなみに AssertJ も同様。
(基本的に、jfluteが猛烈レビューやっています) 習得するための研修制度
「中途やパートナーでも、いきなりチケットを振るのではなく、 じっくり研修されて配属されるので、受け入れる方もすごく楽」 (現場の方の声、頂きました!) 習得するための研修制度
その結果
現場のコードは、いたるところに Eclipse Collections !!! その結果
U-NEXT のオープンソース貢献
「オープンソースは使いながら鍛えていく」 という思想を持つ素敵な方々ばかり。 ( 現場の積極的なフィードバックでフレームワークも成長!) U-NEXT のオープンソース貢献
社内で作った汎用クラスはどんどん オープンソースにコントリビュート! 「他でも使えるんじゃない?」が合言葉 U-NEXT のオープンソース貢献
U-NEXT のオープンソース貢献 KVSFlute, SolrFlute, Lasta RemoteApi などに加え、 一クラス単位でも汎用的な使えそうなものは、 Exampleコードとして寄与 (ありがとうございます!)
U-NEXTさんからSolrFlute,KVSFluteコントリビュート頂きました U-NEXTさんから Lasta RemoteApi をコントリビュート頂きました
ところで.......
ってご存知ですか?
という訳でちょっとだけ宣伝
定額制動画配信サービス 実は動画配信における 10年の実績 実は日本の定額制動画配信市場 において シェア3位 (金額ベース・2017年・GEM Partners株式会社調べ) 配信動画本数 120,000本
以上
U-NEXT では サーバサイドエンジニアを 募集しています。 今注目されている動画配信市場で 一緒にサービスを作ってみませんか? 採用ページ : https://inside.unext.jp/ エンジニア募集中
開発環境 エンジニアが働きやすい環境が整っています。 定期的に開催される勉強会 フロントやビジネスなど別チームを 超えた勉強会を開催、自由に参加しています。
定期的に開催される勉強会 例えば.... DBFlute, LastaFlute (by jflute) 暗号化の仕組み, JWT Docker, Kurbernetes
GraphQL React, Redux 映像著作権 働きやすい開発環境 例えば.... フレックスタイム制 希望のPC貸与 (例:MacBookPro メモリ16GB) 快適なイス 大きなモニターとセカンドモニター利用可 ガジェット、ソフトウェア、 書籍、セミナー等 費用全額会社補助 スーツ着用不要 フリースナック、フリードリンクあり エンジニア同士の360度評価 (年2回)
突貫でスライドを作ってくれた、 U-NEXT なかのさん、ありがとう! (前日深夜、見た目の調整してくれた、いのうえさん、ありがとう)
本日、利用したJavaプロジェクトは、 Githubで公開されています。 https://github.com/lastaflute/lastaflute-test-fortress
ご静聴ありがとうございました。