GDG DevFest Tokyo 2019に参加しました #DevFest19 #GDGTokyo

GDG DevFest Tokyo 2019の講演メモ
tokyo.gdgjapan.org

ML Kit の最新情報/あんざいゆき

「見る」に特化していたため、メモはしなかったのですが、
ML Kitがあれば、機械学習わからない人でもいろいろ作れそうで、すごかった。
動画もたくさんあり、見ていて楽しかった講演。

マイクロサービスの開発とテストファースト/テスト駆動開発/柴田 芳樹

www.slideshare.net

  • 会場にアンケート:テスト駆動開発テストファーストしてる人は少ない
  • 手でテストしていると、ソフトウェアがどんどん腐っていく
  • 開発費があがる
  • メルペイのマイクロサービス間通信はgRPC
  • 多くのマイクロサービスが同時開発
  • gRPCのAPI仕様をコメントで.protoファイルに書いた
  • API仕様をMarkdownに反映するCIの仕組み
  • 依存しているサービスの振る舞いをテストコードを書く
  • 最初はAPI仕様ばかり書いてた
  • 依存しているサービスのテストの振る舞いを定義できるテストフレームワークを作成した
  • 依存するマイクロサービスをFakeする
  • 外部サービスに依存する部分もFakeにした
    • PubSub
    • Slack
    • Googleドライブ保存
  • 外部サービス用APIのソースを追って、ハックして、Fakeにするのすごいw
  • 次は、ゲートウェイ経由でから外から叩くテスト
  • 同時実行など、簡単な負荷テストもする
  • API仕様をきちんと記述する
  • 自分が作ったマイクロサービスのテストをきちんと行う
  • gRPCはFake作るのやりやすかった
  • Q.Webと組み込み、どちらが楽しかったですか?
  • A.組み込み。理由は、技術的難易度の高さ。今は週4勤務や労働時間に上限ある中で、如何に自分の成果を出すかに注力している。

還暦過ぎて、現役の現場エンジニアでコード書いてる。めちゃめちゃすごい方でした。
柴田さん翻訳のfective Java 第3版

Effective Java 第3版

Effective Java 第3版

  • 作者:Joshua Bloch
  • 出版社/メーカー: 丸善出版
  • 発売日: 2018/10/30
  • メディア: 単行本(ソフトカバー)

