ECMAScript 2023(ES2023)をサポートしたJavaScript Primer v5.0.0をリリースしました。

JavaScript Primer(jsprimer)は、JavaScriptの文法や機能を一から学べるように書かれている入門書です。 今回のウェブ版のアップデートでは、最新のECMAScriptに対応しました。

jsprimer v5.0.0リリースに合わせて、文章のライセンスをCC BY-NC 4.0からCC BY 4.0へと変更しています。 また、Open Collectiveのページを公開し、jsprimerプロジェクトを金銭的に支援できるようになりました!

これまでのjsprimer

ECMAScriptの仕様書は毎年更新されるので、それに合わせてjsprimerも更新しています。

今回のウェブ版のアップデートでは、2023年6月27日にリリースされたECMAScript 2023(ES2023)をサポートしています。

ES2022までの対応を含んだ書籍版もリリースされているので、安定しているものを読みたい場合は書籍版をおすすめします。

ECMAScript 2023の変更点

ECMAScript 2023(ES2023)に対応した、jsprimer v5.0.0の変更点を紹介します。 詳細はリリースノートに記載してあるので、変更点のみを知りたい方はリリースノートを参照してください。

ECMAScript 2023には、配列のメソッド周りの変更が多く入っています。 また、今後入るであろうECMAScriptのProposalには、配列やIteratorに関するProposalが多くあります。 ES2023でもかなり改善はされていますが、まだ配列やコレクション系の処理の良い書き方は変わっていくと思います。

ES2023はまだ変化の途中という感じがあり、ユースケースが決まりきっていない部分もあります。 あまりそういうの気にせずに読みたい方は、スナップショットとして安定している書籍版をおすすめします。

では、jsprimer v5.0.0に含まれるES2023の変更点を紹介します。


Change Array by copy

概要

配列の破壊的なメソッドであるsplicereversesortに対して、 ES2023では非破壊的なバージョンであるtoSplicedtoReversedtoSortedが追加されました。

また、配列への代入(array[index] = item)という破壊的な処理に対して、withという非破壊的なメソッドが追加されました。

変更されたページ

変更内容

  • 破壊的なメソッドと非破壊的なメソッド のセクション
    • 追加されたtoSplicedtoReversedtoSortedwithメソッドの解説の追加
    • 破壊的な方法と非破壊的な方法の対応関係のテーブルを追加
破壊的な方法 非破壊な方法
array[index] = item Array.prototype.with[ES2023]
Array.prototype.pop array.slice(0, -1)array.at(-1)[ES2022]
Array.prototype.push [...array, item][ES2015]
Array.prototype.splice Array.prototype.toSpliced[ES2023]
Array.prototype.reverse Array.prototype.toReversed[ES2023]
Array.prototype.sort Array.prototype.toSorted[ES2023]
Array.prototype.shift array.slice(1)array.at(0)[ES2022]
Array.prototype.unshift [item, ...array][ES2015]
Array.prototype.copyWithin[ES2015] なし
Array.prototype.fill[ES2015] なし

配列のメソッドを非破壊的なメソッド(Immutable)と破壊的なメソッド(Mutable)に分けると、次のようになります。

非破壊的なメソッドと破壊的なメソッド

関連


Array.prototype.{findLast, findLastIndex}

概要

ES2023では、Array.prototype.findIndexArray.prototype.find に対応するメソッドとして、 Array.prototype.findLastIndexArray.prototype.findLastが追加されました。

それぞれ findIndexfind と同じ使い方ですが、末尾から探索した結果を返すメソッドになっています。

変更されたページ

変更点

  • ES2023で追加された Array.prototype.findLastIndexArray.prototype.findLast の対応
  • Array.prototype.lastIndexOf のサンプルコードを追加

関連


Symbols as WeakMap keys

概要

ES2022までは、WeakMapのキーとWeakSetの値にはオブジェクトのみが指定可能でした。 これは弱い参照をGCで解放するために、キーは一意な値のみが指定可能という制限からくるものでした。 Symbolも一意な値となるため、ES2023ではオブジェクトに加えてSymbolも指定できるように仕様が変更されました。

