気分転換で下調べも何もせずに雑に書いた記事です。個別のライブラリについては間違ったことを言っている部分が多いと思うので、参考にしないでください。
こんなツイートを見かけました。
YouTube、yogaが使われてるんだ👀 pic.twitter.com/A9GVR7ByPb
— Naturalclar(Jesse K.) #StopAsianHate (@natural_clar) 2021年11月17日
Yogaといえば、FacebookMeta社が作ったAndroid / iOS向けのレイアウトエンジンです。
React Nativeのレイアウトエンジンでもありますが、まあ今回はReact Nativeの話はしません。YogaはAndroid向けのLithoやiOS向けのComponentKitといった形でも提供されており、ネイティブアプリのUI実装にも活用されている技術なので、YouTubeアプリで使われていることに大きな驚きはないのです。
……が、やはりGoogleで採用されるには珍しいライブラリであることも事実なので、これはもっと怪しいライブラリが隠れているな?という直感が働きました。結論からいうと実際にやばかったので、目についたライブラリを並べて行こうと思います。
Closure Library
まずはGoogle謹製JavaScriptフレームワークとして古株の Closure Library さん。
……おかしい……初手からおかしい……お前はネイティブアプリではないのか……?
J2ObjC
続きまして、「AndroidとiOSの両方から使えるライブラリを作りたい」という夢を持ったことがある人なら誰もが知っている J2ObjC です。
Java言語で書かれたコードをObjective-C言語に変換するやつです。いわゆるトランスパイルツールですね。
JavaScriptライブラリが出てきたあとだと、最終的にObjective-Cになる分だけまだ普通のツールに思えてきました。
JavaScriptCore
お次はSafari / WebKitのJavaScriptエンジンである JavaScriptCore です。
まあClosure Libraryがあるんだから、JavaScriptを動かせる何かが出てくるのはなんとなくわかってた。
iOS的にはほぼ標準ライブラリみたいなもんなんだから、特筆する必要はなかったと思うんだけど、なんで書いたんだろうなあ……
jquery2
JavaScriptライブラリ第2の刺客。言わずと知れた jQuery さんです。
今の最新はv3系だったと思うんですけど、わざわざ2って書いてあるのでv2なんですかね……
どこで使ってるんだろ……
LLVM
次はコンパイラ基盤の LLVM さん。
まあXcodeでビルドするときに使っているので、特に違和感はないのですが、他の異常さを際立たせるためにあえて置いておきます。
quickjs
さあ、今度は軽量JavaScriptエンジンの QuickJS だ!!!
JavaScriptエンジン2つ目いただきました〜〜〜〜〜〜〜〜〜!!!!!!!!!!!
なんで????????????????????
ES2020の仕様をほぼ網羅しつつも、ファイルサイズが小さく起動も高速という特長があるエンジンということで、そういうのが求められる場所に配置されたものと思われます。
V8
若き王者が帰ってきたッ
どこへ行っていたンだッ チャンピオンッッ
俺達は君を待っていたッッッ V8 の登場だ――――――――ッ
JavaScriptエンジン3つ目で〜〜〜す!!!いえ〜〜〜〜〜〜〜〜〜〜〜〜い!!!!!!!!!
いやあ……どこに使ってるんだろ……まじでわからん……JavaScriptCoreとQuickJSがあったら大体のパターンいけるやろ……ええ……?
まとめ
YouTubeアプリってガチガチのObjC/Swift製ネイティブアプリだと思ってたんですけど、JavaScriptエンジンを3つも積んでてjQueryやClosure Libraryまで登場するとなると、それなりのハイブリッドアプリなのかなあと認識を改めた次第であります。
j2ObjCは5年前にちょっと調べたことがあったので、今でも元気にしているのが見れてちょっと嬉しかったです。
おまけ:妄言
というかアレなんですよね、React Nativeも「Yoga + JavaScriptCore」がレンダリングエンジン+言語エンジンの構成なのを考えると、YouTubeアプリの中に「JavaScriptにビジネスロジックを書いてネイティブUIをレンダリングする」仕組みが作れそうな気がするんですよね。もしかしてどこかの画面はそういうフレームワークになっているのかなあ……