「Node学園 32時限目」に参加してきました

  • Node学園に参加してきました。

nodejs.connpass.com

  • 今回は、先日のReactConfから話題沸騰中のReact Hooksについてmizchiさんが解説してくれるということで、とても豪華なイベントでした。
  • 来月のNodeFest2018も楽しみです。
タイトル 登壇者
Node v11 and NodeFest introduction yosuke_furukawa
Node.jsで現実世界の”もの”を動かす話 9wick
React Hooks mizchi

Node v11 and NodeFest introduction

  • yosuke_furukawaさん

NodeFest2018

  • 11/23,24に開催

nodefest.jp

  • ロゴが変わった

Day1: Conference

注目のスピーカー
  • Anna
    • Workerを作った人
  • Rachel
    • Webの中のメディア系のところの話
    • WebGLとかWeb Audioとか
  • Daniel
    • TC39の中の人
    • Class Propertyとか
    • 一日一部屋貸し切り
      • 未知数枠
      • 大物たちが来てディスカッション?
  • Colin
    • libuvの中の人
  • 飯塚さん

Day2: Interactive Sessions

  • NodeとJSのディスカッション
    • 良いとこ悪いとこ改善点
    • 開発者と利用者でディスカッションできる
  • Code and Learn
    • nodeにコミットする
  • Handson
    • SPAとか
    • 海外から来る講師も(未知数)

Node.js v10/v11情報

  • v11はそんなにたいした変更はない
  • v10.0.0 ~ v10.12.0
    • http2
    • ESM
    • Worker追加
  • v11
    • v8のversion7対応
    • url moduleがdeprecated
    • TextEncoder/TextDecoderがglobalになった
    • queueMicrotask APIがexperimental
      • Promiseにタスクを積む

Stream/Promiseの親和性改善

  • for await ofでstreamを逐次処理
  • v10からStreamに追加されたfinished, pipeline APIがPromiseと親和性高い

for await of

for await (const k of readable) {
  data += k;
}

Stream finished API

  • エラー成功にかかわらず終了したらcallbackを呼べるようになった
  • callbackをPromiseにしてしまえばasync/awaitで扱える

Stream Pipeline API

  • before
rs.on('error', errorHandler).pipe(ws).on('error', errorHandler)
  • after
