Upgrade to Pro — share decks privately, control downloads, hide ads and more …

2016-09-07 社内勉強会資料

Hirokazu Nishioka
September 07, 2016

2016-09-07 社内勉強会資料

Hirokazu Nishioka

September 07, 2016
Tweet

More Decks by Hirokazu Nishioka

Other Decks in Business

Transcript

  1. 医療事業開発チー

    2016-09-07
    エンジニア全体MTG

    View full-size slide

  2. の前に、
    先週みんなを置き去りに
    してしまった型クラスの話
    2

    View full-size slide

  3. まず、「
    型クラス」
    という名前が良くない
    英語で「type class」
    「class」
    は、
    オブジェクト指向における「
    クラス」
    とは
    まったく関係がない
    この発表では、
    混乱しないように、

    型クラス」
    のことを 「
    型ホゲ」
    と呼びます

    理解が進むとしっくりくるんだけどねw)
    3

    View full-size slide

  4. 型ホゲとは何か
    定義の話は今回は省略
    何のために使うものか
    4

    View full-size slide

  5. 型安全
    アドホックな「
    性質」
    の付与
    5

    View full-size slide

  6. Java(
    静的型付けオブジェクト指向)
    interface Walker {
    void walk();
    }
    class Cat implements Walker {
    private int x = 0;
    public void walk() {
    x++;
    }
    }
    6

    View full-size slide

  7. Ruby(
    ダックタイピング+
    オー
    プンクラス)
    class Cat; end
    class Cat
    def walk
    @x = (@x || 0) + 1
    end
    end
    7

    View full-size slide

  8. レガシー
    な言語は、
    この両立ができない
    型安全
    アドホックな「
    性質」
    の付与
    8

    View full-size slide

  9. Swift(
    型ホゲ)
    //
    性質
    protocol Walker {
    func walk()
    }
    //
    デー
    タ構造
    struct Cat {}
    //
    性質の実装
    extension Cat: Walker {
    func walk() {
    // ...
    }
    }
    9

    View full-size slide

  10. 型ホゲがあるとどんな設計になっていくか

    デー
    タ構造」
    の部分はあらゆるメソッドを持たず、
    本当にデー
    タだけを持つ
    デー
    タに紐づくあらゆる処理は、
    型ホゲとして切り出される
    設計の段階で、
    その「
    性質」
    の本質に迫っていく
    抽象化
    圧倒的な汎用性(
    例:
    モナド)
    10

    View full-size slide


  11. trait Semigroup[T] {
    def append(t1: T, t2: T): T
    }
    trait Monoid[T] extends Semigroup[T] {
    def zero: T
    }
    def double[T: Semigroup](t: T): T = append(t, t)
    def sum[T: Monoid](l: List[T]): T = l.foldLeft(zero)(append)

    ほぼScala
    だけど一部省略した記法になってます
    11

    View full-size slide

  12. 型ホゲおもしろい!
    12

    View full-size slide

  13. たぶん1
    割ぐらいしか伝えられてないと思うので、
    深く踏み込んでみたい方いたら教えてください
    13

    View full-size slide

  14. ここから本題の医療事業チー
    ムの話
    14

    View full-size slide

  15. 開発手法の話
    15

    View full-size slide

  16. 圧倒的ディレクション力を中心とした
    開発フロー
    16

    View full-size slide

  17. よくあるSpeee
    の開発チー

    17

    View full-size slide

  18. 医療事業開発チー

    18

    View full-size slide

  19. かわりに
    技術と向き合う時間が増えた
    19

    View full-size slide

  20. エンジニアが技術と向き合う
    圧倒的スピー


    新規機能追加」
    レベルの開発を半日~3
    日で回し続ける
    ディレに「
    思ったより早く開発進んでる」
    って言わせろ
    実現難度の高い要望も成し遂げる
    利用経験のない技術でも何でも使って実現する
    代替案なんか考えてる暇があったら実現方法を考えろ
    エンジニアは「
    魔法使い」
    20

    View full-size slide

  21. 技術的な話
    21

    View full-size slide

  22. Elasticsearch
    みんなどんどん使えばいいと思う
    Pros
    公式ドキュメント読めば十分な知識手に入る
    クラスタ増強である程度パフォー
    マンス維持できる安心感
    Cons
    デー
    タ設計やクエリ構築に慣れは要る
    Rails
    がサポー
    トしてくれるわけではないので頑張る必要はある
    22

    View full-size slide

  23. SPA (Single Page Application)
    操作感めちゃめちゃ気持ちいい
    日本はまだそんな雰囲気ないけど、SPA
    当たり前の時代来る
    いつやるの?
    今でしょ、

    意外とview
    がボトルネックになりやすいRails
    の強い味方

    ただしSprockets、
    お前はダメだ)
    Angular? React?
    ウチはReact Router
    でSPA
    23

    View full-size slide

  24. React!!!
    React Router
    Simple!!
    ソー
    スコー
    ド読めば分かる
    Redux
    Flux
    フレー
    ムワー

    公式ドキュメントにベストプラクティスまで用意されてる
    「Redux
    にきちんと乗ること」
    が、
    フロントをスパゲッティにしないコツ
    秩序と柔軟性の絶妙なバランス
    24

    View full-size slide