【3章】Next.jsのチュートリアルをやってみた

Next.js

 

これはNext.jsの公式チュートリアルの3. Optimizing Fonts and Images に関するメモです

 

前章のメモ

 

Next.jsの公式チュートリアルの該当ページ

 

Learn Next.js: Optimizing Fonts and Images | Next.js
Optimize fonts and images with the Next.js built-in components.

 

学ぶこと

 

  1. next/font でカスタムフォントを追加する方法
  2. next/image で画像を追加する方法
  3. Next.jsでのフォントや画像の最適化

 

なぜフォントを最適化するのか?

 

next/fontを使用すると、ビルド時にフォントファイルをダウンロードします。

ダウンロードされているフォントファイルを使うのでアプリのパフォーマンスが向上します

 

プライマリーフォントを追加する

 

カスタムGoogleをアプリに追加してみます。

/app/ui/fonts.ts ファイルを作成し、アプリ全体で使うフォントを定義します。

今回はInterというフォントを使用し、latin文字のみをサブセット化してみます

サブセット化とは…
フォントのうち使う文字のみを抽出して軽量化すること。
アルファベットや数字、記号など様々な文字が含まれますが、使わない文字のフォントを読み込まずパフォーマンスを向上させます。

 

/app/ui/fonts.ts をアプリ全体に適用させるために /app/layout.tsx で読み込みます

インポートしてbodyのclassNameに追加します。

また、antialiasedTailwindのクラスでフォントを滑らかにしてくれます

 

アプリにアクセスすると、フォントが変更されていると思います

 

セカンダリーフォントを追加する

 

Lusitanaというフォントを追加してみます。

先ほどと同じように/app/ui/fonts.ts でフォントをインポートし、サブセット化していきます。

Lusitanaを見てみると、font weightが400と700なのでこれも指定します。

 

これを /app/page.tsx のpタグに適用させます

 

11行目の <AcmeLogo /> のコメントアウトも併せて外しておきます。

このコンポーネントのコードを見るとlusitanaをインポートしているのでエラーになっていました。

ただ、lusitanaを定義したことでこのコンポーネントが使用可能になりました。

 

<Image>コンポーネント

 

<Image>コンポーネントは<img>タグの拡張で、下記の自動画像最適化機能を提供している

  • 画像読み込み時のレイアウトずれを防ぐ
  • デバイスごとに画像のサイズを変更する
  • 画像の遅延読み込み
  • ブラウザがサポートしている場合に、WebPやAVIFなど最新の画像ファイルをサポート

 

デスクトップヒーロー画像の追加

 

ヒーロー画像とは…
トップページに表示されている特徴的な大きな画像のこと。そのサイトの顔になる画像

<Image>コンポーネントを使って、デスクトップのヒーロー画像を追加します。

画像は /public/hero-desktop.png を使います。

 

/app/page.tsxnext/imageよりインポートして、<Image>コンポーネントを追加します。

srcに記載するパスはpublicをルートとして指定しています。

Next.jsでは、画像などの静的アセットを /publicフォルダ で管理します。

 

また、

  • レイアウトずれを回避するためにwidthとheightを指定。
  • hidden と md:blockを組み合わせて、768px以上のwidthのときのみ画像を表示させています
    • hidden = display:none で画像を非表示
    • md: block = 768px以上のwidthのみdisplay: blockを付与

 

アプリにアクセスすると↓のように右側に画像が表示されます

 

モバイル用のヒーローイメージを追加

 

  • /public/hero-mobile.png を使う
  • 画像はwidth:560px, height:620px 
  • モバイルでは表示されるが、デスクトップでは非表示

↑の要件で追加します。

 

先ほどの/app/page.tsx <Image>コンポーネントの下に追加していきます

画像ファイルやwidth,、heightを変更します。

classNameは、デスクトップ画像が出ないとき(=widthが768px未満)の時に表示させたいので

基本block(display: block) でmd:hidden(768px以上の時display: hidden)としておきます

 

ブラウザから確認します。普通に表示すると、デスクトップの方の画像が表示されます。

モバイルでの表示を確認したいときはF12⇒Ctrl+Shift+Mを押します。(Chrome)

 

関連ドキュメント

 

 

 

次章のメモ

 

コメント

タイトルとURLをコピーしました