UIT#5 わたしたちにとってのVue.js
https://gyazo.com/2fbdf4a33b16c20b1637d7b797347431
https://uit.connpass.com/event/107337/
UITとは?
UI + Tech
LINE株式会社におけるフロントエンドMeetup
企業イベントっぽくしたくない
体験談に価値を置いている
体験に優劣はない
ゆるふわに既存Vue.js(Nuxt.js)プロジェクトをTypeScriptに移行してみた @Motonori Iwata
https://slides.com/iwatamotonori/uit5/
株式会社エスエムエス
Vue歴4年
Nuxt歴半年
TS歴1ヶ月
ゆるふわプロジェクト(社内ツール)
Nuxt.js
Google App Enine Node.js Standard Enviroment
Firebase
移行方針
開発者1人なので新規開発停止
かかった期間は約4週間
順序
1. components
2. utils, plugins, middleare, etc
3. store
4, test
testを通ることを確認しつつ移行
TS周りのライブラリ追加
vue-cli/tsconfig.json
allowJSだけ一時的にtrue
strict: trueなのでimplicit anyは弾く
Linter
Xo
ESLintのいい感じ集
CIのLintは一旦OFF
lint-stagedは.vue, .tsのみ有効
https://gyazo.com/9ae29b14bdbe81ef08c22d82f6f2e05f
ハマりポイント
typescript-eslint-parser
eslint-plugin-typescript
バグがあった
False Positive no-unused-vars
型引数にしか使ってない変数がエラー
offにする
https://github.com/eslint/typescript-eslint-parser/issues/179
SFCでtscがみてくれない
False Positive new-cap
先頭大文字はコンストラクタだけにしなさいルール
capIsNewExceptionsを指定する
typescript/adjacent-overload-signatures
overloadの可読性を高めるルール
有効にしているとESLint自体が効かない(現時点で)
offにする
Componentの移行
vue-shims.d.ts
https://gyazo.com/61d1ecf1cc942a736acd334b95dd9a3b
vue-convert
Class styleにする
vue-convert -s class components/*.vue
だいぶショートカットできる(TSっぽくしてくれる)
Component properties
dataで@propで使うpropertyでエラー
defult値を設定するか、! をつける
path!: string
isLoading = false
$refsの型定義
https://gyazo.com/1cb7a34470cc132d39b2c319ed2d3476
Event.targetの型指定
targetがどのElement型なのかわからない
型定義だとtargetはEventTarget | nullになる
発火したElementに自分でキャスト
Testの移行
jest
jest.config.js
mount/shallowMount時のComponent型
しょうがなくanyにキャストして回避
自前で型定義でもいけるが、面倒
Vuex の Action のTest
contextをmockにしてUnit Testしたい
Mockを多用していると大変
考え方によってはMockの仕様を抑制する
カメラを利用したアプリを作って約1,000人で遊んだ話 @KenjiroKubota
株式会社アイスタイル
https://www.slideshare.net/KenjiroKubota/1000-124370034
なぜ作るのか?
開発合宿でARシューティングゲームを作った
忘年会にて利用してみた
夏の迂回でもゲーム作成してほしい
どんなゲームをつくったか
多くの笑顔を撮った人が優勝
利用したもの
Vue.js(Webアプリ)
vue cli
vue router
vuex
vuetify
qecode.vue
vue-qrcode-reader
https://www.npmjs.com/package/vue-qrcode-reader
@vue/cli-plugin-pwa
PWA
clmtrackr
https://github.com/auduno/clmtrackr
眉毛のライン・フェイスラインまで判定するのでメガネ・前髪長いと判定されない
動くスマホカメラだと認識わるい
対象1つなので複数人写ってもどれか判定
判定が厳しかったので閾値をゆるくした
Angular(スクリーン)
Firebase
Hosting
RealtimeDatabase
Storage
WebRTC
facingMode : {ideal: "environment"}
バック側のカメラを取得
ハマりどころ
カメラの終了制御
device.stop()
video.srcObject = null
映像のアスペクト比
16:9から1:1
videoタグからcanvasにクロップした
requestAnimationFrame
どんどん重くなってくる現象
SPAなのでリロードされずコールバックが溜まってた
beforeDestoryで破棄する
総撮影枚数
1769枚
MicrosoftのFace APIで再検証
https://azure.microsoft.com/ja-jp/services/cognitive-services/face/
jQueryからVue.jsへリファクタしたPJの話 @tak
Kyoto UIT Teams
技術スタックがレガシーなプロジェクトを
どう判断してプロジェクトを進めたのか?
現行ページと目指すゴール
LINE Web Login
デザインリニューアル
新機能追加
QRコードを読み込めばログイン
特徴
jQuery, ajax通信, utility関数
フレームワークなし
Gruntでconcat
マークアップ、フロント、バックエンドが分業
なぜ置き換えるのか
各担当者の役割分担、スコープ化
CSS/HTMLの作業発症した時にバックエンド以外でおおよそ作業できるようにする
ルートコンポーネントだけが記載されたHTMLだけにする
サーバーサイドのみでの変更要件がでたらバックエンドのみで対応
そのほかメリット
見やすくする
保守コスト
リッチ表現への担保
vue-cliが優秀
リファクタリング方針
Androidのバージョンが4.4未満だとしんどい
リプレイス方法
Inputフィールドへの処理
v-bindとvuelidate
サーバーサイド特有の連携される変数
コンポーネントのpropsで連携
slotやdot-env設定も活用
移行の例外
移行できないものは無理に移行しない
暗号化処理 gulp-concat 生成されたファイル
グローバル空間で宣言されてグローバルメソッドに依存している
concatしたファイルを外部ライブラリとして扱う
まとめ
担当のスコープが疎結合になった
データフローが明確になった
リファクタリングで危険な道は回避する
マークアップとフロントエンドの協業は模索中
さくらのフロントエンド さくらのVue.js @ravelll
さくらインターネット株式会社
https://speakerdeck.com/ravelll/vue-dot-js-in-sakura
Vue.js多用しています
コントロールパネル
さくらのVPS
フォーム
社内向け運用サービス
コーポレートサイト 等
なぜVue.jsをつかっている?
デザイナとの協業
諸ツールが公式から出てて安心
資産があった
日本語ドキュメントが充実
当時のReact.jsライセンス問題
アプリケーション
Vue.js
Vuex
vue-router
Nuxt.jsは不使用
ローカルはExpressでmockサーバで使用
Python
Django
ディレクトリ構成
Nuxt.jsを参考
storeにアクセスしない
ルールはESLintのローカルルールにして保証
動的なパラメータは _id/ にした
エラー検知
Sentry
リクエストは401と422エラー以外を記録
Vue Warnは開発時、レビューするとき人間が検知
テスト
コンポーネントはあまり書かない
storeのメソッドのうちデータフロー以外のロジックを含んでいるものをテスト
jest
Vue Test Utils
git push単位でCIを回してテスト+audit
パッケージのアップデート
yarn upgradeしてJenkinsタスクを週一でまわす
困ったこと
デザイナーとの協業
デザインの共有・実装がやや冗長
コンポーネントの細かい挙動・数値をSketchで伝えるのは大変
リソースがたりない
Storybookを導入したらいい?
Vue.jsは裏切らない @Yuji Yamaguchi
株式会社リクルートライフスタイル
https://speakerdeck.com/yug1224/uit-number-5
レストランボード
https://airregi.jp/restaurant-board/
iOSアプリ
一部WebView
独自フレームワークをVueに置き換える話
独自フレームワークについて
jQuery
BabelifyでES2015化
MorphDOMで差分レンダリング
MVVM
完成度は高かったが継続性に不安
導入前にやったこと
足元の整理(2年弱)
webpack
gulp
npm script
ESLint
Prettier
Jest
Promise
async /await
心がけたこと
小さく移行する
レガシーコードのロジックは資産
Vue導入での大きなインシデントはあまりない
よかったこと
学習曲線がゆるい
それなりに書ける
わるかったこと
自由すぎて影響が肥大化する
watch or computed?
created or mounted ?
やらないことを決めるのが大事
まだまだ移行中
移行済:40%
のこり:60%
building better Vue components with storybook @julien
Kyoto UIT Team
Atomic Design
アプリを細かなパーツに分けられる
Consequences for Vue.js
ベストプラクティス
parentとchildの関係
P => C のときpropertiesを参照
C => P のときeventsを参照
propertiesは簡素なものをつかう
siblings
同階層での参照は駄目
parentを間に入れる
Storybook & Whiteroom
問題
storybookがReact.js向けで書かれている
Vueコンポーネントが不安定になる
意図しないタイミングでリフレッシュする
イベントとプロパティを同時に見れない
vue-whiteroomを作った
https://www.npmjs.com/package/vue-whiteroom
Vue.js製のstorybook
AtomicDesignを重視
特徴
プロパティを自動生成
Vue.jsのライフサイクルを気にしなくていい
イベントをすべて見れる
プロパティとイベントを同時に見れる
https://gyazo.com/35490517c26f9c56581c2ecd68c72a7d
yamanoku.icon LINE株式会社はビールサーバーがある