「Meguro.css #6 @ oRo」に参加してきました

  • Meguro.css #6 @ oRoに参加してきました。

megurocss.connpass.com

タイトル 発表者
レガシーフロントエンドで頑張ってCSS設計した話 etawin
CSSイラストレーション deren @study_dedede
段組と印刷の地雷 吉川雅彦@行程さん社長 @masahiko888
すたいるQ Ko.Yelie (エリー) @ko_yelie
Scoped CSS + RSCSS のすすめ すわくん @ztrehagem

レガシーフロントエンドで頑張ってCSS設計した話

  • etawinさん

従来の環境

  • CSSトランスパイラなし
  • JavaScriptUIライブラリなし

改修後

  • stylus
    • なぜSassじゃないか
    • JSっぽく変数書ける
    • CSSプロパティライクにmixinを表現できる
  • BEM

工夫

実装序盤

  • 無理して共通化するよりも愚直に書いた方がいいケースも多い
  • 雛形になるクラス作ってそれプラスαって感じで使うと良かった

実装中盤

  • 意味のある単位であとからまとめていった
    • stylusのmixinが便利

実装終盤

  • 抽象のしかた細かく考えだすと不毛な時間に
  • 何者かでなく何を指し示すかで分類

最終的な構造

  • デザイン規約
  • 雛形クラス
  • CSSクラス

CSSイラストレーション

  • derenさん

CSS/JS学びたい

  • CodePenのぞくと面白いと教えてもらった
  • CSSだけで作品を作れる

私流イラストレーション

  • 1.下絵を書く
  • 2.パーツごとにdiv化
    • BEMでつけるといい
    • クラス名詳細に書いてるのでぱっと見でわかりやすい
    • デメリットはクラス名が長いことくらい
  • 3.パーツの形をひたすら制作
    • before/after使うとタグが無駄に増えないからいい

よく使うプロパティ

overflow

  • はみ出た要素の表示方法を指定
  • overflow: hidden; -はみ出た要素非表示

transform

  • 要素の表示位置の変更
  • transform: translate(10px, 10px); top: 10px;left: 10px;と同じ

transform-origin

  • 中心点の変更

CSSで何か作りたい人

https://codepen.io/challenges/codepen.io

段組と印刷の地雷

  • 吉川雅彦さん

段組みを印刷

  • 段組みをプレビューして印刷するというものを作った
  • すべてのブラウザに対応できない
    • IE,FFは印刷プレビューを出しにくい
    • Chromeだけ対応
  • PuppeteerとヘッドレスChromeでやるとよさそう

難しかったところ

  • 紙の余白を指定したい
    • @pageで指定
  • 文字が途中で切れてしまう
    • display: blockとかdisplay: tableで対応
  • h2/h3のサブタイトルのあとで改行したくない
    • break-inside: avoid使った
  • PDF印刷したら文字が欠ける
    • ウェブフォント適用で解決
  • Androidで絵文字を入れると1MBくらいファイルサイズが増える
    • わからない・・・

まとめ

  • 段組み+印刷大変
  • CSS/JS/デザインなどなどで解決していく
  • 割り切りも大事

すたいるQ

  • Ko.Yelie (エリー)さん

Q1

  • Q
    • margin/paddingを全て%で指定した場合基準になるのはそれぞれ親要素?自身の要素
  • A
    • どの方向で指定しても全て親要素の幅が基準になる

Q2

  • Q
    • flexで横に並べた要素の最後だけ右寄せにしたい
  • A
    • margin-left: autoをつけると右寄せになる

Q3

  • Q
    • transformにいろいろ指定した場合にどうなるか
  • A
    • transformのプロパティは左から順に適用されていく

Scoped CSS + RSCSS のすすめ

  • すわくんさん

ScopedCSS

RSCSS

  • BEMの簡単版みたいなやつ
  • シンプルな規則
    • Components
    • Elements
    • Variants
  • 書きやすい読みやすい捨てやすい

ScopedCSS + RSCSS

  • より安全なScopedCSS
  • より単純なRSCSS

「React.js meetup #8 初心者歓迎 LT会」に参加してきました

  • React.js meetup #8 初心者歓迎 LT会に参加してきました。

reactjs-meetup.connpass.com

タイトル 発表者
Gatsby紹介&Gatsbyのビルドをザックリ理解 kon_shouさん
Storeで扱う状態のライフサイクル @as_masaさん
React Hooks - カスタムフックとカプセル化 @sonatardさん
Reactから始めるリプレイス生活 fff_komatsuさん
connectの要らないreact-redux @natural_clarさん

Gatsby紹介&Gatsbyのビルドをザックリ理解

  • kon_shouさん

Gatsbyとは

  • Reactで書ける静的サイトジェネレーターe
  • viewはReact
  • データやりとりはGraphQL
  • Reactの公式サイトもGatsbyでできてる
  • starterkitが豊富

www.gatsbyjs.org

Storeで扱う状態のライフサイクル

Storeの設計

  • 1Store=1model?1Store=複数model?
  • ローカルステート使う?

アプリ特性によって考える

  • 全部載せ系
    • ページ遷移しない
    • タイムライン系
  • ページ遷移系

全部載せ系

  • アプリ起動から終了までのライフサイクルしかない

ページ遷移系

  • アプリ起動から終了までのライフサイクル
  • ページを表示してから別ページに遷移するまでのライフサイクル
  • ページごとの型を定義できる
    • Topページ型とかUserページ型とか

ローカルステート使うか

  • 同じライフサイクルで管理したいのでStoreで管理したい

React Hooks - カスタムフックとカプセル化

  • @sonatardさん

ReactHooks

  • React16.8で追加された
  • statteなどの機能をclassを使わずに書ける
  • useXxxというものが公式で10個公開されている
  • custom hookとして独自のものも作れる

カスタムフックの例

  • ロジックをカスタムフックに隠蔽することでViewをすっきりさせることができる
  • 可読性向上
  • 再利用性向上

カスタムフック

  • いろいろ公開されているから作る前に検索すると見つかるかも

github.com

github.com

nikgraf.github.io

Reactから始めるリプレイス生活

意図せぬコンポーネントの破壊

  • コンポーネントAを変更したらコンポーネントAに依存するコンポーネントBが知らないうちに壊れてた
    • Storybookを使ってればStoryShotsがお手軽で便利
  • styled-componentsのcreateGlobalStyleで意図せず壊れた
    • divタグにstyle定義してそれで囲うことでスコープを狭めた
    • 既存コードに影響ないようにできた

connectの要らないreact-redux

  • @natural_clarさん

react-redux

  • reactでreduxを使うためのラッパー

従来の使い方

  • mapStateToPropsとかmapDispatchToProps使ってconnectする

react-redux v7.1

  • hooksを使ったSPI
    • useSelector
    • useDispatch
  • これらをつかうとconnectを使わなくてよくなる

useSelector

  • 特定のselectorを使って値をとってくるhooks
  • mapStateToPropsの代わり
  • selectorの結果が変更されたときだけrerenderされる

useDispatch

  • 今までのdispatchと同じ感じ
  • mapDispatchToPropsの代わり

「UIT meetup vol.7 集まれ!(タブン)実務では使わないフロントエンド芸発表会」に参加してきました

  • UIT meetup vol.7 集まれ!(タブン)実務では使わないフロントエンド芸発表会に参加してきました。

uit.connpass.com

タイトル 発表者
@1-div challenge kawasako3
SVGで作るワードアート hashrock
React.js と動くもの、鳴るもの Leonardo
本気でCSS芸やりたい人ためのbox-shadow講座 ダーシノ
CSS PANICを支える技術 GeckoTang

SVGで作るワードアート

  • hashrockさん
  • SVG芸人

何でSVG

  • なくてもフロントエンドは作れる
  • やってて楽しくなる系

ワードアート

  • MS Wordで作れる
  • パワポとかエクセルでもできる

SVGでワードアート

  • SVG
    • <svg>
    • d属性で曲線
  • SVG DOM
    • ReactとかVueで扱える
  • ベジェ曲線
  • SVGの世界は単位がない世界
    • ブラウザのスクリーンの世界はpx
    • クリックされた位置を取得する時にSVGの世界の単位に変換しないといけない
  • SVGフィルタ
    • drop shadowみたいなものも作れる

React.js と動くもの、鳴るもの

  • Leonardoさん(LINE)

React + ReduxでWebGL

  • レンダリングのタイミングが大切
  • Three.jsのレンダリング
    • composer.render()を繰り返し呼ぶ
  • オブジェクトがぐるぐるしてるだけのアプリはあまりない
    • ユーザの操作にあわせて動かしたり
  • requestAnimationFrame()でrender呼ぶ
    • Reactのライフサイクルで呼んでstate管理するとかなり重い

