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

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

ginzajs.connpass.com

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

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

  • きり丸さん

対象

Vuetify

vuetifyjs.com

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

  • karamageさん

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

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

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

  • MacotoChitoseさん

VueとFirebase

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

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

  • DYoko0701さん

ReactNativeでのアプリ開発

  • アプリ
    • ReactNative
  • サーバ

オフショア

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

Ionic/Vueを紹介してみる

  • 果物リンさん

Vueでネイティブアプリ

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

Ionic

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

qiita.com

Making Figma Plugins with TypeScript

  • takanoripさん

Figma

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

medium.com

Figma Plugin

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

/f(ig|usu)ma/の話

  • Quramyさん

fusuma

hiroppy.github.io

github.com

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

fusumaとfigma

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

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

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

web-study.connpass.com

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

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

  • uskayさん

web.dev

Webのパフォーマンス

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

iframeと似ている

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

Portals

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

wicg.github.io

github.com

はてなにおけるPortals

  • pastakさん
  • hitode909さん

マンガビューワ

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

Portals

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

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

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

abc.android-group.jp

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

teampansaru.connpass.com

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

japan-android-group.connpass.com

タイムテーブル

10:10~11:10

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

11:10~11:55

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

13:00~13:45

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

14:00~14:45

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

15:00~15:45

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

16:00~16:45

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

Google I/O 2019 Recap!

Google I/O 2019

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

Building more helpful for Google everyone

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

機械学習/AI

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

ML Kit

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

TensorFlow

Android Q

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

Kotlin first

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

CameraX

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

Android Studio

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

Google Play

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

Design

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

Web & Chrome

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

Privacy

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

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

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

円周率と計算機の歴史

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

今回の記録

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

クラウドを使う利点

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

振り返り

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

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

ハンズオン

セットアップ

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

UI

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

Java

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

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

  • kinnekoさん(JAG金沢支部)

Glide

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

PWA+TWA

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

TWA

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

なぜわざわざアプリ化?

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

Digital Asset Links

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

Flutter Recap from I/O 2019 + α

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

Flutter

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

Google I/O 2019

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

Material Design

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

For Multi Platform

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

Beyond Mobile

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

Flutter 1.5

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

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

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

line.connpass.com

engineering.linecorp.com

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

Google I/O 2019 Overview

  • 藤原 聖さん

Google I/O 2019

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

Keynote

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

レポート

engineering.linecorp.com

Androidの何か①

  • Hidetsugu Tamakiさん

Kotlin

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

Android Q

Dark Theme

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

Gesture Navigation

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

JetpackCompose

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

Androidの何か②

  • 高島 友里さん

Android Studio

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

Webの何か①

  • 清水 大輔さん

Google Assistant

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

Google Search

Chrome

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

Webの何か②

  • YiXin Xuさん

Site Performance

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

Lighthouseの 新機能

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

Securityの何か

  • コキチーズさん

Incognito mode

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

Android

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

Web

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

Flutterの何か

Flutter

Flutter App

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

Flutter for Web

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

Multiplatform

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

Dart

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

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

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

inside-frontend.com

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

TypeScript: Why and how we adopted it at Slack

  • Felix Riesebergさん(Slack)

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

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

Introduction to Lucet

  • Adam Foltzerさん(Fastly)

Lucet

Web Assembly

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

Terrarium

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

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

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

ebook japan

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

開発体制

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

風土の違い

AtomicDesignへの挑戦

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

実装上の苦労したこと

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

リリース後の改善

体制

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

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

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

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

  • Kengo Harunoさん(yahoo)

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

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

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

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

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

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

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

スタイルガイドの制作

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

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

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

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

方向転換

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

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

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

振り返って

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

BFFのDeveloper Experience

  • Yosuke Kuramiさん(FOLIO)

BFF

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

FOLIOのBFFの役割

  • API Aggregation
    • koa
  • SSR
    • react + redux

BFFのいいところ

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

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

バックエンドを待たない

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

サービスの仮データ

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

Developer向けの機能

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

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