pipeline(rs, ws, (err) => {
  if(err) {
    // ...
  }
}

Node.jsで現実世界の”もの”を動かす話

  • 9wickさん

Nodeでできること広がってる

  • CLI: 一次元
  • Webサーバ: 二次元
  • ものを動かす: 三次元

ものを動かせると何ができるか

  • 現実に鑑賞できる
  • input
    • 音・温度・傾き・土壌・空気
  • output
    • 光・音・モーター・電光掲示板・ロボット

Nodeで動かせるデバイス

rasberry pi

  • 小さいPC
    • node動く
  • IO端子がついてる

arduino

  • PCでなくマイコン
    • node動かない
      • PCで操作する
  • 有線接続
  • IO端子

obniz

  • マイコン
    • node動かない
      • サーバで操作する
      • インターネット経由で
  • 無線接続
  • IO端子

DEMO

  • clovaでラジコン?を動かす

React Hooks

React Hooks

  • SFCでstateを使う
    • Class使わなくても状態を持てる
  • Dan先生
    • Reduxの作者
    • Reactのコアチーム

reactjs.org

  • ライフサイクルメソッドも使える
    • 毎回走るからComponentDidMount相当のもの作るのは大変
  • Vueでも同じものを作ろうという動きが・・・?
  • recomposeもうメンテされなくなる?
    • 今後はhooksで

今後

  • HOCは推奨されなくなる
  • React.Component -> Function Component

「We Are JavaScripters! @25th」に参加してきました

  • We Are JavaScripters!に参加してきました。

wajs.connpass.com

  • WeJSは来月で2周年とのことです!
タイトル 発表者
実践AST FlowtypeからTypeScriptへの移行 @れこ
Node.jsとイベントループ @hiroppy
JSでアニメーションに入門したい @atsuco
ServerlessでIsomorphicにGohanをKetteiしてみた @Seri-Nazu
スポンサーLT: @ブラウザから大容量ファイルを気兼ねなく送る話 Media Do
Google Chromeの履歴情報を抜き出す @camcam_lemon
TypeScriptのトランスパイルTips @sakito
javascriptの参照と値 @brn0227
高階関数の実践: パーサーコンビネータをつくってみた @chikoski

実践AST FlowtypeからTypeScriptへの移行

  • @れこさん(CureApp)

FlowからTypeScripに移行中

  • 中身はmonorepo
  • 量が多いからASTで自動的に変換

FlowとTSの違い

  • Flowは$から始まる特殊な型
  • TSはkeyof
  • 複雑なことしてるほど違いがある

Flow->TS

  • FlowをAST変換
  • babelのコマンドでできる
  • 全ての構文を漏れなくマッピングするのは難しい

AST

  • Abstract Syntax Tree
  • ASTのコードを書き換えるだけでFlow->TSへ変換させることができる
  • PrettierなんかもASTを活用してr

まとめ

  • AST活用してTS変換自動化できた
  • ベースとなる実装があればなんとかなる

Node.jsとイベントループ

  • @hiroppyさん(Dwango, Mercari)

イベントループとは

  • イベントループはメインスレッドで動いてる
    • ブラウザのJSとnodeで仕組みは違う
  • libuv
    • プラットフォームの違いを吸収してくれるやつ
    • 非同期IO

仕組み

  • イベントループのフェーズ
    • timers
    • pending callbacks
    • idle, prepare
    • poll
    • check
    • close callbacks
  • idle, prepare以外は設定されたcallbackが実行される
  • nextTickが一番最初に処理される

まとめ

  • Nodejsはlibvuを使ってる
  • 6つのphaseと2つのtick

JSでアニメーションに入門したい

  • @atsucoさん

アニメーションとは

  • 時間経過に伴いある値を0~100%の間で変化させること
  • 始点、変化量、時間で表される

Webでアニメーション

  • CSSアニメーション
    • 宣言型アニメーション
    • 軽い簡単 -途中で止めたりとかは苦手
  • JSアニメーション
    • 命令形アニメーション
    • 表現力豊か

アニメーションができるJS

  • $.animation()
    • いにしえ
  • Velocity.js
    • 軽い$.animationと互換
  • anime.js
    • 軽い$.animationと互換なし
  • Web Animations API

jsでアニメーション重い?

  • 変化させるプロパティを考える
  • クリティカルレンダリングパス
    • レイアウト
      • 他の要素も影響受けるので再計算されて重い
    • ペイント
      • 他の要素に影響しないので軽い
    • コンポジット
      • opacityは再描画を誘発しない
  • setTimeout()やsetImterval()ではなくrequestAnimationFrame()を使ったほうがよい
    • anime.jsはrequestAnimationFrameを使ってる

ServerlessでIsomorphicにGohanをKetteiしてみた

  • @Seri-Nazuさん(Media DO)

お昼何食べるか迷うじゃないですか

良かったところ

  • Lambdaすごい
    • サーバのこと何も考えなくていい
  • API Gatewayすごい
    • CORSの設定をGUIで一発

まとめ

  • サーバを一秒も考えずに作れた
  • Lambdaガンガン使っていきたい

スポンサーLT: @ブラウザから大容量ファイルを気兼ねなく送る話

  • 泉さん(Media Do)

メディアデュとは

  • 電子書籍の中継
  • 単行本とかだと200-300枚の画像ファイル
  • 画像はFTPで、メタ情報はメールで受け取ってる
    • 出版業界まだアナログ
    • Webアプリ化したい
  • 多くの画像ファイルをどう送るか
    • S3に送ってしまう
    • サーバ負荷気にしなくていい
  • CognitoとS3を使った

Google Chromeの履歴情報を抜き出す

  • @camcam_lemonさん(日本事務器)

ブラウザ何使ってますか?

  • Chromeはいろいろな情報が記録される

History

  • 実態はDBファイル
  • 複数アカウント使い分けても一つのファイル
  • urlsテーブルに閲覧履歴が記録される

Webアプリと連携

  • Historyの情報をWebアプリと連携
  • nodeでHistoryを取得
  • Chromeがファイルを掴んでるからコピーしてから操作
  • データ量めちゃくちゃ多いからそのまま出すと落ちる

TypeScriptのトランスパイルTips

  • @sakitoさん(yahoo)

ts-loader

  • webpackでTSをトランスパイルする時に使う
  • 高速化
    • transpileOnlyをtrueにする
    • HappuPackを使うとトランスパイルと型チェックを並列化できる

awesome-typescript-loader

  • webpackでTSをトランスパイルする時に使う
  • ts-loaderよりts+babelがやりやすい

babelでtsをトランスパイル

  • babelのコンパイラでtsをトランスパイルできる
    • 型チェックは行われない
  • @babel/preset-typescript
  • 一部まだ未対応なので注意

まとめ

  • ts-loader or awesome-typescript-loaderがベター
  • babelを使う時はデメリットを理解して使う
    • 型チェックは別でやること

javascriptの参照と値

参照と値

  • オブジェクトごとにどちらを使うか決まってる
  • 参照
    • Objectを継承したもの
    • 参照は同じものを見続ける
    • string, number, boolean

MutableとImmutable

  • 変更できる値とできない値がある
  • string, number, booleanは変更できない
    • stringは内部的には参照渡ししてる

高階関数の実践: パーサーコンビネータをつくってみた

  • @chikoskiさん

高階関数

  • 関数を扱う関数
  • S式
    • 木の書き方の一種
    • (+ 1 2 (+ 3 4 5) (- 4 3 ) (/ 4 2))
  • AST
    • Abstract Syntax Tree

まとめ

  • 関数は部品
  • BNF読めると便利
  • 単機能を組み合わせて複雑な機能を作ってくといい

「MANABIYA #2 - day3」に参加してきました

  • MANABIYA #2に参加してきました。

manabiya2.peatix.com

  • 10/19-21まで3日間開催されるイベントの3日目の参加レポートです。
  • day2のレポートははこちらに書いています。
時間 タイトル
0限目 (11:20 - 11:30) 【3-0】オープニング
1限目 (11:30 - 12:10) 【3-1】IoT × AI
2限目 (12:30 - 13:10) 【3-2】Web × モバイル
3限目 (13:30 - 14:10) 【3-3】Special Session:リクルートテクノロジー
4限目 (14:30 - 15:10) 【3-4】プログラミング × ブロックチェーン
5限目 (15:30 - 16:10) 【3-5】IoT × セキュリティ
6限目 (16:30 - 17:10) 【3-6】Special Session:キスモ
7限目 (17:30 - 18:10) 【3-7】インフラ × AI
8限目 (18:30 - 19:10) 【3-8】IoT × ブロックチェーン
放課後 (19:30~21:00) 懇親会

【3-1】IoT × AI

登壇者

  • IoT
    • 菅原 のびすけさん(@n0bisuke)
    • 中村 晃一さん(@9_ties)
  • AI
    • 五木田 和也さん(@kazoo04)
    • 中原 啓貴さん

議題

IoTで使うようなコンパクトなコンピューターの中でAIを実装するのと、外(クラウドなど)で実装するのでは、それぞれどんなものを作るのに向いてるのか?
各実例としてはどのようなものがあるのか?
コンパクトなコンピューターの中でAIを実装するには、どんなライブラリ等を使えばいいのか?
最先端の研究事情

最新のIoT × AI

  • ラズパイ上でAIを動かせる
    • リアルタイムに画像認識

youtu.be

  • ARのグラスで見ているものをリアルタイムで3Dで表示させる
    • 熱を持たないとか軽いとか
  • コミュニケーションロボットにAIを入れたいというのが多い
  • ハード界隈でできることとソフト界隈でやりたいことのギャップ
    • 熱問題ファン入れればいいけどマイクにノイズ入っちゃうとか課題も
  • 音声の認識
    • 誰が話してるとか話し始め終わりの検知はできる
    • 文字に起こすのは大変
    • エッジ側で必要なとこ抽出してクラウドに送るとか
      • 音声送り続けると通信量大きすぎる
    • 人間は脳の中で補正をかけてる同じことをしないといけないから難しい

エッジでやるかクラウドでやるか

  • 画像認識の場合全部クラウドに送るのはない
    • 次々送るとコストが大きすぎる
    • プライバシー的にもよくない
  • 画像とか音声はエッジで処理してからクラウドに送るのがいい

【3-2】Web × モバイル

登壇者

  • モバイル
    • 七島 偉之さん(@jollyjoester)
    • 岸川 克己さん(@k_katsumi)
  • Web
    • 古川 陽介さん(@yosuke_furukawa)
    • 宇都宮 佑亮さん(@uskay)

議題

サービスやシステムを作る際、Webアプリとモバイルアプリ、それぞれでは一体何がどう違ってくるのか?
Webとモバイル、どう棲み分けるべきか?何をWebでつくり、何をモバイルでつくるべきなのか?
今後、Webとモバイルを統合していく方向で考えると、どのようなことが困るのか?また、どう作るのがベストなのか?

モバイルとWebの違い

  • 配布の手間の違い
    • ストアからインストールしないといけない
    • リンクにアクセスすればすぐに使える
  • アプリでしかできないこと
    • バイス機能へのアクセスのしやすさ
    • Webも頑張ってるけど
  • モバイルとWebのUXの違い
    • Webの方がもっさりするとか
  • Webの世界もレスポンスには厳しくなってる
    • RAILモデル
    • Lighthouse

developers.google.com

developers.google.com

  • モバイルでもLighthouseみたいなのあるのか?
    • IDEの機能でできる
  • モバイルのCI
    • AndroidだとCIでビルドとかやりやすい
    • iOSMacじゃないと
  • パフォーマンスバジェット

html5experts.jp

  • モバイルはUIのコンポーネントが標準化されてる
    • ブラウザはデフォルトのボタンそのまま使うことなんてない
    • submitの動きもそのまま使うことなくてpreventDefaultする
  • storyboardのようなものWebでもないのか

  • iOSはアプリとWebに線を引いてる感じでAndrodはそうじゃないように見える

    • MaterialDesignはアプリもWebも対応
    • ServiceWorker対応のスピード感とか
  • 課金について
    • 価値を感じないと課金してくれない時代
    • インストールは無料にしないと
    • +αで課金してもらう
  • アプリはイニシャルキャッシュがあるWeb
    • インストール時にキャッシュをとってるだけと受け取れば
  • ReactNativeとかFlutterはどうか?
    • 単純ならいいけど結局ネイティブしらないとつらくなる
    • Swift/Kotlinを学ぶことのハードルを高く持ち過ぎなんじゃないか
  • AMP as PWA
    • AMPをSPAFWと同じレイヤーで見るといいかも
  • Webで画像の加工

developers.google.com

「MANABIYA #2 - day2」に参加してきました

  • MANABIYA #2に参加してきました。

manabiya2.peatix.com

  • 10/19-21まで3日間開催されるイベントの2日目の参加レポートです。
  • このイベントは以下の2つの特徴がありました。
    • 全てパネルディスカッション形式
    • 2つの分野のプロフェッショナルが同時に登壇しそれらを組み合わせることがテーマ
  • 私はWebエンジニアですが普段の勉強会では深入りされないようなところまで聞けて勉強になりました。
    • たとえばアプリ開発の効率化についてAIの専門家が、それくらいなら近い将来できるようになる等即答してくれたり
  • あとは、ディスカッション形式ということで各分野の先駆者の思いをふんだんに聞くことができたのも良かったです。
時間 タイトル
0限目 (11:20 - 11:30) 【2-0】オープニング
1限目 (11:30 - 12:10) 【2-1】Web × インフラ
2限目 (12:30 - 13:10) 【2-2】モバイル × XR
3限目 (13:30 - 14:10) 【2-3】Web × AI
4限目 (14:30 - 15:10) 【2-4】Special Session:Datadog
5限目 (15:30 - 16:10) 【2-5】XR × AI
6限目 (16:30 - 17:10) 【2-6】プログラミング × インフラ
7限目 (17:30 - 18:10) 【2-7】Special Session:ジーズアカデミーTOKYO
8限目 (18:30 - 19:10) 【2-8】Web × XR
9限目 (19:30 - 20:10) 【2-9】モバイル × AI
10限目 (20:30 - 21:10) 【2-10】プログラミング × Web
放課後 (21:30 - 21:40) クロージング
  • 以下ディスカッションのメモです。Web以外は素人なので正確でないところもあるかもしれません。

【2-1】Web × インフラ

登壇者

  • Web
    • 古川 陽介さん(@yosuke_furukawa)
    • 森 久太郎さん(@qsona)
  • インフラ
    • 池添 正隆さん
    • 田中 邦裕さん(@kunihirotanaka)
    • 長尾 俊さん(@shun_metal)

議題

レイヤーの違う人/チームはどのように連携をとるのがいいのか?各現場ではどのような工夫をしているのか?
コンウェイの法則があるが、各現場ではどのような組織構造にし、どのようなコミュニケーションフローをとっているのか?
フロント、インフラの人たちがそれぞれ歩み寄るにはどうしていくべきか?

BFF

  • Backends for Frontends
    • フロントエンドのためのサーバ
    • 誰が面倒見る?
    • 組織構造にも関わってくる
  • docker使う
  • フロントエンドはビルド周りがすぐ変わる
    • なんで変わってるのかちゃんと共有すれば理解し合える

https

  • https everywhere
  • Let's encrypt
    • 自動で更新してくれるのがいい
  • 広告業界httpsでないと配信できなくなってる
    • mixed contentになる心配はない
    • httpsしか対応しないというGoogoleからの圧力
  • ハードウェアアクセラレーターを使っていると新しいWebの仕様に対応できない
  • 内部の通信までhttpsにするか
    • そこまでできた方がセキュアではある
    • でもそこまで考えられてない現場の方が多そう

フォールトトレランス

  • カオスエンジニアリング
    • 本番のサーバをあえて落としてみる
    • それでもうまくいくことを確かめる
  • バックアップしてるけどリストアちゃんとできるか

【2-2】モバイル × XR

登壇者

  • XR
    • 比留間 和也さん(@edo_m18)
    • 西川 美優さん
    • 福田 浩士さん(@okomesan)
    • 森本 俊亨さん(@ok_totti)
  • モバイル
    • 七島 偉之さん(@jollyjoester)

議題

ざっとしたVR・ARの現在の情勢おさらい
XRモバイルアプリの最前線では、どのようなアプリが出現しているのか?
スタンドアローン版も目立ってきている中で、そうでないものとどう棲み分けていくのか?
モバイルでのXRアプリ開発には、どのような技術を使うのがベストか?
HMD(ヘッドマウントディスプレイ)もコントローラーも6DoFとなるものの登場も予定されているが、それによりXRはどう変化するのか?

AR

  • リアルタイムに遠くにいながら落書きを共有できるサービスとか
  • 空に絵が書けるとか
  • ARの方が技術詳しくない人にもわかりやすいコンテンツが多い
  • 今は若い層が多く使われてる
  • ARだと思わないで使われてるのも多い
    • snowとか

モバイル

  • インカメラのAR
  • アウトカメラのAR
  • スマホにどんなセンサーがあるか
  • ARKitは空間を認識するだけ
    • コンテキストを理解して何を出すか考えないといけない
    • そうしないと継続して使われない

ARの活用

  • ARが当たり前になるとあらゆる産業に影響を与える
  • 体のあらゆるところにセンサーつけて動きをトラッキング
    • それらのコントローラとしてスマホ
  • ARグラスいつくる
    • 世界をだいぶ待たせてる
    • いろんな課題
  • スマホ -> HMD -> ARグラス

【2-3】Web × AI

登壇者

  • Web
    • 古川 陽介さん(@yosuke_furukawa)
    • 倉見 洋輔さん(@quramy)
  • AI
    • 五木田 和也さん(@kazoo04)
    • 廣瀬 一海さん(@kazumihirose)
    • 横井 羽衣子さん

議題

Tensorflow.jsがあるが、なぜあまり現場で使われないのか?Tensorflow.jsは今後はどう展開されていくのか?
AIの活用で、Webプロダクトにおけるユーザー体験を向上させるようなことは何かできないのか?
AI関連のWebプロダクトを開発するときに気をつけなければならないことは?

WebパフォーマンスとAI

  • Webには光の速度の壁がある
    • 予測して先読みでそれを超えられないか
  • SPAはビルドしてバンドルするのが必須
    • どういうサイズでバンドルするか
  • タップしたら認識するんじゃなくて加速度検知して読み込みを始める
    • dev.toの例
    • GoogleMapは下にスクロールしてると、次も下だろって先読みする
      • そいういことを普通のWebでもできないか
  • ゲームとかの方が進んでる

AIを活用したプログラミングの効率化

www.ailab.microsoft.com

  • 手書きの画面をHTML化

sketch2code.azurewebsites.net

github.com

  • github上のコードを学習し悪い書き方を指摘したりコード補完したり

visualstudio.microsoft.com

www.publickey1.jp

stand-4u.com

職員室(本編の後の個別ディスカッション)

  • いろはす問題
    • 特徴がなさすぎていろはすを判別するのが難しい
    • 独自でボトルの形状とかを考えてモデルを作ったらうまくいっている
      • 特徴点が少ないものは自分でモデル作ったほうがいい
  • モバイルでAIを動かす
    • デモであったMSのサービスだとTensorflowでエクスポートできる
      • Tensorflow.js使えばすぐに動かせる
    • サイズの大きさが課題
    • 圧縮したら数十MBとか数百KBまで減らすことはできる
      • ただし精度がさがってしまう
    • 5Gが来たら重いものはサーバ側に戻る時代も来るかも
  • AIが判断する根拠をどうやって説明するのか
    • 自分がバナナをバナナと判断するロジックを説明できるかというとできない
      • 人間の脳がベースだからそれと同じ
    • モデルのバースとなっているのは世の中にあるデータ
      • AIの判断が性差別とかするのは世の中のデータを映している

【2-6】プログラミング × インフラ

登壇者

  • プログラミング
    • 清水 智公さん(@chikoski)
  • インフラ
    • 田中 邦裕さん(@kunihirotanaka)
    • 仲山 昌宏さん(@nekoruri)
    • 松本 亮介さん(@matsumotory)

議題

IaC(Infra as Code)という言葉がよく出てくる「DevOps」や「SRE」とは、それぞれ一旦何なのか?どう違うのか?
SRE / DevOpsは現場では実際どのように行われているのか?ハマりポイントはあるのか?
IaCについて
    設定とコードは何が違うのか?
    作ったコードの正しさはどう担保するのか?
    インフラのデバッグはどのようにやるのか?
    コードの再利用は効くのか?
    アセットストアのようなソリューションストアが将来できると思うか?できた時にインフラエンジニアは存在しうるのか?

IaC

  • infrastructure as Code
  • インフラの設定をコード化する

DevOps

  • AWS等が出てダイナミックにインフラを作れるようになった
    • どう管理するかが課題になった
    • コードで書いた
      • どうテストするか?
      • 開発のプロセスと一緒だね
      • DevもOpsも同じ考え方でできる

SRE

  • Googleが提唱
  • DevOpsの中の一つのアプローチ

開発スキルと運用スキル

  • ある程度までは広く知っておくべき
  • 車の運転のしかた一通り知ってないと免許持てない
    • エンジンの解体はできなくてもいい
  • 全員に無理やりプログラミングさせるのもよくない
    • プログラミングで改善したいと思ってる人ができるように

IaCの信頼性

  • コードで書くと信頼性の不安になる要素を増やすことになる
  • クラウド使うならクラウドベンダーが担保してくれてる

【2-7】Special Session:ジーズアカデミーTOKYO

テーマ

  • Output learning

G's ACADEMYの紹介

youtu.be

G's ACADEMYの学び

  • 記憶力
  • 判断力
  • 独創力
    • 想像力(Imagination)
    • 創造力(Creative)
    • ここが重要
  • いろんな課題が週に2回
    • みんな課題よりもっとすごいのを作ってくる

プログラミング学習のポイント

  • とにかくコード書く
    • 理解 < 体験
  • 作りたいものを作る
    • 考える < 行動
  • スポーツで例えると
    • 最初は試合して楽しむこと
    • 試合で困ったことがあれば練習で補う
    • 試合・・・コードを書き作ること
    • 練習・・・基礎知識を調べる
  • 学習のスパイラル
    • まず試すDEMO作る(学習)
    • 実際に動かしてみる(検証)
    • 足りない部分に気づく(分析・新しい学習)

【2-8】Web × XR

登壇者

  • XR
    • 比留間 和也さん(@edo_m18)
    • 古林 克臣さん(@korinVR)
    • 杉本 雅広さん(@h_doxas)
  • Web
    • 古川 陽介さん(@yosuke_furukawa)

議題

WebとXRをかけあわせることで、どんな良いことがあるのか?
WebXRはどうやって作っているのか?
WebVR/AR、どんな実例が生まれてるのか?
WebVR/ARの課題はどのようなもの?
WebエンジニアがWebVR/ARエンジニアになることはできるのか?

WebとXR

WebXRどうやって作る

  • WebVR API
    • HMDとブラウザをバイパスるもの
    • 傾きをブラウザへ伝えたいとか
    • 表示する内容があってそれをどこに出すかの制御
  • WebXR
    • もっと広い
  • 60fps出さないとダメなの?
    • 60じゃ足りない
  • ダウンロードにかかる時間
    • ローディングが長くなる
    • 見られる前に閉じられちゃわないか
    • webpackaging活用できないか
      • 一部をp2pで一部をダウンロードしてマージするとかできたら高速化できそう
      • -> 現状ではまだそこまで仕様は進んでない
    • ServiceWorkerでできるだけキャッシュしておくとか
  • safariでUSDZと入れるとVRが体験できる

WebエンジニアがWebVR/ARエンジニアになれるか

  • 難しい
  • 3Dがまず難しい
  • Unity使うと容易にできる

WebVR/ARの未来

  • インストールなしで使えるのがいい
  • ハイパーリンクの機能
    • VRコンテンツに対してリンカブルなのがいい
    • VR空間を閉じずに維持したままリンクで移動できる
    • VR in ARとかできたりしないか

【2-9】モバイル × AI

登壇者

  • モバイル
    • 七島 偉之さん(@jollyjoester)
  • AI
    • 我妻 幸長さん(@yuky_az)
    • 五木田 和也さん(@kazoo04)
    • 小西 祐介さん
    • 染谷 悠一郎さん

議題

端末側に機械学習を組み込むことはできるのか?
モバイルへのAI活用実例
研究レベルの最先端ではどのようなことが考えられているのか?
今後、モバイルにおいて、AI/機械学習をどのように活かしていくべきか?

モバイルとAI

  • モバイルに入れる場合モデルサイズの問題がある
  • 大きなファイルの配信は避けたい
  • 重い処理はクラウドでやってくのが技術的にも普通
  • ニューラルネットワークの蒸留というテクニック
    • 圧縮みたいなもの
    • 精度が上がることもある(謎)

どこで処理をする

  • 基本はモデルはクラウドにある
    • 学習したり計算したりは重い
  • モバイル端末の計算能力上がってきてる
    • エッジデバイス上で完結させたいというニーズもある
    • リアルタイム性が求められる場面
  • エッジデバイス上でやるならモデルをダウンロードしないといけない
  • 端末上でも学習できたら面白い
    • 既存のモデルに微調整
    • 個人にカスタマイズ
  • 端末上でやるとバッテリー消費激しいという課題もある
  • ケースバイケースで使い分けないといけない
  • 端末側で処理するとモデルの中身が見られちゃうというリスク

プライバシーについて

  • 画像の判定をするには画像をサーバにあげないといけない
    • ユーザは勝手にクラウドに上げられるのは怖い
    • 運用者も画像を持つのはリスク
  • 端末側で完結すればアップロードの必要がなくなる
  • 画像から抽出できる特徴量の状態にしてサーバに送る

多数のデバイスで分散して学習

  • Webページ開いてる間裏でマイニングしてた件みたいに、裏で機械学習させるとかはないか
  • 課金したら広告消すみたいな感じで裏での機械学習を許可したら広告消すとか
  • 分散して学習をさせるメリットがどれだけあるか

【2-10】プログラミング × Web

登壇者

  • プログラミング
    • 清水 智公さん(@chikoski)
    • Linda_ppさん(@Linda_pp)
  • Web
    • 古川 陽介さん(@yosuke_furukawa)
    • 川口 和也さん(@kazu_pon)

議題

WASMの近況はどうなっている?
WASMの利用例について知りたい!
    vim.wasmの話
        移植してみての苦労話
        追加したコードと、消したコードについて
    Vue + WASMの話
        フレームワークでの利用例
        WASMをフレームワークに組み込む理由
WASMのこれからはについて教えてください!
    Webアプリに計算スピードは必要?
    使えるとしたらどこなのか?
    開発には組み込まれていく?
    どう組み込むといいのか?

WebAssemblyとは

  • ブラウザで動かすにはJSじゃないとダメだった
  • WebAssembly形式もブラウザは処理できる
    • メジャーなブラウザなら使える
    • node上でも動く
  • 特徴
    • バイナリ
    • コンパイルして作る
    • いろんな言語から作ることができる
      • RustとかGoとかKotlinとか
    • コンパイルしてるので速い
    • Cの資産を使える
    • 足し算掛け算とかの単純なことしかできない

WebAssemblyにどんな期待を持ってるか

  • 新しい処理系
  • ブラウザ上で動く
  • JSはファイル全体がダウンロードされないと実行されない
    • WebAssemblyはストリーミングに実行できるのが良い
  • WebAsseblyのポータビリティに期待してる
    • RustやGoでも動くというのが面白い

Vim.wasm

  • ブラウザで使えるvim

https://rhysd.github.io/vim.wasm/

  • コード

github.com

  • 紹介記事

rhysd.hatenablog.com

  • canvasを置いてそこにJSを書く
  • イベントのハンドリングはJS
  • ブラウザとやり取りするところはJSで
    • JSで書いたコードを呼び出すことはできる
    • CのコードとJSのコードをつなぐことができる
  • スリープができないのが苦労した
    • emscriptenの機能で力技で提供しているスリープを使った

Vue + WebAssembly

  • Vueでの課題
    • DOM操作のパフォーマンス
    • WebAssembly使ったらどうかという話がでている

Webアプリのパフォーマンス上げるのにWebAssemblyが使えるか

  • 動画とかをストリーミング
  • 暗号複合処理
  • クラウドゲーミング
    • 導入例もある

WebAssemblyを開発で使う

  • デバッグがしんどい
    • テキスト形式で見ることはできる
    • それ以上は見れない
    • 地道にconsoleにいろいろ出してくしかない
  • AssemblyScript
    • TypeScriptみたいに書ける

github.com

「KotlinConf 2018 報告会」に参加してきました

  • KotlinConf2018報告会に参加してきました。

kotlin.connpass.com

  • 10/3-5にオランダのアムステルダムで開催されたKotlinConfの報告会に参加しました。
  • Androidやサーバサイド等テーマ別にお話いただけたのでKotlin界隈のキャッチアップをすることができました。
  • 個人的にはサーバサイドKotlinはこれまでSpring一択かと思ってましたがKtorも注目されてるということで使ってみたいなと思いました。
タイトル 発表者
KotlinConf 2018 カンファレンス概要とトピックOverview 日高正博
KotlinConf 2018 のワークショップに参加してきました あんざいゆき
KotlinConf 2018 Android編 岩谷明
KotlinConf から見る、最近の Kotlin サーバーサイド事情 川田裕貴
Kotlinのユニットテスト ベストプラクティス 長澤太郎
build.gradle.kts Panini

KotlinConf 2018 カンファレンス概要とトピックOverview

  • 日高正博さん(メルカリ)
  • @mhidaka

伝えたいこと

  • KotlinConfの空気感
  • 基調講演おすすめトピック

KotlinConf2018

  • オランダのアムステルダム
  • 2018/10/3-5
  • 直行便なら11~12時間
  • 時差7時間
  • 今年で2回目
  • 参加者1200人くらい
    • 日本人は20人くらい
  • 動画も公開されてる

https://www.youtube.com/playlist?list=PLQ176FUIyIUbVvFMqDc2jhxS-t562uytr

おすすめセッション

Keynote

youtu.be

  • Kotlinの概要
  • Kotlinがどれくらい成長してるか
  • Kotlin1.3の話

Kotlinアーキテクチャ

youtu.be

コルーチン

youtu.be

KotlinConf 2018 のワークショップに参加してきました

  • あんざいゆきさん(uPhyca)
  • @yanzm

Workshop

kotlinconf.com

  • workshopは今年から
  • 初日がworkshop
  • 649ユーロ(8万くらい)
  • 9時-17時
  • 朝食昼食つき
  • 5種類のworkshopで講師は豪華
    • コルーチンだけsoldoutしてた

コルーチンのworkshop

github.com

  • スライド

github.com

  • デスクトップアプリとデモ集

KotlinConf 2018 Android

  • 岩谷明さん(LINE)
  • @hoshi_gaki

LINE LIVE

Androidのセッション

Android Suspenders by Chris Banes

youtu.be

  • なぜコルーチン使うのか
    • I/O処理によい
    • Androidという限られた中でスケール
    • Rxより書きやすい
  • Androidでどうやってコルーチンを使うか

Shaping Your App's Architecture with Kotlin and Architecture Components by Florina

youtu.be

  • なぜコルーチン使うのか
    • rxより簡単だから
  • どこでコルーチン使う
    • ほぼ全部に使っていこう

Android KTX: A Dash of Kotlin Makes All the Difference! by Dan Kim

youtu.be

  • AndroidXでKTX1.0

KotlinConf から見る、最近の Kotlin サーバーサイド事情

  • 川田裕貴さん(LINE)
  • @hktechno

KotlinConfの感想

  • サーバサイドの話も思ったよりあった
  • 何かをやってみた系が多くてあまり深い話ではなかった
  • コルーチンがあつい

ServerSideKotlin

  • JVMの上で動くところがいい
    • パフォーマンス的な問題があまりない
  • ServerSideKotlin何で書いてる

  • Ktorの成長に期待

    • コルーチン使うならKtor
    • jetbrainが作ってる
  • SpringBoot + Kotlin

youtu.be

  • API/Microservicesのセッションも
    • RESTに否定的
  • Microservices

youtu.be

  • GraphQL

youtu.be

  • Zipkin便利
    • Microservices間のトレーシング
  • Kotlin/Nativeの可能性
    • コルーチン周りがまだつらそう
    • ライブラリの成熟に期待

Kotlinのユニットテスト ベストプラクティス

  • 長澤太郎さん(Ubie)
  • @ngsw_taro

Unit Testのセッション

youtu.be

  • JUnit4でJava風なテスト
  • JUnit4は毎回インスタンスが生成される
  • JUnit5を使いましょう
    • TestInstance
  • テスト関連のライブラリ
    • いろいろあるけどどれも良い
    • JUnit5 + MockK + AsserrtJがおすすめ
  • MockK
    • モック生成は一度、都度リセットする
      • スピードアップ
  • AsserrtJ
    • データクラスアサーション
      • データクラスで表示されるのでエラー時の情報がわかりやすい

まとめ

  • JUnit5を使う
  • ボイラープレートを避けよう
  • lateinitやvarを避ける
  • モックの生成を繰り返さない
  • データクラスで比較すると読みやすいエラーメッセージ

「NuxtMeetup#5」に参加してきました

  • Nuxt Meetupに参加してきました。

nuxt-meetup.connpass.com

  • 今回は具体的な実装よりも、なぜNuxtを選択するのかといった話や実運用での苦労話多くありました。
  • 実運用している方の踏み込んだ話が聞けて参考になりました。
タイトル 発表者
バンドルファイルの肥大化問題解消にみるNuxt.jsの成熟化 Wakamatsu Hisashi
フロントエンド(実稼働)までひとりでできるもん hiroki_yoshitug
Vue or Nuxt masaakikunsan
Vueを広めるためのNuxt.jsの可能性 かめぽん
Nuxtを使っていて地味にハマった小ネタの紹介 Yuki Terashima
nuxt-i18nを使ったWebサイトの多言語化 odan
NuxtでのJAMStackな開発とポイント Tame

バンドルファイルの肥大化問題解消にみるNuxt.jsの成熟化

  • Wakamatsu Hisashiさん

Nuxt2

  • webpack4
  • ESModules
  • babel7

Nuxtのメリット

  • SSR手軽にできるのは大きなメリット
    • VueCLI3も便利だけど

Code Splitting

  • 柔軟性を欠いていた(v1)
    • ファイル肥大化
  • maxChunkSizeを指定できるようになった(v1.2.1~v1.4.1)
    • http2環境でないと良さを活かしきれない
  • optimization.splitChunkの仕様に沿って指定できるようになった(v2)

Nuxtを使う上で大事なこと

  • 便利に使えるけど内部がどうなってるかわからない
    • node_modules/nuxt配下にどんな初期値が設定されてるかも見るよい

フロントエンド(実稼働)までひとりでできるもん

  • hiroki_yoshitugさん

DODA

技術スタック

  • Nuxt(SSR)
  • PWA(nuxt-pwa-module)
  • express
  • mysql

Nodeサーバのかどう

  • マルチプロセスで動かす
  • 80port使えるのか?
  • クラスタ構成で上手くロギング

マルチプロセスで動かす

  • npm run startだと持て余してしまう
  • クラスタモードで起動する
  • PM2を使う

80port使えるのか?

  • well known portはroot必要
  • authbindを導入してpm2のエイリアスを設定することで一般ユーザでできる

クラスタ構成で上手くロギング

PM2でできること

  • プロセス監視
  • ファイル変更時に自動でプロセス再起動
  • メトリクスの設定

Vue or Nuxt

  • masaakikunsanさん(SCOUTER)

VueとNuxtの動向

  • どちらも上向いてる

Vueのメリット

  • 公式のエコシステム豊富

Nuxtのメリット

  • Webpackやbabelが隠蔽
  • SSRが簡単
  • routing自動生成
  • 規約があること

Nuxtを選択した方がいいケース

  • SSRしたい
  • SEO気にする
  • Vueに精通してる人が多い
  • 静的サイトを作りたい
  • routerが便利だから?
    • vueでも便利なライブラリはある

github.com

Nuxtを選ばないほうがいいケース

  • SEO気にしない
  • 設計を自分でやりたい
  • Vue初心者が多い
  • TS使いたい

まとめ

  • SEO/SSR以外の時はNuxtじゃないといけない理由はない
  • Nuxt便利だからって思考停止してませんか?
  • よく考えてVue/Nuxtでハッピーライフを

Vueを広めるためのNuxt.jsの可能性

  • かめぽんさん

Vue/Nuxtをなぜ拡散させる必要あるか

  • フロントエンドが居やすい環境
  • jQueryにより弊害を激減させる
  • 組織をドライブさせるため
    • 適切な技術は適切な人を呼ぶ

Nuxtの組織に与えるインパク

  • 劇的な親しみやすさ
    • Vueだから
  • 規約で意識の共通化
    • 初心者でも爆発しづらい
  • 圧倒的スピード
    • スターターの充実

まとめ

  • 新しい技術を定着させるのは時間と体力がいる
  • Nuxt使うと早い

Nuxtを使っていて地味にハマった小ネタの紹介

  • Yuki Terashimaさん

地味なハマりポイントがある

GTMの設定

Lambda上で動かす

  • AWS Lambda上で動かしている
    • 実例が少ない

500エラーの挙動

  • layouts/error.vue
  • SSRしてるとファイルが読み込まれない
    • それだと困る
    • app/views/error.htmlで解決する
    • nuxt.config.jsのsrcDirがapp app/app/views/error.htmlじゃないとダメ

まとめ

  • Nuxtは変なところでハマることもあるが基本的に使いやすい
  • 公式読めばだいたい分かる

nuxt-i18nを使ったWebサイトの多言語化

  • odanさん

i18n

  • internationalizationの略
  • 言語、時差、名詞の複数形

vue-i18n

github.com

  • messagesに入れておけば自動的に入れ替わる

nuxt-i18n

github.com

  • 日本語情報が少ない
    • つい最近qiitaの記事が出た

qiita.com

  • ルーティングの自動生成
  • 便利関数
  • SEO対策の機能

NuxtでのJAMStackな開発とポイント

  • Tameさん

JAMStack

NuxtとJAMStack

  • NuxtとJAMStackは相性が良い
    • ディレクトリ構成がルール化されている
    • 静的ファイルも生成できる

Nuxtでサイトを公開するパターン

  • SPA
  • SSR
  • JAMStack

NuxtでJAMStack

  • Nuxt + Netlify + Contentful
  • gitにpushするとNetlifyにデプロイ
  • Netlifyのprerenderingを使ってデプロイ時に記事を生成

「ABC 2018 Autumn in KAWASAKI」に参加してきました

  • Android Bazaar and Conference 2018 in KAWASAKIに参加してきました。

abc.android-group.jp

  • Androidのイベントではあるものの、IoTメインにAIやPWA、Kotlin、Flutterと幅広い分野のセッションが用意されていました。
  • エンジニアだけでなく大学講師や総務省の方も登壇されていて普段と違った角度の話を聞くことができました。
1階ホール 9階第2研修室 9階第3研修室
IoT機器との連携で広がるAndroidの可能性と懸念される脅威への対策
吉岡克成
- -
データ主導社会の実現に向けて
谷脇康彦
- -
使おうWatson!
西戸京子
AI Car Race
佐々木陽
スマホでもスピーカーでも!誰でもできるGoogleアシスタントアプリ開発
里山南人/一円真治
ICT社会、次の10年に求められるモバイルの役割
木暮祐一
毒舌女エンジニアのアブない副業セミナー 〜資本主義社会上等〜
長尾ユリコ
Sketchでアイコンを描こう!
山本麻美
PWA A Go-Go!!
進藤 龍之介
Androidで広がる車のアプリ開発 ~SDL対応アプリ開発入門とAndroid Auto~
柴田 文彦
Android Pie時代のUIデザイン
佐藤伸哉
KotlinConf2018最速レポート&Kotlin最新情報
藤原聖
農業IoT”みどりクラウド”成功の裏側~PoCから始めるIoTビジネスの実現~
持田宏平
Flutterアプリ開発 実践編
神原健一

IoT機器との連携で広がるAndroidの可能性と懸念される脅威への対策

  • 吉岡克成さん(横浜国立大学/大学院環境情報研究院/先端科学高等研究院 准教授)

IoTデバイス

  • IoTデバイスの数が2020年に400億をこえる
    • 今はスマホや通信インフラが多い
    • 今後は家電やPC周辺機器、IAや照明等産業用途のものが伸びる

IoTとサイバー攻撃

  • 大学にサイバー攻撃の観測すステムがある
  • 感染した機器からの攻撃が来る
    • ネットワークストレージ
    • 太陽光発電管理システム
    • 電力需要監視システム
    • 医療機器
  • バイス大量感染の元凶
    • Telnet
    • Telnetのポートがあいたまま動いてしまってるIoTデバイスが多い
    • 2014年以降急増

攻撃の観測

  • ダークネットによる攻撃の観測
    • 使われてないIPへのアクセスを監視
  • ハニーポットによる攻撃の観測
    • 脆弱な機器を模擬した囮システム
    • マルウェアを捕獲して解析している
  • 攻撃元の判定
    • WebとTelnetで攻撃元に接続して機器を判定
    • 10%以下しか特定できない
      • カメラ
      • デジタルビデオレコーダ
      • ルータ

攻撃の内容

  • DDoS
    • 1Tbpsを超える規模
  • Miraiというマルウェア
    • 何十万台の機器を乗っ取れると示してしまった
    • 悪用して社会に影響を与える攻撃を起こし得ることを示してしまった
    • 日本での被害はまだ少ない方
  • Telnet以外も標的に
    • 日本にも飛び火してきている

Androidとの関連

  • Android Debug Bridgeを狙った攻撃
    • Miraiの亜種からの攻撃
    • ADBのポートを開けたまま出荷してしまった製品

悪性アプリはどれくらいあるのか

  • 55種類のアンチウイルスソフトにかけて調査
  • GooglePlayで公開されてるアプリは公開期間が長いほど安全
    • 悪いものが長く出続けることはない状況
    • 非公式マーケットの中には何年間も放置されてる危険なアプリもある

正規アプリのマルウェア

  • 正規アプリに悪性コードを挿入
    • 7000種類のアプリが被害
    • 攻撃者はリパッケージを自動化していると予想される
    • GooglePlayに公開されてるアプリでも多くが悪性コードの挿入できてしまう
      • 難読化が大事
  • Androidから操作できるIoTデバイス
    • 家庭内サービスを外部から妨害できてしまう
    • 正規のアプリとIoT機器が認証してないからできてしまう

まとめ

  • 脆弱性のあるIoT機器は後継されている
    • Androidも標的になっているものもある
  • 正規アプリのマルウェア
  • IoT機器と連動するアプリのなりすまし対応

質疑

  • 難読化しても破れちゃうんじゃないか
    • コストをかければいくらでも難読化できるけどそこまで必要ないものが多数
    • 攻撃者側もコストベースでやっているのでしきい値を上げるだけでも効果はあるのではないか

データ主導社会の実現に向けて

  • 谷脇康彦さん(総務省/総合通信基盤局長)

サイバーセキュリティ関連

  • IoT機器の脆弱性強化の法改正
  • 脆弱なID/パスワードになっていないかチェック
    • ISPに通知し改善を要求させる

データ主導社会

  • Data Driven Society
    • 現実世界のデータを収集
    • AI使って解析
    • 現実世界へフィードバック社会的課題解決
  • 従来の情報化
    • それぞれの領域に留まった情報化
    • IoTは領域を跨いだ情報化ができる
    • System of Systems

第5世代移動通信システム(5G)

特徴

  • 超低遅延
  • 超高速
    • 2時間の映画を3秒で(LTEは5分)
  • 多数同時接続

周波数

  • 今までより高い
    • より多くの情報を伝送できる
    • 遠くまで届かない

ネットワークのフルIP化

  • 2025年に完了

ネットワークの仮想化

  • ネットワークのスライシング
    • 用途ごとに分けられる
    • リソース配分を効率化
      • AIで判断

トラストの確保

  • 利便性
  • プライバシー
  • セキュリティ

AI Car Race

Android Thingsの技適

  • 5Gwifi帯が全滅

AI Robot Car Race

Robo Race

自動運転プラットフォーム

DeepTesla

  • 論文で以下の2つだけで自動運転できると発表
    • フロントのカメラ画像
    • ハンドルの角度
  • CNN
    • 5つの畳み込みそう
    • 3つの全結合

UDACITY

Donkey Car

AirSim

ICT社会、次の10年に求められるモバイルの役割

モバイルのサイクル

  • 10年ごとに劇的な変化がある
  • メール、カメラ、iモードスマホ
  • ネットワークもだいたい10年サイクルで置き換わる

スマホ登場から10年

  • IoTの時代

中国のデジタル化

  • IoT/データ活用が進んでる
    • 監視カメラで顔認識
    • 交通量から信号操作
    • 電子決済の普及
    • 電気自動車
  • これらにはスマホが必要不可欠

日本では

  • 青森ではJRでもSuicaが使えない
  • クレジットカードも使えない店が多い
    • 徐々にQR決済が浸透中
  • 地方ではSuicaもクレジットカードも飛ばしてQRコード決済が普及するのではないか
  • 地方でICTが普及するタイミングが来てる

まとめ

  • スマホの活用は中国と日本でぜんぜん違う
    • 日本でも東京と田舎で違う
  • それでもスマホは普及してる
  • そこにビジネスチャンスがあるんじゃないか

PWA A Go-Go!!

  • 進藤 龍之介さん(NPO日本Androidの会/理事/エンジニア)

モバイルにおけるWebの存在

  • Webの入り口はGoogle
  • GoogleとかSNSの先にあるもの
  • PWAになってホーム画面に置いてもらえるとアプリと並べるんじゃないか

エンゲージメントの壁

  • 「ホーム画面に追加」を押してもらえるか
  • プッシュ通知許可Yes押してもらえるか

PWAと相性がいいサイト

  • 地域型の小さなビジネス
    • 空き状況予約状況
  • イベントサイト
    • スケジュールや会場の確認
    • 会場内のネットワーク負荷低減にもつながる
  • いずれもエンゲージメントが確立済みである
  • Webにある既存の情報でローコストにアプリ化

PWA導入の考慮点

  • 通知、インストール許可のタイミング、シチュエーション
  • どこを見せたいのか
    • 空き状況
    • 新着情報

PWA実装準備

アイコン

  • png
  • 192 * 192
  • 512 * 512

オフラインページ

  • ネットワークがつながらない時に出すページ

キャッシュ計画

  • パフォーマンスと更新反映のトレードオフ
  • キャッシュの更新タイミング
    • ServiceWorkerに差分があったらロードしてきて、次回起動時に適用される
  • デフォルトではキャッシュに有効期限がない
    • 明示的に消さないと残り続けちゃう

https

PWA実装

Manifest

  • iosで使われるアイコンはhtmlで定義するapple-touch-iconが使われる

Add to HomeScreen

  • インストールのポップアップを抑止
    • beforeinstallpromptイベントを拾って止めておく

よくあるトラブル

  • https不完全問題
    • httpのコンテンツが埋め込まれてないか
  • キャッシュの焦げ付き問題
    • indexedDBを使って実装
    • WorkBox使えば有効期限が指定できる
  • 外部ページとの行き来
    • 外部ページで処理した後正しく戻ってこれない
    • 認証/決済

検証

  • PWAのテストめんどくさい
  • 実機テスト
    • chrome://inspect/#devices

KotlinConf2018最速レポート&Kotlin最新情報

  • 藤原聖さん(LINE株式会社/Developer Relations)

KotlinConf

kotlinconf.com

  • 今年で2回目
  • 1300人以上参加(チケット完売)

KotlinConfのセッション

  • 4トラック並行で63セッション
  • 全部動画が公開されてる
  • Coroutine/Multiplatform(ios含む)/ServerSideが多め
  • Android固有は3つ

Keynote

  • Kotkinの言語設計者であるAndreyBreslavが登壇

Pragmatic-言語設計の価値観-

  • 実用主義
  • 考えをそのままソフトウェアに落とし込める
ConcisionではなくReadability
  • 簡潔さではなく読みやすさ重視
  • コードが短ければいいというものではない
  • ボイラープレートは減らして意味のあるものだけになるようにする
ExpressivenessではなくReuse
  • 表現力豊かにするのではなく再利用可能にする
OriginalityではなくInteroperability
  • 独自性ではなく相互運用性を追求
  • 他の言語にすでにある機能や治験を取り入れる
SoundnessではなくSafety/Tooling
  • 言語の堅牢さではなく安全さやツールによるサポートを重視
  • 静的型付け言語

Momentum-Kotlinの盛り上がり-

  • 2018/10時点で1500万人の開発者
  • GooglePlayの上位1000のうち4分の1はKotlin
  • Kotlin使ったアプリ1年で4倍に

Industry-Kotlinの業界動向-

  • あらゆる業種で使われてる
    • 金融業界
    • スタートアップ
  • MicrosoftがKotlin移行した

Kotlin1.3

  • すべての変更点はgithub上にある
  • Coroutine
  • Kotlin/Native beta

Evolution-Kotlinの進化の方向性-

  • keep the language modern
  • confortable update

ログミーTech Live #1「サーバーサイド開発最前線」に参加してきました

  • ログミーTech Live #1「サーバーサイド開発最前線」に参加してきました。

logmitechlive.connpass.com

  • 最近サーバサイドKotlinが気になっていたこともあり参加してみました。
  • テーマが「サーバーサイド」とスコープを絞りすぎない勉強会だったので、普段ふれないgoやScalaGCPの話も聞けて良かったです。
タイトル 発表者
Go/GAEで作る金融システム 株式会社ネクストカレンシー
FRESH LIVEにおけるServer Side KotlinとMicroservicesの今 株式会社サイバーエージェント 野澤聡史氏
クラウド電子カルテを支えるテクノロジーの光と闇 エムスリー株式会社 冨岡純氏

Go/GAEで作る金融システム

ネクストカレンシー

  • DMMの子会社
  • 仮想通貨の会社
  • 金融業
  • 高い安全性が求められる

技術スタック

  • GCP
    • easyだから
  • golang
    • simpleだから
  • node

Google App Engineはいいぞ

  • Googleが提供するPaaS
  • とにかく楽
    • bluegreenデプロイ
      • GAEのバージョンの機能を使う
    • スケールイン/アウト
      • goなら立ち上がり数十ミリ秒
    • セキュリティ

Stackdriver Loggingはいいぞ

  • フルマネージドなロギングサービス
    • GCPで出力されるログが集約される
  • 加工や通知が楽
  • 柔軟なフィルタ

Protocol Buffersはいいぞ

  • APIドキュメントメンテしなくなりがち
  • シンプルで高速
  • JSONをhttpでやりとりするのと同じようにProtocol Buffersをやりとりする
  • ドキュメント=実装なのがいい

golangはいいぞ

  • シンプルな仕様
  • 並行処理
  • ループするならfor,if使うしかない
    • シンプル

FRESH LIVEにおけるServer Side KotlinとMicroservicesの今

FRESH LIVEとサーバサイドKotlin

  • 様々なマイクロサービスにKotlin導入してる

FRESH LIVEとマイクロサービス

  • どっかが落ちても全体は倒れない
  • 戦略とともに必要なところをスケールできる
  • 1サービス1DB
  • サービス間はgrpc
  • 低レイヤーはgo

SpringBoot2とKotlin

  • Idiomatic Kotlin Code
    • Kotlinらしく書くためのベストプラクティス
    • 拡張関数が便利
  • Router Function DSL
    • エンドポイントをDSLで書ける
    • コンストラクタインジェクトで@Autowiredを省略
  • Spring Web Flux
    • Reactiveをサポート
    • StreamなAPIを簡単に作れる

コンテナとマイクロサービス

  • 環境変数をコンテナにDI
  • k8sのSecretリソース
    • 環境ごとに異なる機密情報を扱う
    • コンテナの環境変数にセット
  • サービスログ収集
    • これまではecs
    • k8sのDaemonSetでfluentdをNodeに配置
    • サイドカーコンテナの撤廃
    • ログは標準出力に吐くだけ
    • stern
      • podのログを見られる

gRPC

  • HTTP2との効率的な接続
  • 双方向ストリーミング
  • portを分けて2つのServer起動
    • CommandLineRunner
    • DisposableBean
  • SpringとgRPC
    • Server起動Interceptorなど難なく構築
    • 入念なクライアント疎通確認必要(特にAndroid)
    • 周辺ライブラリのアップデートをこまめに

まとめ

  • サーバサイドKotlinやるならSpringBoot2おすすめ
  • k8sでコンテナ配置戦略に変化
  • gRPCで効率的な通信

クラウド電子カルテを支えるテクノロジーの光と闇

  • エムスリー株式会社 冨岡純さん(@jooohn1234)

クラウド電子カルテ

  • クラウドが当たり前の業界ではない
    • 導入できたらありがたみを実感できた

  • 院内ネットワークとクラウドの連携にハードル
    • socketio使って双方向通信
    • サーバはNode
    • クライアントはJava
  • 院内ネットワークで動くものの保守つらい
  • 全部クラウドの世界になってほしい

レセコン

  • 会計ソフトウェア

  • カルテの情報をレセコンと動機するのは必須
  • 診療報酬点数計算等々複雑で開発ハードル高い

  • Scala
    • 管理しやすく(oop)
    • 堅牢(fp)
  • Functional Programming
    • テスト再利用容易
    • 点数計算は巨大な関数
  • Clean Architecture
    • 複雑な起算ルールと作用を分離

まとめ

  • レガシー業界ではすべてがモダンにならない過渡期がある
  • 設計手法を駆使して少しずつ良くしてる

「Meguro.es #17」に参加してきました

  • Meguro.es #17に参加してきました。
  • 初参加でしたが幅広い分野で初めて知ることも多く勉強になりました!
  • さっそく試してみたいと思える話もありとても有意義でした!

meguroes.connpass.com

タイトル 発表者
10分でわかるReact fire kdnk
ゼロから学ぶWeb Authentication API kobayang
React.js の render-props と Function as child の紹介 mori-dev
Caching Data Apollo Client takanori_oki_9
DoczをPJに入れてみた mki_skt
Diagnoses your Node.js app (intro) darai0512
  • 以下メモ書きです

10分でわかるReact

  • firekdnkさん

React Fire

背景

  • ReactDOMの近代化
  • Reactv17に入る???
  • issue#13525

github.com

概要

  • 新機能というよりは既存機能をよりわかりやすくするもの
  • nativeの挙動に合わせることで思わぬバグを減らす

input value

  • inputのvalue属性に反映させるのをやめる
  • propertyとattrは違う
    • propはjs
    • attrはhtml

attach events

  • イベントをdocumentじゃなくてReactのRootにattachするようにする

onChange -> onInput

  • onChangeをやめてonInputに変える
  • 理想的にはevent.targetを使いたくない

イベントシステムをシンプルに

  • 独自のイベントシステムをDOMのイベントに近づける
  • イベント周りで不要なものが入ってるからReactDOMのバンドルサイズが大きい

className -> class

  • classNameがclassに変わる

ゼロから学ぶWeb Authentication API

  • kobayangさん

Motivation

  • chrome70からmacでwebの指紋認証できるようになる
  • Web Authentication APIを使ってるらしい

Web Authentication API

  • Credential Management APIの拡張

Credential Management API

  • ログインフローをシンプルにするAPI

処理の流れ

Registration Phase

  • navigator.credentials.store
    • 引数で渡した認証情報を保存する

Authentication Phase

  • navigator.credentials.get
    • 保存した情報を取得する

Web Authentication APIに仕組み

  • Authnticatorを呼んで暗号鍵認証できる

参考記事

blog.jxck.io

React.js の render-props と Function as child の紹介

  • mori-devさん

きっかけ

  • HOCを使っていた
  • render-propsを使うともっと良いというブログを読んだ

親から子へコンポーネントを渡す

  • jsxタグの属性で渡す
  • 文字列でもオブジェクトでも関数でも渡せる
  • コンポーネントを返す関数も渡せる
  • コンポーネントそのものも渡せる
  • childrenという属性名だ渡す場合は<Child children={xxx} /><Child>{xxx}</Child>が同じ

Caching Data Apollo Client

  • takanori_oki_9さん

Apollo Client

  • GraphQLサーバにアクセスするクライアントサイドライブラリ

Apollo Link

  • Client - Link(URLセット) - Link(Tokenセット) - Server
  • Linkはミドルウェアみたいなもの

apollo-cache-inmemory

  • ApolloClientデフォルトのキャッシュ
    • ReduxのStore的な
    • APIをアグリゲートするところでReduxのStore使わなくて良くなる

InMemoryCache

  • アクセスするときはGraphQLのクエリを投げる
  • ローカルのキャッシュを柔軟にいじれて便利
    • オフライン対応で役立つ

DoczをPJに入れてみた

  • mki_sktさん

Doczとは

www.docz.site

Docz導入

上手くいかなかったこと

  • ゼロコンフィグの条件がある
    • webpackv4であること
    • babelv7であること
  • cssが反映されない
    • css in js使ってないと一手間いる

まとめ

  • コンポーネントガイドだけほしいなら選択肢としてあり
  • ShapshotTestとかしたいならStorybookで

Diagnoses your Node.js app (intro)

  • darai0512さん

Node Summit 2018

www.nodesummit.com

  • サンフランシスコ
  • $660
  • 3日間
  • 1000人くらい(うち日本人6人)
  • nodeのコミッターがたくさん参加してる

Diagnose

  • Monitoring
    • モニタリングして問題を察知
  • Profiling
    • プロファイリングをとる
  • Tracing
    • stack-trace
    • AsyncHooks
    • プラットフォームに非依存なv8トレーシングを目指してる

「2018年9月定例会「ABC直前スペシャル PPP」」に参加してきました

  • 2018年9月定例会「ABC直前スペシャル PPP」に参加してきました

japan-android-group.connpass.com

  • 来月のABCに向けた直前イベントということで参加しました。AndroidエンジニアではありませんがPWAが気になるところです!

ABC 2018 Autumn in Kawasaki

  • 杉山 由朗さん@ABC 2018 Autumn in Kawasaki 実行委員長

ABC 2018 Autumn

abc.android-group.jp

  • 10/13(土)に開催
  • 今回はハンズオン多め
    • PWA, XR, etc
  • 場所は川崎振興会館
    • 川崎駅から雨でも濡れない

1つ目の「P」:Android Pieの新機能紹介 最適化されていくユーザー体験

  • 杉本 哲さん@日本Androidの会 運営委員

Project Treble

  • 早い段階でPieが利用できるようになる
    • ベンダー実装とOSシステム部分を切り離すことで実現
    • 同一のベンダー実装で新しいバージョンに上げられる

AI

  • AIによるサジェスチョン

Adjust Less

  • 様々なシーン(場所・時間・明るさ)で明るさを自動調整

Scroll Less

  • Digital Wellbeing: デジタル幸福
  • アプリの利用状況を分解しダッシュボードで表示
  • アプリの時間制限を設定できる

Charge Less

  • 頻繁に使うアプリを監視し使ってないアプリを抑制
    • バッテリーの持ちがよくなる
    • 通知はちょっと遅くなる

Tap Less

  • Slices
  • App Actions
  • タブ切り替えたりしなくてもすぐに実行できるようになる

New Navigation

  • iosのような感じ
    • 適用するかは設定で切り替えられる

Slices

developer.android.com

  • UIのテンプレートがある程度用意されてる
  • AndroidStudio3.2以降から使えるようになる
  • サンプルは公式から辿れるgithubにいろいろある

2つ目の「P」:Challenge PWA!! Web の舞台はホーム画面へ進撃する !

PWAおさらい

  • ざっくり言うとWebアプリがローカルアプリになる!
  • ServiceWorker + CacheAPI
  • アプリに向いたものとWebに向いたものの中間を埋めるものになるのでは

モバイルにおけるWebの存在

  • 入り口は検索かSNSが多いのでは
  • PWAによってWebの幅が広がるのでは

WordPressをPWAに

  • SPAじゃない
  • サーバサイドで埋め込まれたデータ

悩みどころ

  • 急がないけど更新を反映したい
  • 即時に反映したい
  • どこをどうキャッシュするか

キャッシュの更新タイミング

  • swはオンライン時に動悸し次回起動で更新されたものが動作
  • Cacheは明示的に更新するかActivate時に削除が一般的

キャッシュの目的

  • 高速化
  • ネットワーク節約
  • オフライン

キャッシュ戦略

  • Cache first
  • Network first
  • No Cache
    • オフラインページだけキャッシュ

PWA4WP

wordpress.org

  • いけてるところ
    • キャッシュの有効期限が設定できる
    • キャッシュの除外が柔軟に指定できる
  • 使い方
    • プラグインとして追加
    • アイコンとかmanifestの内容をGUIから指定できる
      • Cache戦略も選べる
      • フルスクリーンにするならiPhoneで戻れなくならないように注意
  • ソース

github.com

まとめ

  • キャッシュの制御がとても大事
  • いきなり完成形は難しいのでProgressive

3つ目の「P」:登壇者の皆様と参加者の皆様でディスカッション

Pixel3

Pixelに期待してること

  • 技適が通ること
  • ロックダウンモード
  • ノッチどうなるの
  • でかい画面もいいかも

「UIT#4 Web in App ネイティブアプリケーションのように振る舞うウェブ」に参加してきました

  • UIT#4に参加してきました。

uit.connpass.com

  • 裏番組(これとかこれ)も気になりましたが、自分的にPWAが最近ホットなのでこちらのイベントに参加してみました。
タイトル 発表者
社内向けサービスを@nuxtjs/pwaでお手軽にdesktop PWA化したら結構よかった話 @kawasako
RNとreactの共有ロジックをmonorepoでつくる @yamatatsu
ページ遷移Animation & Skeleton screenをWebViewアプリに実装した体験談 @shoyo.kyo
デザインと仕様に負けないWeb in Appの作り方 @Jun
  • 以下メモ書きです。

社内向けサービスを@nuxtjs/pwaでお手軽にdesktop PWA化したら結構よかった話

  • @kawasakoさん(LINE)

Desktop PWA

  • Chrome67から使えるようになった
    • chrome://flags/でflagをonにすると使える
  • twitterとかqiitaとかが対応してる
  • 独立したWindowがアドレスバーなしで立ち上がる!

社内アプリ

アーキテクチャ

  • @nuxtjs/pwa
  • workboxも使ってる
    • workboxに渡したswのコードを見るにはnpm run buildしないと反映されない...
      • devではworkboxのswではなく別のを使うようにした
  • web pushも入れてる
    • WebSocket経由で通知をswに渡す

まとめ

  • 一般向けにはまだ厳しそう
    • 社内向けなら試せるからいいかも
  • PWAの定義は曖昧だけど今回作った程度のDesktopPWAならお手軽

RNとreactの共有ロジックをmonorepoでつくる

  • @yamatatsuさん(CureApp)

monorepo

ページ遷移Animation & Skeleton screenをWebViewアプリに実装した体験談

  • @shoyo.kyoさん(LINE)

LINEのフロントエンド

  • WebViewもけっこう使ってる
  • LINEポイント
    • VueでSkelton screenに作り変えた

LINEポイント

  • 生誕5周年
  • WebViewでできてる
  • 積極的にリファクタしてる
  • スパイクアクセスあり
  • 小規模SPAの集合

Skeleton screenを使ったきっかけ

  • SPA化の要望あり
    • +αもほしい
    • LINE漫画でスムーズなページ遷移
      • Skeleton screen + React
      • これをやることに -> 体感速度向上施策

Skeleton screenを入れた効果

実装

  • 美しさ重視で
  • コンテンツが出るエリアをグレーのエリアで最初出す
    • データの内容によっては行数が変わったりしてがたっとなってしまう
    • がたっとなるとこもアニメーションで

課題

  • GPU, CPU使いすぎ
  • ページ切り替えた瞬間に使用率上がる

デザインと仕様に負けないWeb in Appの作り方

  • @Junさん(LINE)

デザインと仕様に負けないエンジニア

  • デザインと仕様に負ける
    • このデザインは作りたくないな
    • この仕様通りに作りたくないな
  • 辛いとは
    • 人ができないことをしなきゃいけない時苦しむ
    • プログラマが頑張っても同しようもない領域
      • ブラウザ/OSの制約

Web in App

  • Webの辛さとAppの辛さ両方味わえる
  • App的なデザインや仕様 + Webの制約

負けない方法

  • 戦わなければ負けない
  • デザインと仕様の段階でWebと合わないと切る
    • 代替は提案できないとだめ

まとめ

  • 開発者が苦しむといいプロダクトはできない
    • チームの皆がハッピーになれないと良いものはできない
  • 快適な開発が快適なUXにつながる

「CTO meet up〜JavaScript(Angular,React,Vue)〜」に参加してきました

  • CTO meet up〜JavaScript(Angular,React,Vue)〜に参加してきました

flexy.connpass.com

flxy.jp

  • 以下パネルディスカッションのメモです

JavaScript(Angular,React,Vue)進化しつづける技術について

どうやって技術選定してる?

林さん

  • 最近はAngularとReact使った
  • Angularは管理画面
    • CRUDが多いから
    • ライブラリ選定する時間もなかったから
  • Reactはvmeets
    • WebRTCとのやりとりやりやすいから
  • 3rdパーティのライブラリの量が一つの指針
    • 以下に早く作るかを重視してるから
  • ReactでもTS使ってる
    • Redux使ってるとTSの恩恵大きい
    • ビルドで気付ける
  • 3rdパーティで型定義ちゃんとしてないやつはanyにしちゃう
    • そのうち切り離したいようなものだから
  • AngularのVUPに合わせてライブラリVUP

古川さん

  • 3年前に技術選定してReactを選択
    • 主流になってきていた
    • Reduxも採用
    • たまたまうまくいったからそのまま継続している
  • ある程度の規模を想定して一度作ってしまう
    • ホットペッパー相当のものを作った
    • 当時はReact一択だったから他は試してない
  • 世の中で使われてるかどうかは見る
  • Flow使ってる
    • 80%くらい嬉しいけど20%くらいつらい
    • 3rdパーティのライブラリで型定義されてないとか
      • 3rdパーティのライブラリの型定義が間違ってると最悪
    • 開発体験としてあんまりうれしくない
    • 3rdパーティこそ型ちゃんとしててほしい信頼ならないから
  • greenkeeper使ってる
  • 改善day設けてそこでライブラリアップデートしてる
    • バージョン追従できてるのとできてないのもある

菅原さん

  • 2年前入社時はBackboneだった
  • 1ヶ月でios/android
    • ReactNativeで高速に
    • mobXを採用(Vuexに似てたから)
  • エディタの対応書き心地の良さ
  • 3rdパーティライブラリで悩まされるの嫌だから自前でやってしまう

今の技術の課題・解決方法

林さん

古川さん

  • エコシステムのライフサイクルが短すぎる(特にReact周り)
    • ついていけないとReactやめていっちゃうんじゃないか
  • 従来の技術でなくSPAを作ってるのはパフォーマンスがモチベーションにあるから
    • だからパフォーマンスが悪いSPAだと本末転倒なんじゃないか

菅原さん

  • チャートとか作ろうとすると仮想DOMが邪魔になってしまうこともある
    • それをガリガリやってくれるエンジニアも貴重
  • コンポーネント単位の差分レンダリングmobXだとできるけど追いかけるのつらい

これからのフロントエンドのトレンド・動向を教えて

林さん

  • WebComponents
    • WebComponentsでCSSのスコープができることがいい
      • 今も実現できてる
      • それを使ってビジネスにプラスになるか?薄い
  • WebRTC
    • 最近使えるレベルになってきた
    • SPAでもリアルタイム通信が当たり前になってくるんじゃないか

古川さん

  • WebComponentsに夢を見る?
    • 見ない
    • パフォーマンス速くなると思えない
    • パフォーマンス悪いと本末転倒
    • チューニングしなくてもそこそこ速いのはできるようになるかも
  • PWAは?
    • オフラインで嬉しいアプリだったりそうでないアプリだったり
    • ホットペッパーは予約できるか見ないと意味ない
    • ServiceWorker使うという意味では必要
  • 投機的先読み
    • guess.js
    • ga使って先読み

菅原さん

今、現場に最もほしいフロントエンドエンジニアとは?

林さん

  • 技術+αで何か持ってる人
    • 技術+技術ではなくビジネス的要素とか
  • フロントエンドエンジニアになりたい人に向けて
    • 作って人に見てもらうことが経験値になる
      • 徹底的に悩むこと
  • デザインとJS両方やらせるか?
    • マネジメント視点では適材適所
    • 1エンジニア視点だと知れるものは吸収した方がいい
    • JSエンジニアでも最低限のデザインは知っておくべき
  • フロントエンドエンジニアのキャリアパス
    • 技術以外も含めて+1が求められる
    • nativeとweb両方できるとコンスタントに生きていける

古川さん

  • フレームワークの奥で何やってるか調べられる人
  • フロントエンドエンジニアになりたい人に向けて
    • 自分の中ではこうしたいのにうまくいかず悩む時間を経験することが重要
  • デザインとJS両方やらせるか?
    • どちらかが得意であってもいいが無関心であってはいけない
    • 垣根がないものとしてできないといけない
  • フロントエンドエンジニアのキャリアパス

菅原さん

  • フレームワークに関係なく能力の高いエンジニア
    • インタラクションを作るエンジニアが希少
  • フロントエンドエンジニアになりたい人に向けて
    • まずデザインからで目線づくり
  • プロトタイプバトル
    • 話し合ってもおさまらないから作ったもので決着をつける
  • デザインとJS両方やらせるか?
    • 本人の志向次第
    • figmaでみんなでデザインの認識合わせ
  • フロントエンドエンジニアのキャリアパス
    • ユーザがすごいと思えるものを提供できてれば勝ちがある

「DevFest 2018 Tokyo」に参加してきました

  • DevFest 2018 Tokyoに参加してきました。

tokyo2018.gdgjapan.org

  • 昨年に続き参加しました。Firebaseは変わらず、加えてFlutterも流行ってるなという印象でした。いろいろな分野の話を聞けてとても勉強になりました。
  • タイムテーブルと公開されてる資料一覧です。
Room A+B(大) Room C+D(大) Room G+H(大) Room I (小) Room J (中) Room K (中)
実践!!Web パフォーマンス改善!
宇都宮 佑亮
Game Development for Firebase Unity SDK
gremito
Quick Start GCP
山内 沙織
Android OSは安全なのか?
タニグチガク
Flutterアニメーションの実装方法
konifar
Kubeflowで何ができて何ができないのか?
上田 隼也
Googleアシスタント最新動向
田中 洋一郎
Flutter Overview
Rui Kowase
PWAのイマ
takanorip
Firestore Database Design
1amageek
Advanced Room
荒木 佑一
GCP Compute 概要と選定
vvakame
AndroidX時代のHello world
深見浩和 / fkm
Google AIY Vision kitで遊ぼう ~麻雀牌のリアルタイム識別~
Rio Kurihara
Firebase Overview for native application
Daiki Matsudate
GCP のデータベース・ストレージ
apstndb
Goでネットワークプログラミングするためのよもやま話
竹澤 友博
FlutterPluginの作り方
kuwapp
Angularの最新情報
laco
DialogflowとCloud Functions で作る Google アシスタント アクション
flatfisher
Cloud Kata
sinmetal
KotlinでFlutterを書けないか色々試してみた
菊池 紘
Flutterとの1年
najeira
Growing your app with Firebase
shihochan
TensorFlow Liteで機械学習Androidアプリを超簡単に作る
古川新
Container
Kuma Arakawa
新しいMaterial Design と MDC
namiki
joi
yanzm
Introduction of Polymer 3.0
kazuyoshi kawakami
Realtime Database for high traffic production application
sota1235
Generative Modeling in the Wild
Rishabh Gupta
Goらしいコードを業務でも書くために
tom
TypeScript導入で得られる「変えていく勇気」
okunokentaro
Transactions APIを使って飲食店の予約が出来るGoogle Assistantアクションが出来るまで
小林 大介
AndroidThings で CO2 を計測し、警告&サーバーに計測値を投げるシステム
小林 慧
GCPでつくるデータ処理パイプライン
永井 洋一
"Fan out" to create twitter like timeline with Cloud Firestore and Cloud Functions
タイラー
Androidパネルディスカッション: AAC実践導入について
magie_pooh
teshi04
shaunkawano
飯島彩輝
松山 純也
Firebase Realtime Database in Production
青野 健利(ブルーノ)
機械学習、どこから手をつける?
上総 虎智
非中央集権ウェブ
aggre
Auto ML Overview
永井 洋一
GtugGirlsがヤバいんです
長尾ユリコ
  • 以下聴講したセッションのメモ書きです。

実践!!Web パフォーマンス改善!

  • 宇都宮 佑亮さん(Google)
  • 資料非公開(要点をツイートして頂いていたのでそれを載せておきます)

パフォーマンスを計測する

  • パフォーマンスの計測はLighthouseを使うと良い
    • ChromeのDevtoolから
    • Chromeの拡張もある
    • npmのモジュールもある
  • Chrome68からv3になった
    • 処理速度上がった
    • 解析結果の内容も変わった

サンプルサイトを最適化

  • なるべく軽く同じものは送らない
    • text compress
    • css minify
  • css/jsのカバレッジ
    • devtoolで確認できる
    • 読み込んでるのに使われてないコードは意外と多い
    • bundleしたファイルの内容をorganizationで確認
    • code splitting
    • dynamic import
  • 画像の扱い
    • いろいろツールはある
    • lazy loadする
    • ルーセルはlazy loadしないと重くなるので注意
    • 初期表示に不要な画像は送らない
  • Webフォント
    • 後から読み込まれると適用前のフォントで最初出てしまう
    • <link rel="preload">を使うと良い
  • スクリプトブロッキング
    • defer
      • 非同期にダウンロードして読み込んだ順に実行
    • async
      • 非同期にダウンロードしてダウンロードした順に実行

参考

Flutter Overview

  • Rui Kowaseさん(メルカリ)

Flutterとは

特徴

開発フロー

setup

  • flutter doctorコマンドで環境が整ってるか確認できる

dev

build/release

CD

  • fastlaneをサポート

Google I/O 2018のセッション

  • Flutter × MaterialDesign
  • Flutter × Firebase
  • Reactive Framework

Flutterの今

  • githubのスター数
    • beta1(2018/3)発表で増えた
    • Google I/O後もまた増えた

Firebase Overview for native application

  • Daiki Matsudateさん(FOLIO)

Firebaseのサービス

  • 20くらいある
  • 3つに分類される
    • build your app
    • improve app quality
    • grow your business

とりあえず入れたいFirebase

Firebase Crashlytics

  • クラッシュ解析ツール
  • クラッシュログ収集解析する

Firebase Paformance

  • パフォーマンスを計測してくれる
  • 滞在時間
  • 描画時間

Google Analytics for Firebase

  • モバイル向けにはFirebase使う

App Index

  • Googleの検索結果にアプリを表示する
  • ダウンロードボタンも出せる

Firebase Prediction

  • GA入れてること前提
  • 7日間のデータから次の行動を予測
    • デフォルトは4つの属性が取れる
      • 離脱しそう
      • 離脱しなさそう
      • 課金しそう
      • 課金しなさそう
  • 離脱しそうなユーザにだけ特定のキャンペーンとか
  • A/B Testingでの対象を離脱しそうな人だけにするとか
  • プッシュ通知を送る対象に指定とか
  • In-App messaging

Firestore

Firebase Realtime Database

  • NoSQL cloud db
    • リレーションは持たせず階層は浅くする
    • クライアント側でjoinしないといけない
  • json
  • offline

Firebase Firestore

  • リレーションがある
    • 参照をセットできる
  • クエリが使える

Firebase Cloud Function

  • Firebaseの更新ややhttpリクエストをトリガーに処理を実行する

Angularの最新情報

  • lacoさん

フロントエンド周り

  • 選定しないと行けないものが多い
  • Angularはこれを解決する

Angularで開発

雛形生成/起動

  • AngularCLIで簡単に雛形作成
  • ng serveで起動
    • ホットリロードも

コンポーネント

テストファイルも作られる

  • ng testで実行できる
    • セットアップ不要

MaterialDesign

  • ng add @angukar/material
    • ライブラリがインストールされる
  • MaterialDesignのコンポーネント用意されてるから使うの簡単

build

  • ng buildでバンドルされる
    • サーバに配置したらデプロイ完了
    • Webpackの設定なんかは不要!

周辺ライブラリ

  • Stackblitz
  • AngularPWA
    • 簡単にPWA対応
  • Ionic
    • WebViewベース
  • NativeScript
    • ネイティブを叩く
  • Angular Universal
    • node上でAngularが動く

今後

  • ivy
    • Smaller/Faster/Simper
  • Angular Console
    • AngularCLIのGUI
  • Angular for Designers
    • コードを書かずにGUIでアプリを作る

Introduction of Polymer 3.0

  • kazuyoshi kawakamiさん

Polymer Project

  • GoogleChromeチーム内のプロジェクト
  • driving the web platform forward
  • Web標準を勧めたりライブラリ開発を行う
  • その成果物の一つがPolymer

WebComponents

  • Google I/O 2012で初めて取り上げられた
  • CustomElements
  • ShadowDOM
  • HTML Imports

現在のWebComponents

  • polyfill入れればすべてのブラウザで使える
  • エコシステム
    • WebComponents版のnpm

webcomponents.org - Discuss & share web components

  • 共存できるFW

custom-elements-everywhere.com

Polymerってきもい

  • Polyfillでしょ?
    • 当初はWebComponentsのPolyfill
    • 2.0からはPolyfillを切り離してWebComponentsを作るためのFW
  • bower
    • 今はnpmでも使える
  • HTML Imports
    • HTML Improtsは中止に

Polymer3.0

  • Google I/O 2018で発表
  • Bower -> npm
  • HTML Imports -> ES Modules
  • 3.0できもかった部分が解決された
  • WebComponentsのメインストリームとしてのPolymerが完成

事例紹介

  • 聴き鳥テスト

kikitoritest.jpn.panasonic.com

  • JSFW使ってない
    • Polymer2.0
    • WebComponents
    • Redux
      • WebComponentsでRedux使えるライブラリがある?
    • Web Audio
    • PWA
      • オフライン対応

作ってみて

  • WebComponentsだけでもアプリ作成可能
  • ルーティング周りで苦労
  • JSFW + WebComponentsはあり

TypeScript導入で得られる「変えていく勇気」

  • okunokentaroさん(クレスウェア)

TS採用する理由

昔のTS知ってる人の誤解

  • 型定義ファイルの管理が面倒
    • 今は違う
    • npmで管理できる
    • npm i -D @types/react
  • 途中から導入できない
    • 混ぜて運用できる
    • ただしjs部分は一番ゆるいany型になる
    • .jsならスルー/.tsなら型チェック
  • unknown型
    • 3.0からの機能
    • anyではなくunknown型で

「変えていく勇気」

機械学習、どこから手をつける?

  • 上総 虎智さん(BrainPad)

機械学習で今何できる

  • 自動運転での活用
  • 目をスキャンして心疾患を予測
  • GoogleGlassでスマートファクトリー
    • 手が空かない作業で役立つ

どこから手をつける

  • 動くものをまず作ること
    • やってみないとわからないがつきまとう
    • プロトタイプの難易度は下がってる
  • 機械学習の学習実装
  • 学習済みモデルのデプロイ先
    • TensorFlow Lite
    • ML Kit for Firebase
    • AIY
    • TensorFlow.js
      • なんでブラウザ上で?
        • No device/ No install
        • Interactive
        • Sensors
        • Data stays on the client

プロダクトに仕上げるために

  • 機械学習モデルは使い続けてこそ価値がある
    • 変化を元に再学習が必要
    • 機械学習システムの継続的デプロイ
  • 機械学習モデルの公平性
    • 差別を生み出してしまわないか注意を払う必要がある
    • 再犯率機械学習で判定

まとめ

  • 機械学習モデルを開発して動かすまでのハードルが下がった
  • 必ずしも難しい手法を使う必要はない
    • シンプルな方法が継続活用しやすい

「NuxtMeetup#4」に参加してきました

  • Nuxt Meetupに参加してきました。

nuxt-meetup.connpass.com

  • 普段はReactエンジニアですが、Vue/Nuxtも興味あるので参加してみました。SSRのつらみ等Nuxtに閉じない話も聞けて勉強になりました。
  • イベント公開から数時間で定員が埋まってしまうところから見てもNuxtは今注目されていることが実感できます。
  • ちなみに次回は10/18だそうです。
タイトル 発表者
LINEとNuxt jun
STUDIOのつくりかた @keimakai1993
で、NuxtのSSRっていつ使うの? @kotamats
Nuxtのプロダクション事例 @AkiraTameto
Nuxtを使うと初心者と上級者の実装差がない @aintek4
リクルートライフスタイルにおけるNuxt.jsの導入事例 @YuG1224

LINEとNuxt

  • junさん

LINEとNuxt

  • LINEでNuxt使ってる
    • WebViewとかもあって意外とある

API/Auth

  • APIや認証サーバは別で作るほうが良い

API

  • host(ドメイン)をどう共有するか
    • /apiパスベースのプロキシ
    • /apiだとAPIサーバ、そうでなければNuxtサーバ
  • SSR
    • axios-module
    • Nuxtサーバ->APIサーバ

Auth

  • LINE Login
  • Authした状態でSSRしたい
    • axios-moduleでできる
  • ログインしてない時に/auth/loginとかにredirect
    • vueのコンポーネントを探しに行ってしまう
    • location.hlefでで認証に飛ばす
    • redirectじゃないので画面が出てしまう
    • login用の空のコンポーネントを用意して対応している

まとめ

  • axios-moduleがいい!

メモ

https://axios.nuxtjs.org/

https://github.com/nuxt-community/axios-module

STUDIOのつくりかた

  • @keimakai1993さん

STUDIO

studio.design

  • デザインだけでWeb制作できるツール
  • GUIベースでデザインが作れる
  • そのままWebに公開できる

STUDIOでNuxtがどう使われているか

  • デザイン編集
    • 内部的にはvue-cli叩いて作ってる
  • ライブプレビュー
    • Nuxt使ってる
    • 変更内容をFirebaseへ
    • それをプレビューに反映してる
  • パブリッシュ
    • Nuxt使ってる
    • GCPにアップ
    • SSRで動作

Nuxt/Vueで良かった点

  • サービスの成長スピードに合わせてプロダクト作れる
  • 出だしの素早さ
  • 軌道に乗ってからの作り込み

Nuxt/Vueで困ってる点

  • SSRしてるのでサーバ負荷が高い
    • Nuxt generate
  • メモリリーク
    • 長時間ページを表示し続けることが多い
    • 4分おきにk8sでNuxtのpodをローリングアップしてる

で、NuxtのSSRっていつ使うの?

  • @kotamatsさん

よくある会話

  • NuxtってSPA,SSR,generateどれ使うのがいいの?
    • generateがいいのかなー
    • SSRは使わなくていいんじゃね
  • generateはめっちゃ楽
    • nuxt generate
    • 初回レンダリング速い
    • 2ページ目以降はSPAモード
    • 動的なページも設定すればgenerateできる

(Nuxtの)SSRは癖がある

  • インフラ面
    • node環境
    • node死活監視
  • コーディング面
    • ブラウザ依存のAPI使えない
      • window``document
      • localStorage``indexedDB
  • フロントエンドエンジニアがあんまり考えたくないところ
    • インフラエンジニアも考えたくない

SSRいつ使うか

  1. CMS系のOGP対応
  2. 認証後のページの表示高速化
  3. Nuxtだけでサーバのセッションを使いたい
    • 認証情報をNuxtサーバで管理とか
  4. generateでできないことをしたい
    • middkeware使いたいとか
    • nuxtServerInit使いたいとか

まとめ

  • 静的サイトの場合はgenerateでどうにかなる
  • 会員制サイトなどはmiddleware使うことが多いのでgenerateだと厳しい
  • SSR固有の要素は代替技術もあるので選定が大事
  • SSR自体はNuxtではとても簡単

Nuxtのプロダクション事例

  • @AkiraTametoさん

どうしてNuxt

  • (Reactより)学習コストが低い
  • (Nextより)Nuxtは快適
  • コミュニティも活発

Nuxtのデメリット

  • 今のところない
  • 情報が少しすくないかなというくらい

事例

おしゃれなさいとがほしい

  • Nuxt + Netlify
  • 状態管理できるのでCSSアニメーション使いやすい

Wordpressのようなブログがほしい

  • Nuxt + Contentful + Netlify
  • Contentfulで簡単にCMS作れる
  • メール送信SendGrid使った

チャット付きのイベントアプリがほしい

  • Nuxt + Firebase + PWA
  • NuxtだとPWA簡単にできた
    • initコマンド的なのでPWA指定できる

Googleスライドのようなツールがほしい

  • Nuxt + Firebase + go + GCP
  • 作成したSVGをFirebaseに保存

快適な求人システムがほしい

  • Nuxt + go + GCP + Apollo
  • GraphQL使ってる

重いサイトをリプレイスしてほしい

まとめ

  • 基本全部Nuxtでいける!

Nuxtを使うと初心者と上級者の実装差がない

  • @aintek4さん

なぜNuxtは初心者と上級者の実装差がないと思うか

  • 実装がシンプル
    • ルーティング
    • 非同期処理
    • 簡単な設定ファイル

ルーティング

非同期処理

  • asyncDataの書き方は3パターン
  • どれを使うかチームで決めておけば分かりやすい
    • Promise
    • async/await
    • callback

簡単な設定ファイル

  • nuxt.config.jsだけ書けばいい
  • そもそもほとんど自分で書かなくていい

Nuxtを使う意義

  • 自分で書く量が少ないからビジネスの本質に時間を費やせる

まとめ

  • Nuxtを使えば初心者でも上級者と同じコードが書ける
  • フレームワーク側で用意してくれてるから実装がシンプルになる

リクルートライフスタイルにおけるNuxt.jsの導入事例

  • @YuG1224さん

Nuxt導入の背景

  • 大規模既存システムの存在
  • じゃらんの新機能追加(既存システムとの連携あり)
    • 既存の技術的負債を広げたくない
    • 負債はAPI Aggregationで吸収させる
    • API Aggregationはexpressで立てた

Nuxtの役割

  • NuxtはSPAとSSR
  • expressはAPI Aggregation

Nuxt採用してよかったこと

  • 既存システムの負債を簡単に吸収できた
  • 今後PWA対応簡単にできそう
  • コード規約が平和的に定まる

Nuxt採用してはまったこと

  • Nuxt内部のデバッグが大変
  • SPA + SSR + API Aggregationの構成が肥大化しそう

まとめ

  • Nuxt + Expressで簡単にSPA + SSR + API Aggregationを実現できた

「Rust LT #2 〜いま使う!Rust〜」に参加してきました

  • Rust LT #2 に参加してきました。

rust.connpass.com

  • Rust書いたことなくて難しかったですがいい刺激になりました。Rustでなにか書いてみようと思いました。
タイトル 発表者
Rustを支えるインタープリター qnighy
Rust の安全性を数学的に証明する 〜最新の研究から学ぶ形式手法と Rust の基礎〜 shiatsumat
lopdfの話 skoji
Rust でクロスコンパイルして Raspberry Pi Zero W で動かす legokichi
インタプリタを作ってまなぶRustらしい書き方 yuki toyoda
Rust 2018とは?〜安定した進化の真の意味〜 Pyry Kontio
この場で使う!Rust 〜アルゴリズムの実装を通して感じる使いやすさ〜 kenkoooo

Rustを支えるインタープリタ

  • qnighyさん

miri

miriを使う1

miriを使う2

Chalk

まとめ

Rust の安全性を数学的に証明する 〜最新の研究から学ぶ形式手法と Rust の基礎〜

  • shiatsumatさん

Rustをどう噛み砕くか

  • Rustを単純化したミニマリスティックな言語を一から作る

rustbelt

RustBelt

lopdfの話

  • skojiさん

lopdf

Rust でクロスコンパイルして Raspberry Pi Zero W で動かす

  • legokichiさん

どこでRust

インタプリタを作ってまなぶRustらしい書き方

インタプリタとは

  • ソースを解析して抽象構文木をつくる
  • 木を解析して実行内容を評価する

Rust 2018とは?〜安定した進化の真の意味〜

  • Pyry Kontioさん

Rustのブログのバズワード

  • Stability as a Deliverable
    • 安定性もRustが提供する機能の一つ
  • Stability without Stagnation
    • 常に進化をする

Rust 2018

  • 2018/12リリースする新しいバージョン
  • Rust2015と交換性100%

この場で使う!Rust 〜アルゴリズムの実装を通して感じる使いやすさ〜

  • kenkooooさん

今使えるRust

  • Rustの良さははやさ
  • Webアプリ作ってもいいけどそれはPythonでもいい
  • Rustを使うべきはアルゴリズムの実行

C - 身体バランス