覚えたら書く

IT関係のデベロッパとして日々覚えたことを書き残したいです。twitter: @yyoshikaw

Spring Day 2016 に行ってきた

Spring Day 2016に参加してきました。

以下自分用のメモ


概要

  • 日程: 2016年11月18日
  • 場所: グラントウキョウサウスタワー41F


Spring Framework 5.0 Themes & Trends

Stephane Nicoll 氏 (Pivotal)

  • Last 4.x feature release 4.3
    • 2016 June Release
    • JDK6, 7, 8
    • Tomcat 6, 7, 8.0, 8.5
    • Programming model refinements brofht forward to JDK 6+
      • DI & MVC refiniments
  • Spring 5.0
    • Majaor baselien upgrade
      • JDK 8+, Servlet 3.1+, JPA 2.1+, JUnit5
    • パフォーマンス改善
      • Alternative to component scanning
        • Pre-computed index at compilation time
        • Extensible using @Indexed
        • ASM meta-data cache
        • AntPathMatcherはRewriteする
        • Zero-copy transfer of org.springframework.core.io.Resource
          • CPUを利用せずにデータ転送を行う?
    • JDK9
      • JDK9もサポートする
      • Using Jigsaw with Spring
    • HTTP/2
      • Spring Framework 5.1 will ship dedicated Servlet 4.0 support
    • Reactive Programming
      • もっとも重要なTopic
      • Why going rective? -> More for scalability and stability than for speed
      • Reactive = non-blocking(可能な限りCPUを使用する)
      • Event Pipeline
      • Reactive Stream
        • Publisher, Subscriber, Subscription, Processor
        • 一つの仕事を複数のスレッドで処理させる
        • Backpressure
      • Subscribeはchainを始めるということ
        • Collectionを取得するのではなくPublisherを取得する(Flux, Mono)
    • Spring 5.0 new feature
      • Spring Web Reactive
      • Reactive HTTP
      • Router Functions
        • Functional-style web routing


これからはじめるSpring MVC ~Spring MVC「基本のき」~

大野 渉 氏 (Starlight&Storm)

  • Spring MVCとは
    • Spring Frameworkに含まれるMVCフレームワーク
      • StrutsやJSFと競合
    • 特徴
      • DIコンテナとの親和性
      • きれいな設計
  • Spring MVCの歴史
    • Spring 2.5.x以降
      • アノテーションにより設定がシンプルになり分かりやすくなった
      • component-scanにより設定ファイルが最低限で済むようになった
      • 積極的なREST対応
  • 主な登場人物(アプリケーション)
    • Controller
      • HTTPリクエストを処理する
      • ServletやStrutsのActionに該当
    • ビュー
      • 画面の表示を担当する
      • JSPやThymeleafなどのViewテクノロジー
  • Spring MVCの動作概要
    • DispatchServletが唯一のServletとしてリクエストをハンドリングしている
    • ViewResolver
  • Controllerクラスの作成
    1. @Controllerアノテーションの設定
    2. そのクラスがControllerクラスであることを指定する
    3. component-scanで自動的に読み込まれる
    4. @RequestMappingアノテーションの設定
    5. Controllerの各メソッドとURLをひもづける
    6. 一つのControllerクラスにどれだけのメソッドを定義するかの方針を決めておかないと、クラスが崩壊していく
    7. ビュー名をreturn
  • @RequestMappingアノテーション
    • Spring4.3で、HTTPメソッドごとのアノテーション(@GetMapping, @PostMapping等)が追加された
  • URIテンプレート
    • URLの指定をテンプレート化する方法
      • 一部が動的に変わるURLを指定する
    • URIテンプレートと値の取得
      • @PathVariablesアノテーションを指定。URL内の{名前}の部分と引数の名前を一致させる
  • Controllerのメソッドの引数
    • URLの一部の値(URIテンプレート)
    • Modelオブジェクト
      • Controllerからビューに渡すオブジェクト
      • デフォルトではRequestスコープの中に入る。
      • @SessionAttributesアノテーションを設定することでModelオブジェクトに格納した値がsessionスコープに格納される
        • キーを@SessionAttributesのvalue属性に設定する
        • sessionスコープのクリア
          • SessionStatusオブジェクトを使ってsessionスコープのオブジェクトを削除する
    • リクエストパラメータの値
      • リクエストパラメータの取得
        • @RequestParamアノテーションで指定する(リクエストパラメータ名と引数の名前を合わせる)
        • ModelAttribute(StrutsでいうところのAcitonForm)を引数に指定する
          • POJOで実装可能(リクエストパラメータ名とメンバ名を一致させる)
          • ModelAttributeオブジェクトは自動的にModelオブジェクトに格納される
    • etc...(Serveltのクラスとかも受け取ることができる)
  • Spring MVCとBean Validationの連携
    • Spring MVCはBean Validationに対応する
    • Validation対象の引数に、@Validアノテーションを設定する
    • Errorsは検証対象のパラメータのすぐ後にパラメータとして指定する必要あり
  • REST対応
    • HttpMessageConverter
    • 引数に@RequestBodyアノテーションを指定する