React + ReduxでWebAudioAPI

  • AudioNodeどこで持つか
    • 全部Storeで持つようにした

参考

qiita.com

本気でCSS芸やりたい人ためのbox-shadow講座

  • ダーシノさん

box-shadowの基礎

  • 影のサイズは要素と同じ
  • 影は要素の背面に表示される
  • 影はカンマ区切りで複数指定し表示させることができる

box-shadowでファミコン風UI

nostalgic-css.github.io

  • NES.cssはbox-shadowを使っていろいろやっている
    • inputの枠とかbuttonの外枠とか

box-shadowでドット絵

  • もとの要素のheight/widthを1pxにする
    • 影のサイズは要素と同じだから

box-shadow芸のハマリポイント

  • ギガを消費する
    • 大量のピクセル情報を持っている
    • ドット絵だとピクセル単位でたくさん定義が必要
    • 複数サイズ用意する場合サイズごとにbox-shadowの指定が必要
  • ギガを抑える
    • currentcolorを使う
    • サイズの調整はtransform: scale(x)を使う
  • メンテできない
    • box-shadowの定義が大きすぎてどこを変えたいかわからない
    • Sassをうまく使って頑張る

まとめ

  • box-shadowはアイデア次第でいろんなことができる

「Node学園 34時限目 jsconf.eu 報告会」に参加してきました

  • Node学園 34時限目 jsconf.eu 報告会に参加してきました。

nodejs.connpass.com

2019.jsconf.eu

タイトル 登壇者
JavaScript Package Manager 2019 yosuke_furukawa
Cloudflare Workersの紹介 dorayakikun
Node.jsとWebAPIのこれまで、現在、これから Leko
jsconf.eu 報告会 Performance Empathy 編 tomonari-takahashi
TypeScriptでコマンドラインパーサー Akito0107

JavaScript Package Manager 2019

  • yosuke_furukawaさん

JSのPackageManager

  • npm
    • npm inc
    • npm cli
    • npm reistry
  • yarn

npm

  • npmの仕組み
    1. ローカル依存ファイルを読む(package-lock.jsonとか)
    2. 存在しないpackageのメタデータをfetch
    3. 木構造を計算して実行
    4. packageのtarをダウンロード
    5. インストールスクリプト実行
  • ダウンロードが高負荷
    • fetchしてgunzipしてコピーする
    • Network負荷
    • CPU負荷
    • FileIO負荷

tink

  • 新しいパッケージマネージャー
  • npm cliをもとにして作られてるもの
    • ゆくゆくはnpmに統合
  • npm iの処理を実行時にやればいいのでは
    • node_modulesを仮想上のフォルダにする
    • ランタイムでモジュール解決するからnpm iがいらない
      • コピーしないからFileIO改善
      • cloneして実行するだけでよくなる
  • zero install
  • node main.jsではなくtink sh main.jsとするtinkで実行できる
  • prepareとunwind
    • prepareは事前にmoduleをfetch(本番はこれでやるとよい)
    • unwindは事前にnode_modulesを実体化

loadmap

  • npm v8でtinkがnpmに統合される

yarn

  • yarnのv2でも同じzero installに取り組んでいる

今後

  • npmもyarnもzero installになっていく
  • npmとyarnどちらも有意差はまだない
  • まだexperimentalな段階

JavaScript Registryの今後

  • JavaScript Registryとは
    • Packageをバックで管理するサービス
  • JavaScriptのRegistryをビジネス的に成功させるのは難しい
    • public moduleは無償で提供
    • アクセスコントロールするなら有償
  • npmは100万モジュールある
    • rubyのgemは30万
  • Entropic
    • 中央集権ではなく分散管理していこう
    • npmにつながる新しいregistry
    • みんなで治験を高めて分散管理できる状態を目指す

Cloudflare Workersの紹介

  • dorayakikunさん

wasm

  • ここ1~2年盛り上がってきた
  • JSConf EUでのwasmのセッション3つ

Webの現状

  • JSのbyteサイズが年々上昇している
    • この3年でモバイルは50%増加
  • Time To Interactive
    • TTIの平均値9秒以上

既存の戦略

  • SSR + Cache
    • Time to First Byteが遅い
  • CSR + Cache
    • FCPからTTIまでラグがある
  • どれもトレードオフがある
  • => Edge Side Rendering

Edge Side Rendering

  • エッジサーバでhtmlをrendering
  • SSRCSRのいいとこ取り

Cloudflare Workers

  • エッジサーバ上でserverlessアプリを動かせるサービス
  • 言語はjsかwasm
  • デプロイはwebかwrangler
  • 要素技術
    • V8のIsolate

Edge Side Renderingは有効か

  • グローバルなサービスだと旨味がありそう
  • エッジサーバで何させるかは議論の余地ある

Terrarium

  • Fastlyが提供するEdge Computing Platform
  • wasmのみ

Node.jsとWebAPIのこれまで、現在、これから

  • Lekoさん

NodeとWebAPIのこれまで

  • ブラウザのJSの仕様/NodeのJSの仕様
  • 片方にあったやつをもう片方でも実装されたりとか
    • 同じようなことなのに微妙に違うとか
  • NodeとWebAPIを近づけようとしてる
    • URLSearchParams
    • TextEncoder
    • Wrker Threads
    • Performance Timing API
  • 議論中
    • StreamsAPI
    • FetchAPI
      • 仕様がとても複雑
      • Nodeで全部再現できるのか、再現する必要があるのか

まとめ

  • 多くのWebAPIがNodeに取り入れられている
  • ワークフローを改善してより改善されていく

参考

blog.leko.jp

jsconf.eu 報告会 Performance Empathy 編

  • tomonari-takahashiさん

パフォーマンスに関して大切なこと

  • デフォルト/デファクトツールを使う
    • ブラウザデフォルトでできるようになってることも多い
    • lazy loading
    • virtual-scroller
  • パフォーマンスをマネジメント
    • Performance budget

TypeScriptでコマンドラインパーサー

  • Akito0107さん

コマンドラインパーサーを作る

  • 有名なライブラリがいろいろある
    • minimist
    • commander
  • オプションが複雑だとどれもつらい
    • 型がほしい
    • => 作った

github.com

「PORT Firebase × Flutter」に参加してきました

  • PORT Firebase × Flutterに参加してきました。

stamp.connpass.com

タイトル 発表者
Flutterで使うCloud Firestore Shogo Yamada
Flutter × Firebase Crashlytics 菊池 紘
Firestoreのトランザクション 村本 章憲

Flutterで使うCloud Firestore

FlutterとFirebase

  • FlutterでFirebaseを使うプラグインが豊富
    • 基本的に全部ある
    • Firestoreのincrementも最近対応
  • 使い心地はWeb版Firebaseっぽい
  • Flutterだから使えないみたいな話は基本的になし
  • ネイティブでドキュメント通り実装されたものをFlutterから呼んでるだけ

開発スピード

  • Flitterはホットリロードあるし快適
  • Firebase使えばサーバサイドメンテ必要なし
  • Flutterの知識やFirestoreの知識は必要

今後の動き

  • Firestoreに新機能がでるとFlutter側にissue立ってすぐ対応される
  • Flutter × Firestoreではやってる実績はまだ見ない

Flutter × Firebase Crashlytics

  • 菊池 紘さん(Diverse)

youbrideというアプリ

  • 既存アプリをFlutterに置き換えている
  • ScopedModelアーキテクチャ
  • gRPCでサーバと通信

Flutterをproductionで運用

  • クラッシュレポートどう取得する
    • firebase_clashlyticsという公式のプラグイン(まだ開発段階のもの)
    • 導入面倒だけどマニュアル通りやればよい
  • 端末で発生した例外を記録してサーバに送ってくれる
  • Dartの例外のでかたがまだ微妙
    • 全部非致命的エラーになる
    • 拡張子が.javaになる
    • 例外の種別不明
    • 難読化マップ非対応

競合サービス

  • Fabric Crashlytics
    • Firebase Clashlyticsとほぼ同じ
    • 2020/3/31に終了予定
  • Sentry
    • 有料
    • 難読化マップ非対応?

Firestoreのトランザクション

  • 村本 章憲さん(Stamp)

