Reactの世界へようこそ!最初にこの扉を叩いたとき、誰もが一度は「あれ?何でこれ、2回動いてるの?」という不思議な体験をします。
ブラウザのコンソールを見て「`console.log` が2回出てる!」と驚いて、自分の書いたコードにバグがあるのかと焦った経験はありませんか?実はそれ、あなたがバグを書いたわけではなく、Reactがあなたを「守ろう」としてくれている証拠なんです。
今回は、React開発の守護神とも言える「Strict Mode(ストリクトモード)」について、エンジニアの現場の空気感を含めて優しく紐解いていきましょう。
—
Strict Modeって、結局何をしてるの?
一言でいうと、Strict Modeは「開発中の用心深いマネージャー」です。
あなたがコードを書いているとき、Reactは本番環境では絶対にやらない「ちょっとお節介なチェック」を裏側で行います。その代表的なものが「コンポーネントの二重レンダリング」です。
「お買い物」で例えるなら?
あなたが新しく買った家具を組み立てるシーンを想像してください。
Strict Modeは、あなたの横でずっと監視している「超・慎重なアドバイザー」です。
1. 一度組み立てる: 「はい、まずは完成。でも、これ本当に正しく組み立てられたかな?」
2. もう一度やり直す: 「念のため、もう一回バラして最初から組み立ててみよう。同じ手順で同じ完成形になるよね?」
もし、2回目に組み立てたときに「あれ?ネジが余ったぞ?」とか「さっきと形が違うぞ?」ということが起きたら、それは「組み立て手順(=あなたの書いたコード)に、どこか不安定な要素がある」というサインです。
Strict Modeは、あえて「もう一回やる」ことで、「君の書いたコードは、何度やり直しても同じ結果を返せるほど堅牢かな?」というテストをしてくれているわけですね。
—
なぜ「2回」も動かす必要があるの?
Reactのコンポーネントは、本来「純粋(ピュア)」であるべきだとされています。つまり、「同じ入力(props)なら、何度実行しても必ず同じ結果(UI)を返す」というルールです。
もし、あなたがコンポーネントの中で「実行するたびに変数が変わってしまう」ような書き方(副作用)をしていると、画面がチラついたり、データの整合性が取れなくなったりします。
Strict Modeは、「コードが『副作用』を隠し持っていないか?」を強制的に洗い出してくれるのです。これに気づかずに本番環境へリリースしてしまうと、ユーザーの手元で「なぜか値がズレる」「表示がおかしい」といった、再現が非常に難しい不具合を生む原因になります。
—
実際のコードで確認してみよう
Reactのプロジェクトを作成すると、最初から `index.js`(または `main.jsx`)の中に `
import React from ‘react’;
import ReactDOM from ‘react-dom/client’;
import App from ‘./App’;
const root = ReactDOM.createRoot(document.getElementById(‘root’));
root.render(
// このタグが「Strict Mode」です。
// これで囲まれたコンポーネントは、開発中に「2回レンダリング」されます。
);
もし、`App.js` の中で `console.log(“こんにちは!”)` と書くと、開発中のブラウザコンソールには「こんにちは!」が2回表示されます。
「ええっ、壊れてるの?」と不安にならなくて大丈夫ですよ!
これは「ちゃんと2回動かしても問題ないか、君のコードを確認したよ」というReactからのサインです。
—
初学者がつまずきやすいポイント
この「2回動く」仕様のせいで、たまに困ったことが起きます。
- APIリクエストを2回飛ばしてしまう:
`useEffect` の中でデータを取得する処理を書くと、開発中は2回リクエストが飛ぶことがあります。これは「サーバーに無駄な負荷をかけるのでは?」と心配になりますよね。
- カウンターが2ずつ増えてしまう:
これも「おや?」となるポイントです。
でも、安心してください。
これはあくまで「開発用」の動作です。本番環境(ビルド後)では1回しか実行されません。むしろ、この「2回動く」ことでAPI呼び出しの重複などのバグを早期発見できるため、「あえて放置して、コードをより安全な状態に書き換える」のがプロの現場の流儀です。
—
最後に:Strict Modeと仲良くしよう
Strict Modeは、厳格な先生のような存在です。最初は「うるさいな」と感じるかもしれませんが、彼のおかげで、私たちは「隠れたバグ」をリリース前に見つけることができます。
もし開発中に「あれ、これおかしいな?」と思ったら、それはReactがあなたに「ここ、もうちょっと工夫できるよ!」とヒントをくれている証拠です。
「警告が出た!どうしよう!」とパニックにならず、「なるほど、Reactが教えてくれたんだな」と深呼吸してみてください。 その一呼吸が、あなたの書くコードを世界一堅牢なものに変えていくはずです。
迷ったときはいつでも戻ってきてください。私たちは、あなたのフロントエンド・エンジニアとしての旅路をいつでも応援しています。それでは、快適なReactライフを!

コメント