proxx.app

今の時代のガラケー

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

ゲームを作ってみる

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

どうやって開発したか

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

github

github.com

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

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

mercaridev.connpass.com

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

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

  • @tenntennさん

Google I/O

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

コンテンツ

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

現地でしかできないこと

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

まとめ

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

What's new in ARCore And xR Technology

  • @ikkouさん

AR at keynote

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

ARCore

<model-viewer>

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

VR

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

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

  • @mhidakaさん

Google I/O 2019のテーマ

  • AI for everyone

検索

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

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

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

オンデバイス技術

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

GoogleLens

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

Duplex on the web

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

まとめ

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

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

  • @teshi04さん

Androidのカメラ

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

CameraX

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

ML Kit for Firebase

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

まとめ

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

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

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

pwanight.connpass.com

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

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

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

PWAとは

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

ServiceWorker

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

ServiceWorkerのイベント

  • install
  • wait
  • activate
  • uninstall

SWの更新

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

Cache APIに触れる

PWAの特徴

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

CacheAPI

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

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

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

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

  • 天野たけしさん@devMeTokyo

PWAの効果

www.pwastats.com

PWAの導入

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

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

PWA4WP

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

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

  • biga816さん

キャッシュ上限に到達

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

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

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

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

まとめ

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

Ionic PWA Toolkitについて

  • scrpgilさん

Ionic

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

PWA Toolkit

ionicframework.com

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

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

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

frontrend.connpass.com

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

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

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

入社して2年

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

2年での成長ポイント

チーム開発の心構え

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

設計構成への意識

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

新しい技術に対する意欲

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

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

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

1年目エンジニア実録

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

2年目に向けて

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

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

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

入社から本配属

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

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

CVRを伸ばす改善サイクル

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

UIパーツの整理

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

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

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

今後

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

PWAの高速化

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

コンポーネント指向

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

WebでAudioRecording

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

開発フロー

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

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

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

cloudnative.connpass.com

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

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

Telepresenceとは

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

Telepresenceの使い方

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

Telepresence導入のポイント

ハマりポイント

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

参考

Consul Kubernetes Integration and Consul Connect

Consulとは

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

Consul Connect

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

Kubernetes Integration

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

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

背景

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

Dragonfly

Kraken

Origin

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

Tracker

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

Proxy

  • Docker Registry Interface

Beiran

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

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

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

m3-engineer.connpass.com

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

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

なぜKotlin/MPP?

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

Kotlin/MPP構成

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

まとめ

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

How to publish a Kotlin Multiplatform Library

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

MPPライブラリのGradleの設定

  • IntelliJだとKotlinの雛形選べる

まとめ

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

DroidKaigi 公式アプリのKotlin Multiplatform

  • takahiromさん(AbemaTV)

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

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

Kotlin MultiplatformとDagger

  • Dagger
    • DIライブラリ

Dynamic feature module

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

APIの環境切り替え

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

ハマったこと

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

Ktolin Multiplatform使ってどうだったか

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

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

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

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

ラムダ式の比較

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

in(contains)の比較

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

forEachの比較

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

ツールの紹介

AppCode

Hopper Disassembler

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

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

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

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

「freee Tech Night #2 「大規模SaaSを支えるフロントエンドの話」」に参加してきました

  • freee Tech Night #2 「大規模SaaSを支えるフロントエンドの話」に参加してきました。

freee-tech-night.connpass.com

  • freeeのシステムは歴史があってかなり大規模だということを初めて知りました。
  • 多くのエンジニアで大規模なシステムを開発してい、普段のフロントエンドの勉強会ではあまり得られない考え方を得られました。
    • yarnからnpmに戻した理由なんかは大規模ならではだなと思いました。
    • デザインシステム作って効率的に開発できるようにする、なんていう夢はいろんな人が考えると思いますがそれを実現する段階まできていてすごいと思いました。
タイトル 発表者
会計freee7年目のフロントエンド開発 Takumi Ohashi
会計freee が yarn から npm に出戻った本当の理由 @_kemuridama
デザインシステムの設計とアクセシビリティの実現 @ymrl
最新の新プロダクトのフロントエンド事情〜freeeアプリストアの事例〜 横路隆

