Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】JavaScript Arrow Functions Explained: Guide to ES6+ Syntax

2025年10月04日に「Dev.to」が公開したITニュース「JavaScript Arrow Functions Explained: Guide to ES6+ Syntax」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

JavaScriptのアロー関数は、ES6+で導入された機能で、従来の関数をより短く簡潔に記述できる。コードが読みやすくなり、モダンJavaScriptを書く上で重要だ。「this」キーワードの挙動が従来の関数と異なり、周囲のスコープに固定されるのが特徴だ。

ITニュース解説

JavaScriptというプログラミング言語は、常に進化を続けており、開発者がより効率的で読みやすいコードを書けるように、新しい機能が次々と追加されている。その中でも、特に重要な機能の一つとして「アロー関数」(Arrow Functions)が挙げられる。これは、ECMAScript 2015、通称ES6(あるいはそれ以降のES6+)で導入されたもので、JavaScriptの関数記述をより短く、そして直感的にする画期的な方法として注目されている。システムエンジニアを目指す初心者にとって、アロー関数を理解することは、現代のJavaScriptを使いこなし、プロフェッショナルなコードを書くための大きな一歩となる。

アロー関数が誕生する以前、JavaScriptで関数を定義する方法は、やや冗長に感じられることがあった。例えば、特定の処理を実行し、結果を返す簡単な関数を書く場合でも、「function」というキーワードを使い、関数の名前を記述し、引数があればそれを括弧で囲み、そして処理内容を波括弧で囲む必要があった。これは基本的な記述方法であり、間違いではないが、コード量が増えるにつれて、視覚的にごちゃごちゃして見えたり、タイプ量が増えたりする原因にもなった。アロー関数は、この冗長さを解消し、より簡潔な構文を提供することで、コードの可読性と記述速度を向上させることを目指している。

具体的な例を見てみよう。もしあなたが「Hello, [名前]!」という挨拶文を生成する関数を書きたい場合、従来の記述では次のようになるだろう。

function greet(name) { return 'Hello, ' + name + '!'; }

これに対し、アロー関数を使うと、同じ機能を次のように非常に短く書ける。

const greet = (name) => 'Hello, ' + name + '!';

この二つのコードは、まったく同じ動作をする。しかし、アロー関数版の方が「function」キーワードがなくなり、引数の括弧の後に「=>」(アロー、矢印)が置かれ、その後に直接処理内容が続いているのがわかる。これにより、コードが視覚的にすっきりとし、何をする関数なのかが一目で理解しやすくなるというメリットがある。この短縮された構文は、特に簡単な処理を行う関数でその効果を最大限に発揮する。

アロー関数の短縮構文の恩恵はこれだけにとどまらない。もし関数がたった一つの式の結果を返すだけであれば、さらに簡潔に記述することが可能だ。具体的には、関数の本体を囲む波括弧 {} と、結果を返すことを示す return キーワードを省略できる。この特徴は、非常にシンプルな計算や値の加工を行う関数で特に役立つ。

例えば、二つの数値を合計する関数を考えてみよう。

const add = (a, b) => a + b; console.log(add(2, 8)); // 出力結果は 10

この例では、add関数はabという二つの引数を受け取り、それらを合計した結果を返す。通常の関数であれば{ return a + b; }と記述する部分が、アロー関数ではa + bと直接記述されている。これにより、コードが非常に短くなり、何が行われているのかがより明確になる。このシンプルさが、アロー関数が開発者の間で広く支持される理由の一つである。

しかし、アロー関数と通常の関数には、構文の短縮以外にも重要な違いがある。それは、thisというキーワードの扱い方である。thisはJavaScriptにおける特殊なキーワードで、それが指すオブジェクトは、関数がどのように呼び出されたかによって変化する。この挙動は、JavaScript初心者にとって非常に混乱しやすいポイントの一つだ。通常の関数では、関数がメソッドとしてオブジェクトから呼び出された場合、thisはそのオブジェクトを指す。しかし、独立した関数として呼び出された場合や、イベントハンドラとして使われた場合など、様々な状況でthisが指すものが変わる可能性がある。

アロー関数は、このthisの挙動を根本的に変更する。アロー関数内でのthisは、そのアロー関数が定義された「囲むスコープ」(レキシカルスコープと呼ばれる)のthisの値を継承する。これは、アロー関数が自分自身のthisの値を「持たない」ということを意味する。その代わりに、アロー関数は親となるスコープ、つまりアロー関数が書かれている場所の外側のthisの値をそのまま利用するのだ。

この違いを理解するために、具体的な例を見てみよう。

const person = { name: "Wisdom", greet: () => { console.log(Hi, I'm ${this.name}); } }; person.greet(); // Hi, I'm undefined

このコードでは、personというオブジェクトがあり、その中にnameプロパティとgreetメソッドが定義されている。greetメソッドはアロー関数として書かれている。person.greet()を呼び出すと、「Hi, I'm undefined」と表示されることに気づくだろう。なぜundefinedになるのだろうか?

通常の関数であれば、greetメソッドがpersonオブジェクトから呼び出された場合、その関数内のthispersonオブジェクト自身を指すため、this.name"Wisdom"となるはずだ。しかし、このケースではgreetがアロー関数であるため、アロー関数は自分自身のthisを持たない。アロー関数は、それが定義された「囲むスコープ」のthisを継承する。このgreetアロー関数が定義されているのは、大域スコープ(グローバルスコープ)の直下、あるいはJavaScriptファイルの一番外側のスコープであると考えることができる。多くの環境(特にブラウザの非厳格モード)において、大域スコープでのthisはグローバルオブジェクト(ブラウザであればwindowオブジェクト)を指すか、あるいはundefinedとなる(モジュール内や厳格モードなど)。personオブジェクトのスコープは、greetアロー関数がthisを継承する「囲むスコープ」とは異なるため、this.nameperson.nameを参照せず、結果としてundefinedとなるのだ。つまり、アロー関数は、メソッドとしてオブジェクトのプロパティに直接割り当てられる場合には、thisの挙動に注意が必要である。

アロー関数は、その短縮された構文とthisの扱いの特性により、特にコールバック関数(他の関数に引数として渡され、後で実行される関数)として利用される場合に大きな利点を発揮する。thisのコンテキストを固定できるため、複雑なスコープの問題を避けやすくなるからだ。

まとめると、アロー関数はJavaScriptの記述を簡潔にし、コードの可読性を高める強力な機能である。特に単一の式を返す関数では、そのシンプルさが際立つ。しかし、thisキーワードの扱いが通常の関数とは大きく異なるため、その特性を十分に理解した上で使用することが重要だ。この点をしっかり押さえることで、システムエンジニアを目指す初心者は、現代のJavaScriptをより深く理解し、効率的でバグの少ないコードを書くための土台を築けるだろう。

関連コンテンツ

関連ITニュース