FireStoreでtransaction

  • 同時に更新しようとしたときに問題が起きる
  • update time
    • 1/sec
    • 一秒に一回しか更新できない
  • runTransaction()
    • read/write/observe/commit/rollback
    • read -> write -> commit
    • observerがwriteを監視してる
    • 他でwriteされてたらrollbackしてretry
    • 5回retryしてだめだとそこで終わる
    • 1秒間に100更新が来たら95は失敗する
  • Distributed counter
    • shardingする
    • 増やせばいいというものでもないのでどれくらいshard数にするかは設計しだい

firebase.google.com

メモ

  • FlutterでCI

www.bitrise.io

codemagic.io

「Ginza.js#2」に参加してきました

  • Ginza.js#2に参加してきました。

ginzajs.connpass.com

タイトル 発表者
Vue初心者はVuetifyで遊んでみよう きり丸
Jestを使ってVueコンポーネントとVuexストアのテストコードを書いてみよう! karamage
vue×firebase製のなんちゃってCMSで、仕様決めから開発まで使い倒してる話@受託 MacotoChitose
TOEIC400点のRubistがセブのオフショアでReactNativeでアプリ開発した話 DYoko0701
Ionic/Vueを紹介してみる 果物リン
Figma Pluginを作ろう! takanorip
/f(ig|usu)ma/の話 Quramy

Vue初心者はVuetifyで遊んでみよう

  • きり丸さん

対象

Vuetify

vuetifyjs.com

Jestを使ってVueコンポーネントとVuexストアのテストコードを書いてみよう!

  • karamageさん

VueアプリでJestのセットアップ

  • jestとvue-test-utilsをインストール
  • Jest
    • JSのテストシェアNo1
    • テスト周り全部入り(他のテストツールだといろいろ組み合わせたりする必要あった)
    • カバレッジも取れる
    • スナップショットテストもできる
  • Nuxtアプリに入れるときはbabel周りでハマることもある
    • バージョンいじったら解消された

vue×firebase製のなんちゃってCMSで、仕様決めから開発まで使い倒してる話@受託

  • MacotoChitoseさん

VueとFirebase

  • 仕様決めの段階からコンポーネントを作って見せていく
    • 早めにフィードバックもらって軌道修正できる
  • Firebaseに仮データ入れて動作確認できる

TOEIC400点のRubistがセブのオフショアでReactNativeでアプリ開発した話

  • DYoko0701さん

ReactNativeでのアプリ開発

  • アプリ
    • ReactNative
  • サーバ

オフショア

  • なぜセブ?
    • 中国とかインドとかは単価上がってきてる
    • 公用語英語
  • ネットワークとても遅い(オフィスでも10M/bps)
  • 新しい技術より枯れたものの方が得意なことが多い
  • 既存の改修だと説明しないといけないので大変

Ionic/Vueを紹介してみる

  • 果物リンさん

Vueでネイティブアプリ

  • Weex
  • VueNative
  • どちらもあまり使われてない

Ionic

  • Web技術でネイティブアプリを作れる
    • Cordovaベース
  • v3まではAngularだった
  • v4からはVueやReactも使える

qiita.com

Making Figma Plugins with TypeScript

  • takanoripさん

Figma

  • Figma Designで検索
  • Web版とアプリ版がある

medium.com

Figma Plugin

  • 今まではPlugin作れなかった
  • 6/11にFigma Plugins betaが発表された
  • API経由で自由に機能にアクセスできる
  • TypeScriptで書ける(公式がおしてる)
  • WebWorker上のSandboxで任意のコードを動かせる

/f(ig|usu)ma/の話

  • Quramyさん

fusuma

hiroppy.github.io

github.com

  • markdown(mdx)でスライドが書ける
  • コードも貼れる(ハイライトついてくれる)

fusumaとfigma

  • .mdをスライドにするツールは過去にもいろいろあった
    • 図を入れるのがめんどくさかった
  • figmaならiframeでembedできる
  • mdxにiframeを入れたらよさそう
  • iframeの読み込みが遅かったのでgulpタスクでimgタグに置き換えた

「#portals_study」に参加してきました

  • portals_studyに参加してきました。

web-study.connpass.com

タイトル 発表者
Hands-on with Portals uskay
はてなにおけるPortals pastak
hitode909

Hands-on with Portals -seamless navigations on the web-

  • uskayさん

web.dev

Webのパフォーマンス

  • Lighthouseは最初のページがでるまでの速さをはかる
  • ページ遷移を快適にしたい
    • SPAにする?
    • SPA覚えてなくても使えるものはないか?
    • => Portals

iframeと似ている

  • portalsはiframeのようなもの
  • portalsは埋め込んだページにそのまま遷移できる

Portals

  • Canaryでflugをたてると使える
  • Portals自体がアニメーションを持つわけではない
    • 遷移するタイミングでアニメーションをあてるいい
    • transitionが終わったタイミングでportsl.activate()
  • activateすると前のページのportalオブジェクトを取得できる
  • portalで表示しているページはユーザのインプットを受け付けない(セキュリティの都合、将来変わるかも)
  • portalで表示しているページとはメッセージでやりとりできる
  • activateするとhistoryが消えてしまう(直してる)
  • portalのネストはできるけどactivateできるのは手前のものだけ
  • ホワイトリストしたページでしか表示できないとかは検討中
  • WICGで仕様が議論されている

wicg.github.io

github.com

はてなにおけるPortals

  • pastakさん
  • hitode909さん

マンガビューワ

  • Webで快適にマンガを読む
    • URLを開くとすぐ読める
    • スマホでもPCでも
  • 画像の先読み
  • 次のエピソードの先読み
  • フルスクリーンで読み続けたい

Portals

  • 使用感
    • 簡単に埋め込める
    • 簡単に遷移させられる
  • portalsとして埋め込んでもらえるようにすることも考えてる
    • 今はiframeで提供している

「ABC 2019 Spring」に参加してきました

  • Android Bazaar and Conference 2019 Springに参加してきました。

abc.android-group.jp

  • 今回はAndroidのハンズオンに参加してみましたが、初心者でもわかりやすく且つHelloWorldの2歩3歩先くらいまでの内容でとても満足度の高いハンズオンでした。

teampansaru.connpass.com

  • ARのハンズオンも気になっていましたが、資料公開されているようなので個人的にやってみたいと思います。

japan-android-group.connpass.com

タイムテーブル

10:10~11:10

会場 タイトル 発表者
大講義室 Google I/O 2019 Recap! 鈴木拓生/Google

11:10~11:55

会場 タイトル 発表者
大講義室 円周率世界記録31.4兆桁への道 岩尾エマはるか/Google

13:00~13:45

会場 タイトル 発表者
大講義室 IBM CloudではじめるNative Android Application開発 萩野たいじ/IBM
4101 Google I/O 2019 Recap MLセッション(入門からアプリ化まで) 足立昌彦/株式会社カブク
4103 Service WorkerではじめるオフラインWebアプリの実装 堀正斉/PWA Beginners
4103 Background Sync APIを使った実装について 平田智子/PWA Beginners
4104 準天頂衛星受信機の動向について 松岡繁/(一財)衛星測位利用推進センター
4105 45分で作れるかCPU 今岡通博/日本Androidの会FPGA
4201 アプリとゲームのセキュリティーを高めよう ロドリゲス オスカル/グーグル合同会社
4202 Google I/O 2019 アプリの裏側 萩倉健支/Google

14:00~14:45

会場 タイトル 発表者
大講義室 プロダクトは歳を重ねるととどうなってしまうの 矢野りん/バイドゥ株式会社
4101 スマホ業界とエンジニアキャリア形成 里山南人/株式会社ビデオマーケット
4103 Nuxt.jsとFirebaseを使ったPWA開発事例 菅家大地/株式会社TAM
4104 産業用組込み機器へAndroid搭載の可能性 片山健久/ルネサスエレクトロニクス(株)
4105 最低限機能・格安・長持ちスマホのためのOS「SUNBLAZE OS」 常盤瑛祐/株式会社アメグミ
4201 〜初心者歓迎〜みんなで 東京公共交通オープンデータチャレンジしよう! イボギョン/GMOペパボ株式会社 ちーむパンサル
4202 Googleアシスタント最新情報と他プラットフォームへの拡張方法 一円真治/ヤフー株式会社
4304 TensorFlowで趣味の画像収集サーバーを作る 2019年5月号 Keiji ARIYAMA/めがねをかけるんだ / C-LIS CO., LTD.

15:00~15:45