会計freee7年目のフロントエンド開発

  • Takumi Ohashiさん

会計freee

  • 単一リポジトリで7年くらいやってきた
    • モノリシックなRailsアプリ
    • フロントエンドもそこに含む
  • もともとcoffeeだったのを置き換えていってる
  • フロント/サーバの区分はなくみんなRailsとReactスキルが必須

初期 - 2014年の構成

  • Backbone
  • CoffeeScript
  • 片手間JSだった時代
  • 一つのGlobal変数でデータを共有

2015年- の構成

  • ES2015
  • React
  • babel

現在

  • ほぼReact
  • SPAではなく小さなSPAの集合みたいな感じ
  • ESLint/Prettier
  • Storybook
  • flowtype
  • jest

facebook/flux続けてしまった

  • Reduxではなくflux(アーキテクチャではなくライブラリの方)を使っている
    • 当時はReduxロックインを懸念してより薄いfluxを採用
  • 薄いがゆえにいろいろできすぎてしまう
  • 情報量が少ない
  • コード量が大きくなりすぎてReduxへの移行は厳しくなった

コンポーネントの状態をStoreで管理してしまった

  • 例えば
    • モーダルの開閉
    • ローディング
    • フォームの値
  • UIStoreというのを作ってそこで管理した
  • 非同期処理でAction2つ呼ぶのがつらい

Reactコンポーネントを継承して使ってしまっていた

振り返って

  • 初期の設計や規約がちゃんと整備できてなかった
  • 大規模ゆえに軌道修正が難しい
  • 誰かが横断的に監視し続けるにも限界がある
  • ルールの整備を勧めてる

今後

  • 共通UIコンポーネントライブラリを開発してる
  • フロントエンド委員会も継続的に活動中

会計freee が yarn から npm に出戻った本当の理由

  • @_kemuridamaさん

yarnからnpmにで戻るというブログを書いた

npm vs yarn

npm

  • nodeに内用される
  • officialなパッケージマネージャ

yarn

本当にyarnが必要なのか

yarnの利点

  • 高速インストール
    • かつては20倍
    • npm6ではほぼ同等
  • ロックファイル
    • パッケージが依存するパッケージのバージョンを固定できる
    • package-lock.jsonが登場した
  • ワークスペース
    • monorepoを管理する機能
    • Lernaを使えばnpmでもできる

なぜnpmに戻したか

複数バージョンのyarnが使いにくい

  • プロジェクトごとにバージョン返るのがやりづらい
  • yvmというものもあるけどnodeenvのように使いやすいものではなかった

2つのビルド環境

  • CircleCIによるDockerベースのビルド
  • Jenkinsによるビルド
    • 本番向けのビルド
  • 環境ごとにyarn入れるステップが増えてしまう

エンジニア組織の巨大化

  • npmは最初から入ってるから誰でも使える

npmに出戻るまでの道のり

  • yarn.lockの削除
  • node_modulesの削除
  • npm iでパッケージ再インストール
  • lockの移行は素直に行かないのでE2Eで担保

まとめ

  • npmの課題が解消されyarnのメリットが薄れてきた
  • エンジニアが多いことによるyarn導入コストの増加した

デザインシステムの設計とアクセシビリティの実現

  • @ymrlさん

会社の規模が急激の大きくなった

freeeのWebフロントエンド開発

  • デザイナーが画面モック作ってエンジニアへ
    • sketch
  • そこから先はエンジニア

大きくなってきた頃のWebUI

  • Bootstrapあら独自UIに
  • 要件が複雑化する一方で環境整備の不備が目立つ
    • CSS得意な人あんまりいない
  • 微妙に違う実装がうまれてくる
  • フロント不慣れな人も書くのでめちゃくちゃになってきた
  • UI作るのがつらい状況に

