# アーカイブ | yamanoku.net > このページはyamanokuこと大山奥人が書いてきた過去の記事やログを収集したページです。 --- ## yamanokuの2024年を振り返る https://archives.yamanoku.net/looking-back-at-yamanoku-activities-2024/ 今年1年を振り返ってみようと思ってこの記事を書きました。そこそこのボリュームになってますが、よろしくお願いします。 ## 1月 [nippo-2024-01 - yamaScrapbox](https://scrapbox.io/yamanoku/nippo-2024-01) - Mastodonサーバーを[mastodon.social](http://mastodon.social)へ引っ越し - 入って気づいたけどMisskey.ioがサーバー非表示扱いにされていた - ここが一番でかいMastodonサーバーだと思うのでこれからここでやっていくぜ!と投稿しようとおもったらサーバー落ちてて泣いた - 年明け早々に家族で[魚べい](https://www.uobei.info/)で寿司を食べてくる - chibivue(現chivue land)のDiscordサーバーにジョインする - [chibivueサイトのコントラスト比調整したPR](https://github.com/chibivue-land/chibivue/pull/251)を出してマージしてもらった - [archives.yamanoku.net](https://archives.yamanoku.net/)に[Pagefind](https://pagefind.app/)を導入してみる - [Pagefindを導入してサイト内検索できるようにする by yamanoku · Pull Request #400 · yamanoku/archives](https://github.com/yamanoku/archives/pull/400) - 普段遣いのブラウザをMicrosoft Edgeに変えてみる - Copilotで閲覧中のウェブサイトを要約してくれるのめっちゃいい - 中本で北極に初チャレンジしてくる - 北極やさいシャキシャキ+背脂別皿+ゆで卵 - 五目蒙古タンメンなどで鍛えていたのでちゃんと食べ切れた - 飼っている猫([風太](https://scrapbox.io/yamanoku/%E9%A2%A8%E5%A4%AA))が老化により耳が遠くなって声がデカくなっている - レビュー参加していた[f_subal](https://x.com/f%5Fsubal)さん著「[Tailwind CSS実践入門](https://gihyo.jp/book/2024/978-4-297-13943-8)」の献本してもらう - [株式会社ログラス](https://www.loglass.co.jp/)のリファラルイベントに参加して寿司食べながらフロントエンド談義してきた - BtoB SaaSやるとエンタープライズ向けのブラウザ配慮が出てくる話はおもしろかった - 転職ドラフトの2024年1月回に参加してみる - Findyのユーザーサクセス面談をやってみる - 再開したMeguro.esに初参加 - [syumai](https://x.com/%5F%5Fsyumai)さんを初めて見かける・お話ができた - まだ行ったことがなかった柏のドッグラン「ドッグランペガサス」に家の犬(以下、[ジュン](https://scrapbox.io/yamanoku/%E3%82%B8%E3%83%A5%E3%83%B3))を連れて行く ## 2月 [nippo-2024-02 - yamaScrapbox](https://scrapbox.io/yamanoku/nippo-2024-02) - [あなたが知らない(かもしれない)jQueryの話](https://scrapbox.io/yamanoku/%E3%81%82%E3%81%AA%E3%81%9F%E3%81%8C%E7%9F%A5%E3%82%89%E3%81%AA%E3%81%84%EF%BC%88%E3%81%8B%E3%82%82%E3%81%97%E3%82%8C%E3%81%AA%E3%81%84%EF%BC%89jQuery%E3%81%AE%E8%A9%B1)を社内LT会で発表 - 千葉ニュータウンのコストコに初めて行った - 店舗限定のアサイボウルを食べられた - 娘の塾を検討しだす - マイクラのプログラミング教室やっているところに体験会に行ってそこに通うことになった - [eslint-plugin-vuejs-accessibility入門](https://zenn.dev/comm%5Fvue%5Fnuxt/articles/eslint-plugin-vuejs-accessibility-introduction)書いた - プロダクト事業部の全体会があったため参加 - 今後の事業説明とワークショップを行った - 流山おおたかの森駅前に新しくできた[新時代](https://shinjidai-nagareyamaootakanomori.owst.jp/)に家族で行ってくる - 確定申告を終える - 所属チームでGatherやってみることになった - 結局自分はあまり参加せず… - 社会人なった当時は750があればその企業に一生遣えるみたいな価値観だったけど、各種が高騰してることでその基準は脆くも崩れ去ったな、と考えるようになった - [Svelte Japan Offline Meetup #2](https://svelte-jp.connpass.com/event/308267/)に参加、LT発表してきた - 発表資料:[Svelte Accessibility Warning](https://docs.google.com/presentation/d/1VVqCe5sAasANXFL8QU7GmBXgqeU5RGwaV1bzYRz5m8U/edit?usp=sharing) - Discordでお世話になっていたSvelte Japanユーザーグループの皆さんと初対面、お話できて楽しかった - カービィのハッピーセット第1弾の4種をゲットする - 埼玉に住む義妹が飼っている猫([ごまちゃん](https://scrapbox.io/yamanoku/%E3%81%94%E3%81%BE%E3%81%A1%E3%82%83%E3%82%93))を一時的に預かっていた - 自分が運営するポッドキャスト「[お元気ですか.fm](https://creators.spotify.com/pod/show/ogenkidesuka-fm)」で[f_subal](https://x.com/f%5Fsubal)さんがゲストで喋ってくれた - [vol.27 【ゲスト: @f_subal】Tailwind CSS実践入門とコンポーネント設計 by お元気ですか.fm](https://creators.spotify.com/pod/show/ogenkidesuka-fm/episodes/vol-27--f%5FsubalTailwind-CSS-e2gis8v) - この頃からなんとなく[令和の虎CHANNEL](https://www.youtube.com/channel/UCTyKZzmKi95wxmCg9rU-j6Q)を見るようになった - 社会課題どうにかしようとしている話を見てる ## 3月 [nippo-2024-03 - yamaScrapbox](https://scrapbox.io/yamanoku/nippo-2024-03) - カービィのハッピーセット第2弾の4種もすべてゲットする - [TSKaigi 2024](https://tskaigi.org/)の個人スポンサー枠を購入 - ドライヤーが急に壊れる - この頃チーム内運営が大変息苦しく、しんどさのあまりMTG終わった直後に床に伏していた - 個人のScrapboxが4000ページ超え - [リフレッシュプラザ柏](https://kashiwa-refreshplaza.net/)に家族で行って温水プール遊泳してくる - 会社の経営合宿に初参加して経営陣の前で発表してくる - フロントエンド活動の課題とアクセシビリティの推進についてを語ってきた - 内容をもっと理路整然にすべきだったが言いたいことは言えた - 代表取締役社長の心に刺すことはできたので勝利条件は満たした - 他の経営陣からもコメントもらえたらよかったけどポカンって感じではあった - 翌週の全体朝会で代表に内容を触れてもらった - 「Tailwind CSS実践入門」出版記念イベントでpixiv本社へ - AstroとAstro DBを使ってブログ投稿サービスを作ってみる - DDTプロレスの5時間スペシャル興行を観てくる - 何年かぶりのプロレス生観戦。後楽園ホールも久々 - [Google Developers Group Tokyoのイベント](https://gdg-tokyo.connpass.com/event/311662/)でGoogle日本オフィスへ - Claude試してみる - 車の夏タイヤへの交換と併せて冬タイヤを処分してもらった - 社内でやっていたプロダクトのアクセシビリティチェック回が終了してどのように改善していくかを検討していくフェーズへ - 魚べいの好きだったえんがわ軍艦にわさび載せがなくなっててショックを受ける - 家族で原宿・竹下通りへ遊びに行く - 甘いものばかり食べていたのでしょっぱいものが恋しくなった - ChatGPTの有料プランを使ってなかったので解約する - 娘が塾に通うようになるので携帯をもたせるために妻のお古のiPhone XSを渡たしてpovoのeSIM開通させた - iPhone XS、自分の検証用iPhoneだったけどなくなった ## 4月 [nippo-2024-04 - yamaScrapbox](https://scrapbox.io/yamanoku/nippo-2024-04) - 開発チーム合同スプリント週間でwebpackのv5バージョンアップ対応を行う - 合同スプリント週間は業務で着手できなかった部分を興味がある領域で着手していく取り組み(POとは合意済み) - フロントエンドにまつわる混合チームは計9人の大所帯になった - url-loaderのbase64変換ミスに気づけなかったが応急処置してバージョンアップ対応は完了できた - 自分以外も結果を残しており充実した週間だった - 2024年9月期下半期全社キックオフに参加 - 実は現地参加は初めて(これまでリモート参加) - MVP表彰などがある中、代表取締役社長に名前を呼ばれる事象があり懇親会ではネタにされまくっていた - 娘の新学年クラスの組を予想したら当たった - ガールズバンドクライを視聴しだす - 曲が良すぎる…! - 今年のSpotifyで一番聴いてたバンドだった - Prime Videoで公開されているFalloutドラマの一話を居間で観たら気まずくなった - [イカのせっと](https://x.com/ikanoset)と柏で呑みに行ってきた - [焼肉酒場 ともさんかく](https://www.tomosankaku.com/)、HUBに行ってきた - 歳が近く境遇も近い相手と思いをさらけ出して喋りあえるのは貴重 - HonoXとCloudflare Pagesを使って[カウントダウンアプリ](https://yamanoku-birthday.pages.dev/)を作り変えてみた - [feat: HonoX by yamanoku · Pull Request #907 · yamanoku/birthday-countdown](https://github.com/yamanoku/birthday-countdown/pull/907) - [フロントエンドカンファレンス北海道2024](https://www.frontend-conf.jp/)へCfPを提出する - [大吉祥寺.pm](https://fortee.jp/dai-kichijojipm-2024)へCfPを提出する - 内定いただいた企業から会食に誘ってもらった - CTOも参加予定だったが直前で体調不良で欠席 - 美味しいご飯を食べならが楽しいお話ができた - コストコに魂を売った証明としてコストコグローバルカード契約した - [Meguro.es #27](https://meguroes.connpass.com/event/311788/)に参加・LT発表してきた - 発表資料:[令和最新静的サイトジェネレーター事情](https://scrapbox.io/yamanoku/%E4%BB%A4%E5%92%8C%E6%9C%80%E6%96%B0%E9%9D%99%E7%9A%84%E3%82%B5%E3%82%A4%E3%83%88%E3%82%B8%E3%82%A7%E3%83%8D%E3%83%AC%E3%83%BC%E3%82%BF%E3%83%BC%E4%BA%8B%E6%83%85) - 好きな惣菜発表ドラゴンネタを擦っておいた - ひがしんアリーナで開催されたDDTプロレス興行を観てくる - 彰人選手の無差別級選手権への挑戦だったので見届けにいった - [Svelte/SvelteKitを採用している日本企業まとめ](https://github.com/svelte-jp/japanese-svelte-companies)が、[yamanoku/awesome-japanese-a11y-companies](https://github.com/yamanoku/awesome-japanese-a11y-companies)を参考にしてもらっていた - 家族で大洗に遊びに行く - ゴールデンウィークのため車渋滞が半端なかった - とちおとめ、めんたいパーク大洗、海鮮市場を堪能した - 妻の免許更新に付き合った後に初めて[田所商店](https://misoya.net/)に行ってきた - 転職活動、オファーは12件、うち指名承諾は6社、最終的に選考進めたところで2社から内定いただきました - [株式会社Schoo](https://corp.schoo.jp/)に内定承諾してきました - もう一社は[株式会社Helpfeel](https://corp.helpfeel.com/ja/home)でした ## 5月 [nippo-2024-05 - yamaScrapbox](https://scrapbox.io/yamanoku/nippo-2024-05) - ゴールデンウィーク中に両親が遊びにくる - 埼玉県川越市に遊びに行った - COEDOビール呑んだりおさつチップ食べたりうどん食べたり - ジュンくんがドッグランにあるプールに楽しそうに入水していった([動画](https://scrapbox.io/files/66372fe31c884e00243d7255.mp4)) - フロントエンドカンファレンス北海道2024の個人スポンサー申し込んだ - 社内ツールをDenoでやってみたらいいんじゃないですかと軽率に進めた結果Denoツールが誕生した回 - uwuロゴが流行りだしている時期 - Vue.jsサイトのuwuロゴに代替テキスト提案してきた - [Fix: uwu logo style & alt text from Home.vue by yamanoku · Pull Request #2846 · vuejs/docs](https://github.com/vuejs/docs/pull/2846) - [Meguro.css #10](https://megurocss.connpass.com/event/316265/)に参加してくる - [TSKaigi 2024](https://tskaigi.org/)に参加してくる - [Fix typo company name by yamanoku · Pull Request #141 · tskaigi/tskaigi.github.io](https://github.com/tskaigi/tskaigi.github.io/pull/141) - タイムテーブル眺めてたらタイポ見つけた - [TSKaigi 2024参加レポート](https://engineer.crowdworks.jp/entry/report-tskaigi-2024)書いた - ディーゼロが運営する[Porta11y](https://porta11y.d-zero.co.jp/links)サイトに[yamanoku/awesome-japanese-a11y-companies](https://github.com/yamanoku/awesome-japanese-a11y-companies)を載せてもらった - アクセシビリティの祭典2024をオンライン視聴参加する - 車の2年点検を終える - フロントエンドカンファレンス北海道2024のプロポーザルが当選していた - [アクセシビリティやるぞ!LT祭り #5](https://smarthr.connpass.com/event/315155/)でLT発表してきた - [フリー株式会社](https://corp.freee.co.jp/)の大崎オフィスに初めて行った - [ME_TKS](https://x.com/ME%5FTKS%5F)さんとついに初めて喋れた - ScrapboxがHelpfeel Cosenseに名称変わることにショックを受ける - [アイカツ!オフィシャルストア](https://bandainamco-am.co.jp/official%5Fshop/aikatsu/)に初めて行く - 流山市への転籍届ようやく出してくる - Nintendo Tokyoに初めて行ってきた - 総額4000円いかない程度だったので理性が仕事していました - 株式会社クラウドワークスを退職した - 4年7ヶ月在籍してました - 送別会、2次会も参加できました - 記念品でもらった純銅のタンブラーがすごく良い - 所属最終日は恵比寿で焼肉ランチしてきた ## 6月 [nippo-2024-06 - yamaScrapbox](https://scrapbox.io/yamanoku/nippo-2024-06) - コストコでPS5を購入してくる - PS Plusに加入してワンダと巨像、レゴ®ムービー ザ・ゲーム、HUMANITYなどをプレイした - 地元メンバーでの定期呑み(御徒町) - 入社前に[マッドマックス:フュリオサ](https://wwws.warnerbros.co.jp/madmaxfuriosa/index.html)観てきて闘争心を沸き立たせる - [株式会社Schoo](https://corp.schoo.jp/)に入社した - 学ぶことを重視する会社なので入社のことを入学といいます - 退職は転校というようです。出戻りも検討されてるのかな - 光の裁量労働制を手に入れた - フルリモート入社です - 就労2日目でなかなかデカめの事象に巻き込まれた - 給与が当月支払いのため前職の前月給与と合わさって最強になった - [学園アイドルマスター](https://gakuen.idolmaster-official.jp/)やってみる - 姫崎莉波さんをプロデュースした - [fix(nuxt): export \`useRouteAnnouncer\` by yamanoku · Pull Request #27562 · nuxt/nuxt](https://github.com/nuxt/nuxt/pull/27562) - Nuxtに初コントリビュートした - 娘が埼玉に住んでる義妹夫婦の家にお泊りしに行った - ニコニコ動画(Re:仮)で各年代の懐かし動画を観ていた - ジュンくんが2歳になった - 前職の退職組×4の在職組×2の呑み会兼送別会を実施した - すでに退職している&まだ直接お話できてなかった人と呑んだりした - [大衆食堂 てんぐ大ホール 南池袋店 | テンアライド](https://www.teng.co.jp/shopsearch/shops/view/BA604993) - 昼に入って16時まで好き勝手やっていたが1人で4,145円くらいなの超リーズナブル - [Prettier](https://prettier.io/)へのGitHub Sponsorsを開始 - [STORES Tech Conf 2024](https://storesinc.tech/conf/2024)の参加申し込みをしてくる - ジュンくんの通院が完了する - 足の指先を執拗に舐めていたのの経過観察 - 1泊2日の名古屋旅行 - 甥っ子(2歳&0歳)に会いに行った - 2歳の甥っ子にグラニフの11ぴきのねこの子供用Tシャツ与えられた ## 7月 [nippo-2024-07 - yamaScrapbox](https://scrapbox.io/yamanoku/nippo-2024-07) - [SPA のアクセシビリティを強化する Nuxt の Route Announcer 機能](https://zenn.dev/comm%5Fvue%5Fnuxt/articles/feat-nuxt-route-announcer)書いた - ウェルカムランチで会社に初出社 - うなぎ重を食べました - 雇入れ検診してくる - 渋谷だったので終わってからNINTENDO TOKYOに寄ってくる - ダスキンに居間のエアコン掃除してもらう - 入社して1ヶ月しか経ってないけど最終面談まで進んだ方の人のアトラクト面接させてもらう - 最終的に入社までつながってので魅力は伝えられたと思います - 家の5年点検 - 庭の木がカミキリムシにやられてるっぽく死亡報告を受けた - 次の10年点検は2029年に - Amazon Prime Dayで[Shokz OpenFit](https://jp.shokz.com/products/openfit)買った - マルチポイント接続らくちん - [アクセシビリティLT会](https://yumemi.connpass.com/event/323801/)で元同僚が初登壇していたので見守る - 2.4.0よりルールが追加されたので[eslint-plugin-vuejs-accessibility入門](https://zenn.dev/comm%5Fvue%5Fnuxt/articles/eslint-plugin-vuejs-accessibility-introduction)を更新 - [なかひこくん](https://x.com/takanakahiko)のDiscordメンバーと高田馬場のすたみな太郎NEXTでオフ会 - ほとんど直接会うのは初めましてのメンバーだった - すたみな太郎は初体験でしたがなんかまぁもういいですって感じです - 2次会に同ビルにある自遊空間でカラオケしてきた - 転職ドラフトで転職成功したのでアマゾンギフト券もらう - [WH-1000XM5](https://www.sony.jp/headphone/products/WH-1000XM5/)を買わせてもらった - 残りは家の必要なものに使った - [ReactのuseIdと同等の仕組みがあるライブラリ・フレームワークを調査する](https://zenn.dev/yamanoku/scraps/35eb08d7916514)のをやった - 偽善野郎なので[認定NPO法人 キッズドア](https://kidsdoor.net/)に5000円寄付した - [老倉育さん、ありがとうございます…](https://x.com/nisioisin%5Fanime/status/1815877049573425578) - [Vue.js v-tokyo Meetup #21](https://vuejs-meetup.connpass.com/event/321431/)に参加 - 終わった後に[t0yohei](https://x.com/t0yohei)と[mascii](https://x.com/mascii%5Fk)とで中野で呑みに行った - 買った・読んだ書籍を管理するために[Notion](https://yamanoku.notion.site/a13c1791a63c4f6c8b50bc6a5be280fb?v=feedecc8722e49828582f266b4b42308)にまとめだす - 入社してから思った成果を出せず気分が鬱々してくる - 社内の役割として1人なのと明確なチーム連携もあるわけでもなかったのでそこがしんどかった - 入りたての環境で障害発生したときの何も力になれない無力感はすごい! ## 8月 [nippo-2024-08 - yamaScrapbox](https://scrapbox.io/yamanoku/nippo-2024-08) - Vue Fes Japan 2024のCfPが落選した - 代わりに個人スポンサープランを購入 - 社内フロントエンドメンバー向けにフロントエンドの技術雑談をする会をつくってみる - 社内でうまトマチーズが流行していたので食べに行った - リフレッシュプラザ柏に再び家族で行く - 途中で地元の子っぽいのが初めて会った娘と一緒に遊ぼうといってきてコミュ力すご…ってなった - 左奥歯あたりに腫れ(智歯周囲炎?)が出来てしばし苦しんでいた - 社内でFigma Variablesのもくもく会やっていた - 娘が急遽8月いっぱい入院することになった - 大山家にとって一番の出来事になった - 1ヶ月ちかくも娘が家に居ないというのは初めての経験だった - なんだかんだで娘は自分の人生を形成して支えている存在なのだと再認識させられた - [DIST.44 「管理画面から考えるUX」](https://dist.tokyo/details/dist-44/)に参加してくる - DISTへの自体久々だった - [takanorip](https://x.com/takanoripe)の発表応援しに行く - 途中で緊急地震速報が一斉になってビビる - 話しかけられた人が[hashrock](https://x.com/hashedrock)さんと分からずスルーしてしまう案件が発生(謝罪済) - pixivの中の人から[PIXIV DEV MEETUP 2024](https://conference.pixiv.co.jp/2024/dev-meetup)の参加招待いただく - JTBに行って11月の大阪旅行の予約を取ってくる - [RTA in Japan Summer 2024](https://rtain.jp/rtaij/rta-in-japan-summer-2024/)の5日目を現地観戦してくる - 柏の葉にある[お好み焼本舗](https://www.okonomiyaki-honpo.jp/)に行ってたらふく食べてきて死にました - フロントエンドカンファレンス北海道2024に登壇してきた - 前日入りに際して、成田空港から出発したけど札幌にはANA便しかなかった - 雷雨により飛行機の到着が遅延してた - 会場から歩いて5分もかからないところのホテルに泊まってた - 朝から懇親会までぶっ続けで居て正直ヘロヘロになった - 昼はsyumaiさんとスープカレーを食べに行った - chibivue landの面々も参加してくれていたの嬉しかった - 会社のテックブログ再開に伴い[Qiita Origanization](https://qiita.com/organizations/schoo)に参加した - ダイレクトでいきなり[Pizza Tower](https://store-jp.nintendo.com/item/software/D70010000074089/)がNintendo Switchから配信されて驚愕した。速攻でダウンロード購入した - 8月に入社したエンジニアのウェルカムランチのために出社 - ハンバーガー食べた - ランチ後にCTOと1on1してから帰った - [Vue Fes Japanの歴代スピーカー一覧を見られるページを作った](https://zenn.dev/yamanoku/articles/vuefes-japan-speakers)を書いた - [Vue Fes Japan Speakers](https://vuefes-japan-speakers.nuxt.dev/) - 仕事、ポジティブとネガティブの間を反復横跳びしているような感覚 - フロントエンド関連のイベント行くと救われる気持ちになる ## 9月 [nippo-2024-09 - yamaScrapbox](https://scrapbox.io/yamanoku/nippo-2024-09) - 娘が退院後もしばし様子見が必要だったため見守りしつつ労働 - 慣れないこともしないといけなかったのでストレスがすごかった - しばらく自分にとってもよくない状態が重なっていた - ジュンくんを洗ってから自然乾燥目的で散歩しにいったらゲリラ豪雨に会って自分も含めてビショビショになった - [TAKAYAMANIA EMPIRE 3](https://abema.tv/channels/fighting-sports2/slots/FFRB288LNHmtes)を観に行った - 鈴木みのるvs高山善廣は今年のベストバウト試合です - 柴田勝頼を観に行ったのがあったが、サプライズ試合が一番よかったよ - [ちびとーーく!](https://x.com/karan%5Fcorons/status/1830531975851249993)にゲスト参加 - フロントエンドカンファレンス北海道2024の登壇者回 - スペース荒らしが来てしまった - 最後はtakanoripも参加してくれてWeb制作老人会が発生 - 娘の学校生活復帰に向けて学校側とで面談してくる - [composition api helpersとuseIdに関するページの翻訳対応 by yamanoku · Pull Request #2278 · vuejs-translations/docs-ja](https://github.com/vuejs-translations/docs-ja/pull/2278) - useIdだけを翻訳するところドキュメント元の構成が変わった影響で2つIssue対応した - [アクセシビリティカンファレンス名古屋](https://nagoya.a11yconf.net/)は現地参加予定だったけど家のことや地震のこともあってリモート参加に変更 - [エイリアン:ロムルス](https://www.20thcenturystudios.jp/movies/alien-romulus)を観てくる - よく分からないがここ数週間はエイリアン気になって設定を調べたりしていた - プロメテウスを通じて人類はどこから来たのかみたいな規模のでかい話になってきたので興味が湧いていった - オフスプリング、キモい - [きみの色](https://kiminoiro.jp/)を観てくる - 話や演出が終始美しくてびっくりしたが、前日がエイリアンだったので温度差のが凄かった - 映画観終わったらworld's end girlfriendを思い出した - [フロントエンドカンファレンス北海道2024の補足記事](https://qiita.com/okuto%5Foyama/items/d15a5e49530a93848366)を出した - お義父さんの古希祝いをしに家族一同大宮へ - 妻の姉弟が勢揃いしてた - 久々にあった甥っ子たち可愛すぎワロタ - ホテルのビュッフェで蟹を食べて、部屋に集まってケーキを食べた - 翌日は鉄道博物館に遊びに行った(甥っ子が鉄道・バスが好き) - [わんだふるぷりきゅあ!ざ・むーびー!](https://2024.precure-movie.com/)を家族で観てくる - 大福ちゃん(中村悠一)を聴きに行くために行った - 特に使ってはないけど[Misskey.io](http://Misskey.io)に支援を始めてみた - [Schoo、東京証券取引所グロース市場への上場承認に関するお知らせ | 株式会社Schooのプレスリリース](https://prtimes.jp/main/html/rd/p/000000289.000006391.html) - 所属企業の上場承認がされる実績を解除した - 業務で次期プロジェクトのためのBFF検討としてPoCなどをやっていた - [Interop2025のプロポーザル投票が始まりました!](https://zenn.dev/yamanoku/articles/interop-2025-opens-for-proposals)を書いた - [PIXIV DEV MEETUP 2024](https://conference.pixiv.co.jp/2024/dev-meetup)に参加してくる - フロントエンドの進捗含め興味深い話を聴けました - 偶然にも制作会社時代の元同僚と再会した - [Vue3.5からの改善と振り返るdefineCustomElementについて](https://zenn.dev/comm%5Fvue%5Fnuxt/articles/improvements-to-custom-elements-in-vue3-5)を書いた - chibivue landの方たちにレビューというか背中押してもらって書ききれました。ありがとうございました! - ワンピースコラボがあるからということで久々にくら寿司に行った - STORES Tech Conf 2024に参加してくる - フロントエンドの話は1つしかなかったが各セッション興味を惹かれる聞かせる内容で面白かった - 懇親会は[ushironoko](https://x.com/ushiro%5Fnoko)が誘ってくれたメンバーで集結してた - [ubugeeei](https://x.com/ubugeeei)へGitHub Sponsorsを開始 - [jay-es](https://x.com/shindy%5FJP)へGitHub Sponsorsを開始 - [JSConfJP 2024](https://jsconf.jp/2024/)にCfP出した - [イカのせっと](https://x.com/ikanoset)家に遊びに行く - 息子ちゃんに会いに行った。かわええ - 奥様とちゃんとご挨拶できました - mizchi playground Discordにジョインしてみる ## 10月 [nippo-2024-10 - yamaScrapbox](https://scrapbox.io/yamanoku/nippo-2024-10) - 35歳になった - 厚生労働省では、15~34歳を若年層と定義しているため、ついに若手とも言えない歳になってしまいました - [reading-vuejs-core-vapor](https://ubugeeei.github.io/reading-vuejs-core-vapor/ja/)へのライトモードの実装提案してきた - [feat: light color theme by yamanoku · Pull Request #87 · ubugeeei/reading-vuejs-core-vapor](https://github.com/ubugeeei/reading-vuejs-core-vapor/pull/87) - 透過した図が未対応なままになっているのが問題 - 期が変わったので目標評価しなきゃだが未達ばかりなので気が乗らなかった - 自責しまくってソフトな鬱になっていたかもと思い産業医面談を申し込んだ - 産業医面談としては「そりゃそうですね」みたいなアドバイスをもらって終了した - 業務上だけの不安で閉じてて日常生活に影響なさそうなら大丈夫だろってことでした - 娘の運動会を妻と一緒に観てくる - 歴代で一番保護者観覧が近かったのではないかと思われる - JSConfJP 2024のCfP落選した - [archives.yamanoku.net](https://archives.yamanoku.net/)に記事検索モーダルを導入してみた - [feat: PageFindModal by yamanoku · Pull Request #574 · yamanoku/archives](https://github.com/yamanoku/archives/pull/574) - 発表資料をHTML化するテンプレートキットで使っている[11ty](https://www.11ty.dev/)がメジャーバージョンアップしたのでESM化した - [feat: setting ESM by yamanoku · Pull Request #43 · yamanoku/document-page-template](https://github.com/yamanoku/document-page-template/pull/43) - 社内チーム向けにアクセシビリティにまつわるワークショップを実施した - chibivue landのDiscordでtimesチャンネル(現wsチャンネル)を始める - 社内監視ツールにDatadogを導入してみているので、RUM設置などを自分から進めていった - 結果としてDatadog推進グループの一員に入れてもらってる - 地元メンバーでの定期呑み(秋葉原) - 2次会がまさかの神回になった - ジュンくんを[常総運動公園のドッグラン](https://www.lantern-moriya.camp/)に連れて行った - ジュンくんに混合ワクチン打った - [Vue Fes Japan 2024](https://vuefes.jp/2024/)に参加してくる - 職場の同僚2人も参加していた - chibivue landの皆さんやVue老人会(v1から使っている人たち)のみなさんと会えてよかった - [レポート記事](https://qiita.com/okuto%5Foyama/items/b4591d5ed30c011121c9)も書いた - 免許更新した - 今年も優良ゴールドペーパードライバーです - Svelte 5がリリースされたので個人プロダクトで触ってみる - [feat: Svelte5 by yamanoku · Pull Request #586 · yamanoku/oclock](https://github.com/yamanoku/oclock/pull/586) - [東葛.dev](https://toukatsu.connpass.com/)という東葛地域在住のエンジニアが集まるDiscordサーバーにジョインする - 直近のオフラインイベントには用事があって参加できなかったので参加できる日を狙ってみる - [Schoo、東京証券取引所グロース市場への上場に関するお知らせ](https://prtimes.jp/main/html/rd/p/000000292.000006391.html) - 在籍企業が上場する実績解除しました - 当日は映像班が東京証券取引所で合鐘していたのを中継をしてくれた - バンジョーとカズーイの大冒険2の配信に突如興奮する患者になった - メタファー:リファンタジオを購入した。自分はまだ未プレイ - 会社の上場記念懇親会に参加してきた。ヒカリエの11階で開催 - 第46回流山市民まつりに参加してきた - もえあずさんが出るとのことで妻が反応して行ってきた - Duolingoに[音楽・数学コース](https://prtimes.jp/main/html/rd/p/000000053.000069537.html)が追加されたとのことで再開してみる - 2020年以来だった - I[nterop 2025で 👍 リアクションが50件以上ある機能リクエストをまとめる(2024年10月時点)](https://zenn.dev/yamanoku/scraps/e0b473fec510d2)を書いた - USB-Cポート版のMagic TrackPadが来て最高になった ## 11月 [nippo-2024-11 - yamaScrapbox](https://scrapbox.io/yamanoku/nippo-2024-11) - 期が変わって新しい部署になった - 前:開発部門 プラットフォーム開発ユニット - 現:技術戦略部門 技術戦略ユニット - 結婚記念10周年のお祝いで家族旅行で大阪に3泊4日行ってきた - 初日は[ユニバーサル・スタジオ・ジャパン](https://www.usj.co.jp/web/ja/jp)で[スーパーニンテンドーワールド](https://www.usj.co.jp/web/ja/jp/areas/super-nintendo-world)へ - 大雨で酷かったので早めに退散した… - 2日目は[海遊館](https://www.kaiyukan.com/)・大阪名物などを食べまわる - ジンベイザメの写真いっぱい撮った - りくろーおじさんのチーズケーキがうまい - 3日目はお土産購入 - 最後に泊まってたホテルでメガネのテンプル片方破壊してしまった - 流山に帰ってからJINSでメガネを新調してきた - 社内エンジニア陣とで懇親会してくる - これから自分の上司になる人とアルコール入った形だけど交流ができた - 家族で初めて[焼肉みっちゃん](https://www.y-micchan.com/)に行く。相変わらず肉がうまい - 元同僚のリファレンスチェックをした - この人に自分のリファレンスチェックをお願いしたのもあったので人生初でやってみることに - 勢いで書ききったのでゆうほど辛いものか?とはなった - このあと無事選考通過して内定もらったみたいです - 埼玉の従姉妹に子ども(姪っ子)が産まれたので会いに行った - Mastodonで[archives.yamanoku.net](http://archives.yamanoku.net)の記事で著者のアカウントを表示するようにした - [add: \`\` by yamanoku · Pull Request #604 · yamanoku/archives](https://github.com/yamanoku/archives/pull/604) - イカのせっととおおたかの森駅前の新時代で呑んできた - 古巣で[アクセシビリティイベント](https://smarthr.connpass.com/event/334412/)が開催していたので聞きに行ってくる - 主に参加者よりも前職のデザイナーたちと交流していた - 前職のプロレス好きメンツとプロレス部Discord作りませんか?と言われたので作った - [JSConfJP 2024](https://jsconf.jp/2024/)に参加 - オフラインでの参加は初 - 去年は体調崩してリモートで発表 - 懐かしい面々が存在していて懐かしいなとなりました - ジュン君に狂犬病ワクチン接種させた - [アクセシビリティカンファレンス福岡2024](https://fukuoka.a11yconf.net/)に行ってきた - 前日入りして前夜祭イベントで発表してきた - 発表資料「[動画にまつわるアクセシビリティ要件を探る](https://scrapbox.io/yamanoku/%E5%8B%95%E7%94%BB%E3%81%AB%E3%81%BE%E3%81%A4%E3%82%8F%E3%82%8B%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B7%E3%83%93%E3%83%AA%E3%83%86%E3%82%A3%E8%A6%81%E4%BB%B6%E3%82%92%E6%8E%A2%E3%82%8B)」- 来年開催予定のアクセシビリティカンファレンス金沢の主催の方に興味深い話をもらった - 博多のホテルが高騰しすぎてたので博多から1時間弱離れた新飯塚というところのホテルで2泊した - 懇親会では多くの方と交流できた! - 帰る当日に[資さんうどん](https://www.sukesanudon.com/)に行けてよかった ## 12月 [nippo-2024-12 - yamaScrapbox](https://scrapbox.io/yamanoku/nippo-2024-12) - 転職して半年が経過していた - アドベントカレンダーに寄稿 - 会社のやつ - [フロントエンド技術周辺のアップデートから振り返る2024年](https://qiita.com/okuto%5Foyama/items/12d119671f4b350042e4) - Vue.js / Nuxt関連 - [Vue.jsと周辺エコシステムで振り返る2024年](https://zenn.dev/comm%5Fvue%5Fnuxt/articles/vuejs-2024-year-in-review) - [Nuxt/UnJSと周辺エコシステムで振り返る2024年](https://zenn.dev/comm%5Fvue%5Fnuxt/articles/nuxt-unjs-2024-year-in-review) - 会社の上期キックオフ・MVP表彰式が開催される - 懇親会も含めて楽しかったし、改めて表彰されたいなと思った - がんばっていきます - CTOが不慣れな司会業やってたのが一番面白かった - [アクセシビリティ大忘年会](https://skword.connpass.com/event/333884/)に参加してくる - [ShunItoさん](https://x.com/shunito)とやっとご挨拶できた - sosuke.devの記事観て違和感あったので[コントリビュート](https://github.com/sosukesuzuki/sosuke.dev/pull/49)した - 4年ほど使っていたサブディスプレイが突然死んだのでDELLの同じインチのを購入した - 10月入社の方のウェルカムランチに参加するため出社した - 夜はそのまま[~Tech-Front Meetup~ 一歩先のフロントエンドへ](https://levtechcareer.connpass.com/event/337755/)に参加 - [みちのくプロレス](http://www.michipro.jp/)の宇宙大戦争を観てきた - [kubosho](https://x.com/kubosho%5F)さんと[ワインと鍋](https://winenabe.jp/)へ行ってきました(去年の6月以来) - [mixi2](https://mixi.social/)に登録した - セルフアクセシビリティチェックをして残念な気持ちになる - [Datadog Live Tokyo 2024 Reprise](https://www.datadoghq.com/ja/event/datadoglive-tokyo202412/)へ参加してくる - 社内導入したてなので各社の事例が聞けるのは貴重だった - Datadogの中の人と呑むことができた。たのしかった - 来年の社内トレーニング打ち合わせでDatadog Japanオフィスに遊びに行けそう - chibivue landのDiscordにカスタム絵文字増やしたいな〜と思ったのでNitroユーザーになって2ブーストして使えるようにした - 社員による社内勉強会でアクセシビリティの紹介とやっていきを発表してきた - 妻と娘がやっていた[Pokémon Trading Card Game Pocket](https://www.pokemontcgpocket.com/ja/)をやれと脅されて始める - [RTA in Japan Winter 2024](https://rtain.jp/rtaij/rta-in-japan-winter-2024/)の6日目を現地観戦してくる ## 数字で振り返る2024 - (現職)出社回数 … 3回 - カンファレンスへの登壇 … 1回 - 落選したCfP … 3つ - 社内・社外勉強会での発表 … 6つ - Zenn、Qiita、テックブログ等で寄稿した記事 … 10件 - しずかなインターネットで書いた記事 … 9記事(本記事含む) - 収録したポッドキャスト … 8本(うち1つはX Space) - 収録ゲスト参加した回 … 1本 - 劇場で見た映画 … 9本 - 生観戦したプロレス興行 … 4つ - [プレイしたゲーム](https://scrapbox.io/yamanoku/2024%E5%B9%B4%E3%81%AB%E9%81%8A%E3%82%93%E3%81%A0%E3%82%B2%E3%83%BC%E3%83%A0) … 40本 - [買った書籍・技術書(技術同人誌含む)](https://yamanoku.notion.site/a13c1791a63c4f6c8b50bc6a5be280fb?v=139f2fefa69c8084b214000c04d1a4a8&pvs=4) … 45冊 - [買ったKindle漫画](https://scrapbox.io/yamanoku/2024%E5%B9%B4%E3%81%AB%E8%AA%AD%E3%82%93%E3%81%A0Kindle%E6%BC%AB%E7%94%BB) … 206冊 ## 来年やりたいこと このセクションは現時点での考えている、大きく変更される可能性があるものです。 1. **勉強会のオンライン配信複業をやる** - オフライン勉強会が復活しているのでその配信補佐をしたい - オンライン学習サイトを運営している身として動画配信を理解したい、字幕などの情報保障を自分でやってみたいのが発端 2. **つくばエクスプレス沿線在住のエンジニア勉強会を再開する** - かつて[つくばexpress.js](https://txjs.connpass.com/)という勉強会を1回やったがコロナ禍を受けて自然消滅した - フロントエンドのジャンルだけに限らないものを始めてみたい 3. **ブログ代わりにボイスログを撮ってみる** - 文字を書くことに労力がかかるようになってきたので負担がない形の更新をしたい意図 4. **DJを始める** - まったくの未経験です。機器等を揃えるところから - いつか技術カンファレンスのDJとして呼ばれるのが夢です 5. **プライベートで使うPCをWindowsにする** - MacBook Pro 13インチ 2020年型のIntelを長く使っていたので引退させたい 6. **適正体重に落とす改善をはじめて、継続する** - コレステロール値が年々悪化してるので来年の健康診断で値を改善していることを1つの指標として目指す 7. **短めの資産運用をやってみる** - 長いスパンではなく、来年・再来年の自分や家族が活かせる資産を残していけるようにしたい ## まとめ - 自分や家族に大きな変化があってネガっていたこともあったけど今は元気でやっています - 無力と感じる事が多かったが焦ってもよくなかったことばかり - 人との関係が大切だと改めて感じたのでこれからも大事にしていきたい - 家族と健康も大事にしていきます - 来年も引き続きやっていきます - みなさま良いお年を! --- ## Nuxt/UnJSと周辺エコシステムで振り返る2024年 https://archives.yamanoku.net/nuxt-unjs-2024-year-in-review/ [Nuxt / UnJS Advent Calendar 2024](https://qiita.com/advent-calendar/2024/nuxt-and-unjs)の9日目の記事です。 この記事では2024年のNuxtとUnJS、そしてそれらにまつわる周辺エコシステムについてを振り返っていきます。関連する大きな出来事や変更があったものについてを中心にまとめています(この内容も取り上げてほしい!というものがあった際は、[GitHubから編集提案](https://github.com/yamanoku/zenn-content/edit/main/articles/nuxt-unjs-2024-year-in-review.md)をください)。 ## Nuxt