会場 タイトル 発表者
大講義室 AI世代のデジタル教育―これからの時代を生きる子どもたちや私たちに必要なチカラ― 五十嵐悠紀/明治大学総合数理学部
4101 いざ就活!〜議事録係がAndroidエンジニアになるまで〜 林田守加/ちーむパンサル
4103 「5分で作れる!Glideappsではじめる超簡単PWA(プログレッシブ・ウェブ・アプリ)」 kinneko/JAG金沢支部
4103 PWA+TWA 進藤龍之介/日本Androidの会 Web Working Group
4104 OSAWGの近況と注目のRISC-VをFPGAで動かそう 鈴木直康/株式会社芳和システムデザイン 日本Androidの会運営委員
4105 電子立国再生への思いと、今挑戦していること 大橋太郎/株式会社電波新聞社 編集本部/出版部
4201 JavaAndroidを始めた人のためのJava -> Kotlinライブコーディング 中川幸哉/ウォーターセル株式会社
4202 Android Qのセキュリティ/プライバシー概要 木村隼人/日本Androidの会学生部
4304 食農を支えるプラットフォーム「みどりクラウド」と今後の展開 持田宏平/株式会社セラク

16:00~16:45

会場 タイトル 発表者
大講義室 クロスするリアルと仮想ー経済の視点 伊藤洋一/三井トラスト基礎研究所
4101 Androidにおけるパフォーマンスチューニング実践II 南里勇気/株式会社FiNC Technologies
4103 ServiceWorkerの実装 宮本将/日本経済新聞社
4104 空飛ぶクルマ「SkyDrive」の開発について 柳村将平/株式会社SkyDrive
4105 つらいと評判のAndroid BLEをまだまだ使い倒す話 原田賢太/JapanTaxi株式会社
4201 古から最新までのAndroidアンチパターン あんざいゆき/株式会社ウフィカ
4202 Flutter Recap from I/O 2019 + α 神原健一/NTTテクノクロス株式会社
4304 2019年春の技術であのARアプリを再現する 高橋憲一/株式会社カブク

Google I/O 2019 Recap!

Google I/O 2019

  • テーマ
    • Building a more helpful for Google everyone
    • privacy

Building more helpful for Google everyone

  • 全ての人々のためにより役立つGoogle
  • Duplex on Web
  • 検索結果をARで表示
  • Google Assistant
    • 30言語80カ国
    • 音声だけでスマホが操作できちゃう
      • OK Google言わなくていい
      • 個別のアプリの操作もできちゃう

機械学習/AI

  • Googleが提供する機械学習/AI
    • ML Kit
      • Firebase
      • モバイル
    • Google Cloud
      • Auto ML
      • スケーラブルに
    • TensorFlow
      • フレキシブルに
      • 自分でモデルを作る

ML Kit

  • TensorFlow Liteと比べて
    • そのままだとapkサイズ大きくなってしまうがML Kitだと解消できる
    • ML Kitなら一部のユーザだけに提供とかできる
  • ML Kit on device translation
    • オフラインで翻訳
    • 全てデバイス上で完結
  • Object Detection & Tracking
  • AutoML Vision Edge
    • モデルを作ること自体もAIにやらせる
    • 写真をたくさんあげたらかってに学習してくれる
    • 一度おとせばオフラインでも

TensorFlow

Android Q

  • プライバシーに関する機能が多い
  • 表面上は変更少ないけどアクセスのしかたなど変わるので改修必要

Kotlin first

  • Googleが作るサンプルなどはまずKotlinで提供
  • Googleのアプリの多くはKotlinだけで書かれている
  • Top 1000の内44%はKotlin
  • 新しい機能はあJavaはBest Effortだったり提供なかったりする
    • JetCompose

CameraX

  • Jetpackライブラリ
  • Camera2 APIを更に進化
  • Android L以降をサポート
  • ML Kitとの連携しやすい

Android Studio

  • Project Marble
  • 新しい機能追加より既存のものの改善重視

Google Play

  • latingの仕組みが変わる(今年の夏から)
  • 今までは全ての期間のLatingを平均していた
    • 直近の数字を使ったものに変わる

Design

  • Dark Theme
    • Android Qから強制的にダークモードにできる
    • アプリ作る人も対応が推奨
    • ダークモードでは彩度下げるとよい
  • バッテリー
  • Accessibility
  • Material Designも対応

Web & Chrome

  • Chrome 10年, Google 20年, Web 30年
  • Lazy Loadingをブラウザ側で
  • Flutter for Web

Privacy

  • Incognito mode
    • シークレットモードをyoutubeやmapでも
  • Live Caption
    • 動画に自動で字幕を付ける機能
    • 全てon device
  • 機械学習
    • on deviceで
    • Federated Learning
    • AIによるバイアスの発生を防ぐ仕組み

円周率世界記録31.4兆桁への道

  • 岩尾エマはるかさん(Google)

円周率と計算機の歴史

  • なぜ円周率を計算するのか
    • 人間の計算に関する進歩は円周率をどれくらい計算できるか
  • 紀元前で3.1まで分かっていた
  • なぜ円周率計算が難しいか
    • 桁数が多くメモリ要件が厳しい
    • 計算性能そのものは重要でない

今回の記録

  • 31兆1592億6535万....桁計算した
  • クラウドを使ったはじめての記録
  • 121日かかった

クラウドを使う利点

  • 数分でクラスタ作成できる
  • ハードウェア障害が少ない
  • スナップショットでバックアップできる

振り返り

  • 既存プログラムを4ヶ月走らせただけでは?
  • 始める前は誰も
    • ネットワークドライブで31兆桁計算できると思ってなかった
    • 単一VMを4ヶ月ヘビーに使えると思ってなかった
  • あとから見れば簡単に見えるのがクラウドのすごいところ

あんざいゆきPresents!理解が深まるビンゴアプリ feat.Nkzn

ハンズオン

セットアップ

  • packageの値は公開するとき一意にしないといけない
  • androidx.*
    • 3rd partyのライブラリ
    • チェック入れないと古いやつが入っちゃう

UI

  • match_constraint
    • maxまで幅をとる
  • wrap_content
    • 必要としてる最小の幅
  • スパナつきText
    • Preview用の値
    • 値を動的に変えたいとき用
  • 文字列は別ファイルで管理
  • dp
    • 解像度によらず同じ大きさ
  • sp
    • ユーザのフォントサイズの影響を受ける

Java

  • Activityという単位でページを作る
  • AppCompatActivity
  • onCreate
    • 初期化できるタイミングで呼ばれる
  • 画面を回転すると表示内容が消えてしまう
    • Activityを破棄して作り直すから
    • Activityを作り直す時でも値を保持しておきたい
      • => ViewModelを使うとActivityとは別で値を管理できるので保持できる
    • ViewModelはライブラリが管理してくれる
      • ViewModelProviders
  • LiveData
    • observeして値が更新されたら通知できる
    • Activityが作り直されるときにonStartというのが呼ばれる
    • そのタイミングでViewModelのデータを反映するようにする
    • Activityの方がViewModelより寿命が短いからobserverしたままにしておくとメモリリークしてしまう
    • Activityが破棄されるときにobserveが消されるようにしておく必要がある

「5分で作れる!Glideappsではじめる超簡単PWA(プログレッシブ・ウェブ・アプリ)」

  • kinnekoさん(JAG金沢支部)

Glide

  • Googleスプレットシートを使って簡単にPWAが作れる
  • Xamarin開発者が作ったもの
  • 何もしなくてもそれなりに綺麗なUIができる
    • UIの変更はGUIでできる
  • ログイン機能も簡単に設定できる
    • メールアドレス入力させてPINを送るとかも
  • Glideを使ってみて
    • 思ったほど複雑なことはできない
    • パフォーマンスイマイチ
      • PWAのメリットが・・・
    • deep linkできない(対応予定らしい)

PWA+TWA

  • 進藤龍之介さん(日本Androidの会Web Working Group)

TWA

  • Trusted Web Activity
  • PWAをPlayストアにあげられるようになった
  • ただしそんなにサクッとできるわけではない
  • ChromeのタブをActivityとして表示できるようにする
  • セッション、ストレージ、キャッシュなどChromeと共有

なぜわざわざアプリ化?

  • まだアプリでしかできないこともある
    • ウィジェット
    • 機種変更時に再インストールできる
    • マネタイズ
    • PWAとネイティブコンテンツの混在化
    • 同一ホストから複数のPWAが作れる

Digital Asset Links

  • アプリとWeb間の信頼の確保
  • intentの紐づけ

Flutter Recap from I/O 2019 + α

  • 神原健一さん(NTTテクノクロス株式会社)

Flutter

  • iOS/Androidのアプリを1ソースで作れる

Google I/O 2019

  • Flutter for Web
  • Flutterのセッション5つ