CloudNative 時代における GKE/Kubernetes ではじめる開発 / 青山 真也

  • 「おうちに手のひらサイズのk8sクラスタある人」はいますか?
  • k8s入門とCloud Native
  • ちょっとGKE
  • (会場に)Docker使ったことある人は多い。k8sを開発環境以上で使ったことある人は少ない。
  • サーバ1000台にコンテナを1個1個デプロイは大変
  • それを解決してくれるのがKubernetes
  • k8sは、Google社内のクラスタ管理ツールのBorgが元になっている
  • 今はCNCFに寄贈して管理している
  • 目的:Cloud Nativeな組織や時代を構築したい
    • 疎結合
    • 回復性がある
    • 管理しやすい
    • 可観測である
    • 堅牢な自動化
    • オープンかつスケーラブル
  • Cloud NativeはKubernetesか?
    • それは「違います」
    • 便利なものだが使えばいいというものではない
  • 疎結合
    • 例:マイクロサービスアーキテクチャ。個人的にはミニサービスくらいでいいと思っている。
    • デプロイ容易
    • 特定のものだけをスケーリングできる
    • 障害波及を防ぐ。サーキットブレイク
    • マイクロサービスとk8sは相性がいい
  • 管理しやすい
    • Pod(コンテナ)の起動
    • 指定した数のコンテナを「維持」してくれる
    • LBとの連携。ラベルをメタデータとして付与できる
    • 自動的にL4LBを提供してくれる。GKEだと簡単にできる
    • L7LBもManifestで管理できる。証明書もSecretサービス管理してくれるので、書き換えて証明書は登録するだけいい。変更の生合成はk8sが管理
    • クラスタ内部通信は、IPアドレスを隠蔽して、管理してくれる。魔のエクセルからの解放。
    • 外部との通信もグローバルIPDNS、証明書を自動化する昨日もある
    • k8sは、ネットワークやストレージなどを抽象化して、YAML管理できる
      • 逆にYAMLたくさん書かないといけないデメリットもある
  • 回復性
    • k8sのコアコンセプト
    • 自動回復・セルフヒーリング
    • 「あるべき状態」を維持する機能。リコンサイルループ
    • 状態を監視する機能がある
    • 3ステップのループ
      • Observe
      • Diff
      • Act
    • 例えば、理想がコンテナ3つだけど、コンテナ2つだけを発見する。1つ足りない。1つ追加する。をやってくれる。
    • これは、コントローラと呼ばれるもの。k8sの中に100個くらいある。
    • 今まで、人手でやっていた作業を自動でやってくれる
    • X as a Service基盤の側面もある
      • Platform for Platform
      • k8s上でデータベースやK8Sを動かしたり
      • 小さなクラウドに近いとも言える
      • ただし、使えるなら、クラウドのマネージドサービスのストレージを使ったほうがいい
    • 分散フレームワークとしての一面
    • 特定の事業ドメインに特化した、アプリケーションを作って任せることもできる
    • フレームワークなのでコントローラは簡単に書けることになっている
  • 可観測性
    • メトリクス
    • トレーシング
    • サービスメッシュ
    • ロギング
    • 周辺技術と連携して、可観測性を維持して下さい。あとから考えるので、システム設計
    • 可観測性だけで2時間くらい話できる
  • ローリングアップデート
    • マニュフェストを書き換えて再適用だけで、理想の状態に自動的に持って行ってくれる
    • VMが頻繁に落ちる。そのため、アプリケーション側で、シグタームのシグナルを処理できるように開発することが重要
    • 闇のスクリプトw
  • インフラストラクチャー
    • ビジネスバリューはここで作られるわけではない。オープンなもので作って行くのでいいんじゃないか?
  • k8sリポジトリ
    • どのバージョンを使うのかを管理しておくのが主流
    • GitOps(とも呼ばれる)。例えば、PRによる差分チェックができる
    • ブランチ戦略を入れると、環境ごとに作ることもできる
    • ブランチの状態=デプロイされているアプリケーション
    • リポジトリの状態=k8sクラスタの状態
    • k8sはマニュフェストをベースに管理することができる。
  • スケーラビリティ
    • 水平スケーリングと垂直スケーリング
    • クラスタ自体のスケールはオートスケールの対象外(サーバ台数が自動手的に増えるわけではない)
    • ここでGKE
  • GKE
    • K8sクラスタの安定化
    • ノードオートヒーリング
    • クラスタ自体のバージョンアップ
    • クラスタのオートスケール
    • オンプレの人からすると一番つらいところだった。GKEを使うと任せることができる。
    • K8sの管理をCloudNativeでできる
    • クラスタの安定化
    • ノードオートヒーリング
      • 問題があった場合にまっさらな状態で作ってくれる
    • クラスタのオートスケール
      • GCPが自動的にクラスタを増やしてくれる。特定のアルゴリズムによる計算。何コアのCPU使うなどの事前の設定は必要。
      • ただし、GKEの場合は、自動ノードプロビジョニング機能がある
      • 「ノードの管理を一切しなくていい」
      • メリット:ノードの管理を一切しなくていい
    • GKEは他社のクラウドと比べて3年早くリリースされているため、機能が多い
    • K8sLinuxのように当たり前に普及していく技術になっていく」と言及する方もいる

Perspective of Angular in 2020 / 稲富 駿