I’m 8 years old 🥳 pic.twitter.com/7q6Bq6wDjq

— Nuxt (@nuxt_js) October 26, 2024
Nuxtは今年でリリースされてから8年が経ちました。 ### Nuxt2 EoL

Nuxt 3 now represents 75% of @nuxt_js downloads 📈 pic.twitter.com/dw2Zz5fO4m

— Sébastien Chopin (@Atinux) November 12, 2024
Nuxtのダウンロード数はNuxt 3が約75%を占めており、多くの開発者がNuxt 3への移行を進めています。 [Nuxt 2 End-of-Life (EOL) · Nuxt Blog](https://nuxt.com/blog/nuxt2-eol) 一方で前バージョンのNuxt 2は今年の6月30日にEOLを迎えました。引き続き使う場合はHeroDevsでの有償サポートを受けることができます。 ### Nuxt 3.10 [Nuxt 3.10 · Nuxt Blog](https://nuxt.com/blog/v3-10) - **共有されたasyncDataのprerendering**:prerendering時にデータの再取得を防ぐ機能が追加されました - **SSRセーフなユニークIDの生成**:SSRセーフなユニークIDを生成するための `useId` コンポーザブルが追加されました - **app/router.optionsの拡張**:モジュール作成者が独自のrouter.optionsファイルを注入できるようになりました - **クライアントサイドのNode.jsサポート**:クライアントサイドでNode.jsのビルトインモジュールをポリフィルする実験的サポートが追加されました - **`useCookie` のリアクティビティ向上**:`CookieStore` を使用してクッキーの値をリアクティブに更新するオプションが追加されました - **潜在的なバグやパフォーマンス問題の検出機能の追加** - **ページごとにView Transitionsのサポートが可能** - **ビルド時にルートメタデータへのアクセスが可能** - **TypeScriptのバンドラー解決によるバンドラーモジュール解決** ### Nuxt 3.11 [Nuxt 3.11 · Nuxt Blog](https://nuxt.com/blog/v3-11) - **ログ機能の改善**: サーバーサイドレンダリング中にブラウザコンソールへログが表示されるようになりました - **プレビューモード**: [`usePreviewMode`](https://nuxt.com/docs/api/composables/use-preview-mode)を使用して、プレビューモードが利用できるようになりました - **Cache-busting payloads**: デプロイ後に古いデータが残らないように自動的なキャッシュバスティングが行われるようになりました - **Middleware `routeRules`**: Nuxtアプリケーション内のページパスに対してミドルウェアが定義できるようになりました - **新しいデータフェッチユーティリティ `clear`**: `useAsyncData` と `useFetch` が `clear` ユーティリティを公開しました - **新しい `#teleports` ターゲット**: サーバーサイドテレポートをサポートする新しい `
` 要素が追加されました - **ローディングインジケーターとトランジションコントロール**: ローディングインジケータを非表示にし、必要に応じて `finish()` メソッドを強制的に実行するためのカスタムタイミングを設定できるようになり、View Transitions APIにフックする `page:view-transition:start` フックが登場しました - **サーバーおよびクライアント専用ページ**: `.server.vue` または `.client.vue` サフィックスを使用して、サーバーまたはクライアント専用ページを作成できます - **サーバーコンポーネントの改善** - **パフォーマンスの向上** - **パブリックアセットの取り扱いの変更** - **JSチャンクのデフォルト命名パターンの変更** - **型の修正** ### Nuxt 3.12 [Nuxt 3.12 · Nuxt Blog](https://nuxt.com/blog/v3-12) - **Nuxt 4の変更テスト**: Nuxt 4の変更箇所をテストするために設定にて `compatibilityVersion` オプションが追加されました。 - **Nuxt Scriptsの自動インストール** - **レイヤーの自動登録とバグ修正**: プロジェクト内の `~/layers` が自動的に登録されるようになり、依存関係の読み込みが改善されました - **アクセシビリティの向上**: [``](https://nuxt.com/docs/api/components/nuxt-route-announcer)と[`useRouteAnnouncer`](https://nuxt.com/docs/api/composables/use-route-announcer)が追加され、SPAでのルート遷移時の状態をスクリーンリーダーへ通知できるようになりました - **マルチアプリサポート**: 複数のNuxtアプリを並行して実行できるようになるための変更が行われました - **機能の安定化**: いくつかの実験的オプションが安定化に伴い、experimentalから削除されました - **モジュール作者向けの改善**: モジュールオプションの型サポートや、ランタイム設定のアクセスと更新が可能になりました - **パフォーマンスの改善** - **開発者体験の向上** - **型の改善** ### Nuxt 3.13 [Nuxt 3.13 · Nuxt Blog](https://nuxt.com/blog/v3-13) - **Route Groups**: ディレクトリ名に括弧や角括弧を使用してルートを整理できるようになりました。これにより、URL構造に影響を与えずにルートをグループ化できます - **IslandとHeadメタデータ**: サーバーコンポーネントから `head` を操作し、SEOメタデータを追加できるようになりました - **カスタムプリフェッチトリガー**: NuxtLinkで `prefetch-on` トリガーをサポート。ホバーやフォーカス時、または可視化されたときにプリフェッチを実行できます - **サーバーソースマップの改善**: サーバービルドのソースマップが元のソースファイルを参照するようになりました - **モジュール作者向けの新機能**: モジュール作者向けに新しいユーティリティや型推論の改善が追加されました - **開発時の警告の改善**: ミドルウェアでのデータフェッチングコンポーザブルの使用に関する警告が削除され、ユーザーコンポーネント名が「Lazy」で始まる場合に警告が表示されるようになりました - **Vue TypeScriptの変更**: Vueの型拡張に関する変更があり、ライブラリのコード更新が必要になりました ### Nuxt 3.14 [Nuxt 3.14 · Nuxt Blog](https://nuxt.com/blog/v3-14) - **Jitiによる高速起動**: Nuxtの設定ファイルやモジュールの読み込みがjiti v2によって高速化されました - **`shared/` フォルダ**: クライアントとサーバーで共有するコードや型のための新しい `shared/` フォルダが追加されました - **Rspackビルダー**: 新しいNuxtのバンドラーとしてrspackが実験的に導入されました - **新しいコンポーザブル**: `useResponseHeader` と `useRuntimeHook` という新しいコンポーザブル関数が追加されました - **新しいモジュールユーティリティ**: Nitroランタイムルート内でアクセス可能な仮想ファイルを追加するための `addServerTemplate` ユーティリティが追加されました - **v4への変更**: `compatibilityVersion: 4` を設定することで、いくつかの変更を早期適用できるようになります ### Codemod for Nuxt 4 migration [Nuxt & Codemod Announcement](https://codemod.com/blog/nuxt-announcement) CodemodではNuxtチームと連携し、Nuxt 3から4への移行用のオープンソースのツールを公開しました。 ## Nuxt Certification https://certificates.dev/nuxt Nuxtの公式認定試験である「Nuxt Certification」が今年から開始されました。コーディング課題に取り組み、Nuxt開発者としてのスキルをテストできます。 ## NuxtHub [Introducing NuxtHub Beta · NuxtHub Blog](https://hub.nuxt.com/blog/beta) 今年発表されたNuxtHubは、Nuxtフレームワークの拡張機能でCloudflareにてフルスタックアプリケーションをZero config構築ができるようになるものです。Nuxt modulesとしての `@nuxthub/core` と管理画面としてのNuxtHub Adminが公開されています。 実際に活用している事例としては以下記事をご参照ください。 [Co-Edo終了報告サイトをCloudflareで開発するとき使った NuxtHub がとっても便利!](https://zenn.dev/comm_vue_nuxt/articles/nuxt-hub-cloudflare-2025-coedo-org) [Vue Fes Japanの歴代スピーカー一覧を見られるページを作った](./vuefes-japan-speakers) ## Nuxt Studio [Introducing Nuxt Studio v2](https://content.nuxt.com/blog/studio-v2) Nuxt StudioはNuxt Contentを活用したウェブサイト用のGitベースのCMSです。 今年はv2がリリースされ、以下の変更が行われました。 - インターフェースの再設計・刷新 - Google認証の追加 - ライブプレビュー設定の簡素化 ## Nuxt UI NuxtアプリケーションのためのUIライブラリであるNuxt UIは今年より次期バージョンであるv3に向けてアルファ、ベータ版の開発が進められています。 主に[Reka UI](https://reka-ui.com/)(Radix Vueの後継UIライブラリ)、Tailwind CSS v4、Tailwind Variantsを活用したもので構築されています。 ## nuxt-bridge Nuxt2からNuxt3へのマイグレーションを支援するツールであるNuxt Bridgeの安定版がリリースされました。 ## Nuxt Modules Nuxtアプリケーションで利用できるモジュール群のNuxt Modulesから、大きな変更があったものについてを取り上げます。 ### Nuxt Content https://content.nuxt.com/ Nuxtディレクトリの `content/` 配下のファイルを活用したブログ・ドキュメントなどのコンテンツ管理ができるNuxt Contentは現在v3の開発が進められています。 前述したNuxt Studioとのサイトドメインの共通化、Nuxt Contentの内容をNuxt Studioにて直接編集が可能になるなど、連携が進められています。 ### Nuxt Fonts [nuxt/fonts: Plug-and-play web font optimization and configuration for Nuxt apps.](https://github.com/nuxt/fonts) Nuxt FontsはNuxtアプリでお気に入りのフォントソースを使用した際に最適化できるモジュールです。 デモにもあるように `font-family` の宣言をするだけでカスタムフォントの追加と最適化を実施してくれます。 ### Nuxt Icon [Introducing Nuxt Icon v1 · Nuxt Blog](https://nuxt.com/blog/nuxt-icon-v1-0) Nuxt IconはIconifyをベースにしたNuxtアプリケーション用のアイコンライブラリです。今年v1.0がリリースされました。 ### Nuxt Leaflet https://leaflet.nuxtjs.org/ Nuxt Leafletは[Leaflet](https://leafletjs.com/)をラップしたリアクティブな地図を作成できるモジュールです。今年より公式のNuxt Modulesのリポジトリに追加されました。 ### Nuxt Scripts [Introducing Nuxt Scripts · Nuxt Blog](https://nuxt.com/blog/nuxt-scripts) Nuxt Scriptsはサードパーティ製スクリプトをNuxtアプリケーションで組み込む際にプライバシー・セキュリティを配慮して最適化するモジュールです。Daniel Roe氏によるRFCを経て今年の5月でパブリックプレビューとなりました。 具体的な内容・使い方については以下記事をご参照ください。 [Nuxt Scripts でサードパーティスクリプトをより身近に](https://zenn.dev/comm_vue_nuxt/articles/what-is-nuxt-scripts) ### Nuxt SEO [Announcing Nuxt SEO Stable · Nuxt SEO](https://nuxtseo.com/announcement) Nuxt SEOはNuxtアプリケーションやサイトのオーガニックトラフィックを増やすための技術的な側面を処理してくれるモジュールです。v2が11月25日にリリースされました。これまで個別でインストール必要だったモジュールが `@nuxtjs/seo` に統一されています。今後はNuxt SEO Proの有料版も公開される予定です。 ## Nuxt Tutorial https://learn-nuxt.vuejs-jp.org/ Nuxt TutorialはNuxt公式で提供されているチュートリアルサイトです。すべてWeb上で完結できるチュートリアルです。 今年のVue Fes Japan 2024ではハンズオン教材として日本語版サイトと[リソース](https://github.com/vuejs-jp/learn.nuxt.com)が公開されました。ハンズオン担当者による振り返り記事も公開されているので併せてご覧ください。 [【Vue Fes Japan】 ハンズオン企画の裏テーマ!? Nuxt Tutorial を選んだ理由と未来|ubugeeei](https://note.com/ubugeeei/n/n2ac2b02043da) ## Nx Plugin [Introducing @nx/nuxt: Enhanced Nuxt.js Support in Nx | by Katerina Skroumpelou | Nx Devtools](https://blog.nrwl.io/introducing-nx-nuxt-enhanced-nuxt-js-support-in-nx-01eac78034fc) モノレポ管理ツールであるNxに、Nuxtプロジェクトをサポートするためのプラグイン `@nx/nuxt` が公開されました。 ## UnJS UnJSはあらゆるJavaScriptフレームワーク上で統一的に動作するユーティリティーツール・ライブラリです。今年の1月には公式サイトがリニューアルされました。 [Introducing UnJS Relations · Blog · UnJS](https://unjs.io/blog/2024-02-07-introducing-unjs-relations/) UnJSパッケージやnpmパッケージの関係をリアルタイムで視覚化できる[UnJS Relations](https://unjs.io/relations)が公開されました。 ### Nitro NitroはNuxtで採用されているUnJSパッケージを活用したサーバーエンジンです。 今年のVue.js Amsterdamにて[v2.9.0](https://github.com/nitrojs/nitro/releases/tag/v2.9.0)がライブリリースされました。 - ドキュメントの刷新 - WebSockets API - SQL database layer - Nitro Tasks - unwasmの採用 [v2.10.0](https://github.com/nitrojs/nitro/releases/tag/v2.10.0)ではNitro v3に向けての内部リファクタリングを行い、以下変更が含まれております。 - Compatibility date - Environment-specific handlers - Route groups - OpenAPIのプロダクションサポート - Cloudflare, Netlify, VercelらのPresetの更新 ### 2024年リリースされたUnJS公式パッケージ、UnJSプラグイン 今年リリースされたパッケージやプラグインについてをアルファベット順で列挙しています。 - https://github.com/unjs/automd - https://github.com/unjs/codeup - https://github.com/unjs/compatx - https://github.com/unjs/confbox - https://github.com/unjs/errx - https://github.com/unjs/glob-native - https://github.com/unjs/impound - https://github.com/unjs/mdbox - https://github.com/unjs/srvx - https://github.com/unjs/undio - https://github.com/unjs/undocs - https://github.com/unjs/unifont - https://github.com/unjs/unrouting - https://github.com/unplugin/unplugin-inline-enum - https://github.com/unplugin/unplugin-isolated-decl - https://github.com/unplugin/unplugin-replace - https://github.com/unplugin/unplugin-unused - https://github.com/unplugin/unplugin-vue-fervid - https://github.com/unplugin/unplugin-vue-jsx-vapor --- 同日の[Vue Advent Calendar 2024](https://qiita.com/advent-calendar/2024/vue)ではVue.jsと周辺のエコシステムについての2024年を振り返っています。こちらも併せてご覧になってみてください。 [Vue.jsと周辺エコシステムで振り返る2024年](./vuejs-2024-year-in-review)
--- ## Vue.jsと周辺エコシステムで振り返る2024年 https://archives.yamanoku.net/vuejs-2024-year-in-review/ [Vue Advent Calendar 2024](https://qiita.com/advent-calendar/2024/vue)の9日目の記事です。 この記事では2024年のVue.js、そしてそれらにまつわる周辺エコシステムについてを振り返っていきます。関連する大きな出来事や変更があったものについてを中心にまとめています(この内容も取り上げてほしい!というものがあった際は、[GitHubから編集提案](https://github.com/yamanoku/zenn-content/edit/main/articles/vuejs-2024-year-in-review.md)をください)。 ## Vue.js ### 公開10周年

10 years ago today, Vue was introduced to the public for the very first time on HackerNews: https://t.co/M2ZRwhiIaP

10 years later, it is now one of the mostly widely used frontend projects, with a diverse community all over the world.

— Vue (@vuejs) February 3, 2024
2024年はVue.jsがHacker Newsで公開されてから10周年目を迎える年でした。Vue.jsの進化の歴史については以下の通りになります。 - 2015年10月: Vue 1リリース - 2016年10月: Vue 2リリース - 2018年9月: Vue 3の開発が開始 - 2020年9月: Vue 3リリース - 2022年1月: Vue 3がデフォルトになる、ドキュメントもVue 3がメインに - 2023年12月: Vue 2がEoLを迎える また、今年の9月の時点でnpmからの総ダウンロード数が10億を突破しました。

We just passed 1 billion total downloads on NPM a few days ago :) pic.twitter.com/pw5mNd6dlA

— Vue (@vuejs) September 29, 2024
### Vue 3.5 [Announcing Vue 3.5 | The Vue Point](https://blog.vuejs.org/posts/vue-3-5) 9月にVue 3.5がリリースされました。コードネームは「Tengen Toppa Gurren Lagann」です。このリリースでは以下の変更が含まれています。 - **リアクティブシステムの最適化**: パフォーマンスが向上し、メモリ使用量が大幅に削減されました - **リアクティブプロップのデストラクチャリング**: `defineProps` からデストラクチャリングされた変数がリアクティブになりました - **SSRの改善**: 遅延ハイドレーションや `useId()` などの新機能が追加されました - **カスタムエレメントの改善**: `defineCustomElement` APIに新機能が追加されました - **新しいAPI追加** - `useTemplateRef()` - `Deferred Teleport` - `onWatcherCleanup()` ### Vapor Mode Vapor Modeは[Fine Grained Reactivity](https://docs.solidjs.com/advanced-concepts/fine-grained-reactivity)の概念を取り入れた仮想DOMを使用しない新たなVue.jsのコンパイル戦略です。Vaporを実装しているVue.jsは現在本体とは[別リポジトリ](https://github.com/vuejs/vue-vapor)で運用されております。 [コンポーネントに関する実装のTODO](https://github.com/vuejs/vue-vapor/issues/4)はほぼ完了となりクローズされております。[ロードマップも](https://github.com/vuejs/vue-vapor/issues/233)公開されており、今年末までにはVitePressコードをVaporで差し替え、ベータ版を公開する予定とのことです。

🎉 Now Vapor can power VitePress with a 💯% identical UI and interaction on homepage. pic.twitter.com/PmylYVjRWx

— Kevin Deng 🦋 @sxzz.dev (@sanxiaozhizi) November 14, 2024
VitePress内にVaporを組み込むのは現在進行中で、[Issue](https://github.com/vuejs/vue-vapor/issues/289)と[リポジトリ](https://github.com/sxzz/vitepress-vapor)にて進捗が確認できます。 ## Vue Router https://router.vuejs.org/ Vue RouterはVue.jsの公式ルーターライブラリです。 v4.4.0より `RouteNamedMap` による型付きルートのネイティブ・サポートが導入されました。unplugin-vue-routerなしでマップを定義し、型を自動的に推論させることができるようになりました。 v4.5.0よりRouterLinkに `view-transition` Propが追加されました。 ## Vitepress [Announcing VitePress 1.0 | The Vue Point](https://blog.vuejs.org/posts/vitepress-1.0) VitePressは、Vite製の静的サイトジェネレータ(SSG)です。今年よりv1.0がリリースされました。 ## Pinia https://pinia.vuejs.org/ PiniaはVue.jsの状態管理ライブラリです。 [12月4日にリリースされたv2.3.0](https://github.com/vuejs/pinia/blob/v2/packages/pinia/CHANGELOG.md#230-2024-12-04)によるとVue 2.7が必要になるのと、2025年1月に登場するPinia 3.0では、Vue 2のサポートを終了する予定とのことです。 ## Vue DevTools

📢 Important Update

The much improved Vue Devtools v7 has been submitted for review on the Chrome web store under the stable channel, and we are flipping the switch tomorrow.

Things to note:

- The latest v7 **only supports Vue 3**. We have separate listings for legacy versions…

— Vue (@vuejs) October 28, 2024
Vue DevtoolsはVue.jsのデバッグがブラウザ上でできるChrome拡張機能です。v7からはVue3のみをサポートするようになりました。そのためVue2でデバッグする際はv5やv6を別途使用する必要があります。 ## eslint-plugin-vue https://eslint.vuejs.org/ Vue.jsのESLint pluginであるeslint-plugin-vueでは、以下の新たなルールが追加されました。 - [`vue/enforce-style-attribute`](https://eslint.vuejs.org/rules/enforce-style-attribute.html) - [`vue/max-props`](https://eslint.vuejs.org/rules/max-props.html) - [`vue/require-default-export`](https://eslint.vuejs.org/rules/require-default-export.html) - [`vue/max-template-depth`](https://eslint.vuejs.org/rules/max-template-depth.html) - [`vue/no-deprecated-delete-set`](https://eslint.vuejs.org/rules/no-deprecated-delete-set.html) そのほかVue3.4からの `v-bind` same-name shorthandと `defineModel` のサポートが追加されたり、Flat ConfigサポートやESLint v9をpeer dependencyとして追加するなどの変更も行われました。 ## Vue Language Tools https://github.com/vuejs/language-tools Vue Language ToolsはVSCodeでのVue関連の開発支援する拡張機能、VueファイルのTypeCheckをしてくれるツールなどを提供しているリポジトリです。 Vue Language Toolsの基盤となっているVolarの[v2.0.0](https://gist.github.com/johnsoncodehk/62580d04cb86e576e0e8d6bf1cb44e73)が今年リリースされました。Takeover Modeは廃止され、Vueファイルに対するすべてのTS機能を引き継ぐHybrid Modeが導入され、vue-tscを書き換えてメモリ使用量を大幅に削減するなどの変更が加えられました。 ## VueUse VueUseはVue.jsのComposition APIを用いて作られたユーティリティライブラリです。 https://vueuse.org/ 今年はv11、v12のメジャーバージョンアップがありました。[v12](https://github.com/vueuse/vueuse/releases/tag/v12.0.0)よりVue2のサポートを終了し、Vue3のみをサポートするようになりました。 ## Vue I18n Vue I18nはVue.jsの国際化(i18n)ライブラリです。 https://github.com/intlify/vue-i18n/releases/tag/v10.0.0 v10.0.0では軽量版のpetite-vue-i18n、JITコンパイルの有効化がデフォルトに、設定されたLocaleに合わせた型生成、レガシー APIモードの `$t` と `t` のオーバーロードシグネチャの変更などがされました。 次期バージョンのv11からはLegacy API modeの非推奨化や、v10から非推奨としていた `$tc` と `tc` のAPI廃止が計画されています。 ## UIフレームワーク Vue.jsにまつわるUIフレームワークやコンポーネントライブラリで大きな変更があったものについてを取り上げます。 ### PrimeVue PrimeVueはPrimeFacesというカスタマイズ可能なUIコンポーネントライブラリを提供するプロジェクトのVue.js版です。

PrimeVue has reach 1 million downloads per month on npm. Thank you 💚 #vuejs

p.s. Just getting started, job is not done yet... pic.twitter.com/keyrC58VPf

— PrimeVue (@primevue) September 10, 2024
2024年9月時点でnpmでの月間100万ダウンロードを突破しました。 今年はフォームを構築できる[Form ライブラリ](https://primevue.org/forms/)、[Figma UI Kit](https://primevue.org/uikit/)、コピーペーストで使用できるUI群の[Prime Blocks](https://primeblocks.org/)のVue.js版が公開されました。 ### Vuetify https://vuetifyjs.com/en/blog/state-of-the-union-2024/ Vue.jsのコンポーネントライブラリとして有名なVuetifyが、認証と状態管理のためのツールである[Vuetify One](https://one.vuetifyjs.com/)、コード共有ツールである[Vuetify Bin](https://bin.vuetifyjs.com/)、プレグラウンドツールである[Vuetify Playground](https://play.vuetifyjs.com/)、Vuetifyを使ったUIスニペット集を公開するサイトである[Vuetify Snips](https://snips.vuetifyjs.com/)といったエコシステムツールやサイトが公開されました。

Vuetify Studio has officially opened its doors! This is more than just a space; it's a dynamic hub for creating, innovating, and mastering UI/UX design with Vuetify. Whether you’re a developer looking to streamline your workflows, a designer aiming to craft stunning interfaces,… pic.twitter.com/nckXbZYz7c

— Vuetify (@vuetifyjs) November 21, 2024
11月にはVuetifyのテーマエディターでもある[Vuetify Studio](https://studio.vuetifyjs.com/)がリリースされました。 ### Oku UI https://oku-ui.com/ Vue.js、Nuxt利用できるUIコンポーネントライブラリである[Oku Primitives](https://primitives.oku-ui.com/)を公開しているOku UIで、モーションにまつわるライブラリの[Oku Motion](https://motion.oku-ui.com/)、NuxtとNitro Kitでフルスタックアプリケーション開発ができるようになる[Pergel](https://pergel.oku-ui.com/)が今年公開されました。 ### Unovue https://unovue.com/ Vueのコンポーネントやユーティリティ集であるUnovueが公開されました。 現在、ヘッドレスコンポーネントのRadix Vueをリブランドした[Reka UI](https://reka-ui.com/)、再利用可能なVueコンポーネント群の[Inspira UI](https://inspira-ui.com/)、shadcn/ui非公式のコミュニティ主導でのVue移植版である[shadcn-vue](https://www.shadcn-vue.com/)がまとめられています。 ## GovUK Vue https://govukvue.org/ イギリス政府のデザインシステムである[GOV.UK Design System](https://design-system.service.gov.uk/)をVueコンポーネントを提供する非公式プロジェクトが公開されました。 ## Storybook https://storybook.js.org/blog/first-class-vue-support-storybook-8/ コンポーネントカタログツールのStorybookでのv8からは、Vue公式のLanguage ToolsであるVolarを活用してStorybookとVue.jsの連携が強化されました。docgenでは `vue-component-meta` を使用するようになりました。VueプロジェクトにおいてReactをpeer dependencyとしてインストールする必要もなくなりました。 ## v0 for Vue

v0 can now answer questions about Svelte, Vue, and Remix.

To help us improve quality, please downvote responses you find unhelpful. pic.twitter.com/nwEbtJ7jlZ

— v0 (@v0) September 12, 2024
Vercelが提供するAI駆動型のUI生成ツール「V0」がVue.jsでのアプリケーション生成に対応しました。 ## The State of Vue.js 2025 Survey [The State of Vue.js Report 2025 - Developer Survey](https://docs.google.com/forms/d/e/1FAIpQLSc6QQQ14ZuE4akaTZAkqOAMUSGjXVjKS-KuVu2eZ448jzK1Nw/viewform) Vue.jsの開発者向けサーベイが公開されました。Vue.jsやNuxtの利用状況や課題についての項目についてを回答できます。この結果を元に来年には「The State of Vue.js Report 2025」としてレポートが公開される予定です。英語での回答になりますが、日本のVue.js、Nuxt開発者もサーベイに参加してみましょう。 --- 同日の[Nuxt / UnJS Advent Calendar 2024](https://qiita.com/advent-calendar/2024/nuxt-and-unjs)ではNuxtと周辺のエコシステムについての2024年を振り返っています。こちらも併せてご覧になってみてください。 [Nuxt/UnJSと周辺エコシステムで振り返る2024年](./nuxt-unjs-2024-year-in-review)
--- ## フロントエンド技術周辺のアップデートから振り返る2024年 https://archives.yamanoku.net/reviewing-2024-from-frontend-ecosystems-updates/ この記事は[Schoo Advent Calendar 2024](https://qiita.com/advent-calendar/2024/schoo)の1日目の記事になります。 こんにちは。今年の6月に入社したフロントエンドエンジニアの [@okuto_oyama](https://qiita.com/okuto_oyama) です。オンボーディングやキャッチアップをしながら、あれやこれやと業務をこなしている間にもう半年が経とうとしています。 11月からは技術戦略部門に所属し、会社全体の技術的なビジョンとアーキテクチャ策定や体制づくりをするミッションとなっています。 最近はフロントエンド開発指針の見直しや新環境に向けたPoC検証、デザインシステム開発のサポート、DatadogのRUM導入支援やモニタリングなどを細々とやっています。 --- Schooアドベントカレンダー最初の記事では、フロントエンド開発にまつわる周辺技術が今年どれだけアップデートされたかを見つつ2024年を振り返ってみる内容をお送りいたします。 ライブラリも無限にあるので対象とするものを明確にするため以下のジャンルで括ろうと思っております。 - フロントエンドフレームワーク - メタフレームワーク [^1] - ランタイム - CSS - UIフレームワーク - パッケージマネージャ - モバイル&デスクトップアプリ - ビルド・バンドルツール - モノレポツール - バックエンドフレームワーク - テストツール - リンター・フォーマッターツール - 型ツール [^1]: とあるフロントエンドフレームワークを基にアプリケーションのレンダリングと配信に重点を置いたフレームワークと定義 できる限り主要なものは収集していますが、あのライブラリ・フレームワークが入ってないじゃん!となった場合はすみません。 バージョン比較のレギュレーションについては以下で行う形になります。 **レギュレーション** - CHANGELOGやリリースノートを参考にしたバージョン表記 - α、β、RCやCanaryなどのプレリリースバージョンは含めない - 今年一年でプレリリースを除くバージョンアップがなかったものは除く - メジャーバージョンが上がったものは**太字**で表記する それでは、いってみましょう。 ## フロントエンドフレームワーク | | 2023/12/31時点の最新バージョン | 2024/12/1時点の最新バージョン | | --------------------------------------------------------- | ------------------------------ | ----------------------------- | | [React](https://github.com/facebook/React/releases) | v18.2.0 | v18.3.1 | | [Vue.js](https://github.com/vuejs/core/releases) | v3.4.3 | v3.5.13 | | [Angular](https://github.com/angular/angular/releases) | v17.0.8 | **v19.0.1** | | [Svelte](https://github.com/sveltejs/svelte/releases) | v4.2.8 | **v5.3.0** | | [SolidJS](https://github.com/solidjs/solid/releases) | v1.7.0 | v1.9.0 | | [Preact](https://github.com/preactjs/preact/releases) | v10.19.3 | v10.25.0 | | [Alpine.js](https://github.com/alpinejs/alpine/releases) | v3.13.3 | v3.14.5 | | [Qwik](https://github.com/QwikDev/qwik/releases) | v1.2.14 | v1.11.0 | | [htmx](https://github.com/bigskysoftware/htmx/releases) | v1.9.10 | **v2.0.3** | | [Lit](https://github.com/lit/lit/releases) | v3.1.0 | v3.2.1 | | [Stencil](https://github.com/ionic-team/stencil/releases) | v4.9.0 | v4.22.3 | フロントエンドフレームワークでメジャーアップデートがあったものはAngular、Svelte、htmxになります。 Angularは2回のメジャーバージョンアップにおいてサーバーサイドレンダリング機能の改善・強化がされています。その他、昨年発表されたリアクティブプリミティブであるSignal APIがStable化、v18のアップデートに際してAngularの公式ドキュメントサイトが刷新されました。 Svelte v5の目玉としては[Runes API](https://svelte.jp/blog/runes)があげられます。リアクティブシステムの刷新として宣言により明確に処理がわかりやすくなりました。 ReactではReact 19に向けた更新準備が進められています。アプリケーションを最適化をするための新しいコンパイラである[React Compiler]()の発表もありました。 ## メタフレームワーク | | 2023/12/31時点の最新バージョン | 2024/12/1時点の最新バージョン | | ------------------------------------------------------------- | ------------------------------ | ----------------------------- | | [Next.js](https://github.com/vercel/next.js/releases) | v14.0.4 | **v15.0.3** | | [Remix](https://github.com/remix-run/remix/releases) | v2.4.1 | v2.15.0 | | [Gatsby](https://github.com/gatsbyjs/gatsby/releases) | v5.13.1 | v5.14.0 | | [Nuxt](https://github.com/nuxt/nuxt/releases) | v3.9.0 | v3.14.1592 | | [SvelteKit](https://github.com/sveltejs/kit/releases) | v2.0.6 | v2.9.0 | | [SolidStart](https://github.com/solidjs/solid-start/tags) | v0.4.2 | **v1.0.10** | | [QwikCity](https://github.com/QwikDev/qwik/releases) | v1.2.14 | v1.11.0 | | [Redwood](https://github.com/redwoodjs/redwood/releases) | v6.6.0 | **v8.4.1** | | [Astro](https://github.com/withastro/astro/releases) | v4.0.7 | v4.16.16 | | [Docusaurus](https://github.com/facebook/docusaurus/releases) | v3.0.1 | v3.6.3 | | [VitePress](https://github.com/vuejs/vitepress/releases) | v0.22.4 | **v1.5.0** | | [Lume](https://github.com/lumeland/lume/releases) | v2.0.1 | v2.4.2 | | [Analog](https://github.com/analogjs/analog/releases) | v0.2.29 | **v1.9.4** | メタフレームワークでメジャーアップデートがあったものはNext.js、Redwood、SolidStart、VitePress、Analogになります。 SolidStart、VitePress、Analogは今年からv1.0.0にアップデートがなされました。 Next.jsではGETルートハンドラーとクライアントルーターキャッシュをデフォルトではキャッシュしないようにするCaching Semanticsという大きな変更が入りました。その他、React 19 RCの採用やTurbopack DevのStableも含まれています。 Remixは今年のReact Summitにて[React Routerへのブランド統合](https://remix.run/blog/merging-remix-and-react-router)が発表されました。[11月22日にReact Router v7への更新があり](https://remix.run/blog/react-router-v7)、そちらへのアップデートを勧められています。 Nuxtでは次期バージョンに向けての設定からv4の機能を使えるフラグ(`compatibilityVersion`)を用意しており、アップデートの追従をしやすくしています。 ちなみに現在は変わったバージョンになっていますが、これは3.14のリリースに際して小数点のようなバージョン更新をしていくとのことです。今後hotfixがあった際は後ろの数字が増えていくそうです。 Astroではv4.12より[Server Islands](https://astro.build/blog/future-of-astro-server-islands/)という静的HTMLと動的に生成されたサーバーコンポーネントを組み合わせられる機能が実験的に導入されております。 Docusaurusでは「[Docusaurus Faster](https://github.com/facebook/docusaurus/issues/10556)」というビルド時間とメモリ消費を大幅に削減させるプロジェクトにおいて、Rustベースでのツールを使用しビルド時間の高速化ができるようなオプションを追加しました。 ## ランタイム | | 2023/12/31時点の最新バージョン | 2024/12/1時点の最新バージョン | | ----------------------------------------------------- | ------------------------------ | ----------------------------- | | [Node.js](https://github.com/nodejs/node/releases) | v21.5.0 | **v23.3.0** | | [Deno](https://github.com/denoland/deno/releases) | v1.39.1 | **v2.1.2** | | [Bun](https://github.com/oven-sh/bun/releases) | v1.0.20 | v1.1.38 | | [Hermes](https://github.com/facebook/hermes/releases) | v0.12.0 | v0.13.0 | ランタイムでメジャーアップデートがあったものはNode.jsとDenoになります。 今年はNode.js v22がLTS(Long Term Support)になり、最新版としてv23が公開されました。大きな目玉としては`require()`でESMを読み込む機能が搭載されました。[top-level await](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/await#%E6%9C%80%E4%B8%8A%E4%BD%8D%E3%81%AE_await)を使用しているものはエラーとなって使えませんが、それを除けばESMのみで配布されているパッケージをCJSの環境でも使えるようになりました。 また、yarnやpnpmの管理を容易にするCorepackの[Node.js本体からの削除計画が進んでいる](https://socket.dev/blog/node-js-takes-steps-towards-removing-corepack)という話も今年ありました。 Denoはv2となり新たなパッケージ管理方法が追加され、今年発表された[JSR](https://jsr.io/)(the JavaScript Registry)のサポートも入りました。v1とは異なるものとしてDenoの標準ライブラリ「[deno_std](https://jsr.io/@std)」は本体と分離されたり、Node.js互換性を高めていくなども変更点として挙げられます。 Bunは[v1.1.28よりC言語のコンパイルとJavaScriptプログラムからの実行](https://bun.sh/blog/compile-and-run-c-in-js)ができるようになりました。 ## CSS | | 2023/12/31時点の最新バージョン | 2024/12/1時点の最新バージョン | | ------------------------------------------------------------------------------------ | ------------------------------ | ----------------------------- | | [Tailwind CSS](https://github.com/tailwindlabs/tailwindcss/releases) | v3.4.0 | v3.14.5 | | [UnoCSS](https://github.com/unocss/unocss/releases) | v0.58.2 | v0.64.1 | | [Panda CSS](https://github.com/chakra-ui/panda/blob/main/CHANGELOG.md) | v0.23.0 | v0.48.0 | | [styled-components](https://github.com/styled-components/styled-components/releases) | v6.1.6 | v6.1.13 | | [vanilla-extract](https://github.com/vanilla-extract-css/vanilla-extract/releases) | v1.14.0 | v1.16.1 | | [StyleX](https://github.com/facebook/stylex/tags) | v0.3.0 | v0.9.3 | 取り上げているCSS関連のものでメジャーアップデートがあったものは特にありません。 Tailwind CSSについては来年リリースされる予定のv4に向けて[ベータ版が公開されています](https://tailwindcss.com/blog/tailwindcss-v4-beta)。 ## UIフレームワーク | | 2023/12/31時点の最新バージョン | 2024/12/1時点の最新バージョン | | ---------------------------------------------------------------------------------- | ------------------------------ | ----------------------------- | | [Chakra UI](https://github.com/chakra-ui/chakra-ui/releases) | v2.8.2 | **v3.2.2** | | [Material UI](https://github.com/mui/material-ui/releases) | v5.15.2 | **v6.1.9** | | [Ant Design](https://github.com/ant-design/ant-design/releases) | v5.12.7 | v5.22.2 | | [NextUI](https://github.com/nextui-org/nextui/releases) | v2.2.9 | v2.4.8 | | [Nuxt UI](https://github.com/nuxt/ui/releases) | v2.11.1 | v2.19.1 | | [Angular Material](https://github.com/angular/components/releases) | v17.0.4 | **v19.0.1** | | [SvelteUI](https://github.com/svelteuidev/svelteui/releases) | v0.15.3 | v0.15.7 | | [daisyUI](https://daisyui.com/docs/changelog/) | v4.4.24 | v4.12.14 | | [Kuma UI](https://github.com/kuma-ui/kuma-ui/blob/main/packages/core/CHANGELOG.md) | v1.5.5 | v1.5.8 | | [Yamada UI](https://github.com/yamada-ui/yamada-ui/blob/main/CHANGELOG.md) | v1.1.1 | v1.7.0 | | [Bootstrap](https://github.com/twbs/bootstrap/releases) | v5.3.2 | v5.3.3 | UIフレームワークでメジャーアップデートがあったものはCharkra UI、Material UI、Angular Materialです。 Chakra UIのv3では、パフォーマンス・速度・コンポーネントの一貫性を向上させるために新たな設計で書き直されるようになりました。 MUIのv6では試験的に[Pigment CSS](https://github.com/mui/pigment-css)というゼロランタイムのスタイリングライブラリが導入されるようになりました。 ## パッケージマネージャ | | 2023/12/31時点の最新バージョン | 2024/12/1時点の最新バージョン | | ------------------------------------------------------- | ------------------------------ | ----------------------------- | | [npm](https://github.com/npm/cli/releases) | v10.2.5 | v10.9.1 | | [yarn](https://github.com/yarnpkg/yarn/releases) | v1.22.21 | v1.22.22 | | [yarn berry](https://github.com/yarnpkg/berry/releases) | v4.0.2 | v4.5.3 | | [pnpm](https://github.com/pnpm/pnpm/releases) | v8.13.1 | **v9.14.4** | パッケージマネージャでメジャーアップデートがあったものはpnpmになります。 pnpmはv9のバージョンアップにおいてCorepackとの互換性を維持するようになりました。 ## モバイル&デスクトップアプリ | | 2023/12/31時点の最新バージョン | 2024/12/1時点の最新バージョン | | --------------------------------------------------------------------- | ------------------------------ | ----------------------------- | | [React Native](https://github.com/facebook/react-native/releases) | v0.72.8 | v0.76.3 | | [Expo](https://github.com/expo/expo/blob/main/CHANGELOG.md) | v50.0.0 | **v52.0.0** | | [Electron](https://github.com/electron/electron/releases/) | v28.1.0 | **v33.2.1** | | [Capacitor](https://github.com/ionic-team/capacitor/releases) | v5.6.0 | v6.2.0 | | [Tauri](https://github.com/tauri-apps/tauri/releases) | v1.5.4 | **v2.1.1** | | [NativeScript](https://github.com/NativeScript/NativeScript/releases) | v8.6.2 | v8.8.6 | モバイル&デスクトップアプリでメジャーアップデートがあったものはExpo、Electron、Tauriになります。 React Nativeはv0.76.2より新たなアーキテクチャを採用するようになりました。コンポーネントのレンダリング方法、JavaScript 層からNativeコードを同期的に呼び出せるようになったこと、異なるスレッド間での作業のスケジューリング方法、アプリの起動速度や全体サイズの削減などの改善も行われています。 Tauriのv2では今までデスクトップOSだけが対象だったところをiOS、AndroidのスマートフォンOSにも対象を拡張しています。 Rust製の新たなブラウザエンジン「[Servo](https://github.com/servo/servo)」をTauriのWebレンダリングライブラリとして取り組むプロジェクトも始まっています。 ## ビルド・バンドルツール | | 2023/12/31時点の最新バージョン | 2024/12/1時点の最新バージョン | | ----------------------------------------------------------- | ------------------------------ | ----------------------------- | | [Vite](https://github.com/vitejs/vite/releases) | v5.0.10 | **v6.0.1** | | [SWC](https://github.com/swc-project/swc/releases) | v1.3.102 | v1.9.3 | | [esbuild](https://github.com/evanw/esbuild/releases) | v0.19.11 | v0.24.0 | | [Parcel](https://github.com/parcel-bundler/parcel/releases) | v2.11.0 | v2.13.2 | | [Rollup](https://github.com/rollup/rollup/releases) | v4.9.2 | v4.28.0 | | [Webpack](https://github.com/webpack/webpack/releases) | v5.89.0 | v5.96.1 | | [Rspack](https://github.com/web-infra-dev/rspack/releases) | v0.4.5 | **v1.1.4** | | [Rolldown](https://github.com/rolldown/rolldown/releases) | - | v0.14.0 | ビルド・バンドルツールでメジャーアップデートがあったものはVite、Rspackになります。 ByteDance内では、Rspackの週間ダウンロード数は40万を超え、TikTokなどのいくつものアプリケーションにて使用されています。マイクロフロントエンドのアーキテクチャパターンでもある「Module Federation」のv2がサポートされています。 Viteのv6では[Environment API](https://ja.vite.dev/guide/api-environment)という異なるランタイムでの複数のバンドルを可能にする実験的機能がリリースされました。 RustのJavaScriptバンドラーツールであるRolldownも今年ついに公開となりました。まだ安定版にはなっておりませんが、来年以降でViteへの取り込まれエコシステム全体が改善していけることが期待されています。 ## モノレポツール | | 2023/12/31時点の最新バージョン | 2024/12/1時点の最新バージョン | | ------------------------------------------------------------------------------- | ------------------------------ | ----------------------------- | | [Lerna](https://github.com/lerna/lerna/releases) | v8.0.1 | v8.1.9 | | [Turborepo](https://github.com/vercel/turborepo/releases) | v1.11.2 | **v2.3.3** | | [Nx](https://github.com/nrwl/nx/releases) | v17.2.8 | **v20.1.4** | | [Bazel](https://github.com/bazelbuild/bazel/releases) | v7.0.0 | v7.4.1 | | [Rush](https://github.com/microsoft/rushstack/blob/main/apps/rush/CHANGELOG.md) | v5.112.2 | v5.141.3 | | [moon](https://github.com/moonrepo/moon/releases) | v1.18.5 | v1.30.2 | モノレポツールでメジャーアップデートがあったものはTurborepo、Nxになります。 Turborepoはv2のアップデートに伴い、ライセンスをMITに変更し、LTSのポリシーが追加されました。 Nxではv18のリリースに伴いLaunch Nx Weekという発表イベントを行いました。その中で[Project Crystal](https://nx.dev/blog/what-if-nx-plugins-were-more-like-vscode-extensions)というNxプラグインの利用を簡単にして、開発者が効率的に作業を進めるためのツールについて発表されました。 ## バックエンドフレームワーク | | 2023/12/31時点の最新バージョン | 2024/12/1時点の最新バージョン | | -------------------------------------------------------- | ------------------------------ | ----------------------------- | | [Express](https://github.com/expressjs/express/releases) | v4.18.2 | **v5.0.1** | | [Koa](https://github.com/koajs/koa/tags) | v2.15.0 | v2.15.3 | | [Fastify](https://github.com/fastify/fastify/releases) | v4.25.2 | **v5.1.0** | | [NestJS](https://github.com/nestjs/nest/releases) | v10.3.0 | v10.4.12 | | [Hono](https://github.com/honojs/hono/releases) | v3.11.11 | **v4.6.12** | バックエンドフレームワークでメジャーアップデートがあったものはExpress、Fastify、Honoになります。 Expressは10年もの時を経て(!)v5にアップデートされました。昨今のオープンソースのサプライチェーンセキュリティの強化のためにセキュリティ監査を実施するようになっています。ReDoS攻撃のリスクを下げるために、サブエクスプレッションの正規表現(`/:foo(\\d+)`のような形)でのサポートが削除されました。 Honoではv4より静的サイトジェネレーター、Client Components、ファイルベースルーティングなどよりフルスタックに扱えるための機能が搭載されました。 ## テストツール | | 2023/12/31時点の最新バージョン | 2024/12/1時点の最新バージョン | | ------------------------------------------------------------------ | ------------------------------ | ----------------------------- | | [Vitest](https://github.com/vitest-dev/vitest/releases) | v1.1.1 | **v2.1.6** | | [Mocha](https://github.com/mochajs/mocha/releases) | v10.2.0 | v10.8.2 | | [Playwright](https://github.com/microsoft/playwright/releases) | v1.40.1 | v1.49.0 | | [WebdriverIO](https://github.com/webdriverio/webdriverio/releases) | v8.27.1 | **v9.4.1** | | [Cypress](https://github.com/cypress-io/cypress/releases) | v13.6.2 | v13.16.0 | | [Selenium](https://github.com/SeleniumHQ/selenium/releases) | v4.16.0 | v4.27.0 | | [Puppeteer](https://github.com/puppeteer/puppeteer/releases) | v21.6.1 | **v23.9.0** | | [Storybook](https://github.com/storybookjs/storybook/releases) | v7.6.6 | **v8.4.6** | | [Mock Service Worker](https://github.com/mswjs/msw/releases) | v2.0.11 | v2.6.6 | テストツールでメジャーアップデートがあったものはVitest、WebdriverIO、Puppeteer、Storybookになります。 Vitestはv2.0より[Browser Mode](https://vitest.dev/guide/browser/)がExperimentalな機能として搭載されました。これにより実際のブラウザ上でVitestによるテストが実行できるようになりました。 クロスブラウザでのテスト自動化の次世代標準プロトコルである[WebDriver Bidi](https://w3c.github.io/webdriver-bidi/)の採用をWebdriverIOでも取り入れるようになりました。こちらはSeleniumやPuppeteerでも採用されています。 Storybookは厳密にはテストツールの分類ではないですが、今やフロントエンドテストツールとして不動の地位を築き上げつつあります。 Chromaticを取り込んだ新たなビジュアルテスト、テストの高速化ができるオプションの追加がされています。他には`react`と`react-dom`のpeer dependencyも取り除かれているためReact以外のフロントエンドフレームワークフレンドリーになっています。 ## リンター・フォーマッターツール | | 2023/12/31時点の最新バージョン | 2024/12/1時点の最新バージョン | | ---------------------------------------------------------------- | ------------------------------ | ----------------------------- | | [ESLint](https://github.com/eslint/eslint/releases) | v8.56.0 | **v9.16.0** | | [Stylelint](https://github.com/stylelint/stylelint/releases) | v16.1.0 | v16.11.0 | | [Prettier](https://github.com/prettier/prettier/releases) | v3.1.1 | v3.4.1 | | [Biome](https://github.com/biomejs/biome/blob/main/CHANGELOG.md) | v1.4.1 | v1.9.4 | | [oxlint](https://github.com/oxc-project/oxc/releases) | v0.0.22 | v0.14.0 | リンター・フォーマッターツールでメジャーアップデートがあったものはESLintになります。 ESLintではv9のバージョンアップに伴い、Flat Configがデフォルトの設定ファイル形式となりました。次のv10では過去の設定ファイルが廃止となるため、今のうちに移行を進めておくのが良さそうです。 Biomeではv1.6よりAstroとSvelteとVue.jsの部分サポート、v1.9よりCSS、GraphQL、`.editorconfig`のフォーマットサポートが入りました。 Prettierは次のv4に向けて[prettier-cli](https://github.com/prettier/prettier-cli)のパフォーマンス改善を行なっているようです。 ## 型ツール | | 2023/12/31時点の最新バージョン | 2024/12/1時点の最新バージョン | | ---------------------------------------------------------- | ------------------------------ | ----------------------------- | | [TypeScript](https://github.com/microsoft/TypeScript/tags) | v5.3.3 | v5.7.2 | | [flowtype](https://github.com/facebook/flow/releases) | v0.225.0 | v0.255.0 | 型ツール関連でメジャーバージョンが上がったものはありませんでしたが、TypeScriptのバージョンについてはsemverで運用されていないため、マイナーバージョンアップに伴いいくつもの変更が入っています。 - [Announcing TypeScript 5.4 - TypeScript](https://devblogs.microsoft.com/typescript/announcing-typescript-5-4/) - [Announcing TypeScript 5.5 - TypeScript](https://devblogs.microsoft.com/typescript/announcing-typescript-5-5/) - [Announcing TypeScript 5.6 - TypeScript](https://devblogs.microsoft.com/typescript/announcing-typescript-5-6/) - [Announcing TypeScript 5.7 - TypeScript](https://devblogs.microsoft.com/typescript/announcing-typescript-5-7/) ## おわりに - 個人的振り返りと来年以降の予測 今年はいくつかのメジャーアップデートはありましたが、個人的な感想としては、開発者にとっては目まぐるしい変化というものはそこまでなかったように思いました。 バージョンアップでの破壊的変更についてもいくつかエスケープハッチとなる対応(旧式と併用して扱えるなど)が含まれていたり、より良い方向へ改善するための変更が含まれていると感じています。 エコシステム周りのパフォーマンスを改善するイニシアチブである[e18e](https://e18e.dev/)が設立されたこともあり、Web開発者にとってより利用しやすくパフォーマンスを重視したツールが増えてくるのではないかと思っています。逆にツールチェインの開発者にとっては、Rustを中心としてこれまでとは違った技術を取り入れることが求められるかもしれません。 これまでのアップデートの変遷を振り返ってみて、来年以降のフロントエンド技術動向はどうなるかを予測してみました。あくまでも私の予測なので参考程度ということで…。 - 脱仮想DOMでの宣言的UIが主流となる([Fine Grained Reactivity](https://docs.solidjs.com/advanced-concepts/fine-grained-reactivity)の実現) - サーバーコンポーネントの普及に伴うクライアントとサーバーとの境界がより曖昧に - Next.jsのキャッシュ機能に振り回されなくなったことでのフレームワーク選択肢の多様化 - 代わりにPages Routerがなくなるかもしれない - VoidZeroを中心としてJavaScriptツールチェインのエコシステムが賑わう - **パフォーマンスを重視したものが価値として優先されていく** というわけで今日までの動向を振り返ってみましたが、今年の残りにもいくつかの変更やリリースがあるかもしれません。引き続きフロントエンド技術周辺を見守っていこうと思います。 ## 参考記事 - ランタイム - [Node.js v22の主な変更点 - 別にしんどくないブログ](https://shisama.hatenablog.com/entry/2024/05/13/083000) - [Node.js v23の主な変更点 - 別にしんどくないブログ](https://shisama.hatenablog.com/entry/2024/10/18/080000) - [Deno v2がリリース🎉 - Deno v1.0.0の頃からの変化と現在のプラクティスについて](https://zenn.dev/uki00a/articles/deno-v2-what-has-changed-from-v1) - [Honoのv4が2月9日にリリースされます](https://zenn.dev/yusukebe/articles/b20025ebda310a) - UIフレームワーク - [Announcing v3 | Chakra UI](https://www.chakra-ui.com/blog/00-announcing-v3) - [MUI v6について内容おさらい&最新情報を追ってみる ++ Gaji-Laboブログ](https://www.gaji.jp/blog/2024/08/07/20485/) - モバイル&デスクトップアプリ - [New Architecture is here · React Native](https://reactnative.dev/blog/2024/10/23/the-new-architecture-is-here#removing-the-bridge) - [The Fall of React Native Bridge](https://slide-react-native-bridge.vercel.app/) - [iOS/Androidに対応した「Tauri 2.0」が公開 ~「Rust」が使えるアプリフレームワーク - 窓の杜](https://forest.watch.impress.co.jp/docs/news/1628498.html) - ビルド・バンドルツール - [Environment API で広げる Vite の可能性 - Slidev](https://pre-vue-fes-2024-environment-api-slide.sapphi.red/1) - テストツール - [WebDriver Bidi Protocol | WebdriverIO](https://webdriver.io/docs/api/webdriverBidi/) - [Announcing VoidZero - Next Generation Toolchain for JavaScript | VoidZero](https://voidzero.dev/posts/announcing-voidzero-inc) - [TSKaigi 2024 Prettierの未来を考える スピーカーノート](https://zenn.dev/sosukesuzuki/articles/756e04848885bd) --- ## Vue Fes Japan 2024参加レポート https://archives.yamanoku.net/report-vue-fes-japan-2024/ 皆様こんにちは。[株式会社Schoo](https://corp.schoo.jp/)(以下、Schoo)でフロントエンドエンジニアをしております [@okuto_oyama](https://x.com/okuto_oyama) です。 今回は、10月19日に開催された[Vue Fes Japan 2024](https://vuefes.jp/2024/)の参加レポートをお届けします。 ## Vue Fes Japanとは Vue Fes Japanは[Vue.js日本ユーザーグループ](https://vuejs-jp.org/)が主催する日本最大級のVueエコシステムにまつわるカンファレンスです。Vue・ViteクリエイターでもあるEvan Youをはじめ、VueエコシステムのOSSメンテナやコントリビューターも参加し、各技術の最新動向を知ることができます。 2018年に初開催、その後台風やコロナ禍で中止されるも、2022年にオンラインカンファレンスとして復活、2023年は久しぶりのオフラインカンファレンスが開催し、今年もまたオフラインで開催されました。 当初はVue.jsやNuxt開発者のためのカンファレンスでしたが、ViteやVolarの登場から徐々にVue.js・Nuxtだけに閉じない様々な発表が増えおり、より間口の広がったフロントエンドのカンファレンスになってきております。 ## 気になったセッションの紹介・感想 今回のVue Fes Japan 2024での発表は35件ほどあり、どれを聴くか非常に悩ましかったです。その中で私が興味を持って聴いた発表についてと感想を紹介していきます。 ### キーノート 毎年恒例となっているEvan Youによる基調講演からスタートしました。 前半はVue.jsのこれまでの歴史を振り返りつつ最近リリースされたVue 3.5の紹介やこれから改善予定についてを語ってくれました。3.5からは個人的待望だった[`useId()`](https://ja.vuejs.org/api/composition-api-helpers#useid)が実装されたのでEvanに感謝の気持ちで聞いていました。

useId作ってくれてありがとうございます #vuefes

— オオヤマ オクト (@okuto_oyama) October 19, 2024
後半はViteにまつわる今後の技術戦略(OxC、Rolldown)や、設立した企業の[VoidZero](https://voidzero.dev/)についてを発表してくれました。Viteが様々なフレームワークなどで活用されているエコシステムの凄さを感じつつ、更なる技術的進化が語られておりワクワクさせられました。

Viteの将来が楽しみです! #vuefes

— オオヤマ オクト (@okuto_oyama) October 19, 2024
ちなみにVue.jsは今年で登場して10周年になるのですが、私がVue.jsに初めて触れたのが2016年からなのでそこから8年近くも経っているのだなぁ〜と思い出に浸っていました。 ### IT未経験者をVue.jsで開発できるITコンサルタントに育てあげる秘訣 - フューチャーの新人研修の取り組み こちらはフューチャーアーキテクト株式会社さんのスポンサーセッションです。 新人研修の中でVue.jsを用いた開発ができるように組み込んでいるとのことでしたが、[eslint-plugin-vue](https://eslint.vuejs.org/)のメンテナでもある太田さん([ota-meshi](https://github.com/ota-meshi))が教材の監修に関わっているとのことでした。 Schooでもフロントエンドアーキテクチャの選択肢としてVue.jsやNuxtを用いているので、今後の新卒エンジニアの研修教材にどう組み込むか検討しています。新卒研修でVue.jsやNuxtを組み込んでいる企業の方と意見交換できたらいいなとか考えていました。

Vue.jsを使って開発研修しているところってどれくらいあるんだろうかな #vuefes

— オオヤマ オクト (@okuto_oyama) October 19, 2024
### Nuxtベースの「WXT」で開発用のChrome拡張を作成する Chrome拡張を作るにあたり何かしらのボイラープレートとなるものは色々と存在しています。今回はNuxtのディレクトリ構成に似た「[WXT](https://wxt.dev/)」でChrome拡張を作成したという内容を発表してくれました。 Manifestファイルを自動生成してくれたり、開発時には拡張機能を取り込んだブラウザが立ち上がりホットリロードして機能検証できるなど、開発者体験が良さそうに思いました。モジュールを入れる必要はありますが、Vue.jsやReact、Svelte、SolidJSを用いたUI開発もできるとのことです。

Vue以外でReact、Svelte、SolidJSも使える!マイクロフロントエンドっぽくやれる…? #vuefes_kickflow

— オオヤマ オクト (@okuto_oyama) October 19, 2024
### 同期する都市のキャンバス:Vue.jsによる大規模メディアインスタレーションの舞台裏 セッションやLTのおおよそはVueエコシステムの話やシステム開発・Web開発の話だったのですが、それとは違う毛色のVue.js活用事例についての発表でした。 group_inouとAC部のミュージックビデオ作品『HAPPENING』のWebアプリでも[Vue.jsが使われていた話](https://baku89.com/making-of/kindolphin)もあり、映像とVue.jsは親和性があるのかなと思い、興味をそそられました。 発表では[渋谷サクラステージ](https://www.shibuya-sakura-stage.com/)でのデジタルサイネージにはNuxtが使われているという衝撃の事実を知ることができました([技術解説記事](https://rettuce.blog/2024/01/11/shibuyasakurastage/))。自分にとっては、複雑なGUIを作るためにNuxtを活用するイメージがまったくできていなかったので、ここまで実現できるのかと驚きました。色の合成についてもCSSで行っているということでWeb技術をフル活用されていたことが嬉しかったです。

Web技術をつかっていろんな展開ができる話はわくわくするな〜 #vuefes_mntsq

— オオヤマ オクト (@okuto_oyama) October 19, 2024
ちなみに渋谷サクラステージはSchoo本社からも近い場所にあるので、出社した際はデジタルサイネージがどうなっているかを覗きに行ってみようと思います([デジタルサイネージのイメージ動画URL](https://www.youtube.com/watch?v=DJfNFAYwEaU))。 ### Vue 3 と Svelte 5 のランタイムを比較する 〜技術を一段深く理解する〜 SvelteのコアチームメンバーでもあるbaseballyamaさんによるVue 3とSvelte 5、そしてVue Vapor Modeのそれぞれのランタイムを比較した発表です。個人ではSvelteを書いたことがあるのと、コンパイラとして魅力を感じているOSSだったので、Vue.jsとSvelteとでどのようにランタイムが違うのか気になっていました。 ReactやVue.jsでは仮想DOMを用いていますが、Svelteでは仮想DOMを持たないランタイムを持っています。Vue Vapor Modeでも同様に仮想DOMを用いない手法を取り入れているため、どの部分が似ていてどの部分が違うのかを簡略化されたコードで説明してくれました。 それぞれのランタイムについて詳細に見たことがなかったため、今回の発表でSvelteとVue Vapor Modeのそれが、非常に近しいものであることをざっくり理解できました。

Vue Vapor Modeのランタイム、Svelteと似てるんだ #vuefes_mntsq

— オオヤマ オクト (@okuto_oyama) October 19, 2024

ざっくりとしたランタイムの紹介だったけどVapor Modeはよりシンプルなコンパイラを目指そうとしてるんだろうなと雑に理解しました #vuefes_mntsq

— オオヤマ オクト (@okuto_oyama) October 19, 2024
ちなみに同日夜よりSvelteにまつわるカンファレンスの[Svelte Summit Fall 2024](https://www.youtube.com/watch?v=fAPFsRP-mbc)が開催され、Svelte 5の正式リリースが発表されていました。新たに搭載された[Rune API](https://svelte.dev/docs/svelte/what-are-runes)もVue.jsの書き方と近しくなってきたと感じるので、いつかプロダクションで導入してみたいなぁという気持ちがあります。 ### 次世代フロントエンドクロストーク ![Vue Fes Japan 2024のステージスクリーンに『次世代フロントエンドクロストーク』の情報が表示されている。登壇者にはEvan You、Sosuke Suzuki、Boshen Chen、Kia King Ishii、太田 洋介、Unvalleyが含まれている。](https://i.gyazo.com/c285dc5ad1aa369eedecff3f776036c5.png) Evan You、OxCクリエイターのBoshen Chen、ESLint Communityコアチームの太田 洋介さん、PrettierメンテナのSosuke Suzukiさん、Biomeコアコントリビューターのunvalleyさんらが集まりフロントエンドツールのこれからについてを語るパネルディスカッションがありました。このメンバーが一度に揃うことはまず無いのでかなり豪華な対談となりました。 もともとJavaScriptはWebブラウザで使われる言語でしたが、サーバーサイドJSが生まれ、UIライブラリ・フレームワークが登場し、そこから複数のフロントエンドツールが生まれてきています。徐々に複雑なアプリケーションや要件が生まれるようになって、JavaScriptだけで解決するには限界が生まれてきています。そんな中、フロントエンドツールを動かすための言語にRustが選択されてきています(ちなみに[esbuild](https://github.com/evanw/esbuild)はGo言語です)。 フロントエンドツールのRust化が進む中で、参入障壁の難易度やエコシステムそのものがどうなっていくかは個人的にも懸念していましたが、Rollupプラグインの後方互換や有名なプラグインはコアとして取り込んでいくなど、不安に思っていた部分に対する回答が聞けました。またVoidZeroの今後の取組みとしてASTの標準化や共通化についても話しており、今後どのような動きが出てくるのかも気になりました。 登壇されたSosuke Suzukiさんの[ブログ記事](https://sosukesuzuki.dev/posts/vuefes-2024-follow-up/)でも語られていましたが、このパネルディスカッションは幅広い聴衆に伝わるような話で展開されていたため、自分も若干の物足りなさがありました。欲を言えば[次世代Webカンファレンス](https://nextwebconf.connpass.com/)のような聴者おいてけぼりにしてしまう議論も聴いてみたいなと感じてしまいました。

延長で1時間やってほしい #vuefes_mntsq

— オオヤマ オクト (@okuto_oyama) October 19, 2024
### Deep dive into Nuxt Server Components フロントエンドの文脈で「Server Components」というと、Reactの印象が強いかもしれません。実はNuxtにも「[Nuxt Server Components](https://roe.dev/blog/nuxt-server-components)」というものが存在します。今回はその内容についてと実際に最小単位で実装する場合にどのような形となるのかを解説してくれました。 仕組みの解説で必要な構成要素を説明してくれたのですが、その中で個人的な驚きだったのが、[Teleport](https://ja.vuejs.org/guide/built-ins/teleport)を扱っていたことです。モーダルダイアログなどの表示などでDOM階層の外側に移動させる使い方だと思っていたのですが、SSRでのハイドレーションミスマッチを防ぐ(=クライアントとサーバーとでDOM構造を一致させる)ために用いられることは知りませんでした。 まだExperimentalな機能ではありますが、クライアントのバンドルサイズを減らしたりクライアントサイドに情報を残したくないときに活用していけるといいなと思いました。 ### Vue.jsコミュニティにようこそ! Vueエコシステムのコミュニティで活動しているメンバーたちによる、どのようにコミュニティに参加し貢献できるかについてのパネルディスカッションがありました。私は途中から参加しましたが、立ち見が発生するほどの満員で大盛況でした。 多くの参加者が座ってスクリーンを見つめており、前方には登壇者がパネルディスカッションを行っている。スクリーンには『Vueコミュニティの課題と未来のビジョン』といった内容の発表スライドが表示されている。 セッション内では[chibivue](https://ubugeeei.github.io/chibivue/)という学習コンテンツ向けのDiscordサーバー(現在はchibivueに閉じず様々なコンテンツを扱っています)の紹介がありました。そこから一気に参加者が増えてサーバー内でアラートがでるほどの人気ぶりでした。

#vuefes にサーバー荒らされました (chibivue 鯖) pic.twitter.com/3eHP3Rju9Q

— @ubugeeei.dev 🦋 (@ubugeeei) October 19, 2024
コミュニティに参加・貢献するということ何をもってして証明されるか明確な基準はありません。Vue Fes Japanに参加することだけでもそうかもしれませんし、Vueエコシステムを活用して開発してみることだったり、この参加レポートのような感想記事を書くこともその1つかもしれません。 Vue.jsのコミュニティーガイドには「[あなたができること](https://ja.vuejs.org/about/community-guide#what-you-can-do)」という項目があり詳細にどのようなことができるかの紹介が載っています。貢献してみたい人は自分ができそうなことから始めてみると良いかもしれません。 ちなみに私が始めてVue.js関連で貢献をしたものは[ドキュメントの日本語翻訳にまつわるもの](https://github.com/vuejs-jp/ja.vuejs.org/pull/61)でした。 ## 参加したSchooエンジニアの感想 Schooからは私を含めたエンジニア3名が参加してきました(うち2名は個人スポンサーもさせていただいております)。それぞれが気になるセッションへ参加してきて刺激をもらってくることができました。参加したエンジニアによるVue Fes Japanの感想についても掲載させていただきます。 - Vue周りはコミュニティが本当にいいと再認識! - Vue/Nuxtはあくまでも選択肢の一つのイメージだったが、これからのコミュニティの広がり熱量を感じて自分の中での価値・熱量みたいなものが上がった気がする - どんな形でもいいから自分でも何かしらコミットしたい! - Vue作者の実際の話聞ける場ありがたい。リアルタイム翻訳ありがとう。(笑いどころはずれる) - リファクタ、テスト、パフォーマンスチューニングはみんな困っていそう - AIを用いたリファクタ、テストはやってみても良さそう - 深掘りたいことが増えた! - Vueはいいぞ! ## Vue Fes Japan 2024を終えて 午前からはじまったカンファレンスでしたが夜のアフターパーティが終わるまであっという間に過ぎたと感じるくらい濃密な時間となりました。直接聴けなかった発表がいくつもあったのでアーカイブ動画が公開されるのを心待ちにしております。 全セッション終了後に行われたアフターパーティでは、私と同じくVue 1系から関わっていた人たちと会えたり、過去在籍していた企業の同僚、chibivue関連で新しく繋がった方たちともご挨拶ができました。海外からの参加者も含め、幅広い多様な層が参加していることで、Vue.jsが誕生してから続くコミュニティというものの歴史の長さを感じることができました。 SchooでもVue.jsやNuxtをプロダクト開発に活用させてもらっています。引き続きVueエコシステムを活用しつつ、そこから得られた知見を通じて、コミュニティやOSSへ貢献をしていければと思っています。 ![黒のクリエイティブウォールにカラフルなペンで会社ロゴや個人の思いなどが所狭しと描かれている](https://i.gyazo.com/6cb49b47537d700f1a016de8db723a02.png)
--- ## Vue3.5からの改善と振り返るdefineCustomElementについて https://archives.yamanoku.net/improvements-to-custom-elements-in-vue3-5/ Vue3.5の更新では `defineCustomElement` に関する改善が含まれています。今回の記事ではその `defineCustomElement` に関連する事項についてと、改善された内容を紹介します。 ## Custom Elementsとは? `defineCustomElement` についてを紹介する前に、まずは根底の知識となる「Custom Elements」についてを解説します。 Custom Elementsは[Web Components](https://developer.mozilla.org/ja/docs/Web/API/Web_components)を構成する一部で、独自のHTML要素を作成するためのJavaScript APIです。 独自の定義のため、通常のHTML要素とは異なりダッシュが使われている名前( `kebab-case` )である必要があります。 ```html ``` Custom Elementsの利点としては、UIライブラリ・フレームワークを使用しているかに関わらずに利用できることが挙げられます。例えばフロントエンドの技術スタックが異なるアプリケーション間で共通のUIコンポーネントを使用する場合に有用です。 ちなみにVue内でCustom Elementsを使用するために一部設定[^1]を追加する必要がありますが、[必要なテストケースはすべて通過しているため](https://custom-elements-everywhere.com/libraries/vue/results/results.html)安心して使用できます。 [^1]: [コンポーネント解決のスキップ](https://ja.vuejs.org/guide/extras/web-components.html#skipping-component-resolution)の設定を参照 Web標準技術の相互運用向上プロジェクトである[Interop](https://wpt.fyi/interop-2024)では[Web Componentsの改善が行われており](https://wpt.fyi/results/?label=experimental&label=master&product=chrome&product=firefox&product=safari&aligned&view=interop&q=label%3Ainterop-2023-webcomponents)、Custom Elementsはほぼテストケースを通過しているためクロスブラウザでもある程度安定して使用できると言えます。 Custom Elementsの具体的な使用例を上げると、GitHubのリポジトリ内での更新日付部分で使用されており、開発ツールで該当部分を見ると独自のHTML要素で定義されていることがわかります[^2]。 [^2]: [github/relative-time-element: Web component extensions to the standard --- ## Interop 2025のプロポーザル投票が始まりました! https://archives.yamanoku.net/interop-2025-opens-for-proposals/ ブラウザ間でのWeb標準の相互運用性を向上するプロジェクトの「Interop」で、来年の2025年に重点対象とするAPIへのプロポーザル投票がはじまりました。 この記事ではそもそものInteropについての解説、プロポーザルについて、どのようなものが重点対象になっていたか、今後の選考スケジュールについてを触れていきたいと思います。 ## Interopとは何か? はじめにそもそもInteropとはどういう取り組みなのか?についてを簡単に触れておきます。 Interopは、Web Platform Tests(以下、WPT)プロジェクトの一部であり、異なるウェブブラウザ(Google Chrome、Microsoft Edge、Mozilla Firefox、Safari)間で使われるHTML、CSS、JavaScriptがウェブサイトやウェブアプリが同じように表示され、動作できるようにする相互運用性を高めるプロジェクトです。 このプロジェクトはブラウザのレンダリングエンジンに多大な貢献をしているブラウザベンダ(Apple、Google、Microsoft、Mozilla)とコンサルティング企業(Bocoup、Igalia)の代表者チームによって進められています。 どれだけ相互運用性を維持できるようになっているかについてはWPTのダッシュボードにて確認できるようになっています。Experimental(実験版)とStable(安定版)のそれぞれのブラウザでのテスト進捗結果が見られます。 ## プロポーザルの投票について 期待していた新たなAPIがブラウザへ実装されたときに「早くクロスブラウザで安定的に使えるようになったら…」とやきもきしている方もいるかもしれません。そんな相互運用性を高めてほしいと思ったときにInteropのIssueよりプロポーザルとして投票できます。 ![InteropのIssue選択画面。Focus Area Proposal、Investigation Effort Proposal、Other、Test Change Proposalの4項目がある](https://i.gyazo.com/d3ffc133cda2f519756c39a40ff81c0a.png) Interop 2025に向けたIssueとして以下の2つから投票できます。 - Focus Area Proposal - Investigation Effort Proposal 「**Focus Area Proposal**」は仕様が定められていて適切なテストケースが存在するもので「**Investigation Effort Proposal**」は逆に仕様やテストケースなどで不足しているものがある場合のプロポーザルとして使われます。 どの種類のプロポーザルを投票すればよいかわからない場合は「Investigation Effort Proposal」の方を選ぶと良いとされています。 ## プロポーザルの採用について プロポーザルとして投票されたもののすべてが対象となるわけではなく、[いくつかの選考フロー](https://github.com/web-platform-tests/interop/blob/main/2025/selection-process.md)を経て最終的にどのAPIに注力するかを決定されます。 注力するに値する優れたプロポーザルの観点としては以下が挙げられます。 - **具体的**: 具体的な相互運用性の問題を特定できるか - **インパクトがあるか**: 明確な使用例や事例を挙げられるか - **テスト済みであるか**: WPTにてすでにテストを通過しているものか - **安定的か**: Web標準として広く受け入れられているものか - **価値があるか**: 開発者およびユーザーが相互運用性の向上で恩恵を受けられるか さらに「Standards Positionsとしてポジティブであるか」「一部のブラウザでは動いていない」「APIがすでに広く実装されているか」「公開されているバグトラッカーですでに認知されているか」「アクセシビリティ・国際化・プライバシー・セキュリティの面で影響があるか」といった観点についても加点要素となります。 また、開発者向けサーベイの「[State of HTML](https://stateofhtml.com/en-US)」「[State of CSS](https://stateofcss.com/en-US)」「[State of JavaScript](https://stateofjs.com/en-US)」などの結果によっても今後のInteropにおいて参考とされるため、積極的に参加して回答していくと良さそうです。 ## これまでのInteropについて振り返る これまでのInterop重点対象となったプロポーザルにはどのようなものがあったか、についてを振り返ってみます。 ### [2021](https://wpt.fyi/interop-2021) | Stable | Experimental | | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | | ![Interop2021のStable版WPTダッシュボード。Chromium系が97点、Firefoxが94点、Safariが92点](https://i.gyazo.com/0c2ba3857134a940c4489fef106fa9bf.png) | ![Interop2021のExperimental版WPTダッシュボード。Chromium系が98点、Firefoxが94点、Safariが94点](https://i.gyazo.com/4f68adb75db2b50f30654d50d8150a61.png) | - Aspect Ratio - Flexbox - Grid - `position: sticky` - Transforms 2021年の重点対象は計5件になります。今や問題なく使えるようになったAspect Ratioや `position: sticky` を見ると懐かしく感じられます。 ### [2022](https://wpt.fyi/interop-2022) | Stable | Experimental | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ![Interop2022のStable版WPTダッシュボード。重点対象全体が82点、調査対象が80点、Chromium系が87点、Firefoxが90点、Safariが96点](https://i.gyazo.com/900110b1e37f569c0af091c0ab29d57a.png) | ![Interop2022のExperimental版WPTダッシュボード。重点対象全体が85点、調査対象が80点、Chromium系が92点、Firefoxが91点、Safariが96点](https://i.gyazo.com/891a2cf8d4f7451375bc69d42c449e42.png) | - Aspect Ratio - Cascade Layers - Color Spaces and Functions - Containment - Dialog Element - Flexbox - Forms - Grid - Scrolling - Sticky Positioning - Subgrid - Transforms - Typography and Encodings - Viewport Units - Web Compat 2022年の重点対象は計15件になります。2021年にあった重点対象も継続しつつ、この年から「Focus Area」(重点対象)と「Investigations」(調査対象)の項目が分かれています。 「Web Compat」の項目は特定の技術ではなく、すでにリリースされているAPIであるもののバグや標準からの逸脱によって問題が起きているものたちのグループになります。 2022年においてはViewport Unitsが唯一の100%テストカバレッジを達成しています。 ### [2023](https://wpt.fyi/interop-2023) | Stable | Experimental | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ![Interop2023のStable版WPTダッシュボード。重点対象全体が83点、調査対象が85点、Chromium系が97点、Firefoxが86点、Safariが95点](https://i.gyazo.com/7976c62219d0626cb392b9b0766a1a19.png) | ![Interop2022のExperimental版WPTダッシュボード。重点対象全体が95点、調査対象が85点、Chromium系が99点、Firefoxが98点、Safariが97点](https://i.gyazo.com/306a049a47b7d0e4f6884e26c60ef07b.png) | - Border Image - Color Spaces and Functions - Container Queries - Containment - CSS Math Functions - CSS Pseudo-classes - Custom Properties - Flexbox - Font Feature Detection and Palettes - Forms - Grid - `:has()` - Inert - Masking - Media Queries 4 - Modules - Motion Path - Offscreen Canvas - Pointer and Mouse Events - Scrolling - Subgrid - Transforms - URL - Web Codecs (video) - Web Compat 2023 - Web Components 2023年からの重点対象は合計26件になります。 2022年から継続しているもの(計7件)も含まれていますが、歴代の中では最多となる採択数になりました([プロポーザルは87件も集まったそうです](https://github.com/orgs/web-platform-tests/projects/2))。そのためInteropチーム内で少なくとも2つの参加組織からの支持と反対がないことを示すコンセンサスによって、採用するプロポーザルを絞っていったそうです。 2023年においてはMedia Queries 4、Inert、`:has()`、Font Feature Detection and Palettesが100%テストカバレッジを達成しています。 ### [2024](https://wpt.fyi/interop-2024) | Stable | Experimental | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ![Interop2024のStable版WPTダッシュボード。重点対象全体が74点、調査対象が12点、Chromeが90点、Edgeが89点、Firefoxが87点、Safariが83点](https://i.gyazo.com/1b1b43ae478a5fe406b53260df136e1b.png) | ![Interop2024のExperimental版WPTダッシュボード。重点対象全体が89点、調査対象が12点、Chromeが98点、Edgeが93点、Firefoxが93点、Safariが97点](https://i.gyazo.com/1b1b43ae478a5fe406b53260df136e1b.png) | ※ 2024のスクリーンショットは2024/9/19時点のものです。 - Accessibility - CSS Nesting - Custom Properties - Declarative Shadow DOM - `font-size-adjust` - HTTPS URLs for WebSocket - IndexedDB - Layout - Pointer and Mouse Events - Popover - Relative Color Syntax - `requestVideoFrameCallback` - Scrollbar Styling - `@starting-style` & `transition-behavior` - Text Directionality - `text-wrap: balance` - URL 2024年からの重点対象は合計17件になります。こちらは現在も対応が行われております。今年のInvestigationsには[WebAssemblyのテスト](https://github.com/web-platform-tests/interop-2024-wasm)も対象となっているようです。 ## 今後のスケジュール 以下がInterop 2025プロポーザル選考プロセスのスケジュールです(変更される可能性があります)。 - プロポーザルの投票期間: 2024/9/17 ~ 2024/10/9 - 提案されたプロポーザルの選定: 2024/12/19まで - Interop 2025プロジェクト公開: 2025/2前半 ## 参加企業によるInterop 2025のお知らせ記事 ### Apple [Get Ready for Interop 2025: Your Chance to Shape the Web | WebKit](https://webkit.org/blog/15942/get-ready-for-interop-2025-your-chance-to-shape-the-web/) ### Bocoup [Interop 2025 Call for Proposals - Bocoup](https://www.bocoup.com/blog/interop-2025-call-for-proposals) ### Google [Submit your proposals for Interop 2025  |  Blog  |  web.dev](https://web.dev/blog/interop2025-proposals) ### Igalia [Interop 2025 Opens for Proposals | Igalia](https://www.igalia.com/2024/09/17/Interop-2025-Opens-for-Proposals.html) ### Microsoft [Looking forward to an Interop 2025 that addresses your top needs - Microsoft Edge Blog](https://blogs.windows.com/msedgedev/2024/09/17/interop-2025-call-for-proposals/) ## おわりに この記事ではInterop 2025にまつわる紹介をしました。現時点ですでに[いくつかのAPIに関してプロポーザルが投票されています](https://github.com/web-platform-tests/interop/labels/focus-area-proposal)。 リアクションやコメントで応援したり、ブログやSNSなどを通じて広めることでより多くの人が知るきっかけになるかもしれません。私の推しAPIでもある「[Navigation API](https://developer.mozilla.org/en-US/docs/Web/API/Navigation_API)」もそろそろ採用されてくれればいいなを願っています([該当Issue](https://github.com/web-platform-tests/interop/issues/709)で `:+1:` をしてきてささやかな応援をしています)。 これらのプロポーザルの中からどれが重点対象となりクロスブラウザで活用できるのか、今後の選考結果が楽しみです。 --- ## フロントエンドカンファレンス北海道でブラウザ互換についての発表をしてきました https://archives.yamanoku.net/presented-at-frontend-conference-hokkaido-2024/ 8/24に札幌にて「[フロントエンドカンファレンス北海道2024](https://www.frontend-conf.jp/)」が開催され、そちらに参加して登壇・発表をしてきました。 - [ブラウザ互換の重要性 - あらゆるユーザーに価値を届けるために必要なこと by 大山奥人 | トーク | フロントエンドカンファレンス北海道2024 #frontendo - fortee.jp](https://fortee.jp/frontend-conf-hokkaido-2024/proposal/d7d08dd7-18eb-4104-94a1-788138639608) - [ブラウザ互換の重要性 - あらゆるユーザーに価値を届けるために必要なこと - Speaker Deck](https://speakerdeck.com/yamanoku/burauzahu-huan-nozhong-yao-xing-arayuruyuzanijia-zhi-wojie-kerutamenibi-yao-nakoto) 詳細な内容は[ドキュメントページ](https://yamanoku.net/frontendo-2024/ja/)を参照していただきたく、この記事では - なぜブラウザ互換の発表をしたいと思ったのか - 発表では伝えきれなかったこと について紹介したいと思います。 ## なぜブラウザ互換の発表をしたいと思ったのか 去年開催された[フロントエンドカンファレンス沖縄2023](https://frontend-conf.okinawa.jp/)で発表された内容を見ると、フレームワーク・ライブラリ・デザインシステム・アクセシビリティ・関連するツール群などなど、フロントエンドにまつわる内容も多岐にわたっていることがわかります。 その中で自分が関心をもちつつ他の発表とで差異があるようなものを考えた時に「ブラウザ互換」があがりました。 この発表を思いつくにあたり、私が過去の勉強会で発表してきたことが由来となっています。まずは、それらについてを触れておきたいと思います。 HTMLオンリーでUIを生み出すことの難しさについて述べた発表です。まとめとして、領域が広がってきているフロントエンドエンジニアとして、あらゆることができるのではなく、ブラウザ上で **「表示されるもの」に責務を置くべき**と提言しました。 [アクセシブルなフロントエンド開発のこれまでとこれから / the past and future of accessible front-end development - Speaker Deck](https://speakerdeck.com/yamanoku/the-past-and-future-of-accessible-front-end-development) [JSConf JP 2021](https://jsconf.jp/2021/)でのフロントエンド開発におけるアクセシビリティの取り組みについての発表です。ここではWebアクセシビリティ原則の1つである「知覚可能」という点に触れており、**あらゆる人が情報やインターフェースに触れることができるようにすることを最初に目指すべき**と述べました。 いずれも3年前の発表内容ですが、私の中ではこれらの考え方やこだわりに大きな変化はなく、今後もフロントエンドに関わる人に大切にしてほしいと考えています。 誤解のないように補足しておくと、それ以外の領域(バックエンドとの連携、パフォーマンス・チューニング、セキュリティ、SEO等)も求められる要件によっては重要であり、これらを軽視する意図はありません。 これらの発表に共通する点として、いずれも「ブラウザ」を通じたものです。 情報を見たり操作するのもブラウザからですし、支援技術を使うことで情報にアクセスできるのもブラウザからです。Webのプロダクトを提供するのであれば、ブラウザはユーザの利用環境・実行環境そのものになるため、関心を割くべき領域だと考えています。 今回はそんなブラウザについて、今どのようなことが行われているかを再確認して整理してみたかったのと、フロントエンド関連の勉強会やカンファレンスでブラウザにまつわるテーマで発表しているものがなかなか見られなかったので、その話をCfPとして提出しました。 ちなみに今回のカンファレンスの発表ではn13uさんが[フロントエンド開発の歴史](https://fortee.jp/frontend-conf-hokkaido-2024/proposal/190cff6a-d2b0-4b61-aef0-138d8910ebc8)でブラウザのことに触れていたり、canalunさんが[ブラウザにおけるテキストレンダリング](https://fortee.jp/frontend-conf-hokkaido-2024/proposal/a5735dc2-301b-497b-a354-d97639596365)の発表をされていたりなど、他にもブラウザにまつわる発表があって一人だけではないという心強さがありました。 ## 発表では伝えきれなかったこと 以下は発表内には収まりきらなかったものの、こういった事象についても知ってもらいたいということを紹介します。 ### ブラウザ互換以外のことにも注意を払ってほしい Interopという取り組みやBaselineという指標が生まれてきて、ブラウザ互換に関する取り組みは以前よりも増えてきておりブラウザの齟齬についてを気にすることは減ってきました。とはいえブラウザのことを一切気にしなくていいというわけではありません。 [AndroidではCPUのパフォーマンスを考慮する必要がある](https://2023.yamanoku.net/2023-12-09/#:~:text=Android%E3%81%AECPU%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9%E3%81%AFSafari%E3%82%88%E3%82%8A%E3%82%82%E6%82%AA%E3%81%84)ことや、[エンタープライズ向けのブラウザ特有の機能や挙動](https://zenn.dev/loglass/articles/ef5767a8994136)を理解しておくなど、様々な非機能要件についても考える必要があります。 実際にブラウザ上で試したり、実機で検証してみないと見えないこともあります。どこまでを対象範囲とするかはプロダクトによって異なるかもしれませんが、実装者としても引き続き注視すべき点には気をつけていきたいと思っています。 ソフトウェアの品質を保つためにも、ユーザに安心して使ってもらうためにも、プロダクトがどのように提供されているかに注目し、その特性を活かした体験づくりを考えていきましょう。 ### どんなものが新たに策定されているかを知っていく 品質を守るという観点でも重要ですが、新しい仕様をいち早く知ることで、自身のプロダクトに反映できそうなアイデアや取り組みにつなげることもできるのではないかと思っています。 発表内でも触れましたが、Intentsという取り組みをウォッチしておくことで、今後どのようなものが策定されるかを知ることができます。 - https://x.com/intenttoship - https://botsin.space/@intenttoship - https://bsky.app/profile/intenttoship.dev - [RSS feed](https://botsin.space/@intenttoship.rss) 最近では[Summarizer API](https://groups.google.com/a/chromium.org/g/blink-dev/c/rCpcU0ZTgTk)、[Writer API](https://groups.google.com/a/chromium.org/g/blink-dev/c/U_4jtNS4aDY)、[Rewriter API](https://groups.google.com/a/chromium.org/g/blink-dev/c/9qR53S0QCbE)といった生成AI関連の仕様提案が興味深いと思っています(注:現在は提案段階で、Chromeへの実装が許可されているわけではありません)。 私個人としては[Navigation API](https://developer.mozilla.org/en-US/docs/Web/API/Navigation_API)というものがクロスブラウザで実装されて安定することを期待しています。このAPIの具体的な内容については以下スライドをご参照ください。 ### Webを持続的なものとするための取り組みを知る 第2次ブラウザ戦争付近で生まれたブラウザたち(Firefox、Safari、Google Chrome)が登場してから16年が経っています。普段使われているブラウザは、今後も持続的に安定して使えるようになってほしいものです。 持続可能といえば、SDGs(持続可能な開発目標)を思い浮かべるかもしれませんが、Webにおいても持続可能なものにするにはどういったことが必要かという観点で「[Web Sustainability Guidelines](https://w3c.github.io/sustyweb/)」というものがコミュニティグループによって策定されています(注:これはW3C公式のガイドラインではありません)。 ガイドラインには多くの達成基準が含まれており、[Web開発に関する項目](https://w3c.github.io/sustyweb/#web-development)もあります。例えば、Minify、Tree Shaking、HTMLの適切な記述、モバイルファーストデザイン、依存関係の管理など、普段のフロントエンド開発からも取り組めることが多く提案されています。 Webというプラットフォームを使ってビジネスを行う立場として、事業が継続的かつ持続可能であるためにも、Web自体が持続的に運用されていくことが望ましいと考えています。ブラウザの話題を超えて広範な話になりますが、長期的に関わっていくテーマとして、このガイドラインがヒントになるかもしれません。 Web Sustainability Guidelinesについては他の関連する記事や発表についても併せてご覧になってみてください。 [サステナブルWebデザインを実践するためのガイドラインが登場 | コラム | ミツエーリンクス](https://www.mitsue.co.jp/knowledge/column/20230926.html) [Web 開発の長距離走と持続可能性 - TechFeed Experts Night#31 〜 フロントエンドアーキテクチャの現状と未来 - Speaker Deck](https://speakerdeck.com/ahomu/web-development-marathon-and-sustainability) ## 終わりに 当日会場やオンラインで発表を聞いてくれた方、登壇の場をいただけた実行委員会の皆さん、改めてありがとうございました。来年もカンファレンスの開催を楽しみにしております。 --- ## Vue Fes Japanの歴代スピーカー一覧を見られるページを作った https://archives.yamanoku.net/create-page-vuefes-japan-speakers/ 今年の10月19日に開催される[Vue Fes Japan 2024のタイムテーブル](https://vuefes.jp/2024/#timetable)が公開されました。このタイムテーブルを眺めているときに、[RubyKaigiの登壇者まとめサイト](https://imaizumimr.hatenablog.com/entry/2024/08/20/204241)を作っている方を見かけて歴代のVue Fes Japanのスピーカー一覧を見られるページを作ってみようと思って作りました。 [Vue Fes Japan Speakers](https://vuefes-japan-speakers.nuxt.dev/) サイト内容自体はシンプルで、全スピーカーを一覧で見られるもの、開催年とスピーカーそれぞれの発表一覧を見られるものを用意しています。 - [https://vuefes-japan-speakers.nuxt.dev/](https://vuefes-japan-speakers.nuxt.dev/) - [https://vuefes-japan-speakers.nuxt.dev/2024](https://vuefes-japan-speakers.nuxt.dev/2024) - [https://vuefes-japan-speakers.nuxt.dev/speakers/Evan You](https://vuefes-japan-speakers.nuxt.dev/speakers/Evan%20You) 現時点で以下Vue Fes Japanサイトの情報が含まれています。2019年は開催されておりませんが、スピーカー情報は公開されているので含めるようにしてみました。 - [Vue Fes Japan 2024](https://vuefes.jp/2024/) - [Vue Fes Japan 2023](https://vuefes.jp/2023/) - [Vue Fes Japan Online 2022](https://vuefes.jp/2022/) - [Vue Fes Japan 2019](https://vuefes.jp/2019/) - [Vue Fes Japan 2018](https://vuefes.jp/2018/) --- スピーカーのデータ自体は特段一元管理されていなかったので、各年のサイトデータから参照して取得し、名前などは一部修正して[APIとして取得できるようにまとめています](https://github.com/yamanoku/vuefes-japan-speakers/blob/6b31cabb9a8d13b50fc88267d46e37ae5ed862fc/server/api/speakers.ts)。 取得ができるようになったので現時点で公開されている発表数をまとめてみました。 | イベント | 発表数 | | ------------------------- | ------ | | Vue Fes Japan 2024 | 25 | | Vue Fes Japan 2023 | 34 | | Vue Fes Japan Online 2022 | 34 | | Vue Fes Japan 2019 | 17 | | Vue Fes Japan 2018 | 11 | 中止となってしまった2019年からしばらく経ってから開催された2022年より発表数が2倍にも伸びているのがわかります。 2024年は今後公開されるであろうスポンサーセッション分を入れると31件で、すべて合算すると127件になりそうです。 --- 今回のサイト構築で使用したフレームワークはVue関連ということで[Nuxt](https://nuxt.com/)を使用しています。`compatibilityVersion` の設定よりNuxt4の機能を使えるようにしているため、`app` ディレクトリを使用した構成になっています。 ```sh app ├── app.vue ├── components ├── composables └── pages ├── [year] │ └── index.vue ├── index.vue └── speakers └── [name].vue ``` このサイトのビルド先には以前[NuxtHub](https://hub.nuxt.com/)を活用した事例記事を見かけていたので自分も試してみようと思い、今回のサイトをNuxtHubでデプロイしてみました。具体的な導入方法は下記記事を参考ください。 [Co-Edo終了報告サイトをCloudflareで開発するとき使った NuxtHub がとっても便利!](https://zenn.dev/comm_vue_nuxt/articles/nuxt-hub-cloudflare-2025-coedo-org) 今回作成したソースも公開しておりますので、併せてご覧になってみてください。 [yamanoku/vuefes-japan-speakers: 歴代のVue Fes Japanのスピーカーを一覧できるサイトです。](https://github.com/yamanoku/vuefes-japan-speakers) --- ## SPAのアクセシビリティを強化するNuxtのRoute Announcer機能 https://archives.yamanoku.net/feat-nuxt-route-announcer/ ## SPAにおけるアクセシビリティ課題について シングルページアプリケーション(SPA)は、1つのHTMLファイルに対してJavaScriptとWeb APIを活用して、ユーザーに素早いページ切り替えの体験を提供するウェブアプリケーションの一形態です。 しかし、SPAにはアクセシビリティの課題があります。例えば、視覚障害のあるユーザーが使うスクリーンリーダーという支援技術ではページが遷移したことを認識できないことがあります。これは、JavaScriptを使ってページを切り替える際に発生する問題です。 具体的には、ユーザーがあるページから別のページへ移動した際、スクリーンリーダーが新しいページに移動したことを認識しないことがあります。 この問題を解決するために、JavaScriptとWAI-ARIAという技術を使って、Route Announcerという方法があります。これを活用することでページ遷移時にスクリーンリーダーへ新しいページの情報を伝えることができます[^1]。 [^1]: 実装の詳細については[令和最新Route Announcer事情](https://2023.yamanoku.net/2023-12-15/)より参照ください。 多くのフレームワーク(GatsbyJS、Next.js、SvelteKit、Astroなど)ではこの方法が実装されていますが、Nuxtではこれまで未実装でした。 この問題点をNuxtにてどのように解消するかについてを昨年の[Vue Fes Japan 2023のやまのく](https://vuefes.jp/2023/sessions/yamanoku)よりRoute Announcer相応のコンポーネントを作る方法を発表しました[^2]。 [^2]: 発表資料は[画面遷移から考えるNuxtアプリケーションをアクセシブルにする方法](https://yamanoku.net/vuefes-japan-2023/ja/)を参照ください。 ですが、この度Nuxt 3.12より[アクセシビリティの向上](https://nuxt.com/blog/v3-12#built-in-accessibility-improvements)の項目で `` コンポーネントと `useRouteAnnouncer` composables関数が導入されました。 - [`` · Nuxt Components](https://nuxt.com/docs/api/components/nuxt-route-announcer) - [useRouteAnnouncer · Nuxt Composables](https://nuxt.com/docs/api/composables/use-route-announcer) ## どのような挙動をしてくれるのか 初期インストールされたデフォルトの状態のままだと特に変化は見られないのですが、各ページにて `useHead` で `title` を指定することでその真価が発揮されます。 [![リンクをクリックしてページが切り替わっているがスクリーンリーダーにはなにも通知されていない](https://i.gyazo.com/bd67f964f7a2d4cdd7c577257aa74538.gif)](https://gyazo.com/bd67f964f7a2d4cdd7c577257aa74538) `title` がない状態だとページが切り替わっても特に変化がみられません。 [![aboutへのリンクをクリックして「About」、indexへのリンクをクリックして「Home」とスクリーンリーダーへ通知が届いている](https://i.gyazo.com/a21b5a1b491e64758219d44d3fbf1cfb.gif)](https://gyazo.com/a21b5a1b491e64758219d44d3fbf1cfb) ですが `title` を設定することで、ページが切り替わったあとにその内容が読み上げられるようになっています。 ## Route Announcerを構成するコンポーネントと関数 次にNuxt上で動くRoute Announcerを構成するコンポーネントとcomposables関数のそれぞれについてを紹介していきます。 ### `` スクリーンリーダーのために、ページタイトル要素を取得して通知するためのコンポーネントです。 Route Announcerコンポーネントです。Nuxt 3.12で初期インストールすると以下のように `app.vue` に導入されます。 ```html ``` 全体のレイアウトコンポーネントか、ページコンポーネントに設置して使います。 具体的な説明は [@splendente](https://zenn.dev/splendente) さんが紹介していますのでそちらをご参照ください。 [Nuxt v3.12 からは NuxtRouteAnnouncer でアクセシビリティ改善に取り組もう](https://zenn.dev/splendente/articles/nuxt-route-announcer-verification) ### `useRouteAnnouncer` ページタイトルの変更を監視し、それに応じてアナウンサーメッセージを更新するcomposables関数です。`` はこの関数を活用して組み立てられています。[Unhead](https://unhead.unjs.io/)の `dom:rendered` にフックして、ページのタイトルを読み取り、スクリーンリーダーへの通知される仕組みになっています。 3.12時点では `useRouteAnnouncer` がexportされておらず使えなかったのですが、[3.12.2](https://github.com/nuxt/nuxt/releases/tag/v3.12.2)でexportされる[修正](https://github.com/nuxt/nuxt/pull/27562)が入ったため、使用する際は3.12.2以降のNuxtを使用するようにしてください。 ```html ``` `useRouteAnnouncer` は引数に `politeness` を受取り、`off`(通知を切る)、`polite`(すべての通知が終わった後に通知する)、`assertive`(即座に通知する)のいずれかを設定できます。デフォルトの値は `polite` になっています。 `useRouteAnnouncer` からは以下プロパティやメソッドが利用できるようになります。 - `message` ... 読み上げられるメッセージ部分 - `politeness` ... スクリーンリーダーの読み上げ方法。`off`, `polite`, `assertive` が設定できます - `set(message, politeness = "polite")` ... messageとpolitenessを設定するメソッド - `polite(message)` ... politenessを `polite` に設定して `set()` を実行するメソッド - `assertive(message)` ... politenessを `assertive` に設定して `set()` を実行するメソッド すでにページコンポーネントにて `useHead` の `title` が設定されている場合、`set` メソッドや `message` 自体で上書きできないようになっているため、注意が必要です。動的な変更をする場合は `useHead` の `title` 側から変更してください。 ## Nuxtのアクセシビリティ向上への取り組み 今回導入された `` の取り組み以外にもアクセシビリティに関する機能を充実させるものが進められています。 ロードマップから、Nuxt内部にaxe-coreというアクセシビリティチェックツールのビルトインやナビゲーションにおけるフォーカス管理、スキップリンクの生成なども予定されています。 [Accessibility roadmap · Issue #23255 · nuxt/nuxt](https://github.com/nuxt/nuxt/issues/23255) ## まとめ この記事では、Nuxtのクライアントサイドルーティング時のアクセシビリティ課題を解消するための `` について紹介しました。 アクセシビリティ向上における開発者への負担軽減が期待されるので、ぜひ3.12.2以降にアップデートして使ってみてください。 --- ## 仲良くしなくていいけどリスペクトしたほうがいい https://archives.yamanoku.net/no-need-to-get-along-instead-respect-each-other/ ![人々が友好的でお互いを尊重し合っている様子を表現したアイコン](https://r2.sizu.me/users/2474/post-images/r8abcd9t3o0wrmwh1nkv.png) 題名で言いたいこと終わってる気がする。各位仲良くするな、各位リスペクトを持て。 皆が皆仲良くする必要はなくてお互いの境界線(パーソナルスペース)を下手に踏み込まないようにするのがいいんじゃないのかなと思ってる。だから社員は皆家族です!みたいなのはドン引きする。そんなことより一個人として扱ってくれよ。 もちろんビジネス上の付き合いで「仲良くしておく」っていう手段があると思うので、それはそれでやればいいと思う。自分が普段生きていく上では無理に仲良くする必要はないよな、というところ。 これは感覚値だけど仲良くするよりも相手に敬意をもって接する方が関係を築く上で気が楽な気がする。下手に親睦になろうとしなくていい。敵意はないよと伝えるだけでも十分だと思う。 とは書いてみたけど自分も自分以外の存在を尊重できているのかなーとか思い直す。ただ距離をとるだけのことは尊重ではなく、相手を知ってみた上で適切な距離を取るというのが大事だと思う。相手の境界線を知るために相手を知るという感じ。 --- ## 設計とは整理することではないだろうか https://archives.yamanoku.net/design-is-to-be-organized/ 最近、ソフトウェア開発における〇〇設計みたいなのは、単なる整理術だと思うようになってきた。 で、その整理術も「こんまりメソッド」みたいに独自の解法がそれぞれであってそれに適したモノや人がそれを使えばいいだけで全てにフィットするわけではない(ときめきってなんだよって人には向かなそう)。 なのでなんらかの設計が唯一の解だと思いこんでいるのはかなりマズそうだなーとか思うようになってきた。でもやってるとそれしか見えなくなっちゃうよね。わかるよ。 でもそれをやることはあくまでも手段のそれでしかなく、そんなことよりもそのソフトウェアが目指すべき・実現させたい世界観があるわけで。そこをおざなりにしてないかなというのが一番気にしていかないといけないところかな、とか。 結局のところどちらかに盲信的になるのはよくないのでバランスよくやっていきましょうね、というバランスおじさんでこの話はおしまいです。 --- ## 自戒シリーズ(2024-02-25) https://archives.yamanoku.net/jikai-series-2024-02-25/ 「時間があったら〇〇に取り組めるのに」っていうの一生来ないので、気になったら今すぐやれ --- ## 自戒シリーズ(2024-02-19) https://archives.yamanoku.net/jikai-series-2024-02-19/ 新しい趣味を始めようとして躊躇することがある。 いや「趣味」とまでは言わんけど、いつものルーチンから外れた別の何かをするのに億劫になってるといったほうが正しいのかも。 たとえば新しいアニメ見たりゲームをやったり読書したり競技プログラミングやってみたり運動してみたりとか、普段のことの延長線的なもの。ちなみに漫画に関してはKindleですぐ読めるのでそこだけはサクサクと実施できている気がする。 これは一日の動きが固定化されすぎててちょっと横道に逸れることに恐れがあるのがきっかけかもしれん。こいつ毎度クソ真面目ですね。 あとその反動なのか夜中に無駄にYouTubeで動画見続けてしてしまうこともあり、普段の時間をより大事にして、寝る前の時間を減らしていきたい所存です。 --- ## eslint-plugin-vuejs-accessibility入門 https://archives.yamanoku.net/eslint-plugin-vuejs-accessibility-introduction/ ## eslint-plugin-vuejs-accessibilityとは何か eslint-plugin-vuejs-accessibilityは、Vue.jsのコンポーネントにおけるアクセシビリティの問題点を検出するためのESLintプラグインです。 [vue-a11y/eslint-plugin-vuejs-accessibility: An eslint plugin for checking Vue.js files for accessibility](https://github.com/vue-a11y/eslint-plugin-vuejs-accessibility) 類似するものとして[eslint-plugin-jsx-a11y](https://www.npmjs.com/package/eslint-plugin-jsx-a11y)があります。これはReactのJSXにおけるアクセシビリティの問題を検出するためのESLintプラグインです。今あるルールはこのプラグインから参考になっている部分がいくつかあります。 ## eslint-plugin-vue-a11yとの違い 元々は個人で開発していたeslint-plugin-vue-a11yというものがあります。 [maranran/eslint-plugin-vue-a11y: Static AST checker for accessibility rules on elements in .vue](https://github.com/maranran/eslint-plugin-vue-a11y) こちらのeslint-plugin-vue-a11yは現在メンテナンスがされておりません。今回紹介するeslint-plugin-vuejs-accessibilityは[vue-a11y](https://github.com/vue-a11y)というOrganizationsにて現在メンテナンスされているのでこちらを使うことをお勧めします。 ## インストール それぞれのパッケージマネージャからインストールします。 ### npm ```shell npm install --save-dev eslint-plugin-vuejs-accessibility ``` ### yarn ```shell yarn add --dev eslint-plugin-vuejs-accessibility ``` ### pnpm ```shell pnpm add -D eslint-plugin-vuejs-accessibility ``` ## 設定 ESLintの設定から以下のように追加します。 ### Flat Config(ESLint v9以降) `eslint.config.js` ファイルに以下のように追加します。 ```javascript import pluginVueA11y from 'eslint-plugin-vuejs-accessibility'; export default [ ...pluginVueA11y.configs['flat/recommended'], { rules: { // 個別でオーバーライドしたいルールは以下のように設定できます。 'vuejs-accessibility/alt-text': 'warn', }, }, ]; ``` ### ESLint v9以前 `.eslintrc.*` ファイルに以下のように追加します。 ```javascript { plugins: [ 'vuejs-accessibility' ], } ``` 適応したいルールを個別で設定できます。 ```javascript { rules: { 'vuejs-accessibility/label-has-for': 'error', // ... } } ``` 個別指定ではなく、`extends` より推奨となっているルールをまとめて使うこともできます。 ```javascript { extends: [ 'plugin:vuejs-accessibility/recommended' ], } ``` 推奨となっているルールは[Rule Overview](https://vue-a11y.github.io/eslint-plugin-vuejs-accessibility/rule-overview/)より確認できます。 ## ルールについての説明 それぞれのルールについて簡単に説明します。 ### alt-text 代替テキストを必要とするすべての要素に必要な属性が設定されていることを確認します。 > [alt-text | eslint-plugin-vuejs-a11y](https://vue-a11y.github.io/eslint-plugin-vuejs-accessibility/rules/alt-text.html) ### anchor-has-content `` 要素がコンテンツを持っていることを確認します。 > [anchor-has-content | eslint-plugin-vuejs-a11y](https://vue-a11y.github.io/eslint-plugin-vuejs-accessibility/rules/anchor-has-content.html) ### aria-props 存在する正しいARIA属性で設定されていることを確認します。 > [aria-props | eslint-plugin-vuejs-a11y](https://vue-a11y.github.io/eslint-plugin-vuejs-accessibility/rules/aria-props.html) ### aria-role 存在する正しい `role` 属性で設定されていることを確認します。 > [aria-role | eslint-plugin-vuejs-a11y](https://vue-a11y.github.io/eslint-plugin-vuejs-accessibility/rules/aria-role.html) ### aria-unsupported-elements ARIA属性をサポートされていない要素にARIA属性が設定されていないことを確認します。 > [aria-unsupported-elements | eslint-plugin-vuejs-a11y](https://vue-a11y.github.io/eslint-plugin-vuejs-accessibility/rules/aria-unsupported-elements.html) ### click-events-have-key-events `@click` イベントを指定する要素は、同様に `@keyup` 、`@keydown`、`@keypress` のいずれかのイベントを指定されていることを確認します。 > [click-events-have-key-events | eslint-plugin-vuejs-a11y](https://vue-a11y.github.io/eslint-plugin-vuejs-accessibility/rules/click-events-have-key-events.html) ### form-control-has-label フォーム要素が対応する `
`)要素がコンテンツを持っていることを確認します。 > [heading-has-content | eslint-plugin-vuejs-a11y](https://vue-a11y.github.io/eslint-plugin-vuejs-accessibility/rules/heading-has-content.html) ### iframe-has-title ` ### Vue Fes Japan 2023スポンサー&登壇 日本最大級のVue.jsカンファレンス「Vue Fes Japan 2023」が今年オフラインで開催されました。今年は株式会社クラウドワークスが同時通訳スポンサーとして協賛し、社員3名が登壇しました。ボランティアスタッフと一般参加者を含めて合計6名がイベントに参加しました。 ![クリエイティブウォールにクラウドワークスのロゴが書かれており、当日参加した社員でそのマークを指さしながら記念撮影している様子](https://i.gyazo.com/973927111c8fd906e32466266f98b2e8.png) 以前、2019年のカンファレンスにてスポンサー協賛していたことがありましたが、台風のため中止となりました。その後のコロナ禍という長い期間を経て、4年ぶりに再びオフラインカンファレンスにてスポンサーとして参加できたのは大変感慨深い経験でした。 当日の参加レポートは以下の記事でまとめていますので、ご覧ください。 [Vue Fes Japan 2023 参加レポート](./report-vue-fes-japan-2023) ### その他フロントエンド改善ピックアップ - Vueコンポーネントの ` ``` ## Vue Fes Japan Online 2022 を終えて 全体のカンファレンスの構成として Vue2 から Vue3 への次期バージョンに追従していくための取り組みや、フロントエンド開発戦略や Tips、Vue.js にまつわるライブラリ群の紹介と、これからの Vue.js 開発のキャッチアップのセッションたちだったなと思いました。 クラウドワークスでは [Vue2 から Vue3 の移行を終えている](/migration-from-vue2-to-vue3)のですが、コンポーネント数が多かったりや実装難易度が高いものがあった可能性を考えると、各社での移行作業も他人事のことのようには思えないと感じながら拝見していました。 今回の Vue Fes Japan は全編オンラインにて開催ということで、オフラインとはまた違った難しさがあったと思われますが、滞りなく進行いたのも素晴らしかったです。運営スタッフの皆様、ありがとうございました。 弊社からも参加していたエンジニアも学びがあったようで、開発のモチベーションが上がっていました。 11/2(水)には今回のカンファレンスで不採択となってしまったセッションを聴講できる [Reject Conference](https://vuejs-meetup.connpass.com/event/259621/) もあるとのことで、こちらも楽しみにしています。 --- また、[過去のブログ記事](https://engineer.crowdworks.jp/entry/give-a-talk-vue-fes-japan-online-2022)でもお伝えしておりましたが、弊社からは2名がセッションにて発表することができました。 現在の技術的負債解消の取り組みやアクセシビリティへの取り組みなど、皆さまの開発の参考になれれば幸いです。それぞれの発表資料は以下よりご覧になれます。 **負債が溜まったレガシーフロントエンド画面を Vue.js でリプレイスした話** [Speaker Deck](https://speakerdeck.com/t0yohei/fu-zhai-galiu-matutaregasihurontoendohua-mian-wo-vue-dot-js-deripureisusitahua) **Vue.js でアクセシブルなコンポーネントをつくるために** [Speaker Deck](https://speakerdeck.com/yamanoku/to-make-accessible-components-in-vuejs) ここまでご覧頂きありがとうございました。来年の Vue Fes Japan も楽しみにしています! --- ## Vue Fes Japan Online 2022 にクラウドワークスのエンジニアが登壇します https://archives.yamanoku.net/give-a-talk-vue-fes-japan-online-2022/ ![アイキャッチ:Vue Fes Japan Online 2022 にクラウドワークスのエンジニアが登壇します](https://i.gyazo.com/3c862280e2db44953d9bdd134727a69c.png) ## Vue Fes Japan とは Vue Fes Japan は Vue.js 日本ユーザーグループが主催する日本最大の Vue.js カンファレンスです。 ![Vue Fes Japan Online 2022 TOPページのスクリーンショット](https://i.gyazo.com/6770e56503aa4cd48e3bbd2b39382a2c.png) 日本における Vue.js 開発者たちによる発表や、 Evan You といった Vue.js コアコントリビューターの方たちも登壇されます。 今回、2018年に開催されてから4年ぶりにオンラインで開催されることになりました。 [Vue Fes Japan Online 2022](https://vuefes.jp/2022/) ## 登壇情報 弊社からはクラウドワークスエンジニアの [@t0yohei](https://twitter.com/t0yohei) と [@yamanoku](https://twitter.com/yamanoku) がそれぞれ登壇いたします。 ### 負債が溜まったレガシーフロントエンド画面を Vue.js でリプレイスした話 ![t0yohei](https://i.gyazo.com/508e059cf72ddd47e24e3c39743419b0.png) > とある Rails のテンプレート + CoffeeScript で構築された画面を、 Vue.js でリプレイスしました。 > その際の知見を、具体的な工夫や悩んだポイント、実際の遭遇した技術的負債の話を交えて共有できればと思います。 > 本セッションのキーワードは以下になります。 > > - Vue3 の script setup + TypeScript に始まる開発体験の良さ > - Container Component、Layout Component などの開発プラクティス > - Storybook、 StoryShots(VRT) によるフロントエンド DX > - あるべき姿に至るまでの長い道のりと取捨選択 > - 命令的 UI から宣言的 UI へのパラダイムの変更 > - Ajax のリクエストを送ると、json にシリアライズされた html が帰ってくる API のエンドポイント > - 忍耐力 メドピアトラック(13:30 - 13:50)にて発表 [負債が溜まったレガシーフロントエンド画面を Vue.js でリプレイスした話(とよへい) | Vue Fes Japan Online 2022](https://vuefes.jp/2022/sessions/t0yohei) ### Vue.js でアクセシブルなコンポーネントをつくるために ![yamanoku](https://i.gyazo.com/21118cf76bce9194a2312bcb237b00f7.png) > 昨今 Web 開発において、アクセシビリティを重視することはそれほど珍しくなくなってきました。 > > 最新の Vue.js 公式ドキュメントでもアクセシビリティに関する項目が追加されました。 > > しかしながらアクセシビリティ対応に関しては、間違った知識のままはじめるとアクセシブルでなくなる可能性もあります。 > > この発表ではそうした間違いや疑問を解消し Vue.js でのアクセシビリティ向上に取り組みやすくするやり方を発表いたします。 FUTURE トラック(13:55 - 14:15)にて発表 [Vue.js でアクセシブルなコンポーネントをつくるために(やまのく) | Vue Fes Japan Online 2022](https://vuefes.jp/2022/sessions/yamanoku) ## おわりに 2018年にカンファレンスが開催されてからの間に Vue3 がリリースされたり Vue.js にまつわる OSS においても様々な変化がありました。 [クラウドワークスにおいても Vue3 に移行し](/migration-from-vue2-to-vue3)、Composition API や `script setup` を活用してフロントエンド開発しています。私たちからはそうした経験談や知見といったものを通じて Vue.js コミュニティに還元していければと思っております。 その他の登壇者の発表やスポンサーセッションもそれぞれ興味深い内容がたくさんあります。 当日は是非ご参加ください。 [Vue Fes Japan Online 2022](https://vuefes.jp/2022/) --- ## GAAD Japan 2022 でスポンサー協賛と LT をしてきました https://archives.yamanoku.net/gaad-japan-2022/ ![アイキャッチ:GAAD Japan 2022 でスポンサー協賛とLTをしてきました](https://i.gyazo.com/9394a2746d69b18fcdc0db6ffa193f23.png) こんにちは。[@okuto_oyama](https://twitter.com/okuto_oyama)です。 今回は 5 月 19 日に開催された [GAAD Japan 2022](https://www.gaad.jp/) にて[株式会社クラウドワークス](https://crowdworks.co.jp/)(以下、弊社)としてスポンサー協賛させて頂くとともに LT という形で発表してきましたので、その振り返り記事になります。 ## GAAD Japan について [GAAD](https://accessibility.day/)(Global Accessibility Awareness Day)は毎年 5 月の第 3 木曜日にデジタル分野(Web、ソフトウェア、モバイルなど)のアクセシビリティを考える日です。 [Joe Devon 氏のブログ](https://mysqltalk.wordpress.com/2011/11/27/challenge-accessibility-know-how-needs-to-go-mainstream-with-developers-now/)記事がきっかけとなり、2012 年から始まった世界的な取り組みです。 GAAD の日は世界各地でアクセシビリティに関連するイベントが開催されており、日本でも 2020 年から GAAD Japan というオンラインセミナーイベントとして有志で運営されております。 ## なぜスポンサー協賛したのか 弊社の[ビジョン](https://crowdworks.co.jp/company/mission/)には「世界で最もたくさんの人に報酬を届ける会社になる」というものがあります。 この中で「オンライン就業インフラを創造する」という目標があり、インフラ、すなわち社会基盤の構築を目指すにあたり、あらゆる人が利用できるようになる必要があると解釈しています。 あらゆる人が利用できるようになるためには、あらゆる人がアクセスできるようにするアクセシビリティの考え方が必要であり、それを取り入れたプロダクトを作っていくことが自明だと考えております。 また、弊社は昨年で創立 10 周年を迎え、新たなるミッション「個のためのインフラになる」を掲げています。 [クラウドワークス、創立10周年の節目にミッションを変更し新たな事業展開へ ~新ミッション「個のためのインフラになる」~ | ニュース | 株式会社クラウドワークス](https://crowdworks.co.jp/news/vprw11ts9c/) あらゆる個人が参加して、個人の得意領域を活かして個人や社会の収益に貢献できるプラットフォームを作っていきたいと思っており、こうした多様な人たちが活動できる場をつくるのは Web がもつ力そのものではないかとも解釈しております。 > The power of the Web is in its universality. Access by everyone regardless of disability is an essential aspect. > > [Press Release: W3C Launches International Program Office for WAI](https://www.w3.org/Press/IPO-announce) そうした弊社のミッション・ビジョンとアクセシビリティの考え方をより関係させていくために、今回スポンサー協賛いたしました。 スポンサー LT という機会もいただけたので、有志での取り組みを社内外にデンタツ[^1]していき、これからのアクセシビリティ対応をより活性化させていきたいとも思っております。 [^1]: 弊社の仕事の進め方の1つ。結果を出しただけでは誰にも届かないため、その結果を相手に伝えて初めて評価を受けるようにすること。 ## 発表資料 ### 関連記事 以下は発表資料で参考にした関連記事になります。 #### 普及活動について - [アクセシビリティを向上していくために出来ることから進めていく活動|みーた|note](https://note.com/earlgray_mk/n/n159046bd58e7) - [アクセシビリティを向上していくために出来ることから進めてみた! ~2019まとめ~ - Speaker Deck](https://speakerdeck.com/mikimhk/akusesihiriteiwoxiang-shang-siteikutamenichu-lai-rukotokarajin-metemita-2019matome) - [クラウドワークス #accessibility チャンネル 気になる話題 Pickup 2020](https://zenn.dev/yamanoku/scraps/443087a170fcbe) - [クラウドワークス #accessibility チャンネル で気になった話題 Pickup 2021年1〜6月編](https://zenn.dev/yamanoku/scraps/6e4f4d5ed7563a) - [クラウドワークス #accessibility チャンネル で気になった話題 Pickup 2021年1〜6月編](https://zenn.dev/yamanoku/scraps/6e4f4d5ed7563a) #### 取り組み事例について - [クラウドワークスのWebアクセシビリティチェックを始めてみた - クラウドワークス エンジニアブログ](https://engineer.crowdworks.jp/entry/product_accessibility_check) - [生まれ変わったログインページにまつわるフロントエンド開発の話 - クラウドワークス エンジニアブログ](https://engineer.crowdworks.jp/entry/renewal-login) - [トップページリニューアルのために見直した4つのこと。|ハラ|note](https://note.com/haraharam/n/n59c14f76a76c#89d28935-a965-40d3-a0b6-e54908979cbd) - [「One CrowdWorks」で、コーポレートサイトをフルリニューアルした話。|Peter|note](https://note.com/contrabass/n/nf7931eb0c905#T0CYf) - [アクセシビリティ啓蒙活動は旗を振り続ければいつのまにか誰かが付いてきてくれる。 | by miki hayashi a.k.a miita | Medium](https://medium.com/@earlgraymk/%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B7%E3%83%93%E3%83%AA%E3%83%86%E3%82%A3%E5%95%93%E8%92%99%E6%B4%BB%E5%8B%95%E3%81%AF%E6%97%97%E3%82%92%E6%8C%AF%E3%82%8A%E7%B6%9A%E3%81%91%E3%82%8C%E3%81%B0%E3%81%84%E3%81%A4%E3%81%AE%E3%81%BE%E3%81%AB%E3%81%8B%E8%AA%B0%E3%81%8B%E3%81%8C%E4%BB%98%E3%81%84%E3%81%A6%E3%81%8D%E3%81%A6%E3%81%8F%E3%82%8C%E3%82%8B-ed4c5ed5db06) - [ユーザーの性別選択はなぜ必要なのか 〜サービス価値を考える〜|みーた|note](https://note.com/earlgray_mk/n/n07ab8ab4178e) ## 発表動画(2022/12/12 追記) ## おわりに GAAD Japan 実行委員会ならびにイベント関係者の皆様、お疲れさまでした。 9:45〜20:00 の長丁場でしたが、各セッションを楽しむことが出来ました。 当日の各セッションごとでの様子は [togetter](https://togetter.com/li/1889734) にてまとめられておりますので、併せてご覧ください。 来年以降もまた開催されるのであれば、何らかの成果を出して発表ができればと考えております。 そして、私たちのように社内での取り組みを発表して、次の自信につなげたい企業が増えていけばいいなとも思っております。 手前味噌ですが、各社のアクセシビリティの取り組みについてをまとめているリポジトリを公開しております。 基本的に私が更新していますが「この取り組みを載せてほしい」というのがあれば是非 [@okuto_oyama](https://twitter.com/okuto_oyama) までご連絡ください。 [yamanoku/awesome-japanese-a11y-companies: アクセシビリティに取り組む・推進している日本企業まとめ(随時更新)](https://github.com/yamanoku/awesome-japanese-a11y-companies) また、登壇ほか字幕配信にもご協力いただいた Shamrock Records 株式会社の青木さんに感謝申し上げます。 UD トークを通じてリアルタイム字幕を提供できたほか、自身が開発された[字幕エディター](https://tools.udtalk.jp/jimakueditor)にて、自分の発表動画の字幕編集を簡単に行うことが出来ました。 花王さんの事例のように、各企業の字幕提供も進んでいくといいなと思っております。 ![スクリーンショット:字幕エディター for YouTube を使用して弊社のスポンサーLT動画の字幕編集をしている](https://i.gyazo.com/d36d98cb3aa6467f5d4b4c1c8212d2ed.png) --- ## 「HTML解体新書」HTMLのこれからと向き合うための本 https://archives.yamanoku.net/review-html-anatomische-tabell-book/ ![アイキャッチ:「HTML解体新書」HTMLのこれからと向き合うための本](https://i.gyazo.com/698948150ac17400939194914527cf69.png) 「HTML の前提についてはざっと知った、ステップアップできる HTML の勉強がしたい」「人に勧められる HTML にまつわる書籍はあるだろうか」「令和で HTML を学ぶならこの 1 冊、というものがほしい」―――そうした人々のニーズを叶えてくれる書籍が販売された。 その名も「HTML 解体新書」だ。 本ブログ記事は、レビュアーとして関わり本書を読んだ[@okuto_oyama](https://twitter.com/okuto_oyama)による感想と、HTML のこれからについて考えていることをまとめたものである。 本の内容については、著者によるブログ記事にまとまってあるのでそちらを参考にしてもらいたい。 [書籍「HTML 解体新書」、満を持してついに登場 - 弁護士ドットコム株式会社 Creators’ blog](https://creators.bengo4.com/entry/2022/04/04/120000) ## まだまだ HTML について知らないことがあった 私が HTML について始めて触れたのは、とあるブログサービスの HTML 編集機能からだ。その頃は HTML の仕様というものを知る由もなく、どういったタグを使うと画面上にどのように表示されるのかを試しながら知るだけだった。 より HTML と真剣に向き合うようになったのはマークアップエンジニアとして受託開発で仕事をし始めた 2015 年 9 月からである。 HTML については独学であったところをレビューで指摘されたり、HTML チェッカーを使用することで 1 つずつタグの重要性を理解していった。その後[Japan Accessibility Conference](https://japan-a11y-conf.com/vol1/)でアクセシビリティについて学び、HTML を正しく書くことがあらゆる人の恩恵になることを知って、どんどん好きになっていった。 その後クラウドワークスに転職して、フロントエンド開発全般における技術的負債の解消活動をするようになった現在でも HTML は構文エラーなく書くように意識したり社内コーディングチェック書の策定に関わったり、markuplint の導入[^1]など HTML とは様々な形で付き合い続けている。 そういった関わりをもっていても、HTML 解体新書を眺めていると HTML のマークアップルールや仕様についてまだ知らなかったことが多かったのだと気付かされたのだ。 HTML 要素の属性で廃止となった部分についてや、特に文字参照や「2-8 HTML の細かい構文ルール」については、ほとんど知らないことばかりだった。コラムも読み応えがあるものばかりである。 HTML 解体新書では、ルールとして守らないといけない理由や、誤ったマークアップ例について紹介してくれる。こういった知らなかったことを学べるだけでなく、ばらばらであったチーム内の HTML に関する認識そろえにも一役買ってくれるはずだ。 ## HTML を勉強する機会はどこにあるのか HTML 解体新書の書籍紹介では以下のように書かれている。 > Web 制作の初心者に向けた「HTML5+CSS3 でサイトを作ろう」といった内容の書籍は多数出版されています。しかし、それらを卒業し、2 冊目となるような、より深く「HTML」を学習できる書籍はあまりありません。 私はふと疑問に感じたことがある。それは*HTML がどういうものだと認知されている*のか。そして、*HTML を「勉強する」機会はあるのか*と。 たとえば `

` といったセクションにおける見出しにまつわる要素。HTML 文書の構造を決めるための大切な要素ではある。しかしこの要素をスタイル目的、すなわち文字の太さや大きさのために使用する、といった誤った使い方をされているのをたまに見かける。 こうした誤りは HTML で使用される各要素がどういった意図をもって、どういう用途で使用されているのかを知っていれば起きない問題である。そして起きた問題は訂正されていくべきである。 だが、それを訂正できる機会はあるだろうか。軌道修正はどこでされるのだろうか。 またフロントエンド開発においては、サーバー言語によるテンプレートエンジンや React や Vue.js、Svelte 等を活用して HTML を書くことがある。これらは開発効率性を上げるために活用していければと思っているのだが、一方で HTML そのものと向き合うことから離れているように感じる。 過去出版された神崎正英先生の「ユニバーサル HTML/XHTML」では単に HTML の話のみだけでなく、情報をどう表現していくか、Web にまつわる周辺技術についても紹介している。情報設計については今でも学ぶべき点が多い書籍ではあるのだが、現代の Web 開発において古くなってしまった内容もいくつか見受けられる。 [ユニバーサル HTML/XHTML | 神崎 正英 |本 | 通販 | Amazon](https://www.amazon.co.jp/gp/product/4839904545/) 近年こうした HTML を対象とした技術書がなかったことで、HTML を議論することから離れていってしまったのではないか、と私は思っている(あくまで 1 つの要因として)。 HTML 解体新書はそうした問題に一石を投じる、改めて HTML の重要性を見直すきっかけを与えてくれる書籍になるのではないかと期待している。 ## 生きている仕様との橋渡しとして かつて HTML の仕様は W3C と WHATWG というそれぞれの団体で並立して存在していた状態だった。その後二転三転あり現在は WHATWG の仕様として一本化された。 [W3C 発行の HTML がすべて廃止された日 | フロントエンド Blog | ミツエーリンクス](https://www.mitsue.co.jp/knowledge/blog/frontend/202102/08_0910.html) WHATWG が策定する仕様は「Living Standard」という常に変更される可能性を持つもので、[GitHub](https://github.com/whatwg)で仕様にまつわる議論や変更点など確認できるようになっている。 仕様がその名の通り「Living Standard」であることを実感したのは、3 月 24 日に `hidden` 値が真偽値から列挙型への変更されたことがあげられる。初版発行時点でさっそく仕様との差分ができてしまったのだ。 [Proposal: beforematch event and hidden=until-found attribute · Issue #6040 · whatwg/html](https://github.com/whatwg/html/issues/6040) ※日本語での解説記事:[HTML の hidden 属性が列挙型に変更され hidden="until-found" が追加](https://blog.w0s.jp/664) Web 開発に従事している限り、こうした変化は起こりうるものとして言語仕様とブラウザ上でどう扱われるかということを常に確認できるようにしておく必要がある。それはこの業界に携わる皆の責務である。 しかしそれはあくまでも理想としての話だ。そもそも日々のフロントエンド開発を続けていく中で言語仕様をウォッチし続けられている人はあなたの周りにどれくらいいるだろうか[^2]。 本書の帯には「『仕様書を読め!』と上司に言われたら、真っ先に読む本!」と書かれている。*こういった上司が本当に存在するかは置いておくが、*仕様を読むことをいきなり要求されることはハードルとしてとても高い。私も HTML 仕様書の読み方について人に教えられる自信がない。 HTML 解体新書では、第 1 章「技術情報との関わり方」にて仕様の読み方・付き合い方についても解説している。[HTML 解体新書出版記念イベント](https://connpass.com/event/242592/)にて著者である[太田さん](https://twitter.com/bakera)は「この本は(仕様との)橋渡しである」と称されていた。まさにそのとおりだと感じた。 私が知る限り、ここまで懇切丁寧な本はないと思っている。仕様書を読むことが不慣れだったり、苦手意識をもっている人にも読んでもらいたい。 ## HTML を発展させたいから、WAI-ARIA も使いたい 最近は各企業でアクセシビリティの重要性が高まりつつあり、フロントエンド開発でもそれを意識した実装をできることが 1 つの差別化となってきている。 出版記念イベントにて「隙あらばアクセシビリティの話が入っている」と話されていたが、実際に各 HTML 要素についての「アクセシビリティ上の注意点」が書かれている。この要素はアクセシビリティの観点でどういった影響を与えるのかが一緒に学べる形となっている[^3]。 また関連する技術としての WAI-ARIA についても、どういった属性があるのか、実践としてどういった形で書くのかがまとめられている。アクセシブルな UI 実装に不安を覚えている人は、ぜひ参照してもらいたい。 --- 話は変わるのだが、私は以前社外の勉強会にて「HTML の限界」について感じたことを発表した。 [HTML だけで UI を作る限界、あるいは無理なくユースケースと向き合っていくためには - Google スライド](https://docs.google.com/presentation/d/e/2PACX-1vRfZCfZpjvKndrrHZYH4QQsMM8JwcRYCbYlgeIaJxEQdvz5BbWFx2pKv2ctZ1KT8CTztpC-hR1n6vIO/pub) Web 上で表現されるものが静的な情報サイトなだけではなく、アプリケーションとしての可能性も見いだされるようになってきた現在、HTML ですべてを表現することの難しさを感じてきている。そうした現状を見て私は*WAI-ARIA に委ねてみる可能性もあるのではないか*と説いた。 ### 見出しコンポーネントから汎用性を考える HTML 解体新書の帯にも紹介されているように「WAI-ARIA のポイントは WAI-ARIA を使わないこと!」とあるように、下手に WAI-ARIA を使うことはアクセシブルであることを損ねてしまう。 これは紛れもない事実だが、一方で汎用性のあるコンポーネント設計をする際に純粋な HTML 要素を設置すると、文書内での使われ方に矛盾が生じたり変更しづらくなる可能性がある。 ```html ``` Vue.js において、このような見出しコンポーネントがあるときに、`

` の用途だけで使うのを徹底してもらえればそれでよい。しかしそれと同時に汎用性に欠けるコンポーネントでもある。 ```html ``` ここからより汎用性を高めたい場合、上記例のような記述が可能である。HTML としての確からしさを保証しつつ、汎用的なコンポーネントとして使えるようになった。 ### WAI-ARIA を使用して UI としての責務を分割する 私はそこからより発展させて、WAI-ARIA と併せて実装することを提案したい。 ```html ``` 先にこの手法の欠点についてを紹介する。 - WAI-ARIA 上のルールを守らねばならない - 属性によっては併用して使えないパターンもある - マシンリーダブル観点で共通の情報として保証できるかの確かさがない - スクリーンリーダーで読み上げてくれない場合もある[^4] - HTML 要素だけで保証できるネイティブな挙動を考慮しないといけない - [`role=”button”` の場合の考慮について](https://zenn.dev/yamanoku/articles/c69decedfb1699#%E3%82%BB%E3%83%9E%E3%83%B3%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E3%81%A7%E3%81%82%E3%82%8B%E3%81%93%E3%81%A8%E3%81%AF%E3%80%8C%E3%81%84%E3%82%89%E3%81%AA%E3%81%84%E3%80%8D%E8%80%83%E6%85%AE%E3%82%92%E6%B8%9B%E3%82%89%E3%81%97%E3%81%A6%E3%81%8F%E3%82%8C%E3%82%8B) 一方で利点もある。 - HTML 要素のユーザーエージェントスタイルシートを考慮しなくて済む - コンポーネントとしての必要な情報を抽象化して考えられる - 例ではタグに変換する処理を挟まず、Number props だけで見出しレベルを調整できる - WAI-ARIA 属性を抽出してテストケースとして活かすことができる - 参考:[アクセシビリティ情報を使った壊れにくい E2E テスト | フューチャー技術ブログ](https://future-architect.github.io/articles/20210226/) こうした利点を活かしたものが[Headless UI](https://headlessui.dev/)だと私は解釈している。 WAI-ARIA は HTML によって表現しきれない部分を補う存在である。HTML だけで完結できる状況ならば、それを使うに越したことはない。 ただ、そこを超えた新たなアクセシブルなユースケースを模索していくためにも WAI-ARIA の発展に寄与していきたいと思っている。そのことが HTML の進化に繋がっていくことを期待しているからだ。 ## おわりに HTML 解体新書は、とある界隈において「ジャスティス本」として期待されていた本で、5 年もの歳月を経てついに販売された。 私も最初はいち読者として心待ちにしていたが、[太田さん](https://twitter.com/bakera)にお声がけいただきレビュアーとして参加した。出版記念イベントでも座談会メンバーとして登壇させてもらい、この本に関わった人たちの熱意についても知ることができた。 著者である[もんどさん](https://twitter.com/momdo_)、[太田さん](https://twitter.com/bakera)の二人にはこの本を書き上げてくれたこと、そしてレビュアーとして貴重な経験をさせてもらったことに改めて感謝申し上げたい。 HTML 解体新書をきっかけに、国内における HTML や Web 開発にまつわる議論がより盛り上がってくれることを願ってこの記事の結びとする。 [HTML 解体新書-仕様から紐解く本格入門 | 太田 良典, 中村 直樹 |本 | 通販 | Amazon](https://www.amazon.co.jp/dp/4862465277) ※電子書籍(PDF)版は[ボーンデジタル社サイト](https://www.borndigital.co.jp/book/26006.html)からお買い求めできます。 [^1]: [markuplint をプロダクトに導入してみた - クラウドワークス エンジニアブログ](https://engineer.crowdworks.jp/entry/using-markuplint) [^2]: 偶然にも私の周囲の人はそういう人が多いのだが、珍しい状態だと思いたい。 [^3]: MDN Web Docs にも「アクセシビリティの考慮」セクションでまとめられている。 [^4]: 仕様上は可能であっても、主要ブラウザおよび支援技術でサポートされていない場合がある。詳しくは[アクセシビリティ サポーテッド(AS)情報](https://waic.jp/guideline/as/)を参照されたし。 --- ## Vue2 から Vue3 に移行完了しました! https://archives.yamanoku.net/migration-from-vue2-to-vue3/ ![アイキャッチ:Vue2 から Vue3 に移行完了しました!](https://i.gyazo.com/f37e1f4b21bab6bd8a9d0a0f2ff09fa5.png) ## はじめに こんにちは、クラウドワークス ジャンヌチームの[@bugfire](https://qiita.com/bugfire)、[@okuto_oyama](https://twitter.com/okuto_oyama)、[@yizknn](https://qiita.com/yizknn)です。 ジャンヌチームはクラウドワークスの負債を管理下に置くことがミッションのチームです。
問題の大きさに合わせて、直接解決する場合や、他チームと連動したりこちらから依頼することもあります。 弊社のアドベントカレンダー「[クラウドワークスの​フロントエンド活動を​振り返る​ 2021](./looking-back-at-crowdworks-front-end-activities-2021)」の記事で触れていた Vue 3 移行が完了したので、その報告になります。 [https://twitter.com/vuejs/status/1484160249686749191](https://twitter.com/vuejs/status/1484160249686749191) 2022 年 2 月 7 日から、Vue.js のデフォルトバージョンが ver.3 になりましたね!
ver.3 になって進化した Vue.js を味わい尽くしたいです。 Vue 2 からオプションで利用できる Composition API は書いていて気持ちよく、Vue 3 化をおこなうことで `script setup` による `defineProps()`, `defineEmits()` も使うことができるようになります。よりシンプルで型付けされた Vue.js を記述できるようになり、期待は高まります! このあたり Vue 3 に関する全体的な知識の底上げは [@t0yohei](https://qiita.com/t0yohei) による自発的な勉強会の開催などの影響が大きいです。ありがとうございました! ## 背景 クラウドワークスでは以下のように Vue.js を利用してきました。 | 年 | やったこと | | ------- | --------------------------- | | 2015 年 | Vue.js 0.12.10 の利用を開始 | | 2016 年 | Vue.js 1.x に移行 | | 2018 年 | Vue.js 2.x に移行 | ちょっと間があいてしまいましたね。 Vue 3 への移行は 2021 年 7 月に検討が始まっていました。 負債解消の一部として EOL 対応することはよくありますが、変更するならより良いものに置き換えていきたいです。 Vue 3 は幸い周辺の準備も整いつつあり、新たに利用できる機能も素晴らしいものです。 ## 移行方法 実際に移行をおこなった方法を説明します。
クラウドワークスの実装に由来する問題にもいくつか直面しましたが、一般的ではない話なので割愛して、かいつまんでの説明になります。 ### Storybook 駆動移行 ![スクリーンショット:Storybook 公式サイト TOP ページ](https://i.gyazo.com/b7e0722a37dd53e5cde9f12534987379.png) クラウドワークスでは通常の Webpacker ビルド環境と Storybook ビルド環境は分かれています。
この構成を利用し、Storybook 環境と、Storybook Vue 3 環境を同時に作成してメンテすることにしました。 クラウドワークスの Production 環境は Vue 2 で実行し、Storybook 上では同じコードを Vue 2 と Vue 3 の両方で動作を確認します。 この方法は [VueDemi](https://github.com/vueuse/vue-demi) を参考にしました。 クラウドワークスでは、`@` を JavaScript のルートディレクトリに alias していますが、これに加えて `~` を移行層に alias しました。alias 先をビルド環境によって分けています。 移行層では以下のように対応して、同じコードでどちらの環境でも動作するようにしました。 - `defineComponent`, `PropType` などを以下のように実装をわけています - Vue 2 環境では `@vue/composition-api` から export - Vue 3 環境では `vue` から export - Vue.js の mount 部分の抽象化レイヤー([Migration guide - new global mounting API](https://v3-migration.vuejs.org/breaking-changes/global-api.html#a-new-global-api-createapp)) - 呼び出し側では DOM とレンダリングする Component, props だけ指定 ### Storybook の作成 Storybook はクラウドワークスでは昨年より導入されたこともあり、定義のない Vue.js コンポーネントも大量にありました。ここで移行のために全ファイルで対応する方針を取りました。 対応すべき 250 ファイルをスプレッドシートで管理し、ひとつひとつ確認をして移行していきました。 ![スクリーンショット:Vue 3 移行作業のスプレッドシート](https://i.gyazo.com/794fb3b1f890a8f1806f87855081b435.png) 少なくとも Vue 3 の Storybook でコンポーネントが表示されているなら、動作は可能という最低限の担保ができます。 ![スクリーンショット:ログインページの Storybook が表示されている](https://i.gyazo.com/46a88b847feabbb8fdaa2789d13969e4.png) ### ファイルを1つずつ対応 基本的に `new Vue()` している部分を `defineComponent()` に変更するだけで Options API のまま動作します。Composition API に書き換えたくなりウズウズしますが、そこは我慢です。 ただし、いくつかの互換性のない部分があり、変更を加えていきます。 [https://github.com/vuejs/core/tree/main/packages/vue-compat#upgrade-workflow](https://github.com/vuejs/core/tree/4e028b966991937c83fb2529973fd3d41080bb61/packages/vue-compat#upgrade-workflow) - フィルタ(パイプ演算子)の使用を廃止 - `emits` へカスタムイベントを定義 - style の `* > *` スタイル指定時の崩れの対応 - 子要素へのスタイル指定がうまくいかない問題 - `v-bind.sync` の置き換え対応 - VueRouter の対応 - MPA であることもあり、さほど意味のある使い方をしていなかった - 使わないように変更 - マウント部分の差 - Vue 3 では下の階層に DOM を生成するので CSS に影響を与える場合の修正 Storybook や Vue 2 環境での実行を通じ、ひとつひとつ確認しながら移行しました。 ### Vue 3 への変更 上の準備を全て済ませた後で、Storybook 以外の部分も Vue 3 を利用するように変更して試していきます。 主な対応部分は下記通りです。 - package.json の変更 - テスト関連 - `@vue/test-utils` の createLocalVue から Composition API を `use()` するところ、`shallowMount()` からの localVue の削除。 - `Vue.nextTick()` ではなく `nextTick()` の named import へ変更 - Storyshot の差を減らすために Promise の消化を多く実施 テストは盲点で API などが切り替わったことに気がついていなかったので、慌てて対応しました。 ## プロダクションリリース後の修正 Vue 3 に置き換え対応ができた!プロダクションリリースされて無事終わった!と思っていたのですが、いくつか修正が必要な箇所も発見されました。 ### VueMeta すでに [Issue](https://github.com/nuxt/vue-meta/issues/696) に取り上げられていますが、meta の name が `meta` になることがあります。
これが原因で viewport に正しい値を設定できず、スマートフォンから閲覧した際に画面サイズが通常と異なる問題が起きていました。 ![iPhoneからのスクリーンショット:PCをから閲覧した倍率のままスマートフォンで縮小表示されている](https://i.gyazo.com/97ef52c848de3bad53f2ceee75ebe5d4.png) BFF を導入していない本プロダクトでは OGP に対応するため Rails でも meta をレンダリングしているため、一時対応として VueMeta によるレンダリングがなくても最低限動作するように変更しました。 その後 [vueuse/head](https://github.com/vueuse/head) で同様の対応できるということで、検証したのち差し替え対応しました。 ### その他 大きな声では言えませんが、data と props に同じ Class Object の一部を共用しているケースで props の Class method を用いて更新した場合に reactivity が動作せず、data 側の Class method を使うように変更したりしました。 詳しくは聞かないでください。🙃 ## おわりに 移行期間を共に戦ってくれたエンジニア、ヘルプとやらかしを温かく見守ってくれた他のチームのエンジニアのみなさん、ありがとうございました! 今回の記事では Vue 3 への移行についてをお送りしましたが、その他のフロントエンドやバックエンドの負債についても引き続きジャンヌチームが先導しつつ、エンジニアチーム全体で解消に取り組んでまいります。 ここまでご覧いただきありがとうございました!
--- ## 2021年オープンソースコントリビュート活動振り返り https://archives.yamanoku.net/open-source-contribution-activity-2021/ 2021 年もまもなく終わりですね。みなさんは今年どれくらいオープンソースにコントリビュートできたでしょうか?(唐突) 私は昨年、[東京都新型コロナウイルス感染症対策サイト](https://stopcovid19.metro.tokyo.lg.jp/)のコントリビュートするようになってから、業務中や余暇時間を使って、目のついた・興味があるオープンソースにコントリビュートしていくのが趣味になっています。 今年もいくつかのオープンソースに Pull Request や Issue でコントリビュートしてみましたのでその振り返りをしてみようと思います。 ## Vue.js 関連 ### vue-a11y ![スクリーンショット:Vue A11y 日本語サイト TOPページ](https://i.gyazo.com/0f3fb436378fec876d44315706c15857.png) Vue.js ユーザーでアクセシビリティに関心が高い人たちが集まるチームがあり、それが vue-a11y です。主催は [Alan Ktquez](https://github.com/ktquez) 氏で、なにか手伝えることはないかと手を挙げてみたところ、私もメンバーとして誘ってもらいました。 ![スクリーンショット:Vue A11y 公式サイトのメンバー紹介ページ](https://i.gyazo.com/fb5ab33e561b178000d93086a1795802.png) 今年は[サイトの日本語ページ](https://vue-a11y.com/jp/)開設やドキュメントの翻訳対応やそのレビューなどを行いました。 日本語翻訳に参加してくれた [かずやん](https://twitter.com/D_kazuyan)さん、[manak1](https://twitter.com/mikeanakida) さん、ありがとうございました! https://twitter.com/yamanoku/status/1351683841191149568 しかしながら今年は諸事情で主催の Alan 氏や私自身が vue-a11y に割く時間がなかったため、グループ全体の活動としてはあまり進捗がない形でした。 ![スクリーンショット:Accessible Vue 公式サイト](https://i.gyazo.com/c864aa971aa52f536d534ec91d9ac8df.png) オープンソースとは別件ですが、メンバーの [Marcus Herrmann](https://twitter.com/_marcusherrmann) 氏が [Accessible Vue](https://accessible-vue.com/)という電子書籍を今年リリースしました。 Vue.js 開発においてのアクセシビリティ考慮する点をあげた書籍なので、ぜひご覧ください。 [Add A11y Section: eslint-plugin-vue-accessibility by yamanoku · Pull Request #3626 · vuejs/awesome-vue](https://github.com/vuejs/awesome-vue/pull/3626) その他、[awesome-vue](https://github.com/vuejs/awesome-vue) に現行メンテナンスされている eslint-plugin の [eslint-plugin-vuejs-accessibility](https://github.com/vue-a11y/eslint-plugin-vuejs-accessibility) がなかったので追加してみたり、 [fix: docs/aria-props.md broken link by yamanoku · Pull Request #294 · vue-a11y/eslint-plugin-vuejs-accessibility](https://github.com/vue-a11y/eslint-plugin-vuejs-accessibility/pull/294) eslint-plugin-vuejs-accessibility ドキュメントでのリンクが壊れている箇所を修正したり、 [Add: vue-visually-hidden by yamanoku · Pull Request #14 · vue-a11y/awesome-a11y-vue](https://github.com/vue-a11y/awesome-a11y-vue/pull/14) 自作してみた [Visually hidden コンポーネント](https://github.com/yamanoku/vue-visually-hidden)を追加してもらったりしました。 ### vuejs/vue-test-utils Vue.js 公式のコンポーネントテストユーティリティ集 [ja docs(fix): インスト => インストール by yamanoku · Pull Request #1785 · vuejs/vue-test-utils](https://github.com/vuejs/vue-test-utils/pull/1785) 業務で使用するため確認することがあったのですが、日本語誤字があったので修正報告しました。 業務中にもすぐ出せるのは良いことです。 ### vuejs/vue-router Vue.js 公式のルーターライブラリ [docs: aria-current-value type `"true"` and `"false"` by yamanoku · Pull Request #3558 · vuejs/vue-router](https://github.com/vuejs/vue-router/pull/3558) WAI-ARIA 1.1 仕様書では [`aria-current` の設定値に `true` と `false` 文字列も含まれている](https://www.w3.org/TR/wai-aria-1.1/#aria-current)ため、設定できることを [vue-router のドキュメント](https://router.vuejs.org/api/#aria-current-value)にも明示できるようにしました。 ### FortAwesome/vue-fontawesome Vue.js で使用できる Font Awesome 5 ライブラリ [add: Accessibility feature by yamanoku · Pull Request #319 · FortAwesome/vue-fontawesome](https://github.com/FortAwesome/vue-fontawesome/pull/319) 業務上で使用している中でアイコンに装飾文字を使えないかと調べてみたところ、[実現することはできました](https://codesandbox.io/s/vuejs-font-awesome-1--getting-started-forked-11ewc?file=/src/App.vue)が README にその使い方がなかったため追加したものです。 ### vueuse/vueuse [Anthony Fu](https://github.com/antfu) 氏が作成した Vue Composition ユーティリティ集 [chore(useQRCode): add alt text for Docs by yamanoku · Pull Request #652 · vueuse/vueuse](https://github.com/vueuse/vueuse/pull/652) コードサンプル内の `img` において代替テキストがなかったため追加しました。 ### vuejs/docs Vue.js 公式ドキュメントのリポジトリ [ A11y Docs Labels code block `Warning` => `Note` by yamanoku · Pull Request #1394 · vuejs/docs](https://github.com/vuejs/docs/pull/1394) アクセシビリティにまつわる項目において、フォーム関連のタグを `