Material Design

  • MaterialDesignの問題点
    • どれもそっくりで似たようなものができてしまう
    • material theming発表(I/O 2018)
    • 独自のブランドイメージを出す
  • DarkTheme
    • flutterでも簡単に定義できる
  • Widget
    • もともとのwidgetをoverrideしてカスタマイズできる
  • Accessibility
    • semanticsLabelで読み上げ用の文字列を設定できる
    • 読み上げる順序の指定が可能に

For Multi Platform

  • Adaptive Components
    • いろいろなデバイスサイズでの表示に対応する
    • パターンをグルーピングして考える
  • Interactive/Passive
    • 手元で操作しながら画面を見る
    • 遠くにあって見るだけ
    • バイスによって画面までの距離が違うから文字のサイズも変えていかないといけない
    • バイスの画面サイズはとれるのでそれで出し分ける
  • iOS/Androidのデザイン
    • iOSのデザインはCupertinoというのがある
    • iOSだったら分岐して書くのでコードが複雑
    • Flutterの良さは1ソースでかけることなので、、

Beyond Mobile

  • Flutter for Desktop
    • hoverとかキーボードの操作も実装できる
  • Flutter for Web
    • JSに変換できる

Flutter 1.5

  • Material & Cupertino Widgetのアップデート
  • Flutter for Web
  • Dart2.3

「Google I/O 2019 Recap at LINE」に参加してきました

  • Google I/O 2019 Recap at LINEに参加してきました。

line.connpass.com

engineering.linecorp.com

タイトル 発表者
Google I/O 2019 Overview 藤原 聖
Androidの何か① Hidetsugu Tamaki
Androidの何か② 高島 友里
会場の雰囲気 櫛井 優介
Webの何か① 清水 大輔
Webの何か② YiXin Xu
Securityの何か コキチーズ
Flutterの何か Megumi Hattori
Speechless Live / Fireside Chat with Hiroshi Lockheimer Ken Wakasa

Google I/O 2019 Overview

  • 藤原 聖さん

Google I/O 2019

  • 2008年からで12回目
  • 2016: google assistant/google home
  • 2017: mobile/AI
  • 2018: AI
  • 2019: Building more helpful for Google everyone

Keynote

  • googleで検索した結果をARで見られる
  • google lensで読み上げ
  • AI for everyone
  • プライバシーの強化
  • on device
    • Live Caption
  • Android Q
    • Security/Privacyの強化
  • Devices
    • Nest Hub
    • Pixel 3a

レポート

engineering.linecorp.com

Androidの何か①

  • Hidetsugu Tamakiさん

Kotlin

  • I/O 2017で正式言語
  • Kotlin First
  • Java/C++のサポートも続く

Android Q

Dark Theme

  • なぜ重要?
  • Force Dark
    • Androidが自動でDarkに色を計算してくれる
    • 細かいところまでちゃんとやりたいならCustomで
  • Custom
    • -nightをつけて対応する
    • 画像もDark用を用意するとよい

Gesture Navigation

  • バイスのメーカーによって挙動が違ったのを統一
  • 変更点
    • バックボタンが消える
        - 左から右へのスライドに変わる
      
    • ナビゲーションバーの裏まで描画
    • 3ボタンと2ボタンは設定で切り替え可

JetpackCompose

  • Frameworkの同梱されないUIきっと
    • バージョン関係なしに更新できる
  • 宣言的なUI作成キット
  • Reactive Programming + Kotlin
  • 既存コードと互換性あり
  • まだExperimental

Androidの何か②

  • 高島 友里さん

Android Studio

  • Project Marble
  • System Health
  • Feature Polish
    • Apply Changes
    • Layout Inspector

Webの何か①

  • 清水 大輔さん

Google Assistant

  • Deplex on the web
  • Interactive Canvas
    • NestHubにブラウザで表示
    • 音声のインプットに対して処理をして画面を表示
    • Assistant Canvas API

Google Search

Chrome

  • Perception Toolkit
    • カメラを使って情報を取得する
    • バーコード読み取ってその商品を画面に出す
    • Shape Detection API
    • proj-fugu
      • ネイティブとWebのギャップを埋める

Webの何か②

  • YiXin Xuさん

Site Performance

  • Twitterがどう考えるか
    • responsive
    • mobile first
    • one codebase
  • TwitterLiteで30%高速化
  • パフォーマンス改善の工夫
    • code ssplitting
    • component based design
    • lazy load
    • < 3MB

Lighthouseの 新機能

  • Lightwallet
    • PerfBadgetを設定して測定できる
  • LighthouseCI
    • Coming Soon

Securityの何か

  • コキチーズさん

Incognito mode

  • シークレットモードがyoutubeやmapでも

Android

  • Qからハードウェアアクセラレーションがなくても暗号化される
  • TLS1.3デフォルトでon
  • 弱い暗号鍵はGoogleが強くして署名してくれる
  • scoped storage
    • /sdcardへのアクセス制限
    • 他のアプリが作ったファイルへのアクセス制限
  • 位置情報
    • バックグラウンドで位置情報をとるのは別で権限必要に

Web

  • Googleに報告される脆弱性の半分はWeb
  • Content Security Policy(CSP)
    • 読み込み可能なリソースをホワイトリストで設定
    • nonceをつける
      • ランダムな値
    • strict-dynamic
      • nonceで許可されたscriptを動的に読み込むことを許可
  • Trusted Type
    • DOM Based XSSを防ぐAPI
    • innerHTMLなど使うときに信頼できる型にしてから入れる
  • fetch metadata
    • リソース取得時にmetadataを付与する
  • Cross-Origin-Opener-Policy
    • window.openの挙動を制限

Flutterの何か

Flutter

Flutter App

  • Google I/Oに合わせて公開されたアプリ
    • Flutter Developer Quest
    • KENKEN

Flutter for Web

  • DartはもともとWebでJSの代わりに使おうとしてたもの
  • Flutterエンジンをブラウザように切り替えてWebで動かす

Multiplatform

  • バイスサイズにスクリーンとの距離が違う
    • そういった設計の工夫についてのセッション
  • iOSAndroid
    • 細かい挙動の差異はFlutterが吸収してくれる
    • UIのパーツが異なるものは実装で使い分ける
      • パーツは用意されている

Dart

  • 特徴
    • Productive
    • Fast
    • Multiplatform
  • UI開発に向いている言語
  • ホットリロードできる
  • 宣言的に書ける
  • UI as code
    • 親子関係の階層がわかりやすい

「Inside Frontend」に参加してきました

  • Inside Frontendに参加してきました。

inside-frontend.com

# タイトル 発表者
A-1 TypeScript: Why and how we adopted it at Slack Felix Rieseberg
A-2 Introduction to Lucet Adam Foltzer
A-3 Nuxt.jsで中規模サービスを統合した話 Koichi Sawada
Hajime Sasanuma
B-3 Making less of the web with feature policy Andrew Betts
C-3 デザインエンジニアとフロントエンド Shinichi Kogiso
A-4 formの送信ログから反省する、本当は必要だったvalidationや機能たち Yuta Ide
B-4 Web App Checklist 〜高品質のWebアプリケーションをつくるために〜 Kazunari Hara
Marina Toki
C-4 いちからデザインシステムを作ってみて学んだこと Kengo Haruno
A-5 BFFのDeveloper Experience Yosuke Kurami
B-5 strobo.fm公開収録 Shogo Sensui
Hiroki Tani
C-5 AbemaTVにおけるCSS is too fragile問題に対する解 Shota Kubota
A-6 世界中誰もが使えるサービスを目指して、Web標準で作るガラケーサイト Mariko Kosaka
B-6 Loading Performanceとの向き合い方 Sho Miyamoto
C-6 品質と開発速度を両立させるために捨てたものと守ったもの Tsuyoshi Wada
Soichi Masuda

TypeScript: Why and how we adopted it at Slack

  • Felix Riesebergさん(Slack)

SlackのデスクトップアプリをTSに移行した話

  • Electronを使ってる
  • JSにバグが有るとクラッシュする
  • 構造化されたコードを書かないといけない
  • JSDocでドキュメント化
  • TSのよさ
    • 型がある
    • エディタの補助がきく
  • KOAをつかったけどドキュメントを開くことなく開発できた
    • 型と補完のおかげ
  • ESLintはすばらしいがTSLintはまだそこまでいってないe
    • ESLintがTSサポート始めた
  • JavaScriptしかやったことない人は型を知らない
    • そういう人にとっては型が難しい

Introduction to Lucet

  • Adam Foltzerさん(Fastly)

Lucet

Web Assembly

  • 低レイヤーの言語
  • 高パフォーマンス
  • ブラウザで動く
    • サーバでも動く
  • ブラウザ内でも安全に動く
  • WebAssemblyに変換できる言語
    • Rust, C, C++ TS, go, swift

