【勉強会メモ】Vue.js / Nuxt.js Meetup Osaka #0
- 日時:2018/06/30(土) 14:00 〜 17:00
- 場所:株式会社アイル
Vue.jsの勉強会が大阪で初開催。定員の倍以上の申し込みがあったようで、関心の高さが伺えます。私も申し込んだときにはすでに補欠で数日前にギリギリ繰り上がりました。入門的な話からアーキテクチャの話まで幅広いテーマで内容の濃い勉強会でした。
デザイナーの私が Vue.js を触ってみた
Yasui Risaさん
デザイナーがVueを知るメリット
- 仕組みを考慮したデザインができる
- 工数削減に強力できる
- 仕組みを活かしたデザインが作れる
CodePenを使ってVue.jsを触ってみた
なぜCodePen?
- Vueに必要な小難しい環境構築なしでとりあえずさわることができる
公式サイトベースで学習
買い物リストのサンプルデモ
- v-forを使う
- 配列のデータを使う
- v-model
- フォームに入力された値を取る
- v-on:click
- クリックイベントを取得して処理を呼び出す
まとめ
- CodePenを使えばハードルの高い環境構築なしでVueを触ることができる
- コードがシンプルでわかりやすい
- まずは簡単なことからはじめてみると楽しく学ぶことができる
AVAでのE2Eテストとpuppeteer
豊川 泰弘さん
AVAとは
- JavaScriptのテストFW
- Pure JavascriptのユニットテストとかE2Eテストで使っている
- 非同期のテストができる
- mochaと比べるとassertの書き方も少し見やすく書きやすくなっている
事前準備
npm install
する
AVAのテストコードの例
test('divide function test', async t => { t.is(divide(4, 2, 0.5) })
package.json "test": "ava --verbose" "ava": { "require": [ "esm" ] }
そもそもフロントエンド側のテストコードって必要?
- 品質を担保する一つの手段であるので時間があれば書いたほうが良さそう
- Pure javascriptで書かれているロジック部分は「正しく動いているよ」は保証したほうが良さそう
- CIで定期的にテストを実行し品質を担保しやすくなる
- GitLab CIを使ってGitコマンドでpushされた時に動くようにしている
それ以外でこんなところでテストコードを使ってました
- コードレビュー時にテストコードを書く
- メソッド共通化の検討時にテストコードを書く
AVAでのE2Eテスト
- NUXTの公式ページにあるE2Eテスト内容を試してみた
E2Eのテストコード
test.before
でnuxtを起動
AVAでのE2Eテスト
- テストが実行されるごとに
npm run generate
と同じ内容のものが走ってからテストが実行される - ちょっとしたテストでも時間がかかりしんどい
- localStorageが定義されていないための参照エラーが出続けてテストが一向に進まなかった
Puppeteer
- Chrome Developer Protocolを使ってブラウザ操作が行えるライブラリ
npm install
でインストール- スクレイピングツールとしても使える
- スナップショットとかも取れたりできるので便利
- Ver.1.0が2018年1月に出ている
- Googleが提供
- CentOSとかでも利用が可能
- 資料が多そう?
ちょっとした動作確認用としてTry Puppeteerがある
Puppeteerを使わない選択に
- ライブラリのインストールに時間がかかりそう
- 必要なライブラリがインストールできなくなったら本当にGitlab CIで動くのか
- Nuxt公式のほうが安心
まとめ
- AVAでのテストコードを書くのも良さそう
- E2Eテストはそれなりに苦労した
- ローカルだけでのE2Eテストの実施だけであればPuupeteerのライブラリを使ってテストとするのも良さそう
※補足:会場のアンケート
- 普段フロントエンドのテスト書いている人は意外と少ない
- mocha派が多い
- AVA派は少ない
Clean Architecture with Vue
andoshin11さん
Clean Archtectureの概要
クリーンアーキテクチャ(The Clean Architecture翻訳) | blog.tai2.net
- オニオン型のレイヤードアーキテクチャ
- 各レイヤーの名前は重要ではない
- 依存性の矢印が単方向であることが大切
- 内側のレイヤーは外の世界を知らない
アプリケーション実装パターン
Vuexを利用したFluxパターンの課題
- Actionsにアプリケーションロジックが集約しがち
- ドメインモデルをどこに書くか
- Storeの構造がViewを意識したものになりがち
- Gettersを全てのViewに用意するのは厳しい
- Mutationにロジックを書く人が後を絶たない
- 本当にTestableか
→スケールしなさそう
今回の設計方針
- 厳密なレイヤー分割
- 関心ごとの分離(DDDライク)
- 単方向データフロー(Fluxライク)
- 依存性も単方向でテスタブル
- 外部IFに依存しない
→Fluxの良いところを活かしつつDDDの考えも取り込んでスケーラビリティの高いアプリケーションにしたい
大事なのはレイヤーを増やすことではなくでレイヤーの依存性の方向性
Vue.js / Nuxt.js
後藤知宏さん
Vue.js = Progressive Framework
Vue.js = data binding tool
- データの内容がViewと結びつく
- シンプルなアプリケーションから大規模なアプリケーションまで使える
- スケールする知識の選択肢になる
Vue.js=custom component loder
- Webpackなしでもいける
- .vueファイルでWebpackありだとよりスムーズな開発
- Backendアプリケーションなどの大規模なものでもシンプルに管理できる
- タグの部分はバックエンドに任せる
Vue公式でコードを書きながら動作を確認してみると良い
Vue.js with VueRouter
SPA化する場合などにRouterを導入できる
Vue.js with Nuxt.js
- Vue.js
- VueRouter
- Vuex
Nuxt.jsはVue.jsで作るときに必要となる3つの構成をある程度まとめたFW
ここからLT
Vue.jsでスタイルを動的に変更する3つの方法
qwerty8tさん
- クラスのバインディング
class="{{ className }}"
- スタイルのバインディング- インライン
style="{ color: activeColor}"
- スタイルのバインディング- オブジェクト
style="styleObject"
Stringで"や'を多用する書き方はキモい
- クラスのバインディングを使いましょう
※参考
Vue.jsのmethodsとcomputed
ショウノシオリさん
Vue.jsのmethodsとcomputedって違うの?
- Vue.jsのscript要素
- 読み込むタイミングが違う
書き方はほぼ同じだけど何が違う?
methods
- メソッド
- メソッドなのでhtml上では
()
が必要 - 毎回呼び出す
- キャッシュされない
computed
(算出プロパティ)- プロパティ
- html上では
()
なし getter/setter
が定義可能- デフォルトはgetterのみ
- 値が変わらなければ呼び出されない
- キャッシュされる
JavaScriptのプロパティには2種類ある
- 値が格納されるデータプロパティ
- アクセサプロパティ
computed
はこれ- 値は持たず
getter/setter
と呼ばfれる関数を設定する
Computed Setter
- getはデフォルト
- setを書くとsetterが使える
methods
と computed
- キャッシュされることが一番のポイント
どういうふうに使い分ける
- 基本は
computed
を使い、どうしても必要なときはmethods
computed
は依存関係に基づいてキャッシュされる- dataプロパティがあった時に常にチェックして再び処理が走る
- 必要なときだけ処理が走る
methods
はdataプロパティが変わっていても変わらなくても毎回処理が走る- Dataを使って日時などを取得すると
conputed
だとキャッシュされてしまう
その他注意
method
とcomputed
で同じ名前を使わない- 外部からの呼び出し時もmethodを使うべき
まとめ
- 大きな違いはキャッシュの有無
- 毎回呼び出す必要がないなら
computed
を使う - 同じ名前は使わない
※参考