3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

viviONAdvent Calendar 2024

Day 15

Nuxt Fontsを使ってAdobe Fontsを読み込もうとした話

Last updated at Posted at 2024-12-14

viviONグループでは、DLsiteやcomipoなど、二次元コンテンツを世の中に届けるためのサービスを運営しています。
ともに働く仲間を募集していますので、興味のある方はこちらまで。

:point_up_tone1:結論

  • 現時点(2024/12/9)では、Adobe Fontsはまだ対応していないため使えない
  • 対応しているWebフォント(Google Fontsなど)であれば設定楽々で便利そう

:feet:経緯

  1. 現在Nuxt3の開発中のサービスでAdobe Fontsを使うことに
  2. デザイナーさんからAdobe Fonts用のコードを共有してもらう
    <script>
      (function(d) {
        var config = {
          kitId: '<kit-id>',
          scriptTimeout: 3000,
          async: true
        },
        h=d.documentElement,t=setTimeout(function(){h.className=h.className.replace(/\bwf-loading\b/g,"")+" wf-inactive";},config.scriptTimeout),tk=d.createElement("script"),f=false,s=d.getElementsByTagName("script")[0],a;h.className+=" wf-loading";tk.src='https://use.typekit.net/'+config.kitId+'.js';tk.async=true;tk.onload=tk.onreadystatechange=function(){a=this.readyState;if(f%7C%7Ca&&a!="complete"&&a!="loaded")return;f=true;clearTimeout(t);try{Typekit.load(config)}catch(e){}};s.parentNode.insertBefore(tk,s)
      })(document);
    </script>
    
  3. Nuxt3でAdobe Fontsを読み込むベストプラクティスがないか調べてみたら Nuxt Fonts なるものを発見

:question:Nuxt Fontsとは

特徴

  1. ✨ 設定不要で簡単に使える
    インストールするだけで、CSSのfont-familyを解析し、必要なフォントを自動的に取得・提供してくれる。
  2. 🔡 多くの組み込みプロバイダーに対応
    Google Fonts、Bunny Fonts、Fontshare、Fontsource、Adobe Fonts、ローカルフォントなど。
  3. 💪 カスタムプロバイダーに対応
    必要に応じて独自のフォントプロバイダーを設定できる。
  4. ⏬ ローカルダウンロードのサポート
    フォントをローカル保存して利用できる。(Nuxtのnuxt/assetsが正式リリースされるまでのサポート機能らしい)
  5. ⚡️ fontainecapsizeによる自動フォントメトリック最適化
    「Fontaine」と「Capsize」というツールを活用してCLS最適化が自動で行われる。(これにより、ページの読み込みがスムーズになる)
  6. 🔥 unstorageによるビルド/開発時のフォントキャッシュ
    「unstorage」というキャッシュシステムを利用して、ビルドや開発中にフォントの読み込みが効率化される。これにより、開発体験が快適になる。

※ 参照元(公式): https://nuxt.com/modules/fonts#features


Google Fontsなど有名どころのプロバイダーであれば少しの設定追加しただけで対応できるとのこと!!

神!!!:pray_tone1::sparkles:

:v_tone1:ということで使ってみた

  1. インストール
    今回はyarnを使っているためyarnコマンドでインストール
    yarn add @nuxt/fonts
    

  2. nuxt.config.ts に以下の設定追加
    nuxt.config.ts
    export default defineNuxtConfig({
      modules: [
        '@nuxt/fonts',
      ],
      fonts: {
        adobe: {
          id: ['<kit-id>'],
        },
      }
    })
    

  3. .gitignore に以下の設定がなければ追加
    .gitignore
    .data
    

  4. CSSで font-family を設定
    .cssファイル、.vue または .tsファイルの <style>内のfont-familyはもちろん、tailwind.config.js で定義しているfont-familyも検知してくれる。
    tailwind.config.js
    export default {
      theme: {
        extend: {
          fontFamily: {
            base: ['"m-plus-rounded-1p"', 'BlinkMacSystemFont', '-apple-system', ...以下省略],
          },
        },
      },
    }
    

  5. 反映され・・・てない!?
    スクリーンショット 2024-12-12 0.21.46.png
    ※ ChromeのDevTools → 要素 → 計算済み → font-familyで絞ると確認できます。

  6. 試しにGoogle Fontsで使える別のフォントを設定してみた
    tailwind.config.js
    export default {
      theme: {
        extend: {
          fontFamily: {
    -       base: ['"m-plus-rounded-1p"', 'BlinkMacSystemFont', '-apple-system', ...以下省略],
    +       base: ['"Noto Sans JP", "m-plus-rounded-1p"', 'BlinkMacSystemFont', '-apple-system', ...以下省略],
          },
        },
      },
    }
    

  7. 反映されてる・・・
    スクリーンショット 2024-12-12 0.29.37.png

:mag:原因調べてみた

Adobe Fontsだけ対応してなかった(普通に書いてあった・・・)
現在、Adobe FontsではパブリックAPIが提供されていないため無理とのこと・・・
スクリーンショット 2024-12-12 0.33.53.png
※ 参照元(公式): https://fonts.nuxt.com/get-started/providers#adobe


そのため今回は普通にnuxt.configに設定追加してAdobe Fontsを読み込んだ。

nuxt.config.ts
export default defineNuxtConfig({
  app: {
    head: {
      script: [
        {
          src: 'https://use.typekit.net/<kitId>.js',
        },
      ],
    },
  },
})
layouts/Default.vue
<script setup lang="ts">
onMounted(() => {
  try {
    // eslint-disable-next-line @typescript-eslint/ban-ts-comment
    // @ts-expect-error
    Typekit.load({ async: true })
  } catch (error) {
    console.error(error)
  }
})
</script>

:triangular_flag_on_post:おわり

Nuxt3でWebフォントを使用する際、Adobe Fontsはまだ対応してなかったものの、
Google Fontsなどの対応しているWebフォントであれば簡単に使える上に、
パフォーマンス面も良しなに調整(CLS最適化)してくれるのでとても便利!!

参考記事

一緒に二次元業界を盛り上げていきませんか?

株式会社viviONでは、フロントエンドエンジニアを募集しています。

また、フロントエンドエンジニアに限らず、バックエンド・SRE・スマホアプリなど様々なエンジニア職を募集していますので、ぜひ採用情報をご覧ください。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?