docs.google.com

  • 2020年のAngularの話
  • 2019年のAngular
    • 2.0.0リリースから3年経ってどうなったか?
      • あんまり変わってない
      • なぜなら、彼らは3のValueを決めている
      • 常に3つのどれかにフォーカスしているため、変わっていない


  • Googleにとっても簡単には捨てられない、重要なプロダクトになっている
  • 7.x
    • 「Size Budgets by Default」
      • バンドルサイズが一定量を超えた場合、警告やエラーにできる
      • 大きいバンドルにならないように、うまく使ってね
    • Budgets Types
      • Initial:最初に読み込まれるサイズを小さくする。遅延ローディングで解決できる
      • ビルド後のCSSのサイズがコンポーネント単位で大きくないことをチェックする機能もある
    • CDK Drag & Drop
      • 簡単にドラック中のCSSや話した時のCSSを簡単に表示できる
    • VirtualScroll
      • 実際に表示されるものだけを表示する。ブラウザのランタイムを抑えるためだけの提供される
      • CDKを使って簡単に書けるように
    • Bazel Support
      • Bazel:ビルドタスクランナー。スケーラブルのためのビルド技術
      • Googleと同じ環境を提供したいという意志。
      • 今は、既存のAngular CLIと相性がよくない。
      • オプトインでエクスペリメンタルで進行中
      • GoogleはBazelが好き
      • GCP Nextの話での一例。GCPのビルドコンテナ上でAnuglarビルドしてる話があった。キャッシュ使えるため早い。
  • 8.x
    • Differential Loading by Default
      • Traditional Loadingからの変化。
      • 新しいブラウザには、バンドルサイズを削減したものを送る。古いブラウザには今までと同じもの。20〜30%削減
      • 自動的にPolyfillingの追加をやってくれる
      • 型安全にDynamic importが書けるようになった
      • Webpackの人たちが頑張った。
    • Web Worker : Module Worker Support
      • ちゃんと型安全に書けます
    • ng deploy
    • ライブラリの場合はnpmにデプロイすることができる
      • production build問題が少なくない割合がある。本来望ましくない。
      • ng deoloyすると、必ず「ng build -prod」する。これが狙い
      • わざわざ使う必要はないが、新規に採用する場合は使うと良い
    • 2019年はパフォーマンス改善目的が中心
  • 2020年〜
    • 9.x
    • 10.x
    • 11.x
    • Ivy by Default
      • Iny(アイビィー)がデフォルトで入る
      • ng update で自動的に変わる
      • これまでも、機能はできていたが、後方互換性のために開発が遅れた
        • わかってない人向けの説明:中のリファクタリングなので知らなくて大丈夫。
        • わかってる人向けの説明:Angularの動画をみろ。文字媒体は古いことも。動画を見た方が理解できる。
      • ライブラリ作者に対してはIvyは我慢して、10.xからスタートしてくれ
      • 2020年は一年かけてIvyに移行する年
      • 11.xにはIvyしか残ってない
    • CDK Clipboard API
    • CDK TestHarness
      • コンポーネントをテストするための枠組み
      • テストの書き方を大きく変えようとしている。
      • まず、テスト用のハーネスを作る。
      • ページオブジェクトの概念に似てる。
      • 実際書いてみると「あーテスト書きやすいってなる」---コンポーネントのテスト書ける気がしてくる
      • 宣言的にテストをかける
    • Angular official components
      • Package:9.0と一緒にでる
    • Strict Template Type-Checking
      • IvyによってAOTコンパイルが劇的に変わる
      • 型を厳しく検査できる
      • いきなり変わると今までのものがコンパイルできなくなるため、オプトイン
    • 名前が変わったり、書かなくてよくなったりのAPI(?)もある
    • Breaking Changes
      • Ivy がデフォルト
      • AoT がデフォルト(JITに戻したい場合は指定)
      • Type Script 3.6以上
    • 今まではEnterprise利用が多かった
      • 2019年かけて、簡単に軽量に作れるようにした
      • よく使われるアプリをAngularでサクッと作れる世界を目指した
    • これからのAngular
      • よくあるユースケースではない、独自の個々のユースケースに寄り添う
      • For Customer
        • 例えば、Ionic対応を頑張っている
      • 国際化
        • あんまり使いやすくなかった
        • Ivyが入った後、完全に置き換える
        • ランタイムでの翻訳をサポートする
        • タグのテンプレートを使う
      • コンポート単位での遅延ローディング
        • もっとバンドルサイズ減らせる
      • Static Site Generator も動いている
        • 来週α版リリース
    • Project Photon
      • プログレッシブハイグソレーション
        • サーバーサイドレンダリングを究極に推し進めて、必要になるまで、JS実行しない
        • Reactは先に進めている
        • R&D中
  • Growing Angular Values