JJUG CCC Fall 2017に行ってきたよ!

今年の冬も来たぜ!JJUG CCC Fall!!

http://www.java-users.jp/ccc2017fall/www.java-users.jp

レポート

10:00 ~ 10:45 Backlog:JavaからScalaへの移行の歩み

  • Java + SeaserからScala + Playへ
  • なぜ移行するのか?特に利点はないのに?
    • Backlogの成長を加速させたかった。
    • Seaserから卒業
    • リファクタリング
  • なぜScala + Play Framework?
    • 型推論、パターンマッチ
    • 静的型付け言語
    • JVM言語なのか既存知識から大きく離れない
  • API v2で実績 Scala + Play + DDD
  • 移行方法
    • ボツ案1:全てのアクションの移植が完了してから入れ替える
      • Tomcat版、Play版の両方に機能追加とバグ修正が必要。ドッグフィーディング。
    • ボツ案2:Javaから呼び出されるメソッドを少しずつScalaに移植
      • JavaとScala間でEntitiyの相互変換するコードが必要になった
      • 他にも設計の差異を埋めるコードも必要
      • 移行完了後に捨てるコードに工数かけるのは辛い
    • 採用案:機能単位に作り切って、NginxでアクセスをPlay版に振り分ける
      • セッションを共有する仕組みをRedisで行う
      • 採用理由
        • ユーザーへの影響は抑えやすい
        • 完了後に捨てるコードはほぼない
        • Tomcat版の設計に引きづられることもない
      • JS/CSSの移行のために作ったツール
        • 旧ViewテンプレートからTwirlへの変換ツール
          • 正規表現を用いた補助的なもの
          • Tomcat版とPlay版の両方にアクセスしてDOMを比較するツール
      • 利点
        • 移植が正しくできていなくてもNginxの設定を戻せばいい
          • 簡単に戻せるのは精神的によい
      • 課題
        • 機能追加が並行して動いている場合に差分が出やすい
          • 最近はPlay版にのみ機能追加している
          • 性能評価とかあるといいかも
  • Scala初心者がJava -> Scalaへ移行した話
    • 勉強方法
      • 社内勉強会、研修、実業務
      • ドワンゴのScala研修テキスト
      • 社内向けツールをScala, Play, Akka, WSで作った
    • はまりどころ
      • implicit class
      • for文(for comprehension)
      • 文法の違いとか

11:00 ~ 11:45 10年前のレガシーシステムをサーバーサイドKotlinでフルリニューアルしている話

speakerdeck.com

  • 背景・概要
    • 医師のキャリア支援事業の10年に一度のリニューアル
      • 600人日!
      • 複雑なアーキテクチャになっている。データ重複・ロジック重複・・
      • Javaの独自FW, viewの部分はXSLT・・。
      • KotlinのRest API, WebアプリはRails, Vue.js
        • 生産性上がるよね
      • プロトタイプ作成して経営会議
  • 承認までの道
    • 複雑かしたアーキテクチャによる悩み
    • 悩んだけど経営会議で承認された
      • 最優先の問題を粘り強く見極めた
      • 経営陣を説得する際、数値化は大事
  • 技術選定の理由
    • APIサーバ - 重複ロジック・DBを一元化したい
    • 型を用いてカッチリとやりたい
    • なぜKotlin?
      • 型あり
      • Spring Boot使える
      • Java製の社内ライブラリが使える
      • 学習コスト:RubyENGには親しみやすい構文
    • OR MapperはDoma2
    • Vue.js -> リッチなUIニーズに対応しやすい
      • Element -> Vue.jsのフレームワーク。フォームなどが豊富で便利。
  • Kotlin APIサーバの作り方
    • githubにあげてます https://github.com/maeharin/kotlin-dvd-rental-dvd/
      • swagger-coegenいいね
    • Springのアノテーション:問題なく使える
    • Spring Fox:問題なく使える
    • kotlin-springプラグインを使うとopen不要になる
    • jackson-module-kotlinが便利
    • Doma 2
      • Spring BootではStarterを使う
      • Kotlinで実験的にサポート。EntityをKotlinで書ける。
      • はまりたくないので、Domaの層は全てJavaで書く。という選択肢
        • DomaはJava。それ以外はKotlin。
    • swagger-codegen
      • SpringForxでswagger definitionを生成して、それをswagger-codegenに食わせる
  • どこでもKotlinの紹介
    • Androidだけでなく、どこでも使えるという熱い思い