Terrarium

  • RustやTSでかいたWebAssemblyをアップロードできるWebサイト

Nuxt.jsで中規模サービスを統合した話

  • Koichi Sawadaさん(yahoo)
  • Hajime Sasanumaさん(yahoo)

ebook japan

  • ebook japan + yahooブックストア
  • 開発期間約1年
  • 電子書籍販売サービス

開発体制

  • FE -> yahoo
    • yahooの資産が利用できる
  • API + DB -> ebook
    • ebookの表船機能/データ
  • vue × Nuxt
    • vueはデザイナーが理解しやすい
    • ライブラリアップデートの手間削減
    • 初心者向けに日本語ドキュメント
    • Reactは(当時)ライセンスの問題
  • node + express

風土の違い

AtomicDesignへの挑戦

  • なぜ?
    • 新規回月なので途中導入より入れやすい
    • デザイン変更が多発が予想できたから
    • UIの一貫性を保ちたかったから
  • 苦労したこと
    • エンジニアとデザイナーの成果物が違う
    • スクラムと相性悪かった
      • 通化していく作業の優先度が低く改善が疎かに

実装上の苦労したこと

  • apiから返ってくるデータが大きい
    • 使わない情報もたくさん入って返ってくる
    • 開発機関制約の中で大は小をかねた形
    • mixinsを使ってget処理をまとめた

リリース後の改善

体制

  • 動くものを見せるとこに集中しすぎた
    • エラー処理やシステム面での改善が放置気味
  • 経験豊富なエンジニアがいない
    • フロントエンドのサポートチーム追加
    • PRのレビューや実装の相談をうける

システム(パフォーマンス改善)

  • api呼び出しフローの改善
    • Promise.allできるものはまとめる
    • 描画語でいいものは描画後に取得
  • レスポンスサイズ削減
    • apiから取得したデータを削ってからclientに返す
  • JSファイル改善

いちからデザインシステムを作ってみて学んだこと

  • Kengo Harunoさん(yahoo)

デザインシステムを作るきっかけ

  • 多くのサービス多くの関係者
    • 20サービス関係者1000人(デザイナー/エンジニア/ビジネス/業務委託)
  • デザインがサービスでばらばら
    • 一貫性確保
    • デザイン開発効率化
  • 何を作る?

デザインシステム開発(デザイン編)

デザインガイドラインの策定

  • デザインの定義
  • 抽象的なスタイル定義
  • 具体的なルール

コンポーネントのリストアップ

  • 名前をつけていく(時間かかった)
  • 汎用的過ぎて名前むずい
  • 業務固有すぎてしっくりこない
  • 見た目にとらわれずどんな役割をもっているかを考えて選ぶ
  • 全員が納得するものにした(納得しない=適切でない)

スタイルガイドの制作

  • sketchでデザイン作成
    • あらゆるケースや状態を考慮しないといけないので大変だった
    • 種類×サイズ×状態分作る
  • デザインルールをドキュメント化
    • デザインルールを文字化するの難しい
    • 不明瞭な部分が残らないように
  • レビューは全員(4人)がOK出すまでやる
    • 共通認識を担保

デザインシステム開発(フロントエンド編)

コンポーネントライブラリの提供方法

  • 最初はhtml/css/jsでの提供
  • コーディング設計
    • BEM記法
  • Fractal
    • スタイルガイドジェネレーター
    • markdownで書ける
    • Handlebars + yaml
    • 静的サイトとして出力できる

方向転換

  • Reactを使ったプロジェクトが多い
  • Reactコンポーネントとして提供してほしいという要望
  • html/cssでの提供ではは活用しづらい

Reactでコンポーネントライブラリ

  • Storybookベースのものに変更
  • CSS Modules with Sass
  • TS
    • 有識者はいなかった
    • 性的チェックでエラー気づきやすい
    • エディタ補完便利
    • 型でデザインをより厳格化できる
  • スタイルガイドをGatsbyで静的ページとして作った

振り返って

  • デザインから実装までこなすのはとても大変だった
  • デザインシステムは巨大なプロダクト
  • 使う人とのコミュニケーションが大事

BFFのDeveloper Experience

  • Yosuke Kuramiさん(FOLIO)

BFF

  • Backends for Frontends
  • UX視点
    • パフォーマンス
    • UIに必要十分なAPI
    • 統一したUI
  • マイクロサービス視点
    • ドメインに注力
    • シンプルで再利用性の高いAPPI
    • サービスこどの技術得意製
  • これらをつなぐためにBFF

FOLIOのBFFの役割

  • API Aggregation
    • koa
  • SSR
    • react + redux

BFFのいいところ

  • バックエンドはドメインの開発に注力
  • フロントエンドはUIの要求をAPI
  • SSRで高速化
  • => ただしフロントの仕事は増える

BFFを効率的に開発するために

バックエンドを待たない

  • IDL driven development
  • Interface Definition Language
  • FOLIOではThrift
  • IDLからコードを生成

サービスの仮データ

  • 開発中のAPIはモックに差し替えたい
  • 開発済みならテスト環境につなぎたい
  • BFFのコードはどちらにつないでも変わらないようにしたい
  • Direct Proxy

Developer向けの機能

  • BFFはフロントエンドがいじるので開発者用のAPI作ってUIを作ることもできる
  • stateを変える画面作って画面のバリエーションを試せたり

世界中誰もが使えるサービスを目指して、Web標準で作るガラケーサイト

proxx.app

今の時代のガラケー

  • スマートフィーチャーフォンのこと
  • 機能
    • KaiOS
    • モダンブラウザ搭載
  • アフリカ、インド、インネシアではやってる
    • 安いから
  • 画面小さい、タッチスクリーンない、十字キー
  • キャリアがアプリを握っているからWebで提供するようにした方がいい

ゲームを作ってみる

  • Webの強みはドキュメント
    • その正反対をやってみる
  • ユーザのインプットが多いもの
  • あらゆるデバイスをサボーとするようなもの
  • => マインスイーパー的なもの

どうやって開発したか

  • チームスペック
    • フロントエンドエンジニア3人
    • kaiOS初めて
    • WebGL初めて
  • どこまでやるか
    • 1コードベースで作る
    • a11y対応も
    • パフォーマンス第一
  • コード
    • ゲームロジック
    • Stateサービス
    • UIサービス
    • 描画処理
    • 前者2つはWebWorkerで動かす
  • FW
    • WebWorkerとのやりとりはComlink
    • preact

github

github.com

「Google I/O 2019 わいわい報告会」に参加してきました

  • Google I/O 2019 わいわい報告会に参加してきました。

mercaridev.connpass.com

  • Google I/OのセッションをKeynoteを中心に紹介していただきました。FirebaseでMLやARのデモなどさっそく試してみたくなるようなものも紹介いてもらったのでやってみたいと思います!
タイトル 発表者
現地でのGoogle I/O体験をおすすめする理由 @tenntenn
What's new in ARCore And xR Technology @ikkou
Googleの今年のキーテクノロジと背景をわかった気になるセッション @mhidaka
Firebase AutoMLのオンデバイス実行とCameraXを組み合わせた新しい価値を秒で試す @teshi04
I/O Quick Q&A タイムラインから見つけた疑問をクイック回答! @mhidaka

現地でのGoogle I/O体験をおすすめする理由

  • @tenntennさん

Google I/O

  • 3日間
  • 7000人
  • 184セッション
  • 513Office Hour

コンテンツ

  • キーノート
    • 全体向け/developer向け
  • セッション
  • Office Hour
    • Googlerに直接相談できるブース
  • App Review
    • 予約してデザインやテクニカルなレビューをしてもらえる
  • Sandbox
    • ARなど体験ブース
  • CodeLab
    • 手を動かして学ぶブース
    • ヘルプボタン押すとランプがついてGooglerがかけつけてくれる

現地でしかできないこと

  • 体験ブース
    • Sandbox
  • コミュニケーション
    • 世界各国
    • 日本から来てる普段話さない人
    • Googler

まとめ

  • いろんな国のエンジニアとコミュニケーションとれる
  • Googlerに直接質問したりFBもらえたりFBすることもできる

What's new in ARCore And xR Technology

  • @ikkouさん

AR at keynote

  • Google検索結果に3Dモデルを表示
  • GoogleLensの超進化
  • GoogleMapsのAR機能がPixelユーザに順次開放

ARCore

<model-viewer>

  • iOSのAR Quick Lookと同等のことをWebでできる
  • 1ソースでAndroid/iOS

