システムリニューアルと現場からみたサーバサイドKotlin #m3kt

F6a3301219c28c9120f9c781406ba8a4?s=47 jomjomni
November 22, 2017

システムリニューアルと現場からみたサーバサイドKotlin #m3kt

F6a3301219c28c9120f9c781406ba8a4?s=128

jomjomni

November 22, 2017
Tweet

Transcript

  1. システムリニューアルと 現場からみたサーバーサイドKotlin エムスリーキャリア株式会社 加藤 2017/11/22 どこでもKotlin #4

  2. Agenda 1 • 自己紹介 • リニューアルについて • リニューアル前の現状 • リニューアル後の期待する効果

    • Kotlin導入後 • まとめ
  3. 自己紹介 加藤 亮 エムスリーキャリア株式会社 Webエンジニア 言語歴:Ruby3年、Java1年等 好きな言語:Kotlin (3ヶ月位触っています) 趣味:NFL観戦(アメフト) 2ヶ月前に日本人20人ほどで現地観戦しました。 その時幹事がTVのインタビューを受け、

    さらに地元紙の裏一面に載りました。 2
  4. 自己紹介 加藤 亮 エムスリーキャリア株式会社 Webエンジニア 言語歴:Ruby3年、Java1年等 好きな言語:Kotlin (3ヶ月位触っています) 趣味:NFL観戦(アメフト) 2ヶ月前に日本人20人ほどで現地観戦しました。 その時幹事がTVのインタビューを受け、

    さらに地元紙の裏一面に載りました。 3
  5. リニューアルについて サーバーサイドKotlin使ってリニューアル中! 詳細はこちら 4

  6. リニューアルについて リニューアル対象:医師のための転職サイト 5

  7. リニューアルについて • 10年近く運用している • 運用が辛くなってきている。 • 新規エンジニアの学習コストが高い • 影響範囲が把握しづらい •

    DBのデータの重複やソースコードの処理の重複が多数 ありリファクタリングもままならない。 • 手が空いたらやる。 • いつ手が空くの? 6
  8. リニューアルについて リニューアルだ! 7

  9. リニューアルについて 進捗:70-80% 第1弾リリース:12月予定 絶賛開発中! 8

  10. リニューアル前の現状 9

  11. リニューアル前の現状 10 メインサイト Rails サテライト サイト Java(独自FW) 管理者用サイト Java(独自FW) DBその1

    DBその2 ElasticSeach 1.5 Lucene Lucene 現在のシステム構成(簡略版)
  12. リニューアル前の現状 11 メインサイト Rails サテライト サイト Java(独自FW) 管理者用サイト Java(独自FW) DBその1

    DBその2 ElasticSeach 1.5 Lucene Lucene 現在のシステム構成(簡略版) Web-frontの構成が 統一されていない
  13. リニューアル前の現状 12 メインサイト Rails サテライトサイト Java(独自FW) 管理者用サイト Java(独自FW) DBその1 DBその2

    ElasticSeach 1.5 Lucene Lucene 現在のシステム構成(簡略版) 管理するDBが2つある。 重複しているテーブル、 データが多数ある。
  14. リニューアル前の現状 13 メインサイト Rails サテライト サイト Java(独自FW) 管理者用サイト Java(独自FW) DBその1

    DBその2 ElasticSeach 1.5 Lucene Lucene 現在のシステム構成(簡略版) 検索エンジンが複数ある。 ElasticSearchの Versionが1.5と古い・・・
  15. リニューアル前の現状 14 メインサイト Rails サテライト サイト Java(独自FW) 管理者用サイト Java(独自FW) DBその1

    DBその2 ElasticSeach 1.5 Lucene Lucene 現在のシステム構成(簡略版) 独自FW! |ω・ o)
  16. リニューアル前の現状 現状維持のまま開発を続けると いつまで経っても行われない作業が発生します。 それは何故か? 15

  17. リニューアル前の現状 16 作業選定の基準 効果 開発時間 高い 低い 少ない 作業A 作業C

    多い 作業B 作業D 作業の優先度  作業A > 作業B ≒ 作業C > 作業D
  18. リニューアル前の現状 17 作業の割合 効果 開発時間 高い 低い 少ない 多い Rails(Ruby)

    独自FW(Java) 優先順位 Rail(Ruby) > 独自FW(Java)
  19. リニューアル後の期待する効果 18

  20. リニューアル後の期待する効果 19 システムA Rails5.1 システムB Rails5.1 システムC Rails5.1 DB ElasticSeach

    5.6 リニューアルのシステム構成(簡略版) API Server Kotlin Vue.js Vue.js Vue.js
  21. リニューアル後の期待する効果 20 システムA Rails5.1 システムB Rails5.1 システムC Rails5.1 DB ElasticSeach

    5.6 リニューアルのシステム構成(簡略版) API Server Kotlin Vue.js Vue.js Vue.js Web-Frontの構成を 統一する!
  22. リニューアル後の期待する効果 21 システムA Rails5.1 システムB Rails5.1 システムC Rails5.1 DB ElasticSeach

    5.6 リニューアルのシステム構成(簡略版) API Server Kotlin Vue.js Vue.js Vue.js 各システム間の ロジック重複を削 減! 型付き言語で 堅牢にする。
  23. リニューアル後の期待する効果 22 システムA Rails5.1 システムB Rails5.1 システムC Rails5.1 DB ElasticSeach

    5.6 リニューアルのシステム構成(簡略版) API Server Kotlin Vue.js Vue.js Vue.js DBを1つにする! テーブルやデータの 重複をなくす!
  24. リニューアル後の期待する効果 23 システムA Rails5.1 システムB Rails5.1 システムC Rails5.1 DB ElasticSeach

    5.6 リニューアルのシステム構成(簡略版) API Server Kotlin Vue.js Vue.js Vue.js 検索エンジンを1つにする! ElastinSearchの Versionを5.6にする!
  25. リニューアル後の期待する効果 24 全部に共通すること 開発効率UP!

  26. リニューアル後の期待する効果 25 リニューアルでの目標: 独自FW(Java)で開発していた場合にかかる時間の 2〜3倍の速さで開発する。

  27. Kotlin導入後 26

  28. 3ヶ月触って Kotlinのここがいいなぁと感じた所 27 Kotlin導入後

  29. Kotlin導入後 28 Kotlinのいいところ1 • リストの操作が簡単です。

  30. Kotlin導入後 29 リストの操作が簡単です。 val numbers = arrayListOf<Int>(1, 2, 3, 4).map

    { it + 1 } print(numbers) -> [2, 3, 4, 5] val numOne = arrayListOf<Int>(1, 2) val numTwo = arrayListOf<Int>(3, 4) val numCombine = numOne.flatMap{ one -> numTwo.map{ two -> one + two }} print(numCombine) ->[4, 5, 5, 6]
  31. Kotlin導入後 30 リストの操作が簡単です。 val numbers = arrayListOf<Int>(1, 2, 3, 4).map

    { it + 1 } print(numbers) -> [2, 3, 4, 5] val numOne = arrayListOf<Int>(1, 2) val numTwo = arrayListOf<Int>(3, 4) val numCombine = numOne.flatMap{ one -> numTwo.map{ two -> one + two }} print(numCombine) ->[4, 5, 5, 6] 何も宣言しないと 要素名が it と自動的に命名さ れる。
  32. Kotlin導入後 31 リストの操作が簡単です。 val numbers = arrayListOf<Int>(1, 2, 3, 4).map

    { it + 1 } print(numbers) -> [2, 3, 4, 5] val numOne = arrayListOf<Int>(1, 2) val numTwo = arrayListOf<Int>(3, 4) val numCombine = numOne.flatMap{ one -> numTwo.map{ two -> one + two }} print(numCombine) ->[4, 5, 5, 6] 予め要素名を宣言することもできる。 ネスト処理の時にわかりやすくなる。
  33. Kotlin導入後 32 Kotlinのいいところ2 • Null-safety

  34. Kotlin導入後 33 Null-safety 効果的な場面 • DBのカラム属性と合わせる • APIのパラメータと合わせる • NullPointerExceptionの早期発見

    val nullableString: String? = null -> コンパイルOK val notNullString: String = null -> コンパイルエラー
  35. Kotlin導入後 34 NullPointerExceptionの早期発見 Null-safetyがない場合 Null-safetyがある場合 Web画面表示テスト サーバ起動 コンパイル 開発 NullPointerException!

    コンパイル 開発 コンパイルエラー!
  36. Kotlin導入後 35 Kotlinのいいところ3 • Javaの資産が利用できる。

  37. Kotlin導入後 36 Javaの資産が利用できる ◦ Doma2(DB接続) ◦ ElasticSeach Client(検索エンジン接続) ◦ handlebars(テンプレートエンジン)

    ◦ Swagger(APIドキュメント作成) 等など
  38. Kotlin導入後 37 Javaの資産が利用できる • 導入事例 ◦ 要望 「ボタンを押したらユーザにメールが飛ぶ機能が あるんだけどそのメールが定型文なんです。 個別にメッセージを挿入できませんか?」

    ◦ 実装内容 ▪ Web画面の入力フォームを追加 ▪ メールに入力フォームの内容を追加 ▪ etc...
  39. Kotlin導入後 38 Javaの資産が利用できる

  40. Kotlin導入後 39 Javaの資産が利用できる フォームやソースの解析 >1-2人日 開発 >2-3人日

  41. Kotlin導入後 40 Javaの資産が利用できる Vue.js部分: 0.1人日 API部分: 0.3人日 handlebars部分: 0.1人日 専門性、透明性による

    効率UP!
  42. まとめ 41

  43. まとめ 42 リニューアルを行うことで得られること • 開発スピードが上がる • データの重複がなくなる • Kotlinが採用実績に加えられる!

  44. まとめ 43 利用者 ディレクター 開発者 みんなHappyに!

  45. まとめ 44 作業選定の基準 効果 開発時間 高い 低い 少ない 作業A 作業C

    多い 作業B 作業D 作業の優先度  作業A > 作業B ≒ 作業C > 作業D
  46. まとめ 45 作業選定の基準 効果 開発時間 高い 低い 少ない 作業A 作業C

    多い 作業B 作業D
  47. まとめ 46 作業選定の基準 効果 開発時間 高い 低い 少ない 作業A 作業C

    作業B 作業D 多い 作業の優先度  作業A > 作業B ≒ 作業C > 作業D  変わらない・・・!
  48. まとめ 47 しかし短時間で多数の作業を こなすことができるので 多くの施策を回す事ができ 優先度が低い作業も 手を付けることができるはずです!

  49. ご清聴ありがとうございました。 エムスリーキャリアは 一緒に働くエンジニアを探しています。 興味がございましたらなんなりとご相談ください。 https://www.m3career.com/ 48

  50. 画像引用 49 •いらすとや ◦ http://www.irasutoya.com/