📄

【Report】v-tokyo Meetup #20 に参加してきました

はじめに

はじめまして、いちむらゆうまと申します。
Vue.js v-tokyo Meetup #20 の参加レポートを執筆していきます。
本レポートは各セッションのざっくりとした要約 + 私の感想で構成されています。
当日の雰囲気が少しでも伝われば幸いです。

簡単な自己紹介

私のことを少しだけ紹介させて頂きます。

現在大学生で、学生アルバイトとして業務アプリ開発会社でコードを書いています。
Vueはアルバイトで1年ほど扱ったのに加え、自分でWebアプリを開発するときに利用するというような関わり方です。
深いところは全然わからず、とりあえず要件に沿って動くものは作れるかなという感じです。

v-tokyo Meetup #20 について

今回のv-tokyoは「Developer Experience 開発者体験特集」がテーマでした。

Nuxt の開発生産性を支える Nuxt DevTools 、そして Vue.js エコシステムの DX 関連の内容をキャッチアップできるイベントとなります。
Vue.js v-tokyo Meetup #20 | connpass -イベントの説明

会場スポンサーセッションと4つのLTセッション、メインセッションの後に任意参加の懇親会がありました。

会場

GINZA SIX 10F 株式会社プレイドさんのオフィスで開催されました。
オープンスペース!人工芝!
フットサルくらいならできそうな開放感の中、靴を脱いでリラックスしながらセッションを聞いていきます!

会場スポンサーセッション: headlessなUIライブラリを選択する価値

https://speakerdeck.com/plaidtech/the-value-of-using-a-headless-ui-library
発表者: 株式会社プレイド yuito kawashimaさん

  • Radix Vueを利用し、社内でデザインシステムを作成している
  • headlessなUIライブラリ: スタイルを提供せず、機能のみを提供するUIライブラリ
    • スタイルを自分で書きつつ、アクセシビリティなどの機能はライブラリに頼れるのでうれしい
  • 現状、Vueで利用できるheadlessなUIライブラリはRadix VueHeadlessUI
    • そのうえで、提供機能数が多いためRadix Vueを選定した

headlessという概念を知らず、有用さに膝を打ちました。
プレイドさんには「デザインエンジニア」という肩書が存在するらしく、デザインに重きを置いて進めていく環境では特に輝きそうです。

LT セッション1: What is Vue.js? Hmm… It’s just language lol

https://ubugeeei.github.io/v-tokyo-20/
発表者: ubugeeeiさん

  • 言語を開発するモチベーションは「新しい開発者体験」を求めているからである
    • 言語を作れば、またよりよい言語が欲しくなる
  • VueはWebのUIの書きやすさを目指した言語である
  • ただ、言語を作るのは時間がかかる
    • Vueにも探せばやらなければならないことがたくさんある

すごいスピードで情報が降り注ぎ、これぞ"Lightning"という発表でした。
テンポ良く密度の高い情報の雨、とても心地よかったです。
また、プログラミング言語の根本に立ち返るような内容のセッションでした。
言語やフレームワークにコントリビューションしていく中で、根本的なモチベーションを見つめなおすのは大事になってくるのだろうなと感じます。

LT セッション2: ちょっとしたリアクティブユーティリティのご紹介

https://docs.google.com/presentation/d/1uYjxkjN-aPPMkpTftaM-QUQr0OE9XJv2EOwQniurC0c/edit#slide=id.g2e09d839be3_0_84
発表者: baseballyamaさん

  • 子コンポーネントで親から受け取ったオブジェクトをリアクティブに扱うにはwatchとrefで分離して実装しなければならない
    • propsをコピーしてrefオブジェクトとして初期化するだけでは親のオブジェクトの変更検知はできない
  • この2つを処理するUtil関数を用意するとスマートに実装できる