Spring Bootで学ぶ初めてのWEBアプリ開発

てらひで

  • SpringBootはチュートリアルが充実
  • Webの歴史
    • 黎明期のWeb
      • みたいものをrequestを送るとresponseが返ってくる
  • 現在~ちょっとだけ未来
    • 通信の回数が過去に比べて圧倒的に増えている
    • Reactive
      • 即応性
      • 耐障害性
      • 弾力性
      • メッセージ駆動
        • Webの世界ではnon blocking


LINEにおけるSPring Frameworkの活用

松野 徳大 氏 (LINE株式会社)

  • Why Spring?
    • 開発のサイクルが(Java EEに比べると)速い
    • Java EEはB2Cのスケールが必要なWebサービスでの事例をあまり聞かない
    • 社内にJava EEの経験者が少ない
  • Microservices
    • 小さなapplication serverの組み合わせで大きな実現
  • 言語/フレームワークを締め付けすぎない
    • 一つの技術にのみコミットしすぎると変化に弱くなる
    • Spring, Guice, Dagger2, Vert.x, avans, etc...
    • Groovy, Scala, Kotolin, Closure..
    • There's more than one way to do it.
  • なぜSpring Boot
    • uber jar(fat jar) でお手軽にdeploy
    • アプリケーションの開発が簡単にできる
    • XML書かなくていい
    • 起動が速い
  • 開発事例: LINE Notify
    • Spring Bootでできている(1, 2カ月で開発)
    • MySQL
      • MySQL5.6, InnoDB, MMMM
    • Redis
      • KVSは基本的にRedisが人気
      • 柔軟性、パフォーマンス、安定性
    • nginx
      • アプリケーションサーバをユーザに直接さらすのは怖いので、nginxをいったんかましてJetty
    • Jetty
      • spring-boot-starter-jetty
        • コードが読みやすい
        • 起動が速い
    • Fluentd
      • アクセスログの集計
      • Fluencyが最近は優勢
    • クラウドサービスは使っておらず、すべて自社のデータセンターで管理している
    • soring-boot 1.4.0.RELEASE
      • spring-boot-starter-web
        • 安定している
        • @GetMapping, @PostMapping とか最近は便利
      • spring-boo-starter-freemarker
        • 社内では、thymeleafと人気を二分している
      • spring-boot-starter-redis
        • 入れたら普通に使える
      • spring-boot-starter-mobile
        • スマホかどうかをUser-Agentで判定するのに便利
      • mybatis-spring-boot-starter
        • 社内のO/R MapperはMyBatis優勢
          • 直接SQLが書けるというのが手放せない
        • JPAは少ない
          • B2Cでトラフィック予測が難しい
          • パフォーマンス問題起きた時のMyBatisの安心感
        • MyBatis + Kotlin
          • Kotlinは学習コストが低い
          • 時代の趨勢的にGrooyではなくKotlinにした
    • モジュール構成
      • マルチモジュール構成にしている
        • line-motify-model
        • line-motify-common
        • line-notify-api
        • line-notify-admin
        • line-notify-web
    • Deploy
      • github -> jenkins -> nexus -> PMC -> AppServer
    • 実行環境
      • supervisord ・・・ Java等のプロセスが落ちたら再起動してくれる
        • java
        • nginx
    • ブランチ構成はgit flow
    • モニタリング
      • Prometheus
        • クエリが使えるTSDB
      • Dropwizard metrics
  • LINE Bot + Spring Boot
    • LINE Messaging api
      • LINEのボットを簡単に作れる
      • Java + Spring Boot なら簡単に作れる  * LINE Messaing SDL for Java
      • Spring Boot をサポートしている
        • 設定が簡単
        • すぐ起動ができる
        • 使っている人が多い