12:00 ~ 12:45 JJUG初心者のためのJava/JJUG講座

ランチセッションとても面白い話で引き込まれました。さすがですよね!

www.slideshare.net

13:30 ~ 14:15 サーバサイドKotlin

  • 一番にネックになったところは、日本語の響きが可愛いのでおっさんがことりんと呼ぶと(笑
  • Kotlinはそれほどとんがった言語ではない
  • 結論 - サーバサイドでも問題なくKotlinは使えます
    • lambdaでも使える
  • 利用箇所
    • Webアプリ
    • Lambdaの処理
  • なぜ、Kotlinにしたのか
    • Class定義いらない便利
    • 検査例外いらない便利
    • lombokよりスッキリで完結に書けるgetterとsetter
    • 不満はあってもJVM自体は悪くない
      • バイトコード互換性の安心感
    • Scalaは悪くない、でも、難しい...
      • 言語が複雑、学習が容易ではない、型合わせゲームが好きになれない → 言語をちゃんと理解した気分にならない
    • JavaとScalaの中間の存在として、使いやすいのではないか
  • サーバサイドでのミドルウェアとか
    • フレームワーク
      • Kotlin製
        • Ktor → チームでの開発は未知数
        • wasabi → Ktorに取り込まれた
        • Kara → JetBrainの人が開発
      • Java製
        • JavaEE
        • Spring Boot ○
    • OR Mapper
        • Exposed
          • kotlinっぽく書けるんだけどバグが多い。ドキュメントが不十分。割といばらの道なので、JavaのORMがいい
    • ビルド環境
      • gradle + Kotlin plugin + ALlOpen plugin
  • フレームワークやライブラリはサーバサイドで利用するには未成熟か開発体制が不十分
  • 無理をせずにJavaのエコシステムに乗ればいい
  • Streamの使い分けやannotationの違いなど

14:30 ~ 15:15 DockerではじめるJava EEアプリケーション開発 & Eclipse Collectionsの話

  • ビルド環境&デプロイ環境&データベースをDockerで使う
  • Eclipse CollectionsはStream APIより高機能・高パフォーマンスを維持している。
    • Eclipse Collections Kataをやれば、触ってみたい人はOK

15:45 ~ 16:30 「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~

www.slideshare.net

16:45 ~ 17:30 ついにきたリアルタイムSpark ビッグデータ処理の新定番「SnappyData」とは

www.slideshare.net

所感

Kotlinの事例はとても参考になりました

主にAndroid界隈で賑わっているKotlinですが、
サーバサイドの導入事例に触れたことは非常に有意義でした。
Microserviceアーキテクチャと併せる形で是非とも導入したいですね。

お昼から体力の限界でダウン気味でした

正直、午後のセッションはあまり頭に入りませんでした。
前日、深夜までコーディングしてたせいです。
セッションは勉強会とほぼ同義であるため、しっかり体調を整えて臨むべきでした。
次回に向けての反省点になります。

ランチセッションはとても面白かった!

残念ながらデューク弁当はゲットできなかったのですが(笑)。
JJUG会長の方のランチセッションは、Javaの過去のヒストリーも紹介していて、
知らなかったこともたくさんありました。このセッションを聞いて、
20代のエンジニアの方々がよりJavaに親近感を持ってくれたらと思います。

来年からはもう一度ボランティアから始めてみてもいいと思っています。

JJUG CCCは初回にボランティアとして参加しました。
2回目以降はセッションをもっと見てみたいと考え、一般参加として様々なセッションを見てきました。
元々コミュニティに貢献する取り組みをしたいと考えていますので、
2018年は特にコミュニティへの貢献のための取り組みを行ってもよいのではと思っています。

成子天神社


JJUG CCCに来るとついつい立ち寄ってしまう成子天神社。
仕事がうまくいくようにお願いしておきました。
「撫で牛」をヾ(・ω・*)なでなでしてご利益を頂きましたw

以上です!来年もJJUG CCC楽しみだなぁ!