「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 - 身体バランス

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

  • Meguro.cssに参加してきました

megurocss.connpass.com

  • CSSの勉強会は珍しいので参加してみました。実践的な内容が多く勉強になりました。
タイトル 発表者
RSCSS体験談 @mhz_univ
flex: 1; @ryutamaki
CSSでクオリティをよりよくする @umiremix
Dart Sassであそぼう @terrierscript
"いい感じ"にするためのイージング @448jp
CSSでボーン @s14garnet

RSCSS体験談

  • @mhz_univさん

docs.google.com

RSCSSとは

RSCSSの構成

  • Component
    • 一意のクラス名
    • グローバル
  • Element
  • Variant
    • 色違いとか
  • Helper
    • 一時的な上書き
  • サンプル
.search-form {
.search-form {
  > .button { /* ... */ }
  > .field { /* ... */ }
  > .label { /* ... */ }

  // variants
  &.-small { /* ... */ }
  &.-wide { /* ... */ }
}

なぜRSCSS

  • CSS強い人いなかったから4分類だけで入りやすそう

大きさを考えて書く

  • 大きい粒度にしすぎるとつらくなる

1対1を考えて書く

  • 多html 対 多CSS
    • bootstrapのような
    • 影響範囲が大きいから変更がつらくなる
  • 1html 対 1CSS
    • 変更が容易
  • 多html 対 1css
  • mixin/extend
    • 隠れ多対1
    • classは違うけどmixinで実は同じもの使ってる
  • 共通な部品を作りたくなったらコンポーネントを新しく作る

flex:1;

  • @ryutamakiさん

flex

flexの基礎知識

flex-basis

  • flex-itemの主軸方向の長さ
  • max-width > flex-basis (> width)

flex-grow/flex-shrink

  • flex-grow
    • flex-containerの余ったスペースを比率で配分し拡大
    • 数値が大きいほど領域は大きくなる
    • 0だったら元の値より広げることはしない
  • flex-shrink
    • flex-containerからはみ出したスペースを比率で配分し縮小
    • 数値が大きいほど領域は小さくなる

用例

  • sidebar-main
    • sidebarは固定値
    • 余った領域をmain
  • header-main-footer
    • contentが少なければheader/footer固定
    • content多ければfooterはスクロールした一番下

CSSでクオリティをよくする

  • @umiremixさん

umiremix.com

CSSでテキストをより美しく

均等配置

  • テキストの右端を揃える
  • text-align: justify
  • 文字量が大くフォントサイズ小さいテキストに使うと良い

フォントサイズのジャンプ率

  • pxではなくvwでfont-sizeを指定するとジャンプ率が保たれる
  • ジャンプ率:本文サイズに対する見出しサイズとの比率
  • font-size: calc(30 / 640 * 100vw);

折返し

  • 自然な開業を作るか改行をさせない指定
.wrap: { display: block; }
.inner: { display: inline-block; }

アニメーション

  • iPhoneはスタイリングではなくインターフェイスデザイン
    • iPhoneを使っているという感覚ではなく直接情報を触っているという感覚を目指している
  • Webでも存在を意識させない自然なアニメーションを
  • CSSのアニメーション
    • CSS Transitions
      • 0.5s以上かかると違和感ある(ケースバイケース)
    • CSS Animations
  • 複雑だとJSでやった方が向いてる(JS/CSSの併用も)

DartSassであそぼう

  • @terrierscriptさん

Sassの最近

  • ruby-sassがdeprecated
  • 今後はdart-sass

Dart

  • 最近flutterで復活?

Dart Sass

  • ruby-sassより高速

Dart Sassをブラウザで動かす

  • 頑張ったら動いた!

いい感じにするためのイメージ

  • @448jpさん

アニメーションの実装における指示例

  • いい感じにして下さいとよく頼まれる
  • いい感じのアニメーション
    • 好さ + 善さ
    • 美しさメンテナンス性
    • ユーザ/ビジネス課題を解決する

いい感じのアニメーション

  • 90%はイージングで決まる
  • アニメーション調整の優先度
    • イージング > 時間 > 対象
  • RobertPennerのイージング関数
  • cubic-bezier関数がいい
  • http://cubic-bezier.com/

CSSでボーン

  • @s14garnetさん

docs.google.com

ボーンって何?

  • flashや3Dソフトではお馴染みのツール
  • 骨/骨格のイメージ
  • 意識するのは関節
  • CSSだけで腕みたいな動きを作れる!

デモ

codepen.io

「Rakuten EC Tech Meetup(楽天EC開発の裏側を全部お話いたします) Vol.1」に参加してきました

Opening

  • タリアさん(CTO)
  • 黒住昭仁さん(CIO)

事業

  • 9個の部署以下3つずつ
  • 50ヶ国
  • 開発者2000人
  • 各国に開発拠点

英語

  • 2012年から英語
  • たかが英語(三木谷)
  • とりあえず海外行けば話せるようになる
  • 採用時TOEIC800少なくとも600
    • 2年以内に800クリアできればOK
  • 外国人ばっかだから勝手に身につく

Development lifecycle with "R-JET"(楽天市場での共通JavaScript Toolkitについて)

  • Daniel Berlanga(ECMD Dept)

楽天のフロントエンド

  • Speed Speed Speed
    • Quality
    • Maintainability
    • Standardize
  • How
    • JS(ESNext)
    • TypeScript
    • ESLint
    • TSLint
    • Babel
    • Webpack
    • npm
    • react/redux
    • chai/mocha
      • jestもある
    • arma
    • saucelabs
    • intern
    • selenium
    • jenkins

R-JET

  • Rakuten JavaScript Engineer Toolkit
    • 設定にむだな時間をかけないように標準化したもの
  • 書く技術のTrainingもやってる

How we make sure the capability of Rakuten Ichiba Checkout system against Rakuten Super Sale?(お買い物かごの負荷試験について)

  • Takehara Tomohiro(SREチーム)

お買い物かご

  • ECサイトのお買い物かご
    • 商品追加
    • クレカ情報
    • 配送先情報
    • ポイントの利用
    • クーポンの利用

負荷試験

  • 楽天スーパーセールに向けた負荷試験
    • 一年に数回セールイベント

負荷のターゲットを決める

  • ピーク
  • 継続的な高負荷

負荷試験実行

  • Blazemeter
  • 結果の可視化もできる
  • データもクラウド上に保持できる

問題検知

  • jennifer
    • メモリとかCPUとか
  • Gatling
  • 内製のモニタリングツール多数

問題改善

  • アプリ修正ミドルチューニング等々
  • また最初に戻って繰り返す
    • このフローを4回くらい繰り返す

楽天の社内クラウドについて - RWASP

  • Yossy(ECCT Dept)

RWASP

  • PaaSのようなアプリプラットフォーム
  • Mesos
    • リソース管理
  • Marathon
    • ヘルスチェック
  • Docker
  • Service Doscovery and Nginx

その他

  • Kafka
  • Logstash
  • ElasticSerach
  • zipkin
  • chef

データ

  • 2 data center
  • 4 production clister
  • over 300 Mesos
  • ~2400 CPUCore
  • 10TB memory

今後

  • pods
  • scale up/scale down
  • Prometheus
  • Kubernates?
    • 前は流行ってなくてMesos + Marathonにした
    • 置き換えるかも

Speed-up micro services development with RAPID(APIプラットフォームの開発について)

  • Michell

RAPID Introduction

  • マイクロサービス
  • Java8/python/js

New Microservice with RAPID

  • error handling
  • valdation
  • model
  • logic
  • data access
  • web service client
  • event publisher
  • event consumer
  • cache
  • authentication/authorization
  • configuration
  • metrics
  • logging
  • monitoring

more to keep in mind

  • interface design
  • documentation
  • deployment
  • load testing
  • functional testing
  • failure testing

Framework

  • play
  • spring
  • gradle

whi is using

  • the standard new microservice development

楽天市場でのテスト自動化による開発プロセスの迅速化

  • Mayur

Quality Assurance Automation Team

  • 自動化チーム
  • 5人
  • 手動テストを自動化
  • POC

Test Automation Device Farm Lab

Rakuten Analytics Tracker(RATrace)

  • テストツール
  • 内製ツール

Grafana

  • Availability tracker

楽天市場モバイルアプリ開発について

  • Ryo Kimura

楽天のモバイル

Design & feasibility

  • Requirement
    • Backend Developer
    • Mobile Architect Developer
  • API決める
  • モバイルチームはAPIできるまでの待ち時間がある
  • API出てきてから試すと要件満たせなかったりとか起きる
  • 動くソフトウェアを(agile manifest)

アーキテクチャ(API)

  • GraphQL
  • OpenAPI
  • GRPC
  • BFF
  • API Gateway
  • OpenAPI(Swagger)のモックサーバを用いて速いうちから動作させるようにすうる
    • 初期のフェーズで足りないものに気付ける

アーキテクチャ(モバイル)

楽天ECでのBig Data、Data Science活用事例について

  • Taku Ohkoshi

なぜECにData Science

  • 楽天会員ID数
    • 9000万
  • 多種多様な顧客
  • 多種多様な商品
  • マッチングは人の頭脳の限界を超える

Big Data, Data Scienceの流れ

  • データ収集
    • 行動履歴が最重要
    • 内製化
      • 3rd partyは自由度がない
    • 簡単なBIも内製
  • アルゴリズム開発
    • 需要予測
    • 価格最適化
    • 検索最適化
    • レコメンデーション
  • 付帯機能開発
    • 最適化結果を提供するAPI/UI
  • リリース
  • アルゴリズムチューニング
    • 継続的なチューニングが必須
    • ABテスト100回/年
    • リアルタイムでユーザの行動データを分析しながら進める

職種

「HTML5 APP CONFERENCE 2018」に参加してきました

  • HTML5 APP CONFERENCE 2018に参加してきました

html5app-conf.connpass.com

  • html5スマホアプリを作るということをテーマにしたカンファレンス
    • モバイルアプリ、webフロントエンドやPWAをテーマにしたセッションが中心
  • 聴講したセッションのメモと、それ以外でも資料が公開されているものは載せていきます

セッション一覧

カンファレンスルーム 広場 Bar スペース
基調講演「Web App Platform Strategy (Webアプリ・プラットフォーム戦略)」 JavaScriptではじめるMulti UI Application モバイルネイティブアプリに変わる存在!?初めてのPWA
開発・運用・チームビルディングHTML5 アプリのメリット クイズで学ぶウェブ解析とグロースハック Cordova/Monacaを活用したHTML5 アプリ最新事例
Monaca でモバイルアプリ3分クッキング PWA, Cordova, Capacitor, ReactNative Dom の比較からみる、これからのHTML5 アプリ 【超初心者限定!】Web アプリケーションを作ろう!
pixiv chatstory の PWA としての取り組み HTML5 アプリ入門ハンズオン〜Monaca を使った超速構築法〜 Forkwell リニューアルの裏側〜デザイナーとエンジニアの垣根を超えたフロントエンド開発〜
フロントエンドでクラウドをいい感じに使う 座談会「HTML5アプリと周辺技術の最新キーワードを追う」 -
『ぼくのアプリが改善できない!』PWA/iOS/Android 対応のHTML5 アプリを実プロダクトでいかに構築し、育てていくのか。 - HTML5 アプリにおけるパフォーマンスの基礎知識

モバイルネイティブアプリに変わる存在!?初めてのPWA

  • 野本 司さん(株式会社ソニックガーデン)

背景

  • プログラミング初めて1年ちょっと
  • Webアプリなんとなくできるようになった
  • モバイルもいけるだろう
    • プラットフォームによって言語が違った
  • PWAならWebの技術だけで対応できそう!

PWAとは

  • Progressive Web Apps
  • ネイティブアプリっぽいWebアプリ
  • 新しい技術がたくさんというわけではない
  • アプリでできることをWebでも実現可能に

事例

PWAどう作る

  • Googleのチェックリストがある
  • Lighthouseで採点
  • 要素技術
    • ServiceWorker
    • WebAppManifest

サンプル

  • Firebase
  • Vue
  • Vuetify
    • PWAテンプレートがある
  • さっと作ったサンプルでもLighthouseのPWA100点とれる
    • PWA作るの簡単!

クイズで学ぶウェブ解析とグロースハック

  • 窪田 望さん(株式会社クリエイターズネクスト)
  • 資料未公開

ウェブ解析とグロースハック

  • インパクトファースト
  • 基準を知って違和感のある数字を見つけることが大事
    • CVR
      • 1%以上
    • 直帰率
      • 40%以下
    • 営業転換率
      • 10%以上
  • Guess Who
    • 写真の人物像を推理
    • ターゲットでなくペルソナ
      • 「20代後半男性」ではなく具体的に
  • 優先順位の並び替え
    • 20のitemがあると並び替えのパターンは20京以上
    • kobitという製品を使うと寝てる間にやってくれる(宣伝)
  • アプローチのしかた
    • キャッチコピー
      • レモン100個分みたいな
    • 自分ごとだと反応する
  • 熟練度でUIを変える
    • 初心者には説明のあるUI
    • 熟練者には省略されたUI
  • その他いろいろな手法があったので資料が公開されたら確認したい

kobit.in

PWA, Cordova, Capacitor, ReactNative Domの比較からみる、これからのHTML5アプリ

  • 榊原昌彦さん(一般社団法人リレーションデザイン研究所)

ハイブリットアプリ

  • 標準では
  • そんなことやってられない
    • 手間を減らしたい

フレームワーク

  • Xamarin
  • ReactNative
    • Reactでモバイルを作る
    • JavaScriptCoreでNativeに実行できる
    • モバイル用のコンポーネントをWeb用に変換
      • React Native DOM
        • WebComponents使ってる
      • React Native for Web
  • Cordova/PhoneGap
    • ネイティブの機能に直接アクセスするわけではない
    • WebView上でHTMLを動かす
    • 最新のAPIを叩くとかCordovaのプラグイン作りたいとかだと大変
    • ネイティブっぽいUI
      • ionic
      • OnsenUI
    • Monaca
      • オンラインのエディタ
  • Capacitor
    • ionicチームが作ってる
    • 次世代のCordova
    • web/ios/android/electron
    • NativeとWebViewの融合
      • Native UI Shell

capacitor.ionicframework.com

  • PWA
    • push通知ほしいからNativeアプリなんて風にしなくてよくなる
    • アプリはインストールされなくなってきてる
    • Webでコンテンツを用意しておくのは必須

NativeとWebView

  • 処理速度は0/100のはなしではなく99/100
    • それをどこまで気にするか
  • Swift/Kotlinでも実装悪ければ遅いしWebViewでもちゃんとつくればそれなりになる

youtu.be

まとめ

  • 従来はHTMLでモバイルアプリを作るのはネガティブな理由が多かった
  • 今はポジティブな理由で採用できるだけの土台が整っている

pixiv chatstory の PWA としての取り組み

  • 中川雄貴さん @ikasoumen(ピクシブ株式会社)

pixiv chatstory

  • チャット形式で小説を投稿できるサービス
  • ios
    • Swift
  • android/pc
    • PWA

add to home screen

  • ホーム画面に追加
  • インストールバナーが出てくる
  • 別アプリから開くときにホームに追加したアプリから開けるようになる
    • 内部的にもapkを作ってインストールしているからできる
  • pixiv chatstoryでは手動でホームに追加する案内も用意している

LazyLoadとcache

  • ServiceWorkerによるchache
    • cacheAPIを使ってキャッシュ
    • オフライン対応
  • *.chunck.jsを使って必要なファイルだけ読み込み
    • キャッシュと組み合わせてる
  • 初期ロード後リソースをキャッシュしておく

マルチプラットフォーム対応

  • 対応OSは段階的に拡大
  • ターゲットを絞ることで素早く展開できた

アーキテクチャ

  • ionic3
  • Rais on Heroku
  • FirebaseHosting
  • Onesignal

CI

  • PWAはクラッシュせずただただ止まる
  • エラー収集はしてるけどまずは防ぐ
  • heroku Review Apps
    • githubでプルリク作ると自動でherokuにデプロイしてくれる
    • そこでプルリク出されたソースを動作確認できる
  • 毎日アプリを触ることで気づきを得る
    • ios/android両方普段からさわれるように

まとめ

  • PWA
    • インストール/アップデート意識しなくて良い
    • オフライン対応/プッシュ通知
    • ネイティブアプリの機能
  • SPAはスケール自動化しやすい
  • 面倒な作業は機会に任せたりみんなで楽しむ

フロントエンドでクラウドをいい感じに使う

  • 西谷圭介さん(Amazon Web Service)

このセッションでの用語

フロントエンドエンジニアがクラウドを使うときの課題

  • サービス多くてどれ使えばいいか
    • どれが自分たちに関係あるのか
  • どうやってプロビジョニングするのか
    • サーバたてるとかよくわからないし興味ない
  • SDKどう使うのか
    • 認証周りとか
    • サンプル/ドキュメントあまりない
  • AWS Amplifyというのがある

AWS Amplifyとは

  • フロントエンド/モバイル開発者向けのOSSのJSライブラリ
  • よく使うタスクをアプリに簡単に組み込める
  • React/Angular/Vue(soon)/ReactNativeをサポート

AWS Amplifyでできること

  • Auth
    • Amazon Cognito User Poolを使った一般的なサインイン/サインアップ等
    • MFA(他要素認証)
  • Analytics
    • Amazon Pinpointへのデータ送信
    • カスタム属性値やカスタムメトリクス対応
  • API
  • GraphQLクライアント
    • AWS AppSyncを使える(AppSync以外も可)
    • フルマネージドなGraphQLサービス
  • Storage
  • Push通知
    • AWS Pinpointを使ったターゲティング
  • インタラクション
    • Amazon LExを利用した会話式ボット
  • PubSub
    • AWS IoTもしくは一般的なMQTT
  • Caching
    • データストアを用いた一般的なLRU

開発の流れ

  • AWSリソースの設定 -> IAMの設定 -> ClientSDKの設定 -> コーディング
    • 前3つはAWS Mobile Hub/AWS Mobile CLIを使うと簡単

デモ

  • デモ動画(後日公開?)

まとめ

  • AWS Amplify
    • フロントエンドエンジニアのためのライブラリ
    • 各種JSFWをサポート
      • PWAも
  • サーバを構築せずに幅広いサービスを利用できる

HTML5アプリにおけるパフォーマンスの基礎知識

  • 尾上洋介さん(日本大学
    • 情報可視化、数理最適化、意思決定支援の研究

HTML5アプリとは?

  • Webアプリ、PWA
  • モバイルアプリ
  • デスクトップアプリ
  • 今回はhtml/css/jsアプリをターゲットに

なぜパフォーマンスを考えるのか

  • 何も考えないで進めるとパフォーマンスは落ちがち
    • 機能追加は転送量の増加を招く
  • ユーザは優れたUXのサービスを好む
    • パフォーマンスは価値を生み出す時代になっている

PWA

  • PWA Checklist
    • 低速回線対応
    • パフォーマンス
  • PWAを追求するのにパフォーマンスも無視できない

Webアプリのパフォーマンス

  • ページがすぐに表示される
  • ページが快適に動作する
  • RAILモデル
    • Response
      • ユーザ操作に対して100ms以内にで応答
    • Animation
      • 10ms/フレーム(60fps)
    • Idle
      • アイドル時間を活用する
    • Loading
      • 1000ms以内に初期画面表示

developers.google.com

パフォーマンス改善の方法

  • JS処理の高速化(RAL)
  • バックグラウンド処理(R)
  • スタイルの最適化(AL)
  • 必要リソースの削減(L)
  • リソースの先読み(RL)
  • 考え方
    • そのリソースは本当に必要なのか
    • 必要ならより効率的に取得できないか

遅いJS処理の改善

  • アルゴリズムの改善
    • これがもっともシンプル
    • まずはこれを
  • WebWorker
    • 処理の並列化
    • バックグラウンド実行
  • WebAssembly
    • 処理の高速化
    • C資産の利用
    • JS以外の言語の利用
      • Rustとか
  • GPGPU(WebGL/WebGPU)
    • GPUによる処理の高速化
    • tensorflow.jsなんかはこのアプローチ

リソース読み込みの改善

  • 基本
    • 無駄をなくす
    • 不要なスクリプト、スタイル、画像、フォント
  • どうしようもなくなったら
    • 静的サイト生成
    • SSR
    • PRPL
      • Push/Render/Pre-cache/Lazy-load
      • メリット
        • TTIの最小化
        • キャッシュ効率の最大化
        • 開発デプロイの簡素化
        • ES Modulesによる効率的なスクリプト読み込み

PRPL パターン  |  Web  |  Google Developers

  • 不必要なライブラリの削減
    • ライブラリが増えるとLoading時間はのびる
      • 開発者が楽になるライブラリがユーザ体験を下げることになる
    • どうしても必要なら
      • Tree Shakingで最小限だけ読み込み
      • LazyLoad使う

パフォーマンスの測定

  • Lighthouse
  • 採点項目
    • PWA
    • Performance
    • Accessibility
    • Best Practice
    • SEO

これからのWebアプリ設計

  • 後から本格的なPWAにするのは難しい
    • 最初からPWAを意識した設計(PWAファースト)
    • 後からのパフォーマンス改善も難しい
  • PWAの作り方
    • SPAをしっかり作る
    • ServiceWorker/WebAppManifest追加
    • パフォーマンスチューニング頑張る
  • パフォーマンスファーストな設計へ

まとめ

  • モバイルファースト -> PWAファースト -> パフォーマンスファースト