カテゴリ: JavaScript 更新日: 2026/05/11

JavaScriptのコールバック関数の使い方を実践例でわかりやすく解説!初心者向けガイド

JavaScriptのコールバック関数の使い方を実践例で学ぼう
JavaScriptのコールバック関数の使い方を実践例で学ぼう

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

生徒

「先生、JavaScriptで関数の中に別の関数を渡すって聞いたんですけど、どういう意味ですか?」

先生

「それはコールバック関数と呼ばれるもので、関数に処理を任せたいときに使います。簡単に言うと、『この処理が終わったら次の処理をやってね』と関数に教える方法です。」

生徒

「なるほど。でも具体的にどうやって書くんですか?」

先生

「それでは、まず基本的な使い方を順番に見ていきましょう!」

1. コールバック関数とは何か?

1. コールバック関数とは何か?
1. コールバック関数とは何か?

JavaScriptのコールバック関数とは、別の関数に引数として渡され、特定のタイミングで呼び出される関数のことです。プログラムの処理の順番を制御したり、非同期処理で結果を受け取るときによく使います。例えば、ボタンを押した後に実行する処理や、データを取得した後に行う処理などです。

2. コールバック関数の基本的な書き方

2. コールバック関数の基本的な書き方
2. コールバック関数の基本的な書き方

まずは基本形から学びましょう。以下の例では、関数greetcallbackという関数を受け取り、処理の最後に呼び出します。


function greet(name, callback) {
  console.log("こんにちは、" + name + "さん!");
  callback();
}

function sayGoodbye() {
  console.log("さようなら!");
}

greet("太郎", sayGoodbye);

こんにちは、太郎さん!
さようなら!

このようにsayGoodbye関数がgreet関数の中で呼ばれることがわかります。

3. 配列とコールバック関数の組み合わせ

3. 配列とコールバック関数の組み合わせ
3. 配列とコールバック関数の組み合わせ

JavaScriptでは配列の要素を処理するときにもコールバック関数がよく使われます。例えば、配列の各要素を2倍にする処理です。


const numbers = [1, 2, 3, 4, 5];

const doubled = numbers.map(function(num) {
  return num * 2;
});

console.log(doubled);

[2, 4, 6, 8, 10]

ここではmapメソッドに関数を渡して、配列の各要素を処理しています。渡された関数がコールバック関数です。

4. 無名関数を使ったコールバック

4. 無名関数を使ったコールバック
4. 無名関数を使ったコールバック

関数を名前なしで直接渡すこともできます。これを無名関数(匿名関数)と呼びます。短い処理をその場で書きたいときに便利です。


setTimeout(function() {
  console.log("3秒経過しました!");
}, 3000);

3秒経過しました!

この例ではsetTimeout関数に無名関数を渡しています。3秒後にコールバック関数が実行されます。

5. アロー関数で簡単に書く

5. アロー関数で簡単に書く
5. アロー関数で簡単に書く

ES6から使えるアロー関数を使うと、より簡潔にコールバック関数を書けます。


const fruits = ["りんご", "みかん", "バナナ"];

fruits.forEach(fruit => console.log(fruit));

りんご
みかん
バナナ

ここではforEachメソッドにアロー関数を渡して、配列の各要素を表示しています。

6. コールバック関数で非同期処理を体験する

6. コールバック関数で非同期処理を体験する
6. コールバック関数で非同期処理を体験する

非同期処理とは、データの取得やファイル読み込みなど、完了まで時間がかかる処理のことです。コールバック関数を使うことで、処理が終わった後に次の動作を行えます。


function fetchData(callback) {
  setTimeout(() => {
    const data = "サンプルデータ";
    callback(data);
  }, 2000);
}

fetchData(function(result) {
  console.log("取得したデータ:" + result);
});

取得したデータ:サンプルデータ

この例では2秒後にコールバック関数が呼ばれ、取得したデータを表示しています。

7. コールバック関数の注意点とコツ

7. コールバック関数の注意点とコツ
7. コールバック関数の注意点とコツ

コールバック関数を使うと便利ですが、ネストが深くなりすぎるとコードが読みにくくなります。これを「コールバック地獄」と呼びます。解決策として、Promiseやasync/awaitを使う方法もありますが、まずは基本のコールバックの書き方をしっかり理解することが大切です。

8. コールバック関数を活用してプログラムを整理する

8. コールバック関数を活用してプログラムを整理する
8. コールバック関数を活用してプログラムを整理する

コールバック関数を上手に使うと、同じ処理を何度も書かずに再利用でき、プログラムの整理がしやすくなります。例えば、ボタンのクリックイベントや配列の操作、非同期処理の結果受け取りなど、多くの場面で活用できます。


function processData(data, callback) {
  const processed = data + "を加工しました";
  callback(processed);
}