UIの統一的なチーム

  • Atomic Design and GuideLineチーム
  • どのデザイナーでも統一されたUIをデザインできるようにする
  • フロントエンド不慣れでも統一したUIをじっそうできるようにしたい

UIガイドライン

アクセシビリティ

  • 誰でも使えるサービスにしたい
  • 機能がどんどん増えてるので少ない人数でやっていくの大変
  • ESLintでJSXタグをチェック
    • Storybookに対して自動チェック回したり
    • a11yのaddonがある

今後

  • デザインシステムほぼ実装完了
  • サービスへ導入中
  • Sketchライブラリの共有が課題
    • SketchClooudで配布
    • 将来的にFigmaやAdobeXDにするかも
  • SCSS無秩序にオーバーライドされそうで怖い
  • ReactやFlowtypeへのロックイン問題
    • TS対応の検討
    • Vueなど使うプロジェクトがでてきたら・・

「JSUG勉強会 2019その3 LINEにおけるSpringの活用」に参加してきました

  • JSUG勉強会 2019その3 LINEにおけるSpringの活用に参加してきました。

jsug.doorkeeper.jp

  • LINEにおけるSpringの活用事例とSpringBootAdminを導入してみた知見についてお話を聞くことができました。
  • 前者について、高パフォーマンスが要求されるシステムにおいてRedisやKafkaを存分に活用して高速化を実現しているとのことでした。
  • 後者について、デモやライブコーディングを通じてSpringBootAdminの機能を紹介してもらいました。Actuatorで取得できる情報が可視化され便利そうだということを知ることができました。また、GUI上から設定変更ができてしまう等セキュリティ的な面で気を使うポイントがあるという知見も得られました。
タイトル 発表者
Personalized content recommender system on Spring 渡邉直樹 (LINE Corp.)
Spring Boot Admin ことはじめ 大沢和宏 (LINE Corp.)

Personalized content recommender system on Spring

-渡邉直樹さん (LINE Corp.)

SmartChannel

  • LINEで一覧の一番上に出てくる広告
  • 新着スタンプとか天気とか占いとか
    • パーソナライズされたものが出る
  • Contents
    • レコメンドを各サービスからかき集めて一時的に保存
    • ランキングして1件選んで配信

Architecture

  • FW/ライブラリ
    • SpringBoot2.1
    • Redis/MySQL/Kafka
      • ユーザのアクセスで直接MySQLをさわらず基本はRedisはさんで高速化
    • mybatis
  • ContentsはRedisに突っ込んでおいてその中から機械学習で表示するものを選定
  • ユーザのクリック等のイベントを受け取ったらとりあえずKafkaにproduceしてる
    • Kafkaによって速度/耐障害性が上がる
  • MLはPython
    • Javaとの連携部分はprotocolbufferで

Spring Boot Admin ことはじめ

  • 大沢和宏 (LINE Corp.)

SpringBootAdmin導入のきかっけ

  • 開発人数増えてくると一つのリポジトリで管理するのはつらくなってくる
  • 2,3人で開発できる粒度に切り分けた
  • コンポーネントごとに技術スタックが違っていた
    • SpringBootのバージョン違ったりBootじゃなかったりSpringですらなかったり
  • サーバ台数が多すぎてアラートが飛んだときのプロファイルングが大変

欲しかったもの

  • 適切なバージョンがデプロイされてるかチェックしたい
  • JVMが適切に可動しているかリアルタイムに見たい
  • 適切な設定で稼働しているかあみたい
  • 設定が少ないほうがいい
  • 一元管理できるダッシュボード的なのほしい
  • => SpringBootAdmingが良さそうなので導入

SpringBootAdmin導入してみた

  • 設定が楽
  • Actuatorで取得できる情報を可視化できる
  • slack通知も簡単(自前で実装する)
  • 認証はないがSpringScurityを使えば導入可
  • サンプルが豊富

SpringBootAdminの使い方

  • サーバ
    • 依存関係追加してApplication.javaアノテーション追加するだけ
    • あとapplication.propertiesもちょっと追加する
  • クライアント
    • 依存関係追加してapplication.propertiesに設定書くだけ
    • actuatorの設定いれればメトリクスたくさんとれる
      • レスポンスの中身とかも見える
  • https://codecentric.github.io/spring-boot-admin/current/

