TypeError: is not a function

生田 陸人
LuaGate エンジニア / 現役エンジニア
編集 LuaGate編集部

このレッスンで分かること

  • この記事では「TypeError: is not a function」を デバッグ基礎 の現場で使える形で整理します
  • "is not a function" エラー をおさえれば、現場で迷ったときに立ち戻れる
  • よくある原因 をおさえれば、現場で迷ったときに立ち戻れる
  • エラーメッセージの読み方 をおさえれば、現場で迷ったときに立ち戻れる
  • 原因を切り分ける流れ をおさえれば、現場で迷ったときに立ち戻れる

TypeError とは

関数でないものを関数として呼び出したときのエラーを理解します。本レッスンでは、TypeError の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。

"is not a function" エラー

このエラーは、関数 ではないものを () で呼び出そうとしたときに発生します。

TypeError — 値の 型が想定と違う ときに投げられる 実行時エラーis not a function は「呼び出そうとした対象が関数ではなかった」ことを示します。

よくある原因

  1. プロパティと関数の混同: array.length()array.length
  2. メソッド名のタイポ: array.puch()array.push()
  3. 変数の上書き: 関数を別の値で上書きしてしまった

エラーメッセージの読み方

プレーンテキスト

TypeError: str.push is not a function

str.push は関数ではない」= strpush メソッドが存在しない(str は配列ではない)

重要なのは 左側の型を疑う こと。str.push なら「str は本当に 配列 か?」を最初に確認すると、原因切り分けが速くなります。

原因を切り分ける流れ

diagram (will load when visible)

解決のコツ

  1. エラーの対象が何の か確認
  2. その に対して正しい メソッド を使っているか確認
  3. プロパティ vs メソッド() が必要か)を確認

プロパティとメソッドの違い

diagram (will load when visible)

現場でよくある具体例

  1. 現場ケース 1 — 「本番だけ落ちる」謎エラーが、環境変数の NODE_ENV 違いで設定ファイルを切り替えていなかったことが原因。二分探索でコミットを絞り 30 分で解決
  2. 現場ケース 2 — フロントの無限ローディングは、useEffect 依存配列に毎レンダー新しい関数を渡していた。React DevTools のレンダー回数で気づけた
  3. 現場ケース 3 — DB の遅いクエリは EXPLAIN でフルスキャン発覚。複合インデックス追加で 300 倍速く。「測ってから直す」の典型例

次にとるべきアクション

  1. 直近 1 週間で詰まったエラーを 1 つ思い出す — そのエラーに「TypeError: is not a function」で学んだアプローチを適用してみる
  2. デバッグメモのテンプレを自分用に作る — 現象・再現手順・仮説・検証結果の 4 項目を markdown で固定化する
  3. console.log だけで解いていた問題に DevTools のブレークポイントを使う — ステップ実行を 1 回でも体験する

次のレッスン

次は TypeError: null参照エラー で、関数でないものを関数として呼び出したときのエラーを理解します を学びます。

事前確認 — 進む前に次の 3 つができることを確認しましょう。

  1. 型:関数ではない の要点を自分の言葉で説明できる
  2. このレッスンの最小コード (または操作手順) を見ずに書ける
  3. 練習問題やクイズで間違えた箇所を読み直して理解した

理解度チェック (30 秒)

Q. 型:関数ではない とは何か、1 文で説明してください。

この章のポイント

A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。

関連レッスン

参考にした出典

学習を加速したい方へ

デバッグの基礎ガイドを体系的にマスターするなら、chotdekiru の無料学習ポータル で実際に手を動かして学習を始めるのがおすすめです。質問・つまずきも現役エンジニアが伴走します。

入出力例

test-cases.txt

出力: "5 Hello! 6"

ヒント

main.js
main.js
学習モード

メモ

TypeError: is not a function

⌘S で保存