Springからブロックチェーン触ってみた

漆原 茂 氏 (ウルシステムズ株式会社)

  • ブロックチェーン話題になってます
    • メディアと金融業界(ユーザ)が先に加熱
    • ブロックチェーンの市場規模は67兆円
    • 応用範囲が広い可能性が高い
      • 電子カルテなども含む
    • 技術スタートアップが続々誕生している(カンブリア紀)
    • 普及熱は着磁に高まっている
    • ブロックチェーン肯定派
      • 革命だ!! 権力, 反対!
      • 巨大な中央管理機関不要
      • 仲介手数料モデルの破壊
    • ブロックチェーン不信派
      • Bitcoinスキャンダル
      • 一攫千金狙いなんじゃないのか?
      • 技術不在の妄想
  • ブロックチェーン超概要
    • Bitcoinに驚いた
      • 不特定多数のP2Pネットワーク
      • 認証は演算競争で実現
      • 決済コストが安い
      • 特定の発行者、権威差が不在
      • 国境不在、世界単一市場
    • 分散型の台帳を実現するプラットフォーム
      • P2Pノードに同一の記録を同期
      • 一定のルールで正当性を決定、整合性を担保
    • P2Pネットワークをフル活用
      • 個々のノードがP2Pで接続、全ノードで同一のデータを保持
      • ネットワーク接続時にデータを自動で同期。ゼロダウンタイム
      • パブリックのものと、プライベートなものがある
    • ハッシュと電子署名で改ざん防止
      • マイナーがある期間の取引をまとめ、ブロックを作成する
      • 直前ブロックのハッシュを持つことで、ブロックの改ざんを防止
    • 中央管理不在で整合性担保
      • 複数ノードで並行に処理した結果を多ノードが検証。不正な結果は排除する。マイナーはこれで報酬を得る
      • 複数の正しい結果からただ一つの結果を採用するルール(コンセンサスアルゴリズム)を決めておく
    • Bitcoinの凄さは応用可能?
      • 権威者がいなうてもグローバルに一意に取引できる 凄さ
  • スマートコントラクト
    • 自力で執行される契約処理のこと(資産や権利の委譲) - 例えば自動販売機
    • スマートコントラクトへの期待
    • ethereum
      • スマートコントラクト用のプラットフォーム
      • 独自のオープンなP2Pネットワーク
      • 取引の状態遷移全体の記録台帳としてブロックチェーンを利用
      • 自由にコントラクトを作り独自データを扱える
      • 取引処理を実装
        • コントラクトはSolidityで開発・・・コントラクト記述の実装は死ぬほど難しい
        • 呼び出す側(業務AP)・・・すべてJSON-RPCでアクセス
  • ethereumをSpring Dataに統合
    • Spring⇒ethereumアクセスの工夫
      • ULFIRE ethereum for Spring
        • @Ethereum
        • EthereumConfiguration
        • @TransactionListener ・・・ データ保存確認
  • 何に活用できるのか?
    • bitcoin以上のものが現在は無い
    • まだ誰も分からない


40 Tips & Tricks for Spring in IntelliJ IDEA

Yann Cerbron 氏 (JetBrains), Stephane Nicoll 氏 (Pivotal)

基本的にライブコーディングでした。

私が、SpringもIntelliJ IDEAも詳しくないので細かいこと書けないですが、
このセッションだけ見てるとSTSやEclipse使うよりIntelliJ IDEAで開発したほうが圧倒的な生産性になるなという印象でした。


その他セッションの資料