SpringBootAdminを使ってみて

  • git propertiesを使うとコミット情報とかも見えるようになる
  • managementの設定に気を使ったほうが良さそう
    • 不要なActuatorのエンドポイントは閉じる
    • http traceやsessionは流さないほうが安全
  • Securityの設定も適切に
    • UI上から設定変えられたりできちゃうのでそれを塞いでもいいかも
  • SpringSecurityのBasic認証はパスワードの暗号化頑張りすぎてて重くなる

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

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

wajs.connpass.com

  • 今回はいつもより人数少なめでいい雰囲気の勉強会でした!"全員登壇が目標"の勉強会なのでそろそろ初登壇してみたいな・・・とも思いました!
タイトル 発表者
Expo と Firebase Authentication @okamuuu
vueでのcssアニメーションの話 @daitasu
記事作成ツールのフロントエンドをNuxt.js × Atomic Designでリプレイスしている話 @comy
反復処理に速さを求めて @camcam_lemon
無思考型個人開発のススメ @skmt3P
『if文のはなし』 @ticktakclock
勝手に技術書でビブリオバトル「JavaScriptで学ぶ関数型プログラミング」 @sadnessOjisan
On the Evolution and Change of Riot.js v4 @kuwahara_jsr
もっと画像を壊した話 @chikoski

Expo と Firebase Authentication

  • @okamuuuさん

ExpoとFirebaseAuthentication

  • 意外と大変だったので共有
  • SNS認証でログインが必要
  • Firebase Authenticationで簡単にいけるのでは!?
  • RNとFirebaseとOAuthとサーバサイドの知識必要だった

なぜExpo(ReactNative)

ExpoでFirebaseAuthentication

  • Webで使えるメソッドが使えない
  • facebookは簡単
  • googleとかtwitterは大変
  • Expoが手伝ってくれるところもあるけど自前でやらないといけない所も多い

参考

vueでのcssアニメーションの話

  • @daitasuさん

CSSアニメーション

  • @keyframesで始点と終点を指定

VueでCSSアニメーション

  • v-if/-v-showで切り替え
  • vue-transition
    • v-enter
    • v-enter-to
    • v-enter-active
    • v-leave
    • v-leave-to
    • v-leave-active
  • js hookもできる
  • jsライブラリ殿組み合わえもしやすい

記事作成ツールのフロントエンドをNuxt.js × Atomic Designでリプレイスしている話

  • @comyさん

NuxtとAtimicDesign

  • ディレクトリ構成
    • /components配下にatoms等々
    • pagesはそのまま
    • templateは使わない
  • atoms
  • molecules
    • atomsで構成される
    • state持って良い
    • vuexアクセス不可
  • organisms
    • atomes/molecules/organismsで構成
    • 再利用考えない
    • state持つ
    • vuexアクセス可
  • 責務がはっきりしたので肥大化しづらく再利用しやすくなった

反復処理に速さを求めて

  • @camcam_lemonさん

JavaScriptイテレーション処理

  • たくさん書き方がある
  • どれが一番早いか
  • for inはおそすぎ
  • whileが強い
  • ループ回数増やしていくとforが上回る
  • jQuery謎の安定感
  • mapはだんだん遅くなっていく

無思考型個人開発のススメ

  • @skmt3Pさん

個人開発

  • 余計なことに時間かけたくない
  • Nuxtで規約を設けて開発
  • docker個人PCだと重くて動かない
  • PrettierとLintを信じる

『if文のはなし』

  • @ticktakclockさん

JavaScriptのif

  • 静的型付け言語に慣れている人だとJavaScirptは感覚が違う
  • true/falseで判定する
  • if(str) { ... }!?
  • if(str !== null) { ... }ではないのか!?
  • truthy/falsy
    • 型変換した結果が入る
    • false => false/undefined/null/''/0/NaN
  • 空文字なんでfalsy? => lengthが0だから
  • if文の条件式には何でも入れられる

