@ledsun blog

無味の味は佳境に入らざればすなわち知れず

kaigion_rails_newにてライトニングトークをしました

kaigionrails.doorkeeper.jp

話の背景は Rails 7 はユニバーサルJavaScriptモジュールの夢を叶えるか? - @ledsun blog です。

内容

www.youtube.com

文字だとこんな感じです。 書きおこしではないです。 練習中に作ったトークスクリプトままです。 細部は違っています。

こんにちは 株式会社ラグザイアの中島滋です。

今日はRails7がimport mapsをサポートしたことについてしゃべります。 先月、Rails 7のα版がリリースされました。 import mapsがサポートされました。 僕はここに注目しているので、この話をします。

JavaScriptの話です。 2009年にNode.jsが発表され JavaScriptの実行環境はブラウザとNode.jsの2つに大きく分かれました。 このときからJavaScriptプログラマはある夢を描いています。

1つのJavaScriptプログラムを書いたら、ブラウザでもNode.jsでも動かしたい。 これはできていません。

2021年の我々が何をしているかというと、バンドラーを使っています。 Node.js向けにJavaScriptプログラムを書いて バンドラーで1つのファイルまとめて変換しています。 これをブラウザに持っていて動かしています。

Node.jsとブラウザで同じJavaScriptプログラムを動かすことはできていません。

なぜできていないのか JavaScriptの歴史を振り返りましょう。

JavaScriptにはモジュールを定義する言語仕様がありませんでした。 CommonJSやAMDといった規約はありましたが、統一された仕様はありませんでした。

2015年にES2015でESモジュールという、JavaScriptのモジュールを定義する言語仕様が決まりました。

次に2016年にブラウザがESモジュールをサポートします。 scriptタグにtype=moduleと書くと、そのなかでESモジュールが動かせます。 2019年にはNode.jsもESモジュールをサポートしました。

ESモジュールで書けばブラウザでもNode.jsでも動くJavaScriptプログラムが書けます。 しかし同じJavaScriptプログラムが動かせるわけではありません。 何が問題かというとimport文です。

<< この辺抜けてます >>

Rails 7を使ってimport mapsを使うと 1つのJavaScriptを書いて、ブラウザでもNode.jsでも動かせる夢が実現できます。 Rails 7が、新しい世界へのレールを敷いてくれました。 Rails 7とても楽しみです。

反省

Keep

飛び道具の仕込みは全部反応してもらえた

  • Ajico Tシャツ*1
  • スライドなし。発表資料は紙芝居形式*2
  • リモートだけど立って発表。なんと、手が使える*3

Problem

間口が狭い。 ある程度、Rails 7の動向やimport mapsを知っている人には伝わったようにおもいます。 興味がない、知らなかった人に興味を持ってもらうことはできていなさそうです。

Try

バンドラー以前の、ブラウザ向けのJavaScriptプログラムは、依存関係を人力で解決していてせいぜい10〜20位のファイルにわけることしかできていませんでした。 そのおかげで、jQueryとかunderscoreとかlo_dashのような、ユーティリティ関数をたくさん含む大きなライブラリーに依存していました。 結果、パッチバージョンの変更でも大きなライブラリー全体をダウンロードし直さないといけなくて、ブラウザキャッシュもCDNも上手く使えていませんでした。

ここにバンドラーが入ってきて、プログラムが依存関係を解決してくれるようになりました。 1000だろうと2000だろうとモジュールファイルを分割できるようになりました。 UNIX哲学によれば小さいことは良いことです。 leftpadみたいにミニマムなモジュールが存在しうるのはそのおかげです。

import mapsがもたらすのは、これをバンドラーなしにブラウザの世界に持ってくることです。 ↑のスクリプトでは、話してないのですがimport mapsの中に書くJSONの管理を自動化しないと、大変なのは、そうだろうと思います。 そこはRails 7が上手くやってくれるはずなのですが・・・実は僕はまだ、その辺の詳細な動きを掴んでいません。

この辺の話をしたら、Rails 7のimport mapsサポートのイメージがもう少し伝わる・・・のかな?

懇親会

オンラインの懇親会に参加したので、感想をメモしておきます。 ハウリングしてたかもしれない。ヘッドセットがあった方が快適そうです。

懇親会中に

speakerdeck.com

で発表されたGemに対して Add GitHub Actions for CI by okuramasafumi · Pull Request #1 · makicamel/circuit_switch · GitHub が生まれていて、さすがプログラマのコミュニティて感じでした。

RubyKaigi2009年の動画が発掘されて面白かったです。

www.nicovideo.jp

RubyKaigi2009のトークタイムテーブル - 日本Ruby会議2009 な感じだったようです。 僕はこの時期、Rubyコミュニティにいなかったので、新鮮でした。

Feature #18229: Proposal to merge YJIT - Ruby master - Ruby Issue Tracking System でYJITのYはyet anotherからYARVに変わったそうです。

*1:今年、20年ぶりに復活しました。

*2:イメージはテレビ番組のフリップとか、鉄拳のスケッチブックです。

*3:みんなが手を使えない中、手が使えるということはガムテープデスマッチ中に、自分だけはガムテープがないも同然。角谷さんにも勝てる(?)はず。