📜

ECMAScript考古学をするときに

2023/12/08に公開

※この記事は Cybozu Frontend Advent Calendar 2023 の 8 日目の記事です。

仕様を調べるとプロセスが気になってくる

ECMAScript の仕様を調べていると時折「何でこの仕様は入ったんだろう」とか「採用されるまでにどういった議論がなされたんだろう」といったことが気になる時があります。

新しい仕様の策定や stage 変更は必ず ECMAScript の仕様策定している TC39 のミーティングを経て行われていますから、基本的にミーティング議事録を漁れば上記のような「モチベーション」や「策定までの議論」を見つけることがでるはずです。

近年のミーティング agenda と議事録

近年の TC39 のミーティングアジェンダと議事録はそれぞれ次の GitHub のリポジトリにまとまっています。

歴史的経緯[1]からアジェンダと議事録が別のリポジトリになっていますが、基本的にはアジェンダから議題をチェックしそれを元に議事録で該当する仕様を探すことになります。また探したい仕様の名前がわかっていれば全体検索でも探せます。ただし Proposal の名前や API が策定の途中で変更になることはよくあるので検索の際は注意が必要です。

また ECMA402(Intl)に関しては現在仕様策定のグループが分かれており、 ECMA402 だけのミーティングも開催されています。Intl について追う場合は合わせて以下のリポジトリにある議事録を参照すると良いでしょう。

さらに仕様に関する議論は仕様書があるリポジトリの issues を通じてある程度開かれて議論されているので、issue を探すのも良いでしょう。

「近年」の議事録はある。でもそれより前は...

このように GitHub にまとまっている議事録や議論は比較的簡単に追うことができますが、一定以上前の議事録はそもそも GitHub にまとまっていません。具体的には TC39 ミーティング議事録は 2012 年から、ECMA402(Intl)のミーティング議事録は 2017 年からのものしか GitHub 上に残されていません。

2012 年以前と聞くと「もう 10 年以上前の議事録なんて」と思われるかもしれませんが、仕様の策定に年単位の時間がかかることを鑑みると無視できない場合もあります。実際 2012 年前後の状況を振り返ると以下のような時期だったようです。

  • ES5.1 のリリースが 2011 年の終わり
  • 後の ES6 となる ES Harmony の仕様の一部は策定が始まっている

このことから ES5.1 というマイナーバージョンを出すことになった経緯はもちろんのこと、現在デファクトとなった「ES6 で追加された構文」についても多くが 2012 以前から議論されていたことになります。また Intl のような近年各環境でのサポートが揃いつつあるような仕様も最初に提案されたのは 2010 年だったりします。

このように「今や当たり前になった構文」の策定に関する議論を追おうとすると 2012 年までの議事録では足りないケースが出てくるのです。

2012 年以前の ECMAScript 仕様策定を追う

では 2012 年以前の議事録やそれに付随する議論はどうやって追えばいいのでしょうか?

今現在参照できる資料として一番確実なのは ECMAInternational が年ごとに議事録や提案書などを集めている ECMAScript Archives というページを参照することです。この ECMAScript Archives では初版発行前年である 1996 年から 2015 年までの資料がまとめられています。

https://ecma-international.org/ecmascript-development-archive/

この ECMAScript Archives にまとまっている資料は大きく 3 つに分類されています。

  • Ecma General Assembly Documents : Ecma 総会の議事録で ECMAScript に関する部分だけがアーカイブされている。
  • TC39 Documents : TC39 meeting のアジェンダや議事録 meeting で利用された提案書、draft 仕様書並びにそのレビューなどが含まれる。
  • それ以外の文書 : 初期に多くあった非公式のワーキンググループや Ecma アーカイブに収録されていないメモ・提案書・wiki・メーリングリストなどがまとまっている。

実際に仕様策定の流れを追う場合、TC39 Documents の中から探すことが多いでしょう。具体的には以下のように探すと良いです。

  • タイトルから調べたい仕様の提案書と思われる資料を探す。
    • 例えば Intl の最初の提案書は2010 年のページに「Google proposal for ECMAScript internationalization library Standard」というタイトルで記載されています。
  • ミーティングのアジェンダ(Agenda for the Nth meeting of TC39 形式のタイトル)を見て調べたい仕様について話されている回を探し、そのアジェンダに対応する議事録(Minutes of the Nth meeting of TC39 形式のタイトル)を読む。
    • 提案書が見つかった場合は当たり前ですがその前後のアジェンダで議題に上がっているはずです。

また ECMAScript Archives には TC39 Documents 以外にも非公式の議事録メモや資料が多くまとまっています。上記の方法で「仕様が提案された時期」や「当時の名称」などを把握してから、関連する文書があるかざっと目を通してみると良いでしょう。

しかし meeting の議事録だけだと「当時どんな API 案が出されていたのか」や「どんな議論が行われていたか」が読み取りづらいこともあります。そのため年代によっては以下のようなアーカイブも参照すると策定当時の状況の解像度が上がりそうです。(2007 年以前などになるとこのような資料もないことがあります。)

  • wiki.ecmascript.org のアーカイブ
    • wiki.ecmascript.org は仕様策定作業を行う上で利用されていた wiki です。(現在はweb.archive.orgのアーカイブになっています。)この wiki には、仕様の概要はもちろんのこと、モチベーションや当時の状況、想定していた API などが記されています。アーカイブされているタイミングは限定的なので変化を追うのには向いていませんがそれでも役に立つ資料群です。
    • ちなみにこの wiki には ES6 の前身である ES harmony に関して専用の階層が用意されているので、特に調べたい仕様がない人でも見てみると面白いかもしれません。
  • es-discuss のアーカイブ
    • es-discuss は当時議論の場として機能していたメーリングリストで、このページはそのアーカイブとなります。自分の調べたい仕様と関連がありそうな topic を見つけることができれば当時どのような議論されていたかを見ることができます。

以上を踏まえると 2012 年以前の仕様策定を追う方法は以下のようになります。

  1. その仕様が最初の提案されてそうなタイミングを ECMAScript Archives の各年ページを遡って探る
  2. 提案されたタイミング前後からミーティングのアジェンダと議事録をチェックしていく
  3. 1 や 2 で得た「提案の時期」と「当時の名称」をもとに ECMAScript Archives で追加の資料がないか調べる
  4. 時期的にありそうであれば wiki のアーカイブメーリングリストのアーカイブを探してみる

おわりに

このように GitHub 上に残っていない仕様策定の議論についても ECMAScript Archives や関連する資料・アーカイブを活用するとある程度調べることができます。今回 10 年以上前の議論を遡って調べる中で、仕様策定の議論や当時の状況を追えるよう資料をなるべくまとめて残していること、GitHub に移行して誰でもアクセスしやすい形で仕様策定を行なっている現状の体制のありがたさを改めて感じることとなりました。

脚注
  1. 議事録のリポジトリはもともと参加者の一人が個人的にまとめていたリポジトリだったものを移行したため別れているようです。 ↩︎

サイボウズ フロントエンド

Discussion