勝手に技術書でビブリオバトルJavaScriptで学ぶ関数型プログラミング

  • @sadnessOjisanさん

知的評論合戦ビブリオバトル

  • 本を持ち寄ってディスカッション

JavaScriptで学ぶ関数型プログラミング

  • ライブラリのインターフェース設計に役立ち
  • 第一級関数
    • 値として関数を使える
  • 作用的プログラミング -関数を実行するために他の関数を呼び出す
  • 関数を組み立てる関数
    • カリー化
    • 実行されるたびに新しい関数を返す
  • 設定を加える関数を作るにはどうしたらいいかあを学べる

On the Evolution and Change of Riot.js v4

Riot

  • Reactの競合みたいな立ち位置
  • Reactより機能は劣るが導入が速い

Riot@4

  • 破壊的変更多い
  • 拡張子が.tagから.riotになった
  • Reactっぽくなってきた
    • ライフサイクルメソッド
    • props/state
  • Vueっぽくも見える
  • まだベータ版なので注意

もっと画像を壊した話

  • @chikoskiさん

JavaScriptで画像を壊す

  • WebCamで撮った画像を壊して表示する
  • ArrayBufferをBlobにしてJPGにして表示する
  • Workerの第二引数に{mode: 'module'}つけるとES Modules使える
  • worker-dom

「UIT#6 進化する React.js」に参加してきました

  • UIT#6 進化する React.jsに参加してきました。

uit.connpass.com

タイトル 発表者
Hooks で作る React.FC Takepepe
Page Stack again in React sunderls
現場から届けるReactの悩みと改善 sakito

Hooks で作る React.FC

  • Takepepeさん(DeNA)

サービスフロントエンドアニメーション

  • アニメーションネガティブ要因
    • ただ派手なだけ
    • 予測不能な動き
    • テストつらい
  • 速度 === UXなアプリもあればそうでないアプリもある
  • アニメーションが向かないアプリ
    • 読み物系
    • 遷移が多い
  • 明確なユーザストーリーが描けるものは活用するべき

機能としてのアニメーション

通知機能

  • 利用者が興味がないフェーズ
  • 悪目立ちさせない

補佐機能

認知機能

対話機能

  • 利用者と対話するフェーズ
  • 従順な反応
  • リアルコミュニケーションと同じ

耐火機能

  • 利用者が評価するフェーズ
  • アプリからの要求対価

React Hooksとアニメーション

従来のReactとアニメーション

  • アニメーションは非同期
  • classにする必要ある
  • cssに関する知識がいる

React Hooksとアニメーション

  • Classが不要に
  • メモ化が簡単
  • アニメーションもやりやすくなった
  • useContextで0~1の係数を管理して子に伝播する
  • function componentに気軽に後からアニメーション追加できるのがいい

Page Stack again in React

  • sunderlsさん(LINE)

アプリとWeb

  • アプリとWebどちらがいいか?
    • ユーザは気にしない
  • googleとかinstagramはアプリを推してる

アプリの何がいいのか

  • 速いのがいい?
    • twitterのアプリとWebを比べるとあまり変わらない?
  • アプリの方がトランジションがあってよい
    • Webでもがんばればできる
  • アプリはページ遷移がスタックされてる

現場から届けるReactの悩みと改善

  • sakitoさん(yahoo)

担当のプロジェクト

  • フロントエンド15人
  • BtoB

刷新

  • React + TypeScript
  • SassからEmotion

TypeScript採用前

  • 採用前はJSDocを頑張って書いてた
  • 更新されずに放置される
  • propsを確認するUnitTestメンテ辛い

TypeScriptの採用

  • TypeScript採用で実装スピード遅くなってしまわないか?
    • コンパイルでエラー分かるのが効率的だった
    • 修正箇所がわかりやすい
    • propsのデータがわかるから開発しやすい
  • 使えないライブラリないか
    • そんなことなかった
    • 今どきのReactライブラリはTypeScript対応してる