processData("サンプル", result => console.log(result));

サンプルを加工しました

まとめ

まとめ
まとめ

今回の記事では、JavaScriptのコールバック関数の基本から応用まで、初心者向けにわかりやすく解説しました。コールバック関数は、関数に別の関数を渡し、特定のタイミングで呼び出すことで処理の順序を制御したり、非同期処理で結果を受け取ったりする際に非常に便利です。まずは基本形として、関数に引数として渡す方法や、無名関数やアロー関数で簡潔に書く方法を紹介しました。さらに、配列操作や非同期処理での活用例も具体的に示しました。

配列の各要素に処理を行う場合には、mapforEachを使うことで、繰り返し処理を簡単に書くことができます。また、非同期処理ではsetTimeoutやデータ取得の例を通して、コールバック関数を使うことで処理が完了したタイミングで次の処理を行えることがわかりました。これにより、ユーザーの操作に応じた動的なプログラムや、外部データの読み込み後の処理などもスムーズに実装可能です。

コールバック関数を使う際の注意点として、ネストが深くなりすぎると「コールバック地獄」と呼ばれる状態になり、コードの可読性が下がることがあります。複雑な非同期処理を扱う場合は、Promiseやasync/awaitを組み合わせることで可読性を高めることが可能です。しかし、まずは基本的なコールバック関数の仕組みと使い方を理解することが重要です。

また、コールバック関数を使うことで同じ処理を再利用したり、プログラムを整理したりすることもできます。例えば、ボタンのクリックイベントや配列の要素処理、非同期で取得したデータの加工処理など、さまざまな場面で活用できます。実際に手を動かしてコードを書くことで、理解が深まり、実務でも役立つスキルになります。

サンプルプログラムの振り返り

基本形としてのコールバック関数:

 function greet(name, callback) { console.log("こんにちは、" + name + "さん!"); callback(); }
greet("花子", function() {
console.log("またね!");
});

こんにちは、花子さん!
またね!

配列操作でのコールバック関数:


const nums = [10, 20, 30];

const squares = nums.map(num => num * num);

console.log(squares);

[100, 400, 900]

非同期処理でのコールバック関数:


function getData(callback) {
setTimeout(() => {
const data = "非同期データ";
callback(data);
}, 1500);
}

getData(result => console.log("取得結果:" + result));

取得結果:非同期データ
先生と生徒の振り返り会話

生徒

「先生、今回のコールバック関数の話、なんとなく理解できました。特に非同期処理で処理が終わったあとに関数を呼ぶのが面白かったです。」

先生

「そうですね。コールバック関数を理解すると、非同期処理の流れを自然に書けるようになります。ネストが深くなると読みにくくなるので、その場合はPromiseやasync/awaitも覚えると良いですよ。」

生徒

「なるほど、まずは基本のコールバック関数をしっかり理解してから、より複雑な非同期処理に挑戦するということですね。」

先生

「その通りです。あと、配列操作やイベント処理など、再利用できる部分でコールバック関数を使うと、コードが整理されて効率よく書けます。実際に自分で手を動かして練習することが上達への近道です。」

生徒

「わかりました!今日教わったサンプルコードを自分でも試してみます。」

カテゴリの一覧へ
新着記事
New1
TypeScript
TypeScriptの関数に型をつける方法(引数・戻り値)を初心者向けに徹底解説!
New2
TypeScript
TypeScriptの始め方:開発環境の構築手順【初心者向け】
New3
TypeScript
TypeScriptでExpressのミドルウェアを型安全に定義する方法!バックエンド開発の初心者向け解説
New4
JavaScript
JavaScriptのfilterメソッドで条件に合う要素を抽出する方法
人気記事
No.1
Java&Spring記事人気No1
JavaScript
JavaScriptでフォームの値を取得する方法を徹底解説!valueプロパティの使い道
No.2
Java&Spring記事人気No2
JavaScript
JavaScriptでHTML5バリデーションAPIを使いこなす!初心者でもわかるフォーム入力チェック
No.3
Java&Spring記事人気No3
TypeScript
TypeScriptでコメントを書く正しい書き方と使い分け【初心者向けにやさしく解説】
No.4
Java&Spring記事人気No4
TypeScript
TypeScript学習におすすめの無料教材・リファレンスサイト【初心者向け】
No.5
Java&Spring記事人気No5
JavaScript
JavaScriptで要素を削除する方法(removeChild, removeなど)
No.6
Java&Spring記事人気No6
JavaScript
JavaScriptのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.7
Java&Spring記事人気No7
JavaScript
JavaScriptの配列操作でよくあるエラーとその解決法まとめ
No.8
Java&Spring記事人気No8
JavaScript
JavaScriptでオブジェクト指向のカプセル化を学ぶ!初心者でもわかるクラスとプロパティの保護方法