カテゴリ: React 更新日: 2026/02/07

スマホ対応!Reactでレスポンシブデザイン対応のコンポーネント設計を初心者向けに解説

スマホ対応!レスポンシブデザイン対応のコンポーネント設計
スマホ対応!レスポンシブデザイン対応のコンポーネント設計

先生と生徒の会話形式で理解しよう

生徒

「Reactで作った画面をスマホでも見やすくするにはどうすればいいんですか?」

先生

「それはレスポンシブデザインという考え方を使います。スマホやタブレット、パソコンなど画面の大きさに合わせて見た目を変える仕組みです。」

生徒

「Reactのコンポーネントでもレスポンシブ対応ってできるんですか?」

先生

「もちろんです。コンポーネントの設計段階からレスポンシブを意識すれば、スマホでもパソコンでも快適に表示できるようになりますよ。」

1. レスポンシブデザインとは?

1. レスポンシブデザインとは?
1. レスポンシブデザインとは?

レスポンシブデザインとは、画面サイズやデバイスの種類に応じて自動的にレイアウトやデザインを調整する方法のことです。例えば、同じホームページでも、スマホで見るとメニューが縦並びになり、パソコンで見ると横並びになる、といった仕組みです。これにより利用者はどんなデバイスでも見やすい表示を体験できます。

ReactではHTMLやCSSを組み合わせて画面を作るので、CSSのメディアクエリやフレックスレイアウトを活用することでレスポンシブ対応が可能になります。

2. Reactでレスポンシブ対応コンポーネントを作る基本

2. Reactでレスポンシブ対応コンポーネントを作る基本
2. Reactでレスポンシブ対応コンポーネントを作る基本

Reactのコンポーネントは再利用可能な部品のようなものです。レスポンシブデザインを考えるときも、この部品ごとに「スマホでは縦」「PCでは横」といったレイアウトを切り替えるように設計します。

例えば、メニューコンポーネントを作る場合、画面が小さいときは折りたたみメニュー(ハンバーガーメニュー)、大きいときは横に並んだメニューとして表示することができます。


import React from "react";
import "./App.css";

function Navbar() {
  return (
    <nav className="navbar">
      <ul className="nav-list">
        <li>ホーム</li>
        <li>サービス</li>
        <li>お問い合わせ</li>
      </ul>
    </nav>
  );
}

export default Navbar;

このコンポーネントにCSSを組み合わせることで、画面幅が小さいときは縦並び、大きいときは横並びに切り替えられます。

3. メディアクエリを使ったCSSのレスポンシブ対応

3. メディアクエリを使ったCSSのレスポンシブ対応
3. メディアクエリを使ったCSSのレスポンシブ対応

CSSでは @media という書き方を使うと、画面の幅ごとに異なるデザインを適用できます。例えば「幅が600px以下なら縦並びにする」といった条件を設定できます。


.nav-list {
  display: flex;
  gap: 10px;
}

@media (max-width: 600px) {
  .nav-list {
    flex-direction: column;
  }
}
(パソコンでは横並びでメニューが表示され、スマホ画面では縦並びに自動で切り替わります)

こうすることで、同じコンポーネントでも画面サイズによって表示が変わり、スマホ利用者にとっても快適になります。

4. フレックスボックスとグリッドを組み合わせる

4. フレックスボックスとグリッドを組み合わせる
4. フレックスボックスとグリッドを組み合わせる

Reactのコンポーネントは、内部でCSSのフレックスボックスやCSSグリッドを使うとさらに便利に設計できます。例えば商品一覧コンポーネントでは、PCでは横に3列並べて、スマホでは1列にする、といった柔軟な対応が可能です。


import React from "react";
import "./App.css";

function ProductList() {
  return (
    <div className="grid">
      <div className="item">商品1</div>
      <div className="item">商品2</div>
      <div className="item">商品3</div>
    </div>
  );
}

export default ProductList;

.grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 10px;
}

@media (max-width: 600px) {
  .grid {
    grid-template-columns: 1fr;
  }
}
(パソコンでは3列で商品が並び、スマホでは1列で縦に並びます)

5. レスポンシブ対応の実践的なコツ

5. レスポンシブ対応の実践的なコツ
5. レスポンシブ対応の実践的なコツ

Reactでレスポンシブデザインを考えるときは、以下のポイントを意識するとよいです。

  • 画面幅ごとにCSSで見た目を切り替える
  • コンポーネントを小さく分けて再利用しやすくする
  • スマホを優先して設計する「モバイルファースト」の考え方を使う
  • BootstrapなどのCSSフレームワークを併用するとより簡単にレスポンシブ対応できる

例えばBootstrapのクラスを利用すれば、複雑なメディアクエリを書かなくても、画面幅に応じて自動的にデザインを調整できます。Reactでの開発効率を上げたい場合におすすめです。

6. Reactのレスポンシブ対応が重要な理由

6. Reactのレスポンシブ対応が重要な理由
6. Reactのレスポンシブ対応が重要な理由

近年はスマホからサイトを利用する人が非常に多く、Googleの検索結果でもスマホで見やすいサイトが上位に表示されやすい傾向にあります。つまり、レスポンシブデザインに対応することはSEO(検索エンジン最適化)の観点でもとても重要なのです。

Reactで作ったサイトやアプリがレスポンシブに対応していないと、スマホで閲覧したときに文字が小さく読みにくかったり、横スクロールが必要になったりします。これではユーザーが離れてしまいます。だからこそ、最初からコンポーネント設計の段階でレスポンシブを意識することが大切です。

まとめ

まとめ
まとめ

ここまでReactにおけるレスポンシブデザインの基礎から、具体的なコンポーネント設計、メディアクエリの活用方法について詳しく解説してきました。現代のWeb開発において、モバイルフレンドリーであることはもはや必須条件です。ユーザーがどのデバイスからアクセスしても一貫した体験を提供できるよう、Reactのコンポーネント指向を最大限に活かした設計を心がけることが大切です。

レスポンシブコンポーネント設計の鍵

Reactで開発を行う際、単に「見た目を変える」だけでなく「構造をどう保つか」が重要になります。ステート(状態管理)を利用して、画面サイズに応じた表示の切り替えを行うことも可能です。例えば、ブラウザのウィンドウ幅を監視するカスタムフックを作成し、その数値に基づいてレンダリングするコンポーネントを動的に変更する手法も非常に効果的です。

実践的なレスポンシブ・カードコンポーネントの例

ここでは、学んだ内容を活かして、より実戦に近い「ニュースカード・コンポーネント」のコードを紹介します。このコードでは、パソコン画面では画像とテキストを横に並べ、スマートフォンなどの狭い画面では縦に積み重なるようなレイアウトを想定しています。


import React from "react";

const NewsCard = ({ title, description, imageUrl }) => {
  return (
    <div className="news-card">
      <div className="news-image-wrapper">
        <img src={imageUrl} alt={title} className="news-image" />
      </div>
      <div className="news-content">
        <h3 className="news-title">{title}</h3>
        <p className="news-description">{description}</p>
        <button className="news-button">詳細を読む</button>
      </div>
      <style jsx>{`
        .news-card {
          display: flex;
          border: 1px solid #ddd;
          border-radius: 8px;
          overflow: hidden;
          margin-bottom: 20px;
          background: #fff;
          transition: transform 0.2s;
        }
        .news-card:hover {
          transform: translateY(-5px);
          box-shadow: 0 4px 15px rgba(0,0,0,0.1);
        }
        .news-image-wrapper {
          flex: 1;
          min-width: 200px;
        }
        .news-image {
          width: 100%;
          height: 100%;
          object-fit: cover;
        }
        .news-content {
          flex: 2;
          padding: 20px;
        }
        .news-title {
          margin: 0 0 10px;
          font-size: 1.25rem;
        }
        .news-description {
          color: #666;
          font-size: 0.95rem;
          line-height: 1.6;
        }
        .news-button {
          margin-top: 15px;
          padding: 8px 16px;
          background-color: #0070f3;
          color: white;
          border: none;
          border-radius: 4px;
          cursor: pointer;
        }

        /* スマートフォン向けのスタイル調整 */
        @media (max-width: 768px) {
          .news-card {
            flex-direction: column;
          }
          .news-image-wrapper {
            height: 200px;
            width: 100%;
          }
          .news-content {
            padding: 15px;
          }
        }
      `}</style>
    </div>
  );
};

export default NewsCard;
(タブレットやPCでは画像が左、説明が右に並ぶ横長のデザインになります。画面幅が768px以下になると、画像が上、説明が下という縦並びのレイアウトに自動的に切り替わります)

このように、Reactのコンポーネント内でCSSを完結させる手法(CSS-in-JSやCSS Modulesなど)を使うことで、特定の部品に閉じたレスポンシブ対応が可能になります。これにより、他のページでこの NewsCard を再利用しても、常に最適なレイアウトが維持されるのです。

さらにステップアップするために

基本をマスターしたら、次は「ビューポート単位(vw/vh)」や「clamp()関数」といった高度なCSSプロパティをReactと組み合わせてみてください。また、画像についても img タグの srcset 属性を活用することで、画面サイズに応じて解像度の異なる画像を読み込ませる「真のレスポンシブ対応」が可能になります。これはページの読み込み速度向上にも繋がり、SEO対策としても非常に強力な武器になります。

Webの世界は日々進化していますが、Reactという強力なツールを使いこなせば、変化に強い柔軟なサイト作りが楽しめます。まずは小さなコンポーネントからレスポンシブ化を試していきましょう!

先生と生徒の振り返り会話

生徒

「先生、今回のまとめでコードを見たら、レスポンシブ対応ってCSSの力がかなり大きいんだなと感じました。」

先生

「その通りですね。Reactはあくまで『部品の構造や状態』を管理する役割で、その見た目をどう変化させるかはCSSが主役になります。でも、コンポーネントという単位でCSSを管理できるのがReactの強みなんですよ。」

生徒

「確かに!さっきのニュースカードみたいに、1つのファイルにスタイルまでまとまっていれば、他のプロジェクトに持っていってもそのままスマホ対応が維持されるんですね。」

先生

「その通り!それが再利用性の高さです。あと、スマホ対応は単に『小さくする』だけじゃなくて、指で押しやすいボタンの大きさや、読みやすい文字サイズに気を配ることも重要です。それが結局、Googleの評価にも繋がりますからね。」

生徒

「なるほど。ただレイアウトを崩さないだけじゃなくて、ユーザーが使いやすいかを考えるのが本当のレスポンシブなんですね。頑張って練習してみます!」

先生

「素晴らしい意気込みです。まずは自分の身の回りにあるサイトを、ブラウザの検証ツールでスマホ表示にして、どう変化しているか観察することから始めてみてくださいね。それが一番の勉強になりますよ。」

カテゴリの一覧へ
新着記事
New1
React
Reactコンポーネントの再利用と分割を完全マスター!初心者でもわかるコンポーネント設計
New2
React
ReactでAxiosインターセプターの使い方を完全ガイド!初心者でもわかるリクエストとレスポンスの処理方法
New3
React
JSXの書き方!初心者でもわかるReactタグと属性の基本ルール解説
New4
React
ReactとDockerを使った開発環境構築の基本を徹底解説!初心者でもわかるReactとDockerの連携方法
人気記事
No.1
Java&Spring記事人気No1
React
ReactでonChangeイベントを使ってフォーム入力値を管理する方法を初心者向けに解説
No.2
Java&Spring記事人気No2
React
Reactのイベントハンドリングのアンチパターンまとめ!初心者でもわかる注意点
No.3
Java&Spring記事人気No3
React
ReactとTypeScriptの環境構築をやさしく解説!Viteとtsconfigの設定も丁寧に紹介
No.4
Java&Spring記事人気No4
React
Reactのカスタムフックの作り方を完全ガイド!再利用可能なロジックを切り出す仕組み
No.5
Java&Spring記事人気No5
React
ReactでFetch APIのローディング状態を管理する方法|初心者にもわかる解説
No.6
Java&Spring記事人気No6
React
create-react-appでReactプロジェクトを作成する手順を初心者向けに完全解説!
No.7
Java&Spring記事人気No7
React
ReactのuseStateとuseEffectでよくあるエラーと解決方法ガイド!初心者でもわかるReactフック
No.8
Java&Spring記事人気No8
React
Reactでファイルアップロードを実装する方法を解説!Fetch APIで画像やPDFを送る仕組みを初心者向けに紹介