「QCon Tokyo 2016」へ行った その2

  • タイトル: QCon Tokyo 2016
  • 日時: 2016年10月24日(月)9:45~19:00
  • 会場: ベルサール新宿グランド コンファレンスセンター
  • URL: http://www.qcontokyo.com/index.html

先日参加したのでまとめを書きます。個人的に注目だったorまとめられるものだけ書いています。そして、登壇者の皆様に感謝。

その1はこちら

ttomioka.hatenablog.com

B-2 DDDとマイクロサービスの現実と可能性

現場からの実践報告 上坂 貴志

資料: TBD

  • オブジェクト指向をエンタープライズに展開がDDD
  • ユーザーとシステム開発側の双方が持つ暗黙知が悪さする
    • ユーザーの言葉を一緒に定義しなくてはいけない
    • 言葉は境界が違えば定義が変わる
  • モデル駆動が重要
    • モデリング→実装イメージができてなかった
    • 貧血ドメインになった
    • ER図がダメ
  • 最大のうまくいかない理由は恐らく不安
    • 「オブジェクト指向を勉強したけど役に立たない」という感覚
    • オブジェクト指向ができる = モデリングができるではない
    • モデリング = ER図 ではない
    • サンプルを用意。過去とのマッピングが重要。
  • モデルと実装が連動すればとりあえずはOK

DDD&モデリング導入のコツ 増田 亨

資料: http://www.slideshare.net/masuda220/ss-67660572

  • 利用者の満足するものではなく、技術者が満足していた
  • 習得したときはスピードが上がる
  • 会話が重要
  • 2つのブレークポイント
    • オブジェクト指向
      • データクラス+機能クラスの世界から脱却
        • クラスを作ったからってオブジェクト指向ではない
    • インクリメンタルな設計
      • 最初に綺麗に設計したがる
      • オブジェクト指向→インクリメンタルな設計の順番
      • オブジェクト指向に自信が無いとできない
  • 体で覚えるオブジェクト指向設計
    • 名前=何のためのコード化がわかるので重要
    • Getしているということはどっかにロジックを書いているはず
    • プログラムのしたいことをメソッド名を通して表現する
    • クラスとテーブルをぶった切りに行かないとダメ
    • リファクタリングを多用するので静的型付けが必要
  • インクリメンタルな設計
    • もっと速くコードを書こう
    • 最初からいい設計が見つからない
    • 設計書だって下書きしてからアウトラインができていく。コード一緒
  • できない理由はいくらでも考えられる。

DDD実践ベストプラクティス 加藤 潤一

資料: https://t.co/oNSqA6kLPX

  • CQRSとは
    • 質問をすることで回答を変化させてはいけない
    • DBを分けなくても、CQRSはありえる
    • 形式変換を行う。ドメインはライトだけにする
    • ライドでも状態を問い合わせることはありえる
  • イベントソーシング
    • 発生したイベントを全て永続化する
    • Updateはスケールしない
    • イベントが10万件あったら、Journalとsnapshotで解決
    • 今はAkkaだけ、Springもこの方向
  • マイクロサービスとコンウェイの法則
    • 複数サービスにまたがる変更がデリバリーコストを上げてしまう
  • コンウェイの法則とDDDの関係性
    • 言葉の持つ意味は使われ方によって変わる
    • 主語が一番見捨てられる可能性が高い

A-4 サーバーレスアーキテクチャ 伊藤 直也

