🐿️

AI Shift フロントエンドトーク 2024-03

2024/03/29に公開

はじめに

こんにちは、AI Shiftフロントエンドエンジニアの安井(@ytaisei_)です。
AI Shiftでは先月より週に1回フロントエンドトーク(フロントエンドに関する情報共有会)を行なっています。今月も様々なジャンルの技術に関する話題があったので共有したいと思います。

先月の内容はこちらです!

https://zenn.dev/aishift/articles/65d4026fcd0e04

🦈 TypeScript 5.4がリリース

特にNoInfer Utility Typeの追加に着目していました。

ここではdefaultColorの型をcolorsの型に限定したいケースを想定します。

下の例における期待する挙動として"blue"はcolorsの配列に存在しないため型エラーを起こして欲しいところです。しかし、TSではCの型を"blue"も含めて推論してしまします。

function createStreetLight<C extends string>(colors: C[], defaultColor?: C) {
    // ...
}

// Oops! This undesirable, but is allowed!
// C as "red" | "yellow" | "green" | "blue"
createStreetLight(["red", "yellow", "green"], "blue");

そこでNoInferを使用します。
すると、"blue"は推論せずに期待通りの型エラーを発生することができました。

function createStreetLight<C extends string>(colors: C[], defaultColor?: NoInfer<C>) {
    // ...
}

createStreetLight(["red", "yellow", "green"], "blue");
//                                            ~~~~~~
// error!
// Argument of type '"blue"' is not assignable to parameter of type '"red" | "yellow" | "green" | undefined'.

https://devblogs.microsoft.com/typescript/announcing-typescript-5-4/

🐳 Rolldownが公開

将来的にViteで使われることを考慮されて開発されたRolldownが公開されました。

これによって、今までViteのバンドル方法がesbuildとRollupの二種類が使用され、開発ビルドと本番ビルドで異なるバンドラが使用されていた課題が解消される想定です。

https://github.com/rolldown/rolldown

🐢 Array.filterでType Guardが効くようになります

TypeScriptの次バージョン5.5からArray.filterでType Guardが効くようになるそうです。
これはTS開発者であれば全員が待ち望んでいた改善な気がしますね!

const result = [10, null, 20, 30].filter((value) => value != null);
//  number[]に推論される

https://github.com/microsoft/TypeScript/pull/57465

🦋 TanStack Startが開発中

弊社でも使用しているTanStack RouterとTanStack Queryですが、そのフルスタックフレームワークに当たる「TanStack Start」が開発中とのことです!

具体的なリリース予定などは明示されていませんが、今後の動向に期待ですね。

https://x.com/tannerlinsley/status/1765120904370307438?s=20

🐎 新たなpackage registory "JSR"が登場

まずはドキュメントがnpmに比べて整理されて見やすいことにとても惹かれます!

JSRが生まれた背景にはnpm registoryが誕生した当時からの変化が関係しています。

  • ECMAScript modulesの登場と標準化
  • Node.js以外のJSランタイムの存在
  • TypeScriptの普及

これらの背景に対してnpm registoryでは十分に対応ができないためJSRが生まれました。

大きな特徴としては以下の点があります。

  • Native TypeScript support
  • ECMAScript modules only
  • Cross-runtime support

https://jsr.io/
https://jsr.io/docs/why

🐁 Generative UIをサポートするVercel AI SDK

昨年の9月にVercelからv0がリリースされたことは記憶に新しいと思います。v0によって私たちは自然言語からReactのcomponentを生成できるようになりました。

Vercel AI SDKはLLMからリッチなComponentを生成するためのinterfaceを提供してくれます!

Vercel AI SDKによってこれまでLLMの生成結果がPlain TextかMarkdownなどに限定されていたところからリッチなUIを表示させることができるようになります。

https://vercel.com/blog/ai-sdk-3-generative-ui

https://sdk.vercel.ai/docs/concepts/ai-rsc

🦨 プロパティがCSSのパフォーマンスに与える影響を確認できるサイト「CSS Triggers」

このサイトはCSSのどのプロパティがLayout・Paint・Compositeに影響を与えるかについて一覧的にまとめてくれています!

https://lab.skk.moe/css-triggers

🐝 EmailJSでクライアントからメールを送信

EmailJSはクライアントからメールの送信機能を実装できるPaaSです。
メール送信といえばSendGridが有名ですが、SendGridはクライアントから直接アクセスすることは想定しておらず、サーバの開発が必要になります。
そこでEmailJSを使えばサーバーの開発なしに簡単にメール送信機能を実装できてとても便利です!

どのようにセキュリティリスクを抑えているかはこちらをご覧ください。

https://www.emailjs.com/

🐢 Nuxt 3.11がリリース

このマイナーバージョンは3.xにおいて最後のバージョンになる可能性が高いです。
具体的には以下の機能がリリースされました。

  • ブラウザにサーバーログが表示されるように
    • サーバーサイドでのconsole.logは今までブラウザのコンソールには表示されていませんでしたが、今回のリリースで表示されるように変更されました。
  • usePreviewModeによるプレビューモード
  • ミドルウェアのルートルール
    nuxt.config.ts
    export default defineNuxtConfig({
      routeRules: {
        '/admin/**': {
          // or appMiddleware: 'auth'
          appMiddleware: ['auth'] // <-- これ
        },
        '/admin/login': {
          // You can 'turn off' middleware that would otherwise run for a page
          appMiddleware: { // <-- これ
            auth: false
          }
        },
      },
    })
    
  • サーバーおよびクライアント専用ページが導入
  • cache-busting
    • NuxtのappManifestを無効にしていない場合、ペイロードを自動的にcache bustingするようになりました。

https://nuxt.com/blog/v3-11

🦍 WebKit Features in Safari 17.4

Safari 17.4で使用されているWebkitのリリースがありました!
Vertical writing modesという縦書きのフォーム制御のサポートやCSS Scopingのサポートなどが入っています!

https://webkit.org/blog/15063/webkit-features-in-safari-17-4/

最後に

AI Shiftではエンジニアの採用に力を入れています!
少しでも興味を持っていただけましたら、カジュアル面談でお話しませんか?
(オンライン・19時以降の面談も可能です!)

【面談フォームはこちら】

https://hrmos.co/pages/cyberagent-group/jobs/1826557091831955459

AI Shift Tech Blog

Discussion