VR

  • VRのセッションは残念ながらなかった
  • AR推しを強めてることは明らか
    • 2年前VRのカテゴリあり
    • 去年VR/ARのカテゴリあり
    • 今年ARのカテゴリあり

Googleの今年のキーテクノロジと背景をわかった気になるセッション

  • @mhidakaさん

Google I/O 2019のテーマ

  • AI for everyone

検索

  • 検索結果をARで現実空間に出す

プライバシー&セキュリティ

  • AndroidQのセキュリティの強化
  • 検索履歴の管理
  • Degital Wellbeing
  • Parental Control

オンデバイス技術

  • 機会学習をスマホの中で実行する
  • ネットワークを通さないので高速
  • MLKitの翻訳機能70言語が数百KBしかない
  • 分散学習
  • LiveCaptionのデモ
    • ネットワーク介さずに動画のキャプションを表示

GoogleLens

  • 現実空間を検索できる
    • カメラで撮影したものを検索

Duplex on the web

  • Webフォームを自動で入力してくれる
    • Gmailの注文履歴をもとに
    • ユーザは音声で指示するだけ
  • AIが前後のコンテキストを理解している
  • プライバシーの問題は課題
  • まだ公開されてない機能

まとめ

  • ML関連のセッションが増えた
  • Android関連が減った
  • モバイル上でMLというながれ

Firebase AutoMLのオンデバイス実行とCameraXを組み合わせた新しい価値を秒で試す

  • @teshi04さん

Androidのカメラ

  • いろんな端末がある
  • CameraAPIは複雑
  • google/cameraview便利

CameraX

  • Camera機能をラップしたもので使いやすい
  • 基本的なユースケースで使いやすい
    • preview
    • image analysis
    • image capture
  • CameraX Test Labであらゆるデバイスでテスト済み

ML Kit for Firebase

  • Firebase上でトレーニングできる
  • ステップ
    • データ(画像)をアップロード
    • 自動でラベル付け
    • レーニン

まとめ

  • CameraXでカメラが扱いやすくなった
  • Firebase AutoMLでAIアプリが身近になった

「PWA Night vol.3 ~PWAのミライや活用方法をみんなで考えよう~」に参加してきました

  • PWA Night vol.3 ~PWAのミライや活用方法をみんなで考えよう~に参加してきました。

pwanight.connpass.com

  • 今回はキャッシュ周りの話が多く実践的なノウハウが多かったんじゃないかと思います。開発する時に資料活用させてもらいます。
  • 参加者全員の自己紹介があったので参加者の層もなんとなく分かってそれも良かったです(アカウント名とアイコンと紐付かないのが残念!)
タイトル 発表者
既存のWebサイトをPWA化してみよう~Sevice Worker導入手順解説~ 小椋陽太さん@アシアル
Cache APIに触れる @tiwu_officialさん
RoRをVueJS + Nuxt PWAで置き換えてみた 天野たけしさん@devMeTokyo
最大公約数的なServiceWorker制作から見るPWAの勘所 進藤龍之介さん@NPO法人日本Androidの会
ServiceWorkerのCacheでいろいろと問題が起きた話 biga816さん
Ionic PWA Toolkitについて scrpgilさん

既存のWebサイトをPWA化してみよう~Sevice Worker導入手順解説~

  • 小椋陽太さん@アシアル

PWAとは

  • Googleが推進するモバイルWebのユーザ体験の指針
  • Reliable
  • Fast
  • Engaging

ServiceWorker

  • バックグラウンドで動くスクリプト
  • アプリごとにブラウザに登録される

ServiceWorkerのイベント

  • install
  • wait
  • activate
  • uninstall

SWの更新

  • 全てのタブでアプリを終了すると次に開いた時に更新済みのものが適用される

Cache APIに触れる

PWAの特徴

  • その一つにネットワークに依存しない

CacheAPI

  • ServiceWorkerがキャッシュの仕組みを持ってるわけでない
    • requestのイベントを拾えるだけ
    • CacheAPIがキャッシュの機能を持っている
  • ServiceWorker内でなくても使える
  • 有効期限はない

プロダクトでのキャッシュの使い方

  • 一覧画面で詳細画面のリソースをキャッシュしておくとか
  • 新しいバージョンが来たら古いバージョンを消しておく

RoRをVueJS + Nuxt PWAで置き換えてみた

  • 天野たけしさん@devMeTokyo

PWAの効果

www.pwastats.com

PWAの導入

  • 新しいことをやらないといけないか?
    • 今あるアプリを改良するとKPIや売上があがる
    • 既存のビジネスモデルを変える必要はない

最大公約数的なServiceWorker制作から見るPWAの勘所

PWA4WP

  • WordPressのPWAプラグインを作った
  • PWAはキャッシュが命
    • キャッシュファースト/オフラインファーストの選択
    • キャッシュするファイルの選択
    • キャッシュの有効期限
    • キャッシュファーストとオフラインファーストの組み合わせは今後実装
  • キャッシュするしないの選択が大事

ServiceWorkerのCacheでいろいろと問題が起きた話

  • biga816さん

キャッシュ上限に到達

  • 画像を全部キャッシュしてた
    • 容量上限に達してしまった
  • 上限や期限を設定しないといけなかった

開発環境でのみキャッシュの上限に到達

  • 開発中はAoTコンパイルしてないのでコードの量も大きかった
  • 定期的にキャッシュ削除

キャッシュから動画が再生されない

まとめ

  • 容量上限意識する必要あり
  • 無限に増えるコンテンツはCDN使った方がいい

Ionic PWA Toolkitについて

  • scrpgilさん

Ionic

  • Ionic4はAngular捨ててWebComponentsベースのUIフレームワークになった
    • ReactとかVueでも使えるようになった
  • cordvaからcapacitorに変わった

PWA Toolkit

ionicframework.com

  • ionicチームが出してる
  • デフォルトでいろんな設定やってくれてる
  • スタータープロジェクトが充実

「Frontrend × Bonfire Frontend」に参加してきました

  • Frontrend × Bonfire Frontendに参加してきました。

frontrend.connpass.com

  • YahooとAbemaTVの若手社員の入社から現在までの成長についてお話をきくことができました。
  • 学生エンジニアから事業プロダクトを作るプロのエンジニアに成長できた」という言葉もありましたが、単にアプリ開発をするだけでなくKPIなどを意識して取り組んでいる姿勢が印象的でした。
  • 原さんの発表はノウハウがかなりつまっていたのでスライドをじっくり見返しておきたいと思います。
タイトル 発表者
新卒3年目、ヤフーで学んだ2年間を振り返る 濱田 唯 / ヤフー株式会社
AbemaTV 新卒1年目エンジニア実録 野口 直 / 株式会社AbemaTV
Webフロントエンド&デザインで学んだ2年間を総括 内藤 秀彦 / ヤフー株式会社
こえのブログでのPWA 〜開発現場編〜 原 一成 / 株式会社サイバーエージェント

新卒3年目、ヤフーで学んだ2年間を振り返る

  • 濱田 唯さん / ヤフー株式会社 メディアカンパニー マーケティングソリューションズ統括本部
  • 2017入社 エンジニア入社からフロントエンド

入社して2年

  • 新卒研修(3ヶ月)
  • OJT(3ヶ月)
  • 本配属
  • 広告入稿管理システム

2年での成長ポイント

チーム開発の心構え

  • コードレビューは大事
  • 人が読むことを意識して書く
  • レビューはプロジェクトの雰囲気を作る

設計構成への意識

  • 動けばいいではダメ
    • 大人数で長期で運用される
  • チームごとのルールにのっとったアーキテクチャで開発
    • TypeScript
    • re-ducks
    • AtomicDesign
  • 大事なのは
    • ルールが言語化されてること
    • メンバーが合意してること

新しい技術に対する意欲

  • 自分も議論に参加するために意欲的になった

AbemaTV 新卒1年目エンジニア実録

  • 野口 直寛さん @nodaguti / 株式会社AbemaTV 開発本部

1年目エンジニア実録

  • 配属から1年弱で約560PR10万行
  • 新卒研修:4月-5月
  • AbemaTVに配属:5月
  • 5-8月
    • コミット/PRの粒度に慣れた
    • 担当した機能はレビューもできるようになった
    • RxJS使ったFluxのフローを一通り作れた
  • 8-12月
    • 大きな案件でタスク分解/見積もりしてスケジュールどおり進行
    • プロダクトを伸ばすにはどうすればいいか考え実行
    • Chrome Dev Summitに参加
  • 1-4月
    • ディレクターやエンジニアにヒアリングして曖昧な仕様を固める
    • リリースまで持っていった
  • 振り返り
    • 学生エンジニアから事業プロダクトを作るプロのエンジニアに成長できた
    • どうUXに影響するか、どうKPIに影響するか考えられるようになった