SassからEmotion

  • ファイルサイズが小さい
  • styled-componentsのようなstyled記法だけでなくCSS Props記法が使えるのがいい
  • コンポーネントCSSが一対一になったので削除しやすい

ReduxFormからFormikへ

  • ReduxFormつらかった
    • バリデーションは拡張しないとつらい
    • 簡単なフォーム作るには便利
  • Yupというバリデーションライブラリと合わせて使うとやりやすかった

Reduxの構成変更

  • 従来は1ページ1store
    • コピペが乱立
  • re-ducks
    • ducksを拡張していい感じにしたもの
    • それぞれのファイルの責務がわかりやすくなった
    • テスト書きやすくなった
    • そこそこ規模大きめな時に向いてるのかな?
  • Immerを採用
    • ImmutableJSはハードル高い
      • Redux周り以外にも影響ある
    • Storeのデータ構造の操作が見やすくなった
    • 開発メンバー多くてもimmutableな状態を保ちやすい
    • レビューもしやすい

「Frontend de KANPAI! #6-みんなのサービスづくり-」に参加してきました

  • Frontend de KANPAI! #6-みんなのサービスづくり-に参加してきました。

frokan.connpass.com

タイトル 登壇者
note を Nuxt.js でリプレイスしている話 石川 大地さん
サービスドリブンな開発 森口 慎哉さん
WebXR Device API 株式会社小山田 晃浩さん
開発を担当した三年間の振り返り takepepeさん
プロダクト開発におけるスキルと肩書 谷口 祐貴さん
体験と設計 フロントエンドエンジニアの二つの責務について potato4dさん

note を Nuxt.js でリプレイスしている話

noteリプレイス

  • AngularJS -> Nuxt
  • Elastic Beanstalk使ってる
    • Lambda使ってたけどaws-serverless-expressでエラー
  • 二重メンテつらいけど徐々に移行してる

サービスドリブンな開発

  • 森口 慎哉さん(株式会社ZOZOテクノロジーズ)

開発体制

  • サービス単位でチームがある
  • やりとりはslackなどでオープンに

フロントエンド環境

WebXR Device API

  • 小山田 晃浩さん(株式会社ピクセルグリッド)

WebXR Device API

  • 2019/2ファーストドラフト
    • GoogleCanaryでも使えない
    • 前はflag立てればいけたけど変わった
  • OpenXR

HitTest

Quic Look

  • iOSの床を認識する機能

開発を担当した三年間の振り返り

技術選定

  • DeNAはVueが多め
    • Reactの知見も作りたいのでReactを選択
  • 型システム
    • ReactならFlow(という時代だった)
    • 今はTypeScript
    • 型があるから長期運用できている
  • フレームワークに知識を載せすぎるとつらくなる
  • 賢いUIは移植が大変
  • ライブラリの作法には乗ったほうがいい

プロダクト開発におけるスキルと肩書

モダンなプロダクト開発のフェーズ

  • Discovery
    • 課題の発見アイデアの探求
    • プロトタイピング
    • デザイン思考
  • Delivery
    • ものを作って届ける
  • どちらに情熱を注ぐか

ユーザ体験を構成する段階

  • 五段階
    • Surface(表面)
    • Skelton(骨格)
    • Structure(構造)
    • Scope(要件)
    • Strategy(戦略)
  • どこに興味があってどこができるか考えてキャリアを考えると良い

体験と設計 フロントエンドエンジニアの二つの責務について

  • potato4dさん(LINE株式会社/ElevenBack)

フロントエンドエンジニアの責務

  • アーキテクトとして持続可能な開発体制を作る責務
  • より良い体験を提供する責務

より良い体験を提供する責務

  • フロントエンドエンジニアが一番インターフェースをさわってる

フロントエンドエンジニアだからこそできること

  • フロントエンドエンジニアは器用貧乏
    • サーバサイドほどアーキテクチャに時間をとれない
    • デザイナーほどUI/UXに時間をとれない
  • どの領域も基礎知識があって掛け算できるのが強み