1. 雨宿りとWEBの小噺.fm
  2. Season 4-25. JavaScript の設..
2025-06-03 18:03

Season 4-25. JavaScript の設計思想

spotify apple_podcasts youtube

はい.シーズン 4-25 では,前回に引き続き,JavaScript の設計思想についてちゃんと調べてみました💁ちゃんと知ることって大事だなぁと改めて感じるなど_φ(・_・


ではでは(=゚ω゚)ノ


ーーーーー

📧 お便りはこちらから

https://forms.gle/utkE7JBKSReSdArPA


♫ BGM・SE

騒音のない世界「平成生まれ」

https://soundcloud.com/baron1_3/heysay

Anno Domini Beats「welcome」

https://youtu.be/947vwtHPFn4?si=Q7eeO_T3G-Bv_0rs

ユーフルカ「雨」

https://youfulca.com/2022/08/06/environmental_sfx/


========

【📣イベント告知📣】

第2回 Podcast Star Award が開催中!


・応募期間

2025年5月16日〜2025年8月31日

・選考期間

2025年9月1日〜2025年9月30日

・リスナー投票

2025年9月1日〜2025年9月30日

・結果発表

2025年10月10日


是非,お気軽にご応募お待ちしております!

https://podcastar.jp/podcaststaraward

See Privacy Policy at https://art19.com/privacy and California Privacy Notice at https://art19.com/privacy#do-not-sell-my-info.

サマリー

今回のエピソードでは、JavaScriptの設計思想やその背景について深く探求しています。特に、JavaScriptが関数型プログラミングとオブジェクト指向をどのように融合させたのか、またリソース制約やスキーム・セルフから受けた影響についても触れています。言語の進化における重要な要素や構造について考察し、TypeScriptの役割についても言及しています。

JavaScriptの基礎
雨宿りとWEBの小噺。みなさんこんにちは、ポッドキャスト配信者のkeethこと桑原です。
この番組は日々降り注ぐ情報の中でちょっと雨宿りしながら、様々なWEBテクノロジーの成り立ちや裏話を小噺としてお届けする番組です。
今回の話題ですけど、前回JavaScriptとTypeScriptの距離感みたいなタイトルでお話しさせていただきました。
その時、あんまJavaScriptの設計思想については興味ないというか、そんな好きでも嫌いでもないみたいな言い方をしたと思うんですけど、
ちゃんとですね、JavaScriptの設計思想を有程調べたこととか学んだことはなかったので、今回ちゃんと調べてみたんですね。
そうすると、自分の中でJavaScriptこういう点が好きだったんだなっていうのがおぼろげながらわかってきたので、
今回はJavaScriptの設計思想についてご紹介しようかなと思っております。
ではでは、入っていきましょう。
JavaScriptの誕生と背景からいきますけど、歴史的には1995年、ブレンダン・アイクシーによって作成された言語です。
当時彼がですね、約10日間でこの言語を作り上げたっていうのが結構有名なお話で、
一説によると1週間って言ってる人もいるし、10日間って言ってる人もいるし、この辺は揺れてるっぽいですね。
で、名前なんですけど、こちらも有名なお話でJavaScript、よくJavaとJavaScriptみたいなセットで言われたりしますけど、
全く別物で、当時Javaという言語が流行していたので、その名前にあやかりたかった。
マーケティング戦略としてJavaっていうのを借りて、スクリプトを後ろにくっつけてJavaScriptっていう名前にしたという感じです。
いやー本当、結果的にはこれだけ世界に広まっているので、その戦略は成功したと言ってもいいですけど、とにかく別物の言語です。
JavaScriptは性的ではなくて動的な片付け言語ですけどね。
当時、プログラミングの世界では、いわゆるラムダ計算とかに基づく関数型プログラミング言語、スキームとかMLとかもありますね。
こういう世界の関数型プログラミング言語と、スモールトークから発展したオブジェクト思考プログラミング、OOPですね。
セルフという言語など、オブジェクト思考プログラミングがありました。
この間で大きな、いわゆる戦争状態にあったらしく、どっちが主流を取るかみたいな状態にあって、なおかつオブジェクト思考プログラミングが黄金期だったんですよね。
2つの間で戦争をしてたんですけど、JavaScriptというのは、この2つの異なるプログラミングパラダイムのアイディアを融合させた最初の言語というふうに言われています。
スキームからの影響
いいとこ取りしたんですね。
設計手法の核と制約の話なんですけど、
あるブログを読んでいたら、接着剤みたいな言い方をしていて、接着剤原稿として、より動的かつインタラクティブなウェブページを可能にするというのを目指していました。
大事なのは、柔軟性と動的な性質というこの2つのポイントを重視しています。
初期のJavaScriptというのは、限られたリソースと実行環境という大きな制約の中で、メモリ効率が良く、なおかつ高速に解釈できる言語としても開発された。
逆に言うと、ここの2点が大きな課題だったんですね、JavaScriptって。
この制約が静的片付けのような高価な機能を捨ててしまった理由なんですね。
理由の一つですけど、型を入れようとすると少し重くなってしまうんだなっていうのがよくわかります。
この2つ制約から、さっき名前が出ました、スキームとかセルフとか、この2つの言語からJavaScriptはすごくインスパイアされておりまして、
今から2つの言語のどういうところにインスパイアを受けたのかっていうのをお話ししていきます。
1つ目はスキームの方ですね。
スキームは1975年に設計された言語で、そのシンプルさであったり優雅さ、英語で言うとエレガンスとか言いますけど、
あとは強力な機能で知られるリスプの方言なんですね。
これソースコード僕若干見たんですけど、まさにリスプって感じでした。
興味ある人は調べてみてください。
本当にザ・リスプみたいなプログラミング言語ですね。
その中でいろんな機能をスキームから受け継いだりとか組み込まれたんですけど、
そのうちの1つが、スキームもJavaScriptも関数っていうのを第一級オブジェクトとして扱っています。
これ関数を変数に代入することができたり、他の関数の引数として渡したり、
戻り値としてリターンの中に関数をセットしてリターンすることもできたり、そういうことを意味しています。
これによって公開関数とか、いわゆる関数型プログラミングのパラダイムっていうのが可能になって、
より表現力が大幅に向上したんですね。
いやーこれ、僕この思想すごい好きで、関数を関数で返したり引数に渡したりとか、
JavaScriptって関数もオブジェクトなんですよね、要は。
この思想が僕すごい好きで、なるほど第一級関数なんだっていう感じでした。
まあそのせいでちょっと複雑化したり、いわゆる黒魔術みたいな書き方もできてしまったりするんで、
この辺が自分は嫌だなっていう人もいらっしゃると思いますけど、私はこれすごく好きで、いろんなことがやれるようになったなっていう感触があります。
続いて受け継いだ機能としてはクロージャーですね。さっきも言った通り関数から関数を返すのも一つですけど、
JavaScriptで重要な機能の一つ、クロージャーですね。
外側の関数の実行の後もそのスコープですね、いわゆるレキシカルスコープってやつにある変数にアクセスができる関数オブジェクトのことを言います。
プライベート変数の作成とか関数ファクトリーの基礎となったりもしますね。
関数ファクトリーはデザインパターンのファクトリーパターンを関数で表現したものと僕は解釈してます。
間違ったらすいません。多分合ってるはず。
では3つ目ですけど、3つ目に受け継いだものはさっきも出てきましたレキシカルスコープですね。
クロージャーとレキシカルスコープはほぼセットと思っていいと思いますけど。
こちらもですね、スキームもJavaScriptも両方採用しているものでして、変数のスコープっていうのがソースコード9のどこによって決定されるのかっていうことを意味してます。
位置が大事だってことですね。
これによって予測可能で管理しやすい行動っていうのが実現できたよっていう話でした。
ラストは機能ではなくて思想的な話で、いわゆるミニマリスト哲学っていうふうに表現されたりします。
スキームはさっきも言った通りとてもパワフルでコンポーザブルな少数のプリミティブに焦点を当てた哲学で知られていると。
あ、そうだったんだっていう感じです。
僕はあんまスキーム詳しくないんですけど、確かにいくつかのブログとか記事読んだら、スキームっていうのはミニマリスト哲学っていうミニマルなお話をすごく皆さんおっしゃっていたので、本当そうなんだなっていうのは感じました。
JavaScriptもその柔軟性と表現力っていうのはやっぱり重視をしていたので、この辺の思想を真似ているっていうふうに言われています。
以上まずスキームからの影響というかインスパイアされたポイントでした。
セルフとプロトタイプ継承
続いてセルフからの影響の話に移りますが、セルフは1980年代後半に開発された実験的なプログラミング言語で、いわゆる伝統的なクラスベースの継承ではなくてプロトタイプ継承の概念を搬及していた言語だということでした。
プロトタイプ継承、JavaScriptにおける大事なものの一つですね、根幹をなす継承の概念ですけど、オブジェクトが他のオブジェクトからプロパティもしくはメソッドを直接継承できるってところがポイントです。
これによってJavaとかC++のようなクラスベースの言語よりも動的でかつ柔軟なオブジェクトモデルっていうのが実現されました。
これ最初見た時、僕も本当にこれはオブジェクト思考なのかってちょっと疑いましたけど、今ではまあまあいいんじゃないのっていう感覚です。
ただオブジェクト思考警察とかの厳密派、厳格な方々からすると、いやこれはオブジェクト思考ではないと断言される方も一部いらっしゃったように観測してます。
一番とても僕びっくりしたのはプロトタイプ継承って、僕JavaScriptからスタートしたと思ってたんですけどもともと前だったんですよね。これ本当勘違いでした。
1980年代後半からすでにあったって言うんですからね。僕が生まれたのも1987年なんで、なんとなくこういうシンパシーを感じるものもあって、よりJavaScript好きになってきちゃいましたね。
親近感湧きました。ただ直接継承するっていうので、ちゃんと設計を考えないとバグりやすいという視点はあるなとはちょっと思いましたけどね。
その視点がもう1つ続きますけど、続いてセルフから受けた影響の一つに動的なオブジェクト操作というものがあります。
いわゆる実行時にオブジェクトにプロパティを追加したり削除したりする機能っていうのを入れておりますと、これによって
非常に柔軟に扱うことができるようになったんですけど、ただ意図しない副作用っていうのが入りやすくなってしまったので、しっかり設計であったり実装するときには注意が必要になります。
これらの機能ってインタラクティブで動的なウェブプラットフォームの進化に適しているというふうには考えられて採用されました。
動的なオブジェクトって、例えば const human イコールカラーオブジェクトみたいなので変数定義するんですけど、
その後に human.name イコールジョンとか human.age イコール30みたいな感じで、
あとからですね、動的にプロパティを追加したり、あとはオブジェクトをイコールカラー文字列で初期化したりとか、
そもそもデリートみたいなメソッドもあるので追加変更削除っていうのがレンダリング後にも実行できるようになりました。
これによって本当に柔軟なことができるようになった。その操作性っていうのは僕も結構これいいなと思いましたね。
関数型とは全く相反する思想ですよね。
リミュータブルじゃないじゃん、全然変更できるじゃんみたいな話はありますけど。
以上、2つの言語からJavaScriptはかなり大きな影響を受けておりまして、本当にJavaScriptの根幹の機能とか設計思想っていうのはこの辺から受け継いだのはよくわかりました。
とにかく関数型プログラミングっていうものの機能の一部とオブジェクト思考、厳密に言うとプロトタイプ継承のオブジェクト思考
というものの2つを融合したハイブリッドな性質を持っている言語だというふうに言えます。
これらの性質によって複数のプログラミングパラダイムっていうのをサポートする非常に汎用性は高い言語というふうになったんじゃないかなと僕も思ってますね。
JavaScriptの基本的な特性
関数をやはりオブジェクトと同じように容易に操作できるっていうのがかなり特徴的で、これ他の言語で僕見たことない気がしますね。
あるんだったらすいません、経験した言語が少ないからなんですけど。
実際に今これらの影響によって世界中で最も広く使われるプログラミング言語の一つだっていうのはもうこれは否定しようがないでしょう。
その設計思想の悪い面も正直あるし、いくらでも批判の違いはあるんですけど、それ以上に使われているっていう実例が言語の素晴らしさっていうのをしっかり証明しているなというふうには感じます。
スタートがやっぱり限られたリソースとランタイムだったっていうところですのでね。
とにかくやっぱりメモリ効率が良いものと高速に解釈できる言語っていう大きな命題があったので、いろんなものを本当は入れたかった機能もあると思うし、制約も入れたかったと思うんですけど、
捨てなきゃいけない良いものもたくさんあったっていう中でこれだけの言語を作り上げた、やはりブレンダーアイクシーっていうのがすごかったんだっていうのがひしひしと感じますね、こういうのは。
結果的に今のウェブ開発を支えるこれだけ豊かに機能なブラウザーとかウェブアプリケーションを作れるようになったっていうのはこの辺に立脚しているというのは感じますので、その功績もでかかったと言っていいんじゃないかと思います。
このJavaScriptの設計哲学によってより豊かな文脈っていうのが提供できたり、プログラミング言語の進化におけるプロスポリネーションですね、相互に影響し合うみたいなことも起きているっていうのは注目していてもいいんじゃないかなっていうところでした。
はい、いろんなことを語りましたけど、今回はJavaScriptの設計思想についてお話ししてみました。
では今回はこれで終わっていきたいと思います。
エンディングです。
いや本当、僕がJavaScript好きな理由って、やっぱその表現力とか動的なところ、またに鈍否写だったんですよ実は。
そんなことも知らんままJavaScript好きだと言ってたんだっていうのはちょっと恥いている次第ではありますけど。
これだけ表現力っていう中で、そこに堅牢なアプリケーションが作りたい、そんなコードを書きたいっていうニーズは起きるなしかあるべきで、そのために型が入ってきたっていうのは一ついい動きだったんだろうなっていうふうに感じてます。
その中でタイプスクリプトっていうのが生まれまして、これは結局JavaScriptの動的なオブジェクト操作と柔軟な表現力っていうのに型を追加する、いわゆる縦を装備させて堅牢なコードを書くことができたっていうような理解で僕はなりましたので。
今までも頭ではJavaScriptに型を追加したのがタイプスクリプトって思ってたんですけど、こういう思想的なところまで理解してみると、意外と僕はタイプスクリプトも好きになってきたなっていうふうに今思ってます。
縦を持ったJavaScriptっていうふうな解釈になりましたので、印象がですね。
なので今後はタイプスクリプトに感謝をしながらコードを書くことができるなっていうふうに思ってます。
それでも型自体を考えたり書くことはそんなまだまだ好きにはなれないかもしれないですけど、それでも進化したJavaScriptとして開発ができるっていうような感触ですね。
これは本当に素晴らしいなって今も感じてますので、今後は今から僕が書くコードとかプライベートで書くライブラリーとかもタイプスクリプトで書くんだろうなっていうふうには思ってます。
プログラミング言語の設計思想の探求
あとはですね、いろいろ調べていきましたけど、さっきもいろんなものを捨てなきゃいけなかったっていうものの一つにグローバルスコープっていうのがありまして、
これはいろんな書学の根源と言われたりしている問題ですけど、HTMLに複数のスクリプトタグを当時は埋め込まなきゃいけなくて、なおかつ当時はもちろんモジュールシステムっていうのがなかった。
でなった時に、スクリプト間でどうやって変数を共有すんねんみたいな話が出てきて、それの唯一の方法としてグローバルスコープを選択せざるを得なかったんじゃないかなというふうに思ってます。
これはブレンダー・アイクシーもですね、ご自身が失敗だったっていうふうに断言されてます。
これも有名な話ですね。
あとはJavaScriptの有名な書籍、JavaScript The Good Partsっていうオライリーの本があります。
これすごい名著なんで皆さん読んでみてください。
その中にBad Partsですね、悪いケースですよっていう一つにグローバル汚染っていうワードが書かれております。
これはブレンダー・アイクシーも認めてるものですよと言えんで、まあまあ仕方ないですね。
これ今直したらJavaScriptがカラッと変わるので、全世界に大影響をたらすのでもう直せないでしょうね。
あと面白かったのはPromiseですかね。
PromiseはJavaScriptの最初からあったわけではないし、さっきの思想を見てみるとPromiseって組み込まれるはずがないじゃないですか、設計的には。
なんですけど、2000年代後半から2010年代にAJAX通信っていうのが大流行しまして、
その時に起きた大きな課題としてコールバック時刻っていうのがあります。
これがすごい深刻だったんですよね。
その解決策として、例えばライブラリーの試み。
有名なJQueryっていうものがあって、JQueryの$.deferredみたいなメソッドを経て、
なんとか解決してた人もいらっしゃいますけど、ES2015、ES6ですね。
こちらで正式にPromiseを標準化するという風に流れまして、
非同期処理を同期的な処理のようにかけるというこの設計思想が採用されました。
これはですね、関数型プログラミングのモナの考え方が来てるって言われてるらしいですけど、
僕がモナをちゃんと理解してないので、そうなんだっていうご紹介にとどまります。
以上そんな感じで、とにかくJavaScriptっていうのはそういう思想のもとを作られてたっていうのがよくわかったのが、
個人的には興味深かったしね。
あと今回の調査を経てですね、僕はプログラミング言語の設計思想ってちょっと味を占めてしまいまして、
今後もなんかいろんなプログラミング言語の誕生秘話とか設計思想をちょっと調べたくなりましたので、
何度か話していきたいと思います、この番組でも。
あとはこの言語について話してほしいとかあればコメントいただけると、
自分でもじゃあそれちょっと調べてみますっていうのをやってみようと思います。
まあ今現在プログラミング言語ってもう70、80以上確かあるはずなんですよね。
もうめっちゃあるんで。
有名どころしか多分やらないと思いますし、全部やっても大変です。
ただシリーズもんにはしようと思ってますので、またごゆるりと聞いていただければと思います。
では、今回はこれで終わりたいと思います。クロージングです。
この番組面白かったよという方は是非チャンネル登録もお願いします。
もし聞いていて気になることや話してほしいトピック、感想などございましたら、
概要欄のフォームやXでハッシュタグウェブ小話でつぶやいてください。
ウェブはアルファベット、小話は漢字でもひらがなでも大丈夫です。
それではまた雨宿りしに来てください。
今回もお聞きくださりありがとうございました。
雨宿りとウェブの小話、お相手はキースでした。さようなら。
詳しくはpodcaster.jpをご覧ください。
No.1ポッドキャストクリエイターは誰だ。
18:03

コメント

スクロール