Vue.js v-tokyo Meetup #21
https://gyazo.com/436d13558e6e95eb9a5c77997201cd6f
Vue.js v-tokyo Meetup #21 - connpass
会場スポンサー
株式会社インプリム
https://pleasanter.org/
oxcは次世代のフロントエンドツールチェイン開発の基盤になり得るか
oxc は次世代のJSツールチェイン開発基盤になり得るか - Speaker Deck
りんたろー
昨今のツールチェイン
Vite
swc
Rolldown
Biome
oxc
RustやGoで実装されている
なぜRust?
Lifetime annotation
Zero-cost抽象化
napi_rs
oxcはコンパイラーのコレクション
パフォーマンス
https://gyazo.com/c3fb3e76cc044a62d13c71820d66a47a https://github.com/oxc-project/bench-javascript-parser-written-in-rust
なぜ高速なのか
ASTにarenaを開放している
bumpalo
メモリの断片化を減らしている
スピードが遅いのはバグ扱いにしている
https://oxc.rs/docs/contribute/rules.html#development-policy
データ思考の設計
拡張性
ほかのコンポーネントで使われるものとして設計されている
Rolldown
Biome
tauri
kuma-ui
AST書き直しで使われる予定
信頼性
Test262、Babel、TypeScriptのテストスイートを高く通過している
未来について
第3世代のツールチェイン
最適な選択を取り込む
エッジのバンドリング
JSとの相互運用性・互換性
無駄がない思想
VueUse: 5分で分かる Vue.js 開発の効率化術
VueUse: 5分で分かる Vue.js 開発の効率化術 - Speaker Deck
naoki haba
株式会社エブリー
VueUseとは何か?
Vue2にも対応
Composition関数
SSRサポート
Vite、Nuxt、webpack、Vue CLIなどの対応あり
一例の紹介
useMouse
オプションを渡すだけでリアルタイムのマウス座標を取得できる
イベントリスナーを使用して座標を追跡できる
ライフサイクル管理
メモリリーク心配なし
useClipboard
コピーができた状態などのリアクティブな状態管理が可能
書き込みもカンタン
カスタマイズが柔軟
useAxios
自動的なリクエスト状態管理
リアクティブなクエリパラメータ
リクエストメソッド、ヘッダー、手動トリガー
UnJSを使って軽率にCLIを作ってみたらめちゃくちゃ便利だった
UnJSを使って軽率にCLIを作ってみたらめちゃくちゃ便利だった / create CLI with UnJS - Speaker Deck
にー兄さん
HoloLab inc.
Babylon.js勉強会
create-babeylon-app
https://github.com/drumath2237/create-babylon-app
使用したパッケージ
citty
CLIビルダー
consola
コンソールログの装飾
giget
GitHubからファイルをダウンロードできる
scaffoldingとしては使える
nvpm
pkg-types
ディレクトリやファイルパスを指定してpackage.jsonやtsconfigを読み書きできる
jiti
ESMやTSをビルドせずに動作確認できる
unbuild
ビルドツール
Nuxt Scriptsって何ができるの? Nuxt4メインセッションに添えて
Nuxt Scripts でサードパーティスクリプトをより身近に
GANGAN
FeaSion
Nuxt Scriptsとは?
サードパーティスクリプト
Google Analytics
YouTube Player
利用可能なレジストリ
Analytics
Tracking
Adsense
Marketing
Support
Payments
ベンチマークに協力してくれる人を探してる
https://github.com/nuxt/scripts/issues/48
新規の追加リクエストも随時募集中
https://github.com/nuxt/scripts/discussions/177
Nuxt4
wattanx
STORES株式会社
Nuxt Bridge
移行方法
移行しやすい方法への提供
機能をオプトイン
compatibilityVersionを設定して有効化できる
Nuxt3の状態でNuxt4へ移行できる
問題があったら変更をOFFにできる
codemodの提供
移行する場合はこれを活用する
https://codemod.com/registry?q=nuxt&author=Codemod
変更点
デフォルトがappに変わる
なぜ変更されたのか
パフォーマンス
FS watcherのパフォーマンス悪化の可能性
IDE type safety
serverとそれ以外では別々のコンテキストの auto importになっている
移行は必須ではなくこれまでと同じsrcで利用できる
useFecthやuseAsyncDataのdataを異なるページ感で共有できる
プリレンダリングのときのみ
同じkeyでキャッシュされたデータを扱える
パフォーマンス向上
マイグレーション時の注意
動的なページを使っていてkeyを設定しない場合
どのページでも同じデータが共有されてしまう
ユニークなkeyを設定しましょう
useAsyncDataとuseFetchのデフォルト値が変わる
undefinedに変わる
目的
もともとはnullだった
一貫性を持たせるためにundefinedにする
useAsyncDataとuseFetchのrefreshメソッドでdedupeオプションにbooleanを使えない
目的
cancelとdeferに明示的にしてわかりやすくした
booleanは非推奨
マイグレーション時の注意
フラグでOFFにはできない
useAsyncDataとuseFetchのdefaultオプションの尊重
いままではclearNuxtDataを使うとデフォルト値ではなくundefinedになっていた
useAsyncDataとuseFetchのdataがshallowRefになる
目的
パフォーマンス向上のため
dataはimmputableであるべきだと考える
注意点
これまでの挙動にしたいならdeep: trueに設定する
tsconfig.jsonのnoUncheckedIndexedAccessが有効になる
配列のアクセスやオブジェクトのプロパティのアクセスをより厳密化する
おまえら禁じられたインデックスアクセスを平気で使ってんじゃねえか!わかってんのか?『ランタイムエラー』が生まれたのは人間がコンパイラオプションに甘えたせいだろうがよ!
目的
tsconfigのチートシートに従いたいため
https://www.totaltypescript.com/tsconfig-cheat-sheet
window.__NUXT__の削除
window.userNuxtAppを使うようにする
builder:watchが絶対パスで返す
目的:srcDirの外も監視可能にするため
middlewareの小ディレクトリのindexがスキャンできる
目的:pluginsに揃えるため
templateのcompile方法が変更された
getContentsに移行された
目的:lodash/templateを使っていたがセキュリティ問題があった
コードをシリアライズする機能を提供するのは理想的ではない
#Vue.js #v-tokyo