変更されたページ

変更内容

  • WeakMapのキーに指定可能なものとしてSymbolを追加
  • WeakSetの値に指定可能なものとしてSymbolを追加

関連


その他のProposal

その他にもES2023にマージされたProposalとしてHashbang Grammarがあります。 Hashbang Grammarは#!から始まる最初の行をコメントとして扱う仕様ですが、Node.jsなどの実行環境との相互運用性を考慮して、ES2023で仕様が変更されました。 jsprimerでは特に取り扱っていませんが、興味がある方は次のIssueを参照してください。


ライセンスの変更

今までのjsprimerのライセンスは次のとおりでした。

  • ソースコード: MITライセンス
  • 文章: CC BY-NC 4.0

v5.0.0からはjsprimerのライセンスを次のように変更します。

  • ソースコード: MITライセンス(そのまま)
  • 文章: CC BY 4.0

CC BY-NCでは商用利用を禁止する条項がありますが、 CC BYにはこの条項は含まれません。

行為 CC BY CC BY-NC
複製 OK OK
頒布 OK OK
展示 OK OK
実演 OK OK
改変 OK OK
著作権者の表示 必要 必要
非営利目的 OK NG

元から、教材などとしての利用は許可していましたが、商用かどうかの判断が難しいものになっていました。 今回の変更で、著作権者表示をすれば商用でも利用可能なライセンスになっています。 これにより、jsprimerの文章も、より自由に使いやすくなります。

変更の詳細についてはIssueを参照してください。

Open Collectiveでjsprimerを支援できるようになりました

BabelやPrettierなども利用しているOpen Collectiveというサービスを使い、JavaScript Primerというプロジェクトを金銭的に支援できるようになりました。

次のCollectiveページから支援できるようになっています。

このOpen Collectiveでの支援は、主に企業ユーザーを対象にしています。 支援することでWebサイトや次回(ES2024)のリリースノートにスポンサー表示ができるようになります。 また、“推しページ”を設定できるようにする予定で、https://jsprimer.net/の特定のページにメッセージ(書籍のポップをイメージ)を出せるようにする予定です。

JavaScript Primerは変化を前提にした書籍のプロジェクトであるため、毎年のECMAScriptのリリースに合わせて内容を改訂しています。 jsprimerは変化に対応できる基礎を身につけられること、またそれを迷わずに学べるようにすることを目的にしたプロジェクトです。 変化に対応するには、書籍自体も変化に対応する必要があります。

更新に継続的に行うのに必要なリソースとしてヒト、カネ、モノがあります。 Open Collectiveは、プロジェクトに対して金銭的な支援をすることができるサービスです。 単純に受け取るだけではなく、プロジェクトにContributeしてくれた方に還元することもできます。 それらのやりとりがオープンに行えるのがOpen Collectiveの特徴です。

ざっくりとした試算では、jsprimerの毎年の更新にかかる必要は年間で687,840円ぐらいです。 詳細は次の記事にまとめています。

JavaScript Primer - Open Collectiveでの支援方法として、Yearly Gold Sponsors(年間)とMonthly Gold Sponsors(月間)を用意しています。 jsprimerは年ごとの更新なので、Yearly Gold Sponsorsがわかりやすいかと思います。

まだ、どういう形が最適なのかはわかっていないため、Contributeしてくれる方(金銭的な支援もContributeです!)と考えながら形を作っていけるといいなと思います。 次のページに、このリリースについてのDiscussionを用意しているので、そちらで意見を聞かせてください。

Open Collectiveについてはまだ検討中の部分も多いので、まずは公開するところから始めています。

次のフォームからメールアドレスを登録しておくと、jsprimerの更新やOpen Collectiveについての更新があったら通知を受け取れます!

JavaScript Primerの更新情報を購読

* indicates required

フォームが表示されない人は https://github.us13.list-manage.com/subscribe/post?u=fc41e11a2b9dc6f05350e0de0&id=7ab1594ae8 から登録できます。

また、GitHubリポジトリをWatchしておくと、更新の通知がGitHub上でも受け取れます。 ついでにリポジトリを⭐Starもしてくれると嬉しいです!