- 2019年11月23日(土)
- ベルサール新宿グランドコンファレンスセンター
- https://ccc2019fall.java-users.jp/
10:00-10:45 Head toward Java 13 and Java 14
- 資料
- Java13 と Java14 での新機能及変更点について
- OpenJDK の Forks の話
- 個人的にさっさと使いたいやつ
- Java13
- Text Blocks (Preview)
- Java14
- Helpful NullPointerExceptions
- Records (Preview)
- Java13
- 個々で見るとそれをほど大きな変更点はないが project 単位で見ると重要なものが多い
- project amber とか
11:00-11:45 Javaで学ぶオブジェクト指向プログラミングの基礎知識
- 資料
- みんな大好き増田さん
- 増田さんの考えるオブジェクト指向プログラミングについて
- 「型」と「カプセル化」の意義がわかると新たな世界が見える
- 「DDD の二歩ぐらい手前の話」のように感じた
- 「型」とは何か
- 値の範囲を制限
- 値の操作を制限
- (int とか boolean とかを普段何気なく使ってるけどこれらを満たしている)
- 「カプセル化」
- クラスを使って型の定義を小さい入れ物 (=カプセル) に詰める
- 「型」という抽象的な概念をコードで表現する (=カプセル化)
- うまくカプセル化できると型に関するロジックがあちらこちらに散らばらなくなる
- 変更が楽で安全になる
- 型の消費者から型の生産者になろう
12:00-12:45 Java によるクラウドネイティブの実現に向けて
- 資料
- ソフトバンクにおける Java の開発について
- 最近だと k8s に Java アプリ乗せたり、Quarkus 使ってみたりしているらしい
13:30-14:15 開け!ドメイン駆動設計の扉
- 資料公開なし
- togetter: 【JJUG CCC】「開け!ドメイン駆動設計の扉」のまとめ
- 内容: Evans本を読むための準備運動
- DDD のモチベーション
- 非DDDの問題点の裏返し
- ソフトウェア利用者、開発者、コードが分断されてしまう
- DDD のゴール
- ソフトウェア利用者とコードが地続きになること
- (故にユビキタス言語を作れとかドメインエキスパートと会話しろとかいう話が出てくる?)
- プロジェクトの最初期にコストをはらいことによってコードの保守性を高められる
- ソフトウェア利用者とコードが地続きになること
- 非DDDの問題点の裏返し
- なぜDDDが今流行っているのか?
- 10年ぐらい前にDDDやってうまくいった事例がちらほら出てきたから
- 今になって開花
- 10年ぐらい前にDDDやってうまくいった事例がちらほら出てきたから
- ドメイン = 利用者をとりまく世界
- ソフトウェアにとって役立つ知識を抽出したものがモデル
- 注意: ソフトウェアの目的によって重要な要素は異なる (ドメインが違うから)
- 「ドメインモデル」のコードによる表現を「ドメインオブジェクト」と呼ぶ
- コードでうまく表現できないのはドメインの捉え方がおかしいから
- ドメインモデルはイテレーティブに変更する
- (恐れずリファクタリングしよう...)
- ソフトウェアにとって役立つ知識を抽出したものがモデル
- ドメインの表現方法
- 値オブジェクト
- 普遍
- 単なる値として使うもの
- エンティティ
- 同一性 (identity) によって識別されるオブジェクト
- サービス
- モノで表現できない振る舞い
- 濫用注意 (ドメインモデル貧血症)
- 値オブジェクトやエンティティに持たせるべき振る舞いをサービスで代用してはいけない
- 集約
- 普遍条件を守る
- 外部からの操作から保護
- 変更の単位 (トランザクション) で集約する
- できるだけ小さくする
- 値オブジェクト
- 専念させる
- リポジトリ
- 集約の CRUD 処理の interface
- 実装の詳細はドメインには関係ない
- ファクトリ
- 作る知識を表現
- (作る知識と使う知識は異なる)
- リポジトリ
- DDD の入門書を執筆中らしい!!!
- 2020/02ぐらいに出そう
14:30-15:15 Spring Update 2019
- 資料
- Pivotal のまきさん
- Spring 5.2, Spring Boot 2.2 とかの話
- RSocket がアツそう
- Spring Boot 2.2
- 8bit color の banner が出せるようになった
- まきさんが contribute したらしいw
- JUnit5 がデフォルトに
- JUnit4 はまだ入ってるけどいつかは消える
- Health Indicator Groups
- immutable
@ConfigurationProperties
- 8bit color の banner が出せるようになった
- GraalVM Native Image Support
- いちおう使える
- SpringBoot 2.3 から正式に使えるようになる
- その他
- SpringBoot 2.3+ からリリースサイクルが変更に
- 6ヶ月毎のマイナーバージョンアップに
- 依存ライブラリのアップデートを早めるため
- サポートポリシーは変わらず、同一マイナーバージョンは1年以上サポートされる
- 2020 Q1
- 2.1 EOL
- 2.3 GA
- 6ヶ月毎のマイナーバージョンアップに
- Spring Framework 5.3+
- GraalVM で追加設定なしで native image をビルドできるようになる
- JDK 14+
- SpringBoot 2.3+ からリリースサイクルが変更に
- 資料見つからず
- Hazelcast の中の人
- microservices におけるキャッシュ戦略の紹介
- 多分この記事と同じ内容
16:45-17:30 多言語対応の仮想マシンGraalVMが照らす未来
- 資料見つからず
- ヤフーの Java 黒帯の阪田さん
- GraalVM の詳解
17:45-18:30 JVMs in Containers: Best Practices
- 資料
- JVM をコンテナに載せる際に検討すべきこと
- コンテナの起動時間を削減する
- JDK のサイズを減らす
- jdeps で依存関係を調べて、jlink でそれら以外を除いた JDK を作る
- 小さい OS image を使う (alpine とか)
- JDK のバージョンアップに伴いパフォーマンスが改善されてるので新しめの JDK を使うといい
- JDK のサイズを減らす
- CDS 使う
- GraalVM つかって native image を生成する
- GC とか heap size をチューニングする
- 詳細は触れていなかった
- Java の進化が加速
- Java のリリースサイクルの高速化
- ライブラリやフレームワークも...
- 新機能が少しずつ取り込まれている
- ソフトウェア実行環境の変化への対応
- Java の footprint の削減
- コンテナ化
- native image 生成
- 頑張って着いていく (アップデートし続ける) ことがより重要に
- Java のリリースサイクルの高速化
- ソフトウェアの進化が早まっている昨今において、如何に変更しやすい設計するかということに興味を持っている人が多そう
- 増田さんの型思考オブジェクト指向入門
- 成瀬さんのDDDの話
- DDDが盛り上がっている (ように見える) のはこれが理由だと思う
- DDD の (実験的) 実践例もかなり出てきた
- Spring 触っている人はまきさんの Spring Update 2019 は必読
- GraalVM 関連のセッションは人気
- oracle の人による keynote
- まきさん
- Java の起動時間と戦う話 (見てない)
- 黒帯の阪田さん
- 一方で GraalVM は万能ではないという話も
- -footprint, +latency
- 2020年には AOT のパフォーマンスを JIT に近づけていくらしい
- 向いている用途
- FaaS
- 大規模クラウドアプリケーション
- microservice
- 来年半ばぐらいには production でも使いやすくなっていそう
- Spring Framework 5.3+ (SpringBoot 2.3+) では追加設定なしで native image 生成できるようになるらしい
- microservice やコンテナ技術と相性が良さそうなのでキャッチアップしていったほうがいい
- java + container の話がちらほら
- ソフトバンクの Java の話
- VMs in Containers: Best Practices
- 何が best なのかはなかなか難しいのでまだまだみんな探り探りやっていそう
- k8s 使ってるところは better を目指して一緒にがんばろう