前回はアロー関数 × コールバック関数の実践テクニックについて紹介しました。

今回はアロー関数とコールバック関数をChatGPTに変換してもらおうについて紹介していきます。
![]() |
1冊ですべて身につくJavaScript入門講座 [ Mana ] 価格:2794円 |
アロー関数とコールバック関数をChatGPTに変換してもらおう!書き換えドリルで腕試し
はじめに
JavaScriptの**アロー関数とコールバック関数は、開発において頻出する重要な機能です。よりモダンで読みやすいコードを書くために、従来のコールバック関数をアロー関数で書き換える場面も多いでしょう。また近年話題のChatGPT**を使えば、こうしたコードの書き換え作業を手助けしてもらうことも可能です。 本記事では、JavaScriptのコールバック関数とアロー関数の基礎を軽く振り返りつつ、ChatGPTにコードの書き換えを依頼する方法を解説します。実際のコード例を使った書き換えドリル形式で、ChatGPTへの**プロンプト(指示文)の例や注意点も紹介します。中級者の方が復習しながら腕試しできる内容になっています。これを読めば、JavaScript**のコールバックをアロー関数へスムーズにリファクタリングし、ChatGPTをコーディング補助に活用するコツがつかめるでしょう。
コールバック関数とは?
まずは**コールバック関数**の基本をおさらいしましょう。コールバック関数とは、別の関数に引数として渡される関数のことです。ある関数の中で、渡した関数(コールバック)を実行することで処理のカスタマイズや後続処理を行います。例えば、配列の各要素に対して処理を行う汎用関数に、具体的な処理内容を関数で渡す場合などによく使われます。 以下は簡単な例です。配列の各要素を出力する汎用関数 processArray を定義し、その動作をコールバック関数で指定しています。
function processArray(arr, callback) {
for (let i = 0; i < arr.length; i++) {
callback(arr[i]); // 各要素に対してコールバック関数を実行
}
}
// 利用例 const numbers = [1, 2, 3]; function printDouble(num) { console.log(num * 2); } processArray(numbers, printDouble); // 実行結果: 2, 4, 6 が順に出力される
上記では、printDoubleがコールバック関数としてprocessArrayに渡され、配列の要素ごとに呼び出されています。このようにコールバック関数を使うと、関数の挙動をパラメータで切り替えることができます。コールバックは非同期処理やイベントハンドリングにも頻繁に利用され、JavaScriptの柔軟な設計に欠かせない概念です。
アロー関数とは?
次に**アロー関数について振り返ります。アロー関数(Arrow Function)はES6で導入された新しい関数の書き方で、記述を簡潔にできる点が特徴です。従来のfunctionキーワードを使う関数表現に比べ、=>(太い矢印)を使った省略記法**でコードを短く書けます。 例えば、2つの数の合計を計算する関数を通常の関数式とアロー関数で書き比べてみましょう。
// 従来の関数式による定義
const add = function(x, y) {
return x + y;
};
// アロー関数による定義
const addArrow = (x, y) => {
return x + y;
};
両者は同じ動作をしますが、アロー関数ではfunctionというキーワードが不要な分だけコードが短くなっています。さらに関数本体が単一の式であれば、ブロック({})とreturnも省略可能です。例えば上記のaddArrowは次のように一行で書くこともできます。 const addArrow = (x, y) => x + y; このようにアロー関数を使うと簡潔にコールバック関数を書くことができます qiita.com
実際、ES6以降は配列操作やイベント処理のコールバックでアロー関数を使うケースが非常に一般的です。 アロー関数にはシンタックスシュガー(糖衣構文)的な利点だけでなく、いくつか重要な仕様上の違いもあります。主な特徴・注意点をまとめます。
簡潔な構文:functionキーワードの代わりに=>を使用し、引数が1つだけの場合は括弧も省略可能。戻り値が単一式ならreturnも省略できます。
thisが静的:アロー関数は自分自身のthisやargumentsを持ちません。関数内でthisを使うと、**外側のthis**がそのまま参照されます(= レキシカルスコープ)。そのため、オブジェクトのメソッドとしては使えず、コンストラクタ関数としてnewで呼び出すこともできません。
常に匿名:アロー関数には固有の名前がなく、再帰呼び出しなどで自分自身を参照することができません(必要な場合は従来の名前付き関数を使います)。
その他:アロー関数はyieldを含むことができない(ジェネレーターにできない)など、従来の関数に比べていくつかの制限があります。ただし通常のコールバック用途であれば問題になることは少ないでしょう。
以上のように、**アロー関数**はシンプルな記法でコールバックを書くのに適しています。しかしthisの扱いが従来の関数と異なるため、使い所を誤ると思わぬ不具合を生む点には注意が必要です(この点は後述します)。
ChatGPTでコードを書き換えてもらおう
基礎をおさらいしたところで、いよいよ**ChatGPTを使ったコードの書き換えに挑戦してみましょう。ChatGPTは高度な自然言語処理AIであり、人間のような対話でコードの生成や変換、解説をしてくれます。うまく活用すれば、自分の書いたコードを別の書き方にリファクタリング**したり、難解なコードを平易に書き換えたりするのに役立ちます。 今回のテーマは「コールバック関数 ⇔ アロー関数」の書き換えです。例えば、従来のコールバック関数で書かれたコードをアロー関数を使ったモダンな書き方に変換する、といったことをChatGPTにお願いできます。逆に、アロー関数で書かれたコードをあえて従来の記法に直すような変換も可能です。プロンプト(指示文)次第で、ChatGPTは柔軟にコードを書き換えてくれるのです。
ChatGPTへの指示のコツ
ChatGPTにコード変換を依頼する際は、いくつかコツがあります。
変換したいコードをできるだけ具体的に伝える:コード全文をそのまま貼り付け、「このコードを○○な書き方に書き換えてください」と依頼すると良いでしょう。部分的な抜粋やあいまいな指示だと、誤解を生む可能性があります。
望む結果を明確に指定する:例えば「コールバック関数を使った書き方に変えてください」や「アロー関数(=>)を使った書き方にしてください」のように、具体的にどのように書き換えてほしいかを伝えます。単に「リファクタリングしてください」だけでは、どのような変更を期待しているのかAIに伝わりません。
説明も併せて求める(必要に応じて):ただコードが欲しいだけでなく、なぜそのように書き換えられたのか知りたい場合は「変換後のコードの説明もお願いします」などと付け加えると良いでしょう。ChatGPTはコードを提示するだけでなく、それについての解説も与えてくれます。
結果は必ず自分でも確認・テストする:ChatGPTの出力が常に完全に正しい保証はありません。不適切な変換やバグが紛れ込む可能性もゼロではないため、提案されたコードは自分でも動作確認する習慣を持ちましょう。
それでは、具体的にChatGPTでコードを書き換える例を見ていきます。ここでは書き換えドリルとして、いくつかのコード例を実際に変換し、その結果を確認してみましょう。自分ならどう書き換えるか考えながら読むことで、理解が深まります。
書き換えドリル:ChatGPTでコード変換を実践
それではコールバック関数とアロー関数の書き換えドリルを始めます。各例で、まず元のコードを提示し、ChatGPTに依頼するプロンプトと、その回答として得られた書き換え後のコードを紹介します。どのようにコードが変化するか、一緒に確認してみましょう。
例1: 配列処理のコールバックを書き換え
問題(変換前のコード): 配列の各要素を2倍にして新しい配列を返す処理が、従来のコールバック関数で書かれています。これをアロー関数を使った書き方に書き換えてみましょう。
// 変換前: 通常の無名関数をコールバックに使用 const numbers = [1, 2, 3]; const doubled = numbers.map(function(num) { return num * 2; }); console.log(doubled); // 出力: [2, 4, 6] ChatGPTへのプロンプト例: 「上記のコードを、コールバックにアロー関数を使用するように書き換えてください。」 ChatGPTの回答例: ChatGPTに依頼すると、次のようにアロー関数を使った簡潔なコードを提案してくれました。
// 変換後: アロー関数をコールバックに使用 const numbers = [1, 2, 3]; const doubled = numbers.map(num => num * 2); console.log(doubled); // 出力: [2, 4, 6]
解説: function(num) { return num * 2; }という無名関数が、num => num * 2というアロー関数に置き換わっています。機能自体は同じですが、かなりスッキリしましたね。特にこの例ではアロー関数によってreturnの記述も省略できています(1行で即時に値を返す場合)。ChatGPTはこのように元のコードの構造を保ちつつ、よりモダンな書き方へと変換してくれます。
例2: タイマー処理のコールバックを書き換え
問題: setTimeoutを使って一定時間後に実行されるコールバック関数が、従来の書き方になっています。これをアロー関数で書き換えてみましょう。
// 変換前: setTimeoutに通常の関数を渡している setTimeout(function() { console.log("Hello!"); }, 1000);
ChatGPTへのプロンプト例: 「setTimeout内の無名関数をアロー関数に書き換えてください。」 ChatGPTの回答例: // 変換後: アロー関数を使用したsetTimeoutコールバック setTimeout(() => { console.log("Hello!"); }, 1000);
解説: コールバック部分がfunction() { ... }から() => { ... }に置き換わりました。今回のケースでは関数に引数が無いので、アロー関数では()を使って引数リストが空であることを示しています。中身の処理は一行ですが、console.log("Hello!");自体は値を返す式ではないため、このように波括弧 {} で囲んで書いてあります(戻り値を使わない場合はこの形式になります)。結果として、動作は1秒後に"Hello!"と出力する点で元のコードと全く同じです。 ChatGPTは上記のようにシンプルな変換も瞬時に行ってくれます。人間にとって明白な置き換えでも、複数箇所にわたる場合は手作業で漏れが起きがちですが、AIに任せれば一貫して変換できるのが利点です。 例3: コールバック書き換え時の注意点(thisの罠) 問題: オブジェクトのメソッド内でthisを使っている場合の書き換えには注意が必要です。次のコードでは、オブジェクトのメソッドにコールバック関数を渡しています。このメソッドを安易にアロー関数に書き換えるとどうなるでしょうか? const user = { name: "Alice", greet: function() { setTimeout(function() { console.log("Hello, " + this.name); }, 500); } }; user.greet();
上記のgreetメソッドでは、setTimeout内のコールバック関数でthis.nameを参照しています。従来の関数の場合、setTimeoutに渡した無名関数のthisは実行時に決まる文脈(グローバルオブジェクトかundefined)ですが、greetがメソッドとして呼ばれた場合でも別オブジェクト上での呼び出しとなるため、このthis.nameは期待通りには動作しません(この例ではブラウザ環境ではwindow.nameを指す可能性があります)。 では、この部分をChatGPTに「アロー関数に書き換えてください」と依頼したと想像してみてください。ChatGPTは言われた通り次のように変換するかもしれません。
// ChatGPTが提案した可能性のある変換(注意) const user = { name: "Alice", greet: function() { setTimeout(() => { console.log("Hello, " + this.name); }, 500); } }; user.greet();
一見、シンプルにアロー関数へ置き換わっています。しかし、このコードを実行しても"Hello, Alice"とは表示されません。なぜなら、アロー関数にしたことでthisの挙動が変わってしまったからです。前述の通り、アロー関数は自身のthisを持たず外側のthisに束縛されるため、setTimeoutのコールバック内で使われたthisはgreetメソッドの外側(グローバル)のthisを参照してしまいます。その結果、this.nameはuser.nameではなくグローバルなname変数(定義されていなければundefined)を参照してしまいます。 この例の正しい対処は、アロー関数を使わずにthisを変数に保存する、もしくはbindを使って明示的にthisを固定することです。例えば次のように書き換える方法があります(参考までに記載します)。 // this を変数 that に保存してから使う方法 greet: function() { const that = this; setTimeout(function() { console.log("Hello, " + that.name); }, 500); }
このように、アロー関数への書き換えは便利ですが、thisキーワードの挙動が変わるケースでは注意が必要です。ChatGPTも万能ではないため、状況によっては誤った変換を提案してしまう可能性があります。特にオブジェクトのメソッドやイベントハンドラ内でthisを使っている場合、そのままアロー関数に置き換えてよいかどうか慎重に判断しましょう。必要であれば、プロンプトで「この部分は変更しないでください」と指示することも可能ですし、提案後のコードを見て不具合がないか確認することも大切です。
まとめ
今回は**コールバック関数とアロー関数の基礎を振り返りつつ、ChatGPTを使ったコード書き換えの方法を紹介しました。ChatGPT**にプロンプトを与えることで、簡単な置き換えから少し複雑なリファクタリングまで、自動でコード変換を行えることがお分かりいただけたと思います。 JavaScriptのコールバックをアロー関数で書き直すテクニックは、コードの可読性や保守性を高める上で有用です。ChatGPTはその練習相手として、あるいは自分の解答のチェック役として活用できます。ぜひ本記事の書き換えドリルを参考に、ご自身でも色々なコードをChatGPTに投げかけてみてください。適切なプロンプトを書けば、きっと期待通りの回答が得られるはずです。 最後に、ChatGPTの提案に頼り切りにせず、自分の目で確認・理解する姿勢も忘れないようにしましょう。AIを上手に使いこなすことで、効率良くスキルアップしていけると良いですね。コードの書き換えに迷ったら、ぜひChatGPTをあなたのペアプログラマー代わりに活用してみてください。開発の新たな一面がきっと見えてくるでしょう。
以上が今回は、アロー関数とコールバック関数をChatGPTに変換する方法についての紹介です。
次回は関数の宣言、呼び出し、引数、戻り値についてChatGPTと紹介したいと思います。