L is Bエンジニアブログ

ビジネス用メッセンジャーdirectのエンジニアによるブログ

LisBエンジニアブログ

ビジネスチャットdirectのエンジニアブログ

師弟で JJUG CCC 2019 Spring に行ってきました

はじめに

弊社平成最初で最後の新卒エンジニアの石川です。 教育係の持田氏と共に JJUG CCC 2019 Spring (http://www.java-users.jp/ccc2019spring/#/) に行って参りました。

f:id:l-is-b_ishikawa:20190527181604j:plain
『Duke』持田画伯・作

私は聴講者としての参加ですが、持田氏は登壇者 + ボランティアとして参加しておりました。持田氏おつかれさまです!

本記事はL is Bエンジニアブログ初の合作記事です。二人がセッションに参加した時間がいい感じに別れていたので、前半は石川、後半は持田氏が執筆しております。

なお、資料は jjug の公式の方でまとめられているので、そちらを御覧ください。

github.com

こちらのブログでは難易度別にセッション一覧と資料へのリンクをまとめてくれています。ありがたやー。

https://sun0range.com/event-report/jjug-ccc-2019-spring-session-list


聴講者として参加しました石川です。前半4セッションのについてのメモをつづっております。

以下私が参加したセッションです。

  • Java Collections Framework + α 入門 (持田真哉) 10:00~10:45
  • デプロイから考える僕のWEBアプリ開発 (井上和宏) 11:00~11:20
  • 先行開発!Java でクリーンアーキテクチャ -- ゼロから始める新規開発 (GMOインターネット株式会社) 13:30~14:15
  • テストエンジニアが教える JUnitを書き始める前に考えるべきテスト (風間裕也) 14:30~15:15

Java Collections Framework + α 入門 #ccc_c1

資料はこちらです。

https://www.slideshare.net/mikeneck/jjugccc-2019-spring-collections-framework-jjug-jjugccc-cccc1

トップバッター持田さんのセッション。持田さんは普段、株式会社L is Bで Java を書いておられるそうです。 Java の初学者にコレクション(Map, Set, List) の概要や実際にコードをかくときのお作法・注意点などについて教えるという内容でした。

持田さん『このセッションの内容がマスターできれば君は Java 中級者だ!』

以下メモ。

  • コレクションは便利で使い方を誤らなければ安全。ながーい実績もある
    • 最近の Java で配列使うことってあるのだろうか?
  • Set は内部的には Map を利用して実現している(Set も Map も重複を許さないので都合がいい)
    • 入社時に持田氏に渡された本読んだから知ってたぜ!(Java 本格入門 p145)
  • List の実装クラスはどれ使うか迷ったらとりあえず ArrayList
  • 空リストが欲しい時は Collections.emptyList()
  • コレクションの説明をコーヒーを例にしていて大変オシャレ(オサレではない)
    • しかし持田さんはコーヒーが飲めない!

デプロイから考える僕のWEBアプリ開発 #ccc_m2a

資料はこちらです。

https://speakerdeck.com/instreest/think-from-deployment

井上さんは株式会社アーチで業務システムの保守エンジニアをされています。息子と『ピタゴラスイッチ』を見るのが日課。いいパパだ。

井上さんが WEB アプリを開発するきっかけとなったのが『第2回東京公共交通オープンデータチャレンジ』 というコンテスト。お題は、鉄道、バス、飛行機のデータ(例えば、駅時刻表、路線運行状況、列車走行位置)を使ってアプリを作ること。井上さんが『あと何分で次の列車が出発するか一覧表示するアプリ』 (https://odpt.shirokin.net/) を開発するなかで、フレームワークとビルドツールを如何にして選んだかということについての内容でした。

井上さん『第3回東京公共交通オープンデータチャレンジが開催されるからみんな参加してねー』(https://tokyochallenge.odpt.org/

以下メモ。

  • 井上さん『サーバーの構築は大変な手間なので手間極力少なくしたい』
    • Spring Boot なら実績あるし、組み込みAPサーバーも同梱してるから構築も楽で良さそう
    • しかし今回は不採用
      • 前に開発したサービスは Spring Boot 使ってたけど、炎上したので使いたくなかったらしい
      • サービスが炎上したことと Spring Boot を使ってたことは関係ないけど、なんとなく使いたくなかったらしい
  • そんなわけで今回はマイクロフレームワークの Spark を採用
    • Java コマンドのみで実行できる
    • ドキュメントがわかりやすく簡潔
    • わりとクセがある
  • ビルドツールは Gradle を採用
    • Maven は素直に難しい(XML の設定ファイル書くのめんどいね)
    • Gradle なら設定ファイルは Groovy で書けるし、Linux 用の実行スクリプトまで生成できちゃう!
      • 持田氏の教育プログラムでもこの機能には大変お世話になりました

先行開発!Javaでクリーンアーキテクチャ -- ゼロから始める新規開発 #ccc_e3

資料はこちらです。

https://speakerdeck.com/nrslib/clean-architecture-with-java

以下メモ。

  • しまったこのセッション上級者向けだ!
  • いいこと書こうと思ったけど、セッション内容の半分の半分も理解できず...
    • 決して説明が分かりにくかったということではなく、クリーンアーキテクチャ自体高度な概念であり、未知の単語がじゃんじゃか出てきたため、無知蒙昧な私めには到底理解に至らぬ次第であります故
  • このセッションのわかりやすい内容は他にもあげてくれてるからそっち読んで(丸投げ)

nrslib.com

テストエンジニアが教える JUnitを書き始める前に考えるべきテスト #ccc_e4

資料はこちらです。

https://speakerdeck.com/nihonbuson/jjug-ccc-2019-spring

ブロッコリーさんは株式会社ビズリーチに勤務されています。(本名よりブロッコリーと呼んで欲しいらしい)

本セッションは、テストの目的、テストファーストで行うことの本当の良さ、何をテストすれば良いのかについてという内容でした。(タイトルの通り、JUnit を書き始める前に考えるべきテストという内容なので、JUnit の書き方、TDD のやり方、自動テストの設計方法といった実際の実装については触れておりません。) 現在、私は持田氏の教育でテストを書いている真っ最中でしたので、タイムリーな話題で大変参考になりました。JUnit でのテストの書き方については手を動かしながら少しずつ分かってきていましたが、テストの目的や、何をどのように書けば良いということについてはさっぱりだったのでありがたいです。

以下メモ。

  • ブロッコリー氏『はーい、ペアワークするので、みなさん隣の人と二人組つくってくださいねー』
    • 4文字以上12文字以下 and 英数字のみ and 3分以内に4回以上間違って入力するとアカウントを5分間ロックするというパスワードの仕様に対してテストをする際に、どんなテストをすればよいかというのをリストアップしてお互いに見せ合いっこ
    • 私のテストリスト
      • 3文字の場合はエラー
      • 4文字の場合は成功
      • 12文字の場合は成功
      • 13文字の場合はエラー
      • 記号が入っている場合はエラー
    • 隣の方のテストリスト(うろ覚え)
      • 文字数のチェック
      • 文字列が英数字のみかどうかのチェック
      • 間違ったパスワードを3分以内に4回以上入力したときにアカウントがロックされているか
      • アカウントを5分間ロックできているかどうか
    • そうか、テストを実装する前に考えることだからもっと抽象的に書いてもよかったのか
      • さすが経験者は違う(隣の方はインフラ系を10年以上やってて、テストも書いたことある)
    • ブロッコリーさんはこのペアワークで、実際のテストコードは1文字も書いてないけど、たったこれだけの仕様と数分間の話し合いだけでもテストについて何行も文章をかくことができた。テストを書く前に考えることっていっぱいあるでしょ?と伝えたかったらしい
    • 隣の人という指定がなければ危うくぼっちになるところだったぜ
  • 完璧なテストは書けない。入力値のパターンは無数にあって、その全てを網羅することはできない
    • なので、合理的に入力値のパターンを少なくしましょう(同値分割法、境界値分析、etc...)
  • プログラマーがやってるのは Checking、QA チームがやってるのは Testing
    • Checking = 意図通り動くか確認する作業
    • Testing = なんとかして製品を破壊する作業
  • テストの勉強は「習うより慣れろ」

はい、発表とボランティアで参加してきた 持田 です。 後半の 2 セッションのメモです。僕の発表に関する参加ブログは自分のブログの方に書きました。こちらも合わせて御覧ください。

mike-neck.hatenadiary.com

Project Loom - 限定継続と軽量スレッド #ccc_a6

さくらばさんのセッションで、現在 Project Loom という名前で取り組まれている、スレッドを OS に依存せずに JVM でコントロールできるようにするプロジェクトの説明でした。

主な内容は以下のとおりです。

  • Filber - Thread を OS が管理するのに対して、 Fiber は JVM が管理する
    • Continuation - メソッド内の残りの処理を表す
    • スケジューラーは JVM に以前からある優秀なスケージューラー (ForkJoinPool) を利用
  • Fiber に待ちが発生すると、 park()/unpark() メソッドが呼び出される
    • 対応している Java SE API
      • Thread#sleep/Thread#join
      • java.util.concurrent の各オブジェクト
      • I/O ネットワーク/パイプ
    • File は未対応
    • 今後上記のものを使っている場合には Fiber の恩恵を受けられるが、 synchronized を使っている場合などは、恩恵が受けられないので、コードの書き換えが必要

なお、サーバーのコードを書いていて気にしてしまうのが、 ThreadLocal をどうするか?ということですが、こちらはまだいろいろと議論があるようです。

Functional Spring Cookbook Toshiaki Maki #ccc_a7

Pivotal の慎さんのセッションで、 Spring アプリケーションをシンプル(簡単にではない)に書いていく functional な方法の紹介

functional な Spring というと、 WebFlux を思い浮かべますが、 Servlet ベースのアプリケーションでも funcitonal に設定できるようになっているとのことです

時代の流れなのか、 Spring Boot アプリケーションも SpringBootApplication アノテーションなしで起動できるようになっていて、 最近、 Spring を触れていなかったので、 Spring の進化の速さにはただただ驚くばかりです。


以上、 JJUG CCC 2019 Spring の参加ブログでしたがいかがだったでしょうか?(?) 今後は、老兵である持田ではなく、 石川氏が JJUG CCC でエレガントな発表ができるように指導していこうと考えております(持田談)。

いつものお決まりですが、 L is B では一緒に Java を書いていくエンジニアを募集しております。 一緒に Java を書いてみたい方はこちらよりご応募ください。

l-is-b.com