資料: https://speakerdeck.com/naoya/serverless-architecture

  • サーバーレスアーキテクチャとは
    • 単純にはFaaSを使ったシステム
      • 必要になったときだけ計算する
    • ハード的な意味でサーバーがない
    • 常駐プロセス的な意味でサーバーがない
  • AWS Lambda
    • イベントごとにその関数を実行できる
    • コンテナで実行、終了時に破棄される
    • CGIに近いモデル
    • 基本的にステートレス(Shared Nothing)
    • AWSLambdaはスケールするし早い
    • EC2でたちあげっぱなしをAWSLambdaでやると安くなるのでは
  • 事例から
    • イベント駆動が結合
    • Bot常駐などで使える
    • 複数のイベントを連携させる
  • アーキテクチャの性質を解剖
    • CGIはShared Nothing で安全、簡単だった。
    • ただCGIはアプリケーション全体を毎回forkがとても非効率で
      遅くなった原因を調べると、アクセスカウンタなんてことも
    • Node.jsでは並行性のが高いが可用性に難。
    • よく考えると、起動に伴うオーバーヘッドが少なければ毎回実行で構わないのでは
    • AWSLambdaは毎回実行だが、コンテナで起動にともなうオーバーヘッドが小さいのが特徴。
  • LambdaからMicroserviceが見えてくる
    • Lambda 関数はイベントへの反応として記述する
    • 完全な疎結合になる
    • リアクティブである
    • FaaSは自然とMicroserviceになる
  • オーケストレーション(リクエスト、リプライ)
    • コレオグラフィ(イベント駆動)
      • パブとサブの間に関係はない
    • スターバックスは2フェーズコミットを使わない
      • トランザクションが失敗したらどうするのか?
      • スループットが最大化できる
  • Fassは自然とコレオグラフィを指向する
    • デバッグが大変
    • オーバーヘッドは少しかかる
  • サーバーレスアーキテクチャとはイベント駆動で系を設計した、 リアクティブでコレオグラフィなマイクロサービスのこと
  • ぶっちゃっけどうなの
    • はまれば強い
      • EC2より超安い
      • 自然と良いアーキテクチャに向かう
    • 開発工数はそこまで削減できないかも
      • FaaS特有の(バッドを含む)ノウハウが必要
      • ピタゴラスイッチになるのでデバッグが大変
      • 結合テストが難しい

A-5 HTML5/フロントエンド開発 白石俊平

  • Webはいまだに重要なのか
    • Web is Dead
    • ザッカーバーグ「HTML5を過大評価したのはわれわれ最大の失敗」
    • スマフォの利用時間の8割がアプリ
    • 昔はWeb100%だったのと比べると落ちた
    • Chromeアプリは2018年終了
    • 技術トレンドとしても減少傾向
      • HTML↓
      • W3C↓
    • HTML5は問題だらけ(特にAPI)
      • 2009-11年にAPIが増えた
      • ユースケース始動だった
      • ユースケースにはまらないと使いにくい
      • HTML5のAPIが使われない
        • APIの抽象度が高い
        • 低レベルのAPIをそろえよう→Extensible Web→盛り上がらない
    • Webの利用時間は減ってきている
      • Webの重要度は、以前に比べて下がっている。「モバイル・オンリー」という選択も珍しくない。
      • モバイル中心で考えると、Webはオプショナルな存在になった。
  • WebとWeb技術の利点を再評価
    • Webの利点を再評価
      • SLICE
      • Webブラウザ上のURLを踏んだらアプリを起動できる
      • Webとアプリをシームレスにつなぐ
    • Web技術の利点を再評価
      • クロスプラットフォーム
      • JavaScriptは世界で最も人気のある言語
      • まだまだ進化がやまない
        • AMP
          • 制約を守ると早く表示
          • グーグルがキャッシュしている
        • HTTP/2
          • 1つのサイトにつき1つのTCP接続で高速化
          • クライアントの差し替えなく導入可能
        • ES.next
          • トランスペアレント
          • クラスとモジュール
            • 今までは人によっていた
          • モジュールハンドラー
          • JavascriptはWebの性質上非同期
            • promise
            • async/await
            • let/const
          • オブジェクトリテラル
          • TypeScript
        • コンポーネント指向開発の本格化
          • これまでは基盤技術が足りなかった
          • Web Components
          • template要素
          • shadow DOM
          • HTML template
        • プログレッシブウェブアプリ