Reactで使う「JSX(JavaScript XML)」とは、
JavaScriptの中にHTMLのような構文を直接書ける記法のことです。
注意したいのは、JSXとXMLは別ものと言う事。
ここで言う”HTMLのような”です。
つまり、XML風(HTML風)に記述できる”見た目を重視した”のがJSXです。
Reactコンポーネントを記述する際によく使われていて、
以下のような特徴があります:
🔷 JSXの基本イメージ
通常のJavaScriptでUIを定義するとこんな感じになります:
javascriptconst element = React.createElement('h1', null, 'こんにちは、React!');
JSXを使うと、これをもっとHTMLライクに書けます:
jsxconst element = <h1>こんにちは、React!</h1>;
JSXは見た目はHTMLに似てますが、
裏ではJavaScriptに変換されて動いています。
その変換はBabel(バベル)などのトランスパイラによって行われます。
🔸 JSXの特徴とルール
- 要素は必ず1つの親タグで囲む必要がある
jsx// NG
return (
<h1>Hello</h1>
<p>World</p>
);
// OK(divで囲む)
return (
<div>
<h1>Hello</h1>
<p>World</p>
</div>
);
- JavaScriptの式は
{}で囲んで書ける
jsxコconst name = "太郎";
return <h1>こんにちは、{name}さん!</h1>;
- 属性(props)はキャメルケースで書く
jsx// HTML: <div class="box">
<div className="box"></div>
// HTML: <button onclick="...">
<button onClick={handleClick}></button>
🔹 JSXのメリット
- UIの構造を視覚的にわかりやすく書ける
- JavaScriptの力をそのまま活用できる(条件分岐、ループ、関数など)
- Reactコンポーネントとの相性がよい
🎯まとめ
JSXは「HTMLライクな記法をJavaScriptで使える」ものです。
見た目はHTMLですが、
あくまでJavaScriptの構文の一部なので、
プログラミング的な柔軟性も持ち合わせています。
また、XMLとはXML:Extensible Markup Language
(extension 伸長; 拡張; 延長)
JIS規格による訳語は「拡張可能なマーク付け言語」なので、拡張性をもっており
この拡張性をJSに取り入れたものがJSXなのですが、このXは完全なXMLのXでは
ないようです。
🔍 もう少し詳しく言うと…
✅ 共通点(似ているところ)
- JSXはXMLっぽい見た目をしていて、タグを自由に定義できる(拡張性っぽい)。
- 例:
<MyButton>のように、自分で定義したコンポーネントをタグとして使える。
- 例:
- ネスト構造がある(親子要素・属性・自己終了タグなど、XMLの書き方に似てる)。
- 構文的に厳密で、閉じタグが必要など、HTMLよりXMLに近いルール。
❌ でも違うところ(完全なXMLではない)
- JSX自体はXMLの派生でも拡張でもなく、
**JavaScriptの構文拡張(シンタックスシュガー)**です。 - XMLのように「任意の名前空間」「スキーマで型定義」「データ構造として使う」
ような用途では使わない。 - JSXはUI(見た目)を表現するためのDSL(ドメイン特化言語)的なものです。
🎯 わかりやすくたとえると…
JSXは「JavaScriptの中で、XML風のUI記述をするための見た目重視の記法」。
つまり、「XMLの拡張性を活かしている」というよりは、
「XML風の見た目を借りて、Reactのコンポーネントを柔軟に使えるようにしている」
って感じ。
💡一言まとめ
JSXはXMLっぽい構文で、JavaScriptの中でUIを拡張的に構築できる手段ではあるけど、
「XMLの拡張性を取り入れたもの」とまでは言わないほうが正確です。
JSXは最終的にコンパイルしてJsに変換されるので、なんでもありです。コンパイルの
便利さを活用して、記述の見た目、コードのUIを重要してますよってアピールに
XMLの名前を使ったって感じでしょうか。