2年目に向けて

  • 技術から事業に貢献できるエンジニア

Webフロントエンド&デザインで学んだ2年間を総括

  • 内藤 秀彦さん / ヤフー株式会社 ショピング統括本部
  • 2017入社 デザイナー入社からフロントエンド

入社から本配属

  • デザイナー研修
  • OJT
  • デザインによるサービス改善
    • サービスの課題を探して解決する
    • 商品数が多いので抽象的なワードで探しにくい
    • 絞り込みのUIを改善
    • ABテスト
    • 何が利いて効果があったか分かるようにするとよい
  • UIパーツのコーディングお作法
    • モジュール単位でパーツを実装
    • SCSS
      • カラーなどは共通化
      • よく使うスタイル軍はmixin

本配属から2年目の終わりまで

CVRを伸ばす改善サイクル

  • CVR: コンバージョン率
  • 課題に対して再現性のある勝ち筋を見つけサイクルを回す

UIパーツの整理

  • 一つのサービスなのに似たような部品がたくさん出来てしまう
    • UIライブラリを作った
    • コードと使い方をまとめたドキュメント

レガシーからモダンな開発環境へ

  • Before
    • PHPではきだしたHTMLにjQueryでDOM操作
  • After(移行中)
    • React/Redux/Next.js

今後

こえのブログでのPWA 〜開発現場編〜

PWAの高速化

  • PRPLパターン
    • Push,Render,Pre-cache,LazyLoad
  • CDNの活用
    • できるだけCDNにキャッシュする
    • originサーバまでアクセスしないから高速

コンポーネント指向

  • WebComponents
    • LitElements
  • 影響範囲を狭めることで捨てやすくなる
  • スタイルのCascadeとShadowDOOMによるスコープをそれぞれ活用する

WebでAudioRecording

  • ブラウザからマイクを利用できる
  • WAVはファイルサイズ大きいのでmp3に変換して使ってる
    • vmsg

開発フロー

  • 餅つき開発
    • 細かい粒度でプルリク
    • 捨てやすいように細かく
  • 最速でプロトタイプ
    • 無駄になることを恐れない
    • リリース前に出戻りになるよりいい
    • Firebase便利

「Cloud Native Meetup Tokyo #7」に参加してきました

  • Cloud Native Meetup Tokyo #7に参加してきました。

cloudnative.connpass.com

タイトル 発表者
Telepresence ではじめる k8s 時代のローカル開発 Toshihiro Goto@_shiro16(GMOペパボ)
Consul Kubernetes Integration and Consul Connect Ryo Takaishi@r_takaishi(GMOペパボ)
分散イメージレジストリの検討 〜Beiran & Dragonfly〜 安田 侑史@yupeji(クリエーションライン株式会社)
フルカン ムスタファ@furkanmustafa(Rainlab 株式会社)

Telepresence ではじめる k8s 時代のローカル開発

Telepresenceとは

  • サービスをリモートのk8sクラスタにつなぎながらローカルで動かせる
  • ローカルで動いてるアプリがクラスタの一部みたいな感じで扱える
  • 何がうれしい?
    • build/push/podのimage更新といった手間を省ける
    • ローカルからリモートの他のサービスに接続しながら開発できる
    • ネットワーク経路がデプロイしたときとほぼ同じになる

Telepresenceの使い方

  • brewでおとせる
  • 起動のパターン
    • ローカルで起動したアプリ
    • ローカルデ起動下docker上で動くアプリ

Telepresence導入のポイント

ハマりポイント

  • port80を使う場合
    • 80は使えないので他のポートにする必要あり
  • 1podに複数コンテナある場合
    • defaultのcontainerが置き換わる
    • defaultじゃないのがいいときはオプションで指定
  • dockerを使う場合
    • mountが遅い

参考

Consul Kubernetes Integration and Consul Connect

Consulとは

  • hashicorpが作って
  • Conusulの機能
    • Service Discovery for Connectivity
    • Service Segmentation for security
    • Service Configuration for runtime configuration

Consul Connect

  • サービス間通信の暗号化や認可
  • サイドカープロキシ
  • Consul Connect Proxyの代わりにEnvoyも使える

Kubernetes Integration

分散イメージレジストリの検討 〜Beiran & Dragonfly〜

  • 安田 侑史@yupeji(クリエーションライン株式会社)
  • フルカン ムスタファ@furkanmustafa(Rainlab 株式会社)

背景

  • docker pullするの遅い
  • Peer to Peerでそれを早くする

Dragonfly

Kraken

Origin

  • Seeder
  • マルチクラスタしたときに別のところにデータをとれる

Tracker

  • どのデータがどのチャンクを持ってるか知ってる

Proxy

  • Docker Registry Interface

Beiran

  • 自作のライブラリ
  • peerにイメージ持ってるか聞き回る
  • 隣の人が持ってれば高速にインストールできる
  • dockerコマンドの頭にbeiranをつけて使う

「どこでもKotlin #7 〜Kotlin MPP特集〜」に参加してきました

  • どこでもKotlin #7 〜Kotlin MPP特集〜に参加してきました。

m3-engineer.connpass.com

タイトル 発表者
Kotlin/MPPでX-PF事始めのつまづきポイント yashims85 (モバイルファクトリー)
How to publish a Kotlin Multiplatform Library 荒谷 光 (サイバーエージェント)
DroidKaigi 公式アプリのKotlin Multiplatform takahirom (AbemaTV)
Kotlin/NativeのiOSにおけるオーバーヘッド 星川 貴樹 (エムスリー)

Kotlin/MPPでX-PF事始めのつまづきポイント

なぜKotlin/MPP?

  • いい感じにクライアントサイドをリプレイスしたいから

Kotlin/MPP構成

  • Android/iOSのクライアントアプリ
  • クライアントのプレゼンテーションルータ
    • KoRouter
    • VueRouterみたいなもの
  • KoRouter
    • commonMain
      • 成果物はmetadata
    • jvmMain
    • iosMain
      • Native向け
      • iOS
      • 成果物.framework
  • クライアントアプリ
    • commonMain
    • androidMain
      • jvmMainのサブセット
    • iOSMain
    • main
      • AndroidManifestが入ってるだけ
      • 成果物.aar

まとめ

  • 目的によって構成を変えよう
  • なにが同じライブラリかどこかにまとめておくとよい
  • kotlinx難しい

How to publish a Kotlin Multiplatform Library

MPPライブラリのパッケージ構成

MPPライブラリのGradleの設定

  • IntelliJだとKotlinの雛形選べる

まとめ

  • Kotlin1.3からはbuild.gradleは一つで
  • metadataの成果物はcommonのこと
  • androidの配布はreleaseを明示的に

DroidKaigi 公式アプリのKotlin Multiplatform

  • takahiromさん(AbemaTV)

Kotlin Multiplatformを導入しやすい構成に

  • Ktor-Client + kotlinx.serializationを使う
  • Andorid定番のRxJavaなどはMultiplatform非対応
  • Modelで使うクラスはKotlin Multiplatformで使えるものだけにする
  • Klockというライブラリで日時など扱える

Kotlin MultiplatformとDagger

  • Dagger
    • DIライブラリ

Dynamic feature module

  • 必要ないものはあとかダウンロードしてくる

APIの環境切り替え

  • iOSあるからAndroidのBuildConfigだけではだめ

ハマったこと

  • 古いiPhoneだと動かないとか

Ktolin Multiplatform使ってどうだったか

  • Kotlinで書いたクラスやメソッドがXCodeの補完がきく
  • キャストもうまく動いてる

Kotlin/NativeのiOSにおけるオーバーヘッド

  • 星川 貴樹さん(エムスリー)

マイクロベンチマークの結果

ラムダ式の比較

  • inline化するとあまり変わらなかった
  • inline化しないとKotlin遅い

in(contains)の比較

  • kotlinはだいたい遅い
  • contains使うなら定数化するとよい

forEachの比較

  • forEachとfor inとfor in step
  • Kotlinのほうが圧倒的に速い
  • 特にfor inとfor in stepが遅い
  • kotlinでもforEachは遅い

ツールの紹介

AppCode

Hopper Disassembler

相互運用のオーバーヘッド

  • SwiftからKotlinを呼ぶコード遅い
  • Kotlinのクラス生成が遅い

相互運用におけるオーバーヘッド

  • Kotlin/Native内で完結する処理は割と高速
  • Hopper便利