個人的にちょうど悩んでいる問題で、関心のあるトピックでした。
Vueのコアな部分でも自分でutil化してもいいのか!という気づきもあり、成長の兆しを感じます。
質問タイムにはコンポーネントの外側でwatchを利用するとメモリリークをしてしまうので、effectScopeを利用して対応するのが良いのではという議論がありました。
全く新鮮なメンバーでの議論を目の前で見ることができるのもMeetupイベントの醍醐味だなと感じます。

LT セッション3: vuejs/language-toolsを知っていますか?

https://tsukuha.github.io/v_tokyo20/
発表者: からころさん

  • vuejs/language-toolsという言語ツール群がある
    • 言語サーバー機能と型チェックに大きく二分される
    • Volar.jsをベースとしている
  • 言語サーバーはLSPというプロトコルに則って実装されている
  • 型チェックの実装を見ると、Volar.jsとvue/language-coreをインポートしているのを確認できる

恥ずかしながら、LSPはおろか、言語サーバーの存在自体も理解していませんでした。
実コードを見ながら実装部を確認、解説しており、濃密なセッションでした。
私の実力ではこの知識にたどり着くのはまだまだ先だったと思いますが、セッションの形で情報を得ることでそれをショートカットできた気分です。

LT セッション4: Nuxt Serverと$fetchを組み合わせたTypeScript開発体験

https://speakerdeck.com/kspace/nuxt-serverto-fetchwo-zu-mihe-wasetatypescriptkai-fa-ti-yan
発表者: keigoさん

  • Nuxt ServerでAPIを作成するとき、返却する値に型が付く
    • TypeScriptを用いた開発で良い体験を得られる
  • openAPIドキュメントを生成することもできる
    • NuxtConfigに設定を追加する
    • 実験的機能なので、現在はAPIエンドポイントが一覧で確認できる程度

TSKaigiでもいくつか話題に上がっていたTypeScriptで使いやすいAPIについて、とても強力な解決方法だと感じました。
スライドデザインもリッチで、変数をホバーすると型情報が表示されました。(すごい!)
エディタの挙動と一致しており、型が付く嬉しさをダイレクトに感じる助けになっていたと振り返って感じます。

メインセッション: Nuxt DevTools 101

https://speakerdeck.com/nozomuikuta/nuxt-devtools-101
発表者: Nozomu Ikutaさん

  • コードの見通しの良さと学習のしやすさはトレードオフの関係になっている
  • Nuxtには見通しの良さを確保するための機能が色々含まれている
    • auto imports
    • NuxtConfig
  • その中で学習のしやすさをサポートするためにNuxt DevToolsが存在する
    • コンポーネントリスト
    • ページリスト
    • インポートの可視化
    • etc...

Nuxtの特徴について見直し、そのメリット、デメリットの提示から入っていたことでその後の説明がスムーズに理解できました。
デモで機能をざっと紹介してくれたので、使い方がいまいちわからなかった機能、そもそも知らなかった機能について理解を深めることができました。
ちょうどNuxtを学習しはじめ、Nuxt DevToolsに頼り切っている私としては共感もあり、新たな知識も得られ、満足感のあるセッションでした。

懇親会

お寿司とピザが用意され、参加者の方々と交流することができました。
皆さまとてもやさしく、スタッフの方々が話のきっかけを作ってくれたこともあり、楽しく会話できました。
VueFesのスタッフ業の話や、実務での経験談などをざっくばらんに話すことができ、オフラインイベントの醍醐味を感じることができました。

おわりに

あまり深い知識もない学生という立場でしたが、とても楽しめたというのが第一の感想です。
コミュニティに貢献している方々の活動を間近で感じたり、同じ技術を使っているエンジニアの方々と交流できたりと良いこと尽くしでした。
学生だろうと初学者だろうと参加のハードルなんてなく、ただ純粋に楽しめることが伝わっていれば幸いです。
本当に楽しかったので次回もぜひ参加させていただこうかなと思います!

Vue・Nuxt 情報が集まる広場 / Plaza for Vue・Nuxt.

Discussion