HTMLとTSXの違いとは?Next.js初心者向けに書き方と注意点をやさしく解説


Next.js・microCMS 初心者ノート

HTMLとTSXの違いって?? Next.jsを始めたばかりの私が、やさしく整理してみました

本のコードが動かない!?Next.js 16で初心者が一番ハマった5つのポイント

HTMLなら少し分かるけれど、Next.jsを開いたら突然出てきた「TSX」。
見た目はHTMLに似ているのに、同じように書くとエラーになることもあります。
この記事では、HTMLとTSXの違いを初心者目線で一つずつ整理します。

HTML TSX Next.js 初心者向け
01

Next.jsで出会った「TSX」

Next.jsの勉強を始めて、最初に少し戸惑ったものの一つが 「TSX」でした。

HTMLファイルなら、これまでのWeb制作でも見慣れています。 ところがNext.jsのプロジェクトを開くと、 page.tsxやlayout.tsxといったファイルが並んでいます。

?

最初に感じた疑問

「見た目はHTMLみたいだけれど、普通のHTMLと何が違うの?」
「どうしてHTMLファイルではなく、TSXファイルに書くの?」

実際に触ってみると、TSXはHTMLとまったく別のものというより、 HTMLに似た書き方を使いながら、JavaScriptやTypeScriptの処理も一緒に書けるもの と考えると理解しやすくなりました。

まずは、HTMLとTSXがそれぞれ何をするものなのかを見ていきます。

02

そもそもHTMLとは?

HTMLは、Webページの構造を作るためのマークアップ言語です。

見出し、文章、画像、リンク、表など、 ページの中にどのような要素があるのかをタグで表します。

HTMLの例
<section class="profile">
  <h2>プロフィール</h2>
  <p>Web制作を勉強しています。</p>
  <a href="/contact/">お問い合わせ</a>
</section>

HTMLは、基本的にタグを使って文書の意味や構造を組み立てます。

  • <h1>や<h2>は見出し
  • <p>は文章
  • <a>はリンク
  • <img>は画像
  • <section>は内容のまとまり
POINT

HTMLは、Webページの「骨組み」を作るためのものです。 ブラウザーはHTMLを読み取り、見出しや文章、画像などを画面に表示します。

03

TSXとは?

TSXは、簡単にいうと TypeScriptの中に、HTMLのような見た目の記述を書ける形式です。

ReactやNext.jsでは、画面を作るためにJSXという記法を使います。 そのJSXにTypeScriptの型チェックを加えたものがTSXです。

JavaScript Webページに動きや処理を加える
+
XML風の記法 HTMLのようなタグを書く
=
JSX Reactで画面を作る記法
JSX HTML風の画面記述
+
TypeScript 型によるチェック
=
TSX Next.jsでよく使う形式

例えば、次のようなコードがTSXです。

TSXの例
export default function Profile() {
  const name: string = "さくら";

  return (
    <section className="profile">
      <h2>プロフィール</h2>
      <p>こんにちは、{name}です。</p>
    </section>
  );
}

タグの部分だけを見るとHTMLに似ています。 しかし、上には関数があり、文字列を入れた変数も書かれています。

さらに{name}のように波括弧を使うと、 TypeScriptやJavaScriptの値を画面内に表示できます。

やさしく言うと

TSXは、画面の見た目と、画面に表示するデータや処理を、 一つのファイル内で関連づけて書ける仕組みです。

04

HTMLとTSXの主な違い

HTMLとTSXは見た目がよく似ていますが、役割や書き方にはいくつか違いがあります。

比較項目 HTML TSX
主な役割 ページの構造を作る Reactコンポーネントとして画面を作る
使用する場所 通常のHTMLファイル ReactやNext.jsのファイル
拡張子 .html .tsx
変数の表示 そのままではできない { }の中に書ける
条件分岐 HTML単体ではできない JavaScriptの処理を使える
繰り返し表示 同じタグを手作業で書く map()などで生成できる
属性の書き方 class className
型チェック なし TypeScriptによるチェックあり

HTMLは完成した文書に近い

HTMLでは、表示したい内容をタグの中に直接書いていきます。

HTML
<h2>新着記事</h2>
<p>HTMLとTSXの違いを解説します。</p>

TSXはデータから画面を作れる

TSXでは、変数や外部から取得したデータを使って画面を作れます。

TSX
const title = "HTMLとTSXの違いを解説します";

return (
  <>
    <h2>新着記事</h2>
    <p>{title}</p>
  </>
);

この違いは、microCMSのような外部サービスから取得したデータを表示するときに、 とても重要になります。

05

TSXで特に気をつけたい書き方

HTMLの知識があるとTSXも理解しやすいのですが、 HTMLとまったく同じようには書けません。

初心者のうちは間違えやすいポイントを、順番に確認します。

1

classではなくclassNameを使う

HTMLではCSSのクラス名を指定するときにclassを使います。 しかし、TSXではclassNameと書きます。

HTMLの書き方
<div class="card">
  カードの内容
</div>
→
TSXの書き方
<div className="card">
  カードの内容
</div>

TypeScriptやJavaScriptではclassが別の意味を持つため、 TSXではclassNameを使用します。

2

タグは必ず閉じる

TSXでは、開始したタグを必ず閉じる必要があります。 画像や改行のように中身を持たないタグも、最後にスラッシュを付けます。

エラーになりやすい書き方
<img src="/images/photo.jpg">
<br>
→
TSXでの書き方
<img src="/images/photo.jpg" />
<br />
3

複数の要素は一つにまとめる

Reactのコンポーネントから返す要素は、 基本的に一つの親要素で囲む必要があります。

そのまま並べるとエラー
return (
  <h1>タイトル</h1>
  <p>本文です。</p>
);
→
一つの要素で囲む
return (
  <div>
    <h1>タイトル</h1>
    <p>本文です。</p>
  </div>
);

不要なdivを増やしたくないときは、 フラグメントと呼ばれる<>と</>も使えます。

フラグメントを使う例
return (
  <>
    <h1>タイトル</h1>
    <p>本文です。</p>
  </>
);
4

JavaScriptの処理は波括弧の中に書く

TSXのタグ内で変数や計算結果を表示するときは、 { }を使います。

変数を表示する例
const userName = "あかり";
const articleCount = 5;

return (
  <div>
    <p>こんにちは、{userName}さん。</p>
    <p>記事は全部で{articleCount}件あります。</p>
  </div>
);

波括弧の中には、変数だけでなく計算式や関数の実行結果も書けます。

計算結果を表示する例
<p>合計金額は{1200 + 800}円です。</p>
5

style属性は文字列ではなくオブジェクトで書く

HTMLでは、style属性の中にCSSを文字列として書けます。 TSXでは、JavaScriptのオブジェクトとして指定します。

HTMLの書き方
<p style="color: pink;">
  ピンクの文字
</p>
→
TSXの書き方
<p style={{ color: "pink" }}>
  ピンクの文字
</p>

ただし、実際のNext.js制作では、 CSS Modulesや通常のCSSファイルを使って装飾することも多いです。

06

TSXでは条件によって表示を変えられる

TSXの大きな特徴は、データの状態に合わせて表示内容を変えられることです。

例えば、ログインしているときだけメッセージを表示する、 記事が存在しないときは別の案内を表示する、といった処理ができます。

条件によって表示を変える例
export default function UserMessage() {
  const isLoggedIn = true;

  return (
    <div>
      {isLoggedIn ? (
        <p>ログインしています。</p>
      ) : (
        <p>ログインしてください。</p>
      )}
    </div>
  );
}

isLoggedInがtrueなら「ログインしています」、 falseなら「ログインしてください」と表示されます。

ここがHTMLとの違い

HTMLは基本的に書かれた内容をそのまま表示しますが、 TSXはデータや条件に合わせて、表示する内容を組み立てられます。

07

配列のデータを繰り返し表示できる

ブログの記事一覧や商品一覧のように、 同じ形の要素を何件も表示したい場面があります。

HTMLだけで作る場合は、同じようなタグを件数分書く必要があります。

HTMLで3件の記事を書く場合
<article>
  <h3>記事タイトル1</h3>
</article>

<article>
  <h3>記事タイトル2</h3>
</article>

<article>
  <h3>記事タイトル3</h3>
</article>

TSXでは、配列のデータをmap()で繰り返して表示できます。

配列から記事一覧を作る例
const articles = [
  { id: 1, title: "HTMLの基本" },
  { id: 2, title: "TSXの基本" },
  { id: 3, title: "Next.jsの始め方" },
];

export default function ArticleList() {
  return (
    <div>
      {articles.map((article) => (
        <article key={article.id}>
          <h3>{article.title}</h3>
        </article>
      ))}
    </div>
  );
}

これなら、記事が3件でも30件でも、 基本となる画面のコードは一つだけで済みます。

microCMSから取得した記事一覧を表示するときも、 このような繰り返し処理を使います。

08

Next.jsではTSXをどう使う?

Next.jsでは、ページや共通パーツをReactコンポーネントとして作ります。

App Routerを使用している場合、 例えばトップページはsrc/app/page.tsxに記述します。

フォルダ構成のイメージ
src
└── app
    ├── layout.tsx
    ├── page.tsx
    ├── globals.css
    └── blog
        └── page.tsx

page.tsxには、そのURLで表示する画面を書きます。

src/app/page.tsx
export default function Home() {
  return (
    <main>
      <h1>はじめてのNext.js</h1>
      <p>TSXを使ってトップページを作っています。</p>
    </main>
  );
}

このHomeという関数は、Reactコンポーネントです。 関数の中でreturnしたTSXが、ブラウザーに表示される画面になります。

STEP 1 TSXを書く

page.tsxに画面を記述

›
STEP 2 Next.jsが処理する

Reactの画面として組み立てる

›
STEP 3 ブラウザーに表示

最終的にはHTMLとして表示される

私が最初に混乱したのは、 「TSXがそのままブラウザーに表示される」と思っていたからでした。

実際には、Next.jsやReactがTSXを処理し、 最終的にブラウザーが理解できるHTMLなどへ変換してくれます。

09

コンポーネントに分けると管理しやすい

Next.jsでは、ヘッダー、ボタン、記事カードなどを 小さなコンポーネントに分けて作れます。

例えば、記事カードを次のようなTSXファイルとして作ります。

components/ArticleCard.tsx
type ArticleCardProps = {
  title: string;
  description: string;
};

export default function ArticleCard({
  title,
  description,
}: ArticleCardProps) {
  return (
    <article className="article-card">
      <h2>{title}</h2>
      <p>{description}</p>
    </article>
  );
}

ページ側では、作成したコンポーネントを読み込んで使います。

app/page.tsx
import ArticleCard from "@/components/ArticleCard";

export default function Home() {
  return (
    <main>
      <ArticleCard
        title="HTMLとTSXの違い"
        description="初心者向けにやさしく解説します。"
      />
    </main>
  );
}

titleやdescriptionのように、 コンポーネントへ渡す値をpropsと呼びます。

TypeScriptでは、どのようなpropsを受け取るのかを型として書けるため、 間違った値を渡したときにエディターが教えてくれます。

10

microCMSのデータをTSXで表示する

Next.jsとmicroCMSを組み合わせる場合、 microCMSから取得した記事タイトルや本文をTSX内で表示します。

ここでは仕組みを理解するために、簡単な形で見てみます。

microCMSの記事データを表示するイメージ
type Article = {
  id: string;
  title: string;
  description: string;
};

export default async function BlogPage() {
  const articles: Article[] = await getArticles();

  return (
    <main>
      <h1>ブログ記事一覧</h1>

      {articles.map((article) => (
        <article key={article.id}>
          <h2>{article.title}</h2>
          <p>{article.description}</p>
        </article>
      ))}
    </main>
  );
}

microCMSから取得したデータがarticlesに入り、 map()で記事を一件ずつ表示しています。

HTMLだけを見ると同じ記事カードが並んでいるように見えますが、 実際にはmicroCMSに登録した内容から自動で作られています。

CMS
microCMS

記事を登録・更新する

APIで取得
TSX
Next.js

取得したデータを画面に組み込む

ページを生成
WEB
ブラウザー

記事ページとして表示する

TSXが必要になる理由

microCMSから届くデータは、記事ごとに内容や件数が変わります。 TSXなら、取得したデータに合わせて見出しや本文、一覧を動的に組み立てられます。

11

最初から全部理解しなくても大丈夫

TSXを初めて見たときは、 HTML、JavaScript、TypeScript、Reactの書き方が一度に出てきたように感じます。

私自身も、最初はどこまでがHTMLで、 どこからがTypeScriptなのか分からなくなることがありました。

けれど、最初からすべてを理解しようとしなくても大丈夫です。 まずは次の順番で覚えると、少しずつ整理しやすくなります。

  1. 1
    HTMLのタグ部分を見る

    まずはh1、p、sectionなど、 見慣れたタグを確認します。

  2. 2
    classNameと閉じタグに慣れる

    HTMLとの細かな違いを、少しずつ覚えていきます。

  3. 3
    波括弧の中に変数を入れてみる

    文字列や数字を変数にして、画面へ表示してみます。

  4. 4
    配列をmap()で表示する

    記事一覧やカード一覧の作成に挑戦します。

  5. 5
    microCMSのデータに置き換える

    固定のデータを表示できたら、APIから取得したデータへ進みます。

✿

TSXは、最初からきれいに書けなくても問題ありません。
HTMLとの違いを一つずつ確認しながら、 小さな画面を作って試していくことが近道だと感じています。

12

初心者がよく出会うエラー

TSXを書き始めたばかりの頃に出会いやすいエラーをまとめました。

ERROR 01 隣り合う要素を一つで囲んでいない

複数のタグを返す場合は、divやフラグメントで囲みます。

ERROR 02 閉じタグを書き忘れている

imgやinputも、 TSXでは/>で閉じます。

ERROR 03 classと書いている

CSSクラスの指定にはclassNameを使います。

ERROR 04 波括弧や丸括弧が閉じられていない

TSXでは括弧が増えやすいため、開始と終了をセットで確認します。

ERROR 05 map()内の要素にkeyがない

一覧を表示するときは、 一番外側の要素にkeyを指定します。

エラーが出ると難しく感じてしまいますが、 エディターが間違っている場所を教えてくれることも多いです。

エラーメッセージの行番号を確認し、 その少し上からタグや括弧が閉じられているかを見ると、 原因を見つけやすくなります。

13

まとめ:TSXはHTMLに処理を加えられる書き方

HTMLとTSXは見た目がよく似ていますが、 同じものではありません。

HTML

Webページの見出しや文章、画像などの構造を作るための言語。

TSX

HTMLのようなタグと、TypeScriptのデータや処理を組み合わせて画面を作る記法。

Next.jsでは、ページやコンポーネントをTSXで作成します。 TSXを使うことで、変数の値を表示したり、条件によって内容を変えたり、 microCMSから取得した記事を一覧表示したりできます。

今回覚えておきたいこと

  • TSXはHTMLに似ているけれど、TypeScriptの中に書く記法
  • classではなくclassNameを使う
  • タグは必ず閉じる
  • 変数や処理は{ }の中に書く
  • 複数の要素は一つの親要素かフラグメントで囲む
  • 配列やmicroCMSのデータから画面を作れる

TSXは、HTMLだけを書いていたときよりも覚えることが多く感じます。 それでも、HTMLの知識はそのまま土台として役立ちます。

まずは小さなページを作り、 文字を表示する、変数を入れる、一覧を作るという順番で試していけば、 少しずつNext.jsらしい書き方に慣れていけそうです。

Next.js初心者の学習記録 焦らず、一つずつ覚えていきたいと思います。

AILPENGINE。自動進化型AI-LP。公開後も、成果に合わせて進化する! 行動計測、分析、構成改善、成果最大化。自前計測、CTA位置最適化、レポート可視化。LP改善を相談する(相談無料)。

日本ドラフトのAIチャットボットで問い合わせ対応を効率化・自動化!24時間365日対応、簡単設定、マルチプラットフォーム対応で人件費・工数を削減。今すぐ無料で相談する

※当社は、当サイトに掲載する情報について、正確性・完全性・有用性その他一切の事項を保証するものではありません。
また、当サイトの情報をご利用いただいたことにより生じた損害、ならびに当サイトからリンクまたはバナー等を通じて移動した外部サイトにおいて提供される情報・サービス等により生じた損害について、当社は一切の責任を負いかねます。