こんにちは。フロントエンドの世界へようこそ。
Reactを学び始めると、必ずと言っていいほど「あれ、これってどうやってデータを渡せばいいの?」という壁にぶつかります。特に「プロップドリリング(Props Drilling)」という言葉を聞いて、「なんだか難しそう…」と不安になった方もいるかもしれませんね。
大丈夫、安心してください。これは誰もが通る道です。今日は、この「データの受け渡し問題」を、身近な例えを交えて紐解いていきましょう。
—
プロップドリリングって、結局なに?
Reactでは、親コンポーネントから子コンポーネントへ「Props(プロップス)」という仕組みを使ってデータを渡します。これはちょうど、「お母さんが子どもにお小遣いを渡す」ようなものです。
しかし、もし「ひ孫」にお小遣いをあげたいとき、どうなるでしょうか?
1. お母さん → 子どもへ渡す
2. 子ども → 孫へ渡す
3. 孫 → ひ孫へ渡す
…と、全員が「はい、これ預かっておいて!」とバケツリレーをしなければなりません。途中の人たちは、そのお小遣いを使うわけでもないのに、ただ渡すためだけにコードを書く必要があります。これが「プロップドリリング」です。
コードが複雑になるほど、「あれ、これ誰のためのデータだっけ?」と迷子になり、メンテナンスが地獄のようになります。これを解消するのが、今日のメインテーマです。
—
解決策1:Context API(Reactの標準機能)
「バケツリレーが面倒なら、空中にデータを浮かせておいて、必要な人が勝手に手を伸ばして取ればいいんじゃない?」
これがContext APIの考え方です。これを使えば、途中の階層を飛ばして、いきなりひ孫にデータを届けることができます。
Contextを使った例
import React, { createContext, useContext } from ‘react’;
// 1. データを浮かべるための「箱(Context)」を作ります
const UserContext = createContext();
function App() {
const userName = “React初心者さん”;
return (
// 2. 「箱」の中にデータを入れます(Provider)
);
}
function Parent() { return
function Child() { return
function GrandChild() {
// 3. 必要な場所で「箱」からデータを取り出します(useContext)
const user = useContext(UserContext);
return
こんにちは、{user}さん!
;
}
解説:
見てください。`Parent`も`Child`も、中身のデータには一切触れていませんよね? これでコードはずいぶんスッキリしました。
—
解決策2:状態管理ライブラリ(Zustandなど)
アプリがさらに大きくなって、データが複雑に絡み合うようになると、Contextだけでは「データが変わるたびに全部再描画されて重い…」という悩みが出てくることがあります。
そんなとき、プロの現場では Zustand や Redux といった「状態管理ライブラリ」を使います。
例えるなら、Contextが「家のどこにでも置ける小物入れ」だとしたら、状態管理ライブラリは「家全体を管理するスマートホームのコントロールパネル」です。どこからでも安全に、かつ効率的にデータを取り出したり更新したりできます。
—
初学者のための「選び方」ガイド
「結局、どれを使えばいいの?」と迷ったら、以下の基準で選んでみてください。
1. まずは Props で渡してみる
- 2〜3階層なら、無理にライブラリを使う必要はありません。シンプルが一番です。
2. 「渡すためだけ」のコードが増えてきたら Context を使う
- ユーザーのログイン情報や、アプリ全体のテーマ設定など「どこでも使うデータ」にはContextが最適です。
3. データが複雑で、頻繁に書き換わるならライブラリを検討
- アプリが成長して、特定のデータがいろんな場所から操作されるようになったら、Zustandのようなライブラリを導入しましょう。
—
最後に:完璧主義を捨てよう
Reactのアーキテクチャを設計するとき、一番大切なのは「最初から完璧な構成を目指さないこと」です。
最初からすべてをライブラリでガチガチに固めると、かえって開発が重くなります。まずは「あ、今バケツリレーしてるな」と気づくこと。それができれば、あなたはもう十分に素晴らしいエンジニアへの第一歩を踏み出しています。
コードは書けば書くほど、「もっと綺麗にできるかも」という欲が出てくるはずです。その感覚を大切に、少しずつリファクタリング(書き直し)を楽しんでくださいね。
応援しています!困ったときは、いつでもまた聞きに来てください。

コメント