ナカザンドットネット

Android Developer's memo

iOS版YouTubeアプリのOSSライセンスページが魔窟

気分転換で下調べも何もせずに雑に書いた記事です。個別のライブラリについては間違ったことを言っている部分が多いと思うので、参考にしないでください。


こんなツイートを見かけました。

Yogaといえば、FacebookMeta社が作ったAndroid / iOS向けのレイアウトエンジンです。

yogalayout.com

React Nativeのレイアウトエンジンでもありますが、まあ今回はReact Nativeの話はしません。YogaはAndroid向けのLithoやiOS向けのComponentKitといった形でも提供されており、ネイティブアプリのUI実装にも活用されている技術なので、YouTubeアプリで使われていることに大きな驚きはないのです。

……が、やはりGoogleで採用されるには珍しいライブラリであることも事実なので、これはもっと怪しいライブラリが隠れているな?という直感が働きました。結論からいうと実際にやばかったので、目についたライブラリを並べて行こうと思います。

Closure Library

まずはGoogle謹製JavaScriptフレームワークとして古株の Closure Library さん。

developers.google.com

……おかしい……初手からおかしい……お前はネイティブアプリではないのか……?

J2ObjC

続きまして、「AndroidとiOSの両方から使えるライブラリを作りたい」という夢を持ったことがある人なら誰もが知っている J2ObjC です。

developers.google.com

Java言語で書かれたコードをObjective-C言語に変換するやつです。いわゆるトランスパイルツールですね。

JavaScriptライブラリが出てきたあとだと、最終的にObjective-Cになる分だけまだ普通のツールに思えてきました。

JavaScriptCore

お次はSafari / WebKitのJavaScriptエンジンである JavaScriptCore です。

developer.apple.com

まあClosure Libraryがあるんだから、JavaScriptを動かせる何かが出てくるのはなんとなくわかってた。

iOS的にはほぼ標準ライブラリみたいなもんなんだから、特筆する必要はなかったと思うんだけど、なんで書いたんだろうなあ……

jquery2

JavaScriptライブラリ第2の刺客。言わずと知れた jQuery さんです。

jquery.com

今の最新はv3系だったと思うんですけど、わざわざ2って書いてあるのでv2なんですかね……

どこで使ってるんだろ……

LLVM

次はコンパイラ基盤の LLVM さん。

llvm.org

まあXcodeでビルドするときに使っているので、特に違和感はないのですが、他の異常さを際立たせるためにあえて置いておきます。

quickjs

さあ、今度は軽量JavaScriptエンジンの QuickJS だ!!!

bellard.org

JavaScriptエンジン2つ目いただきました〜〜〜〜〜〜〜〜〜!!!!!!!!!!!

なんで????????????????????

ES2020の仕様をほぼ網羅しつつも、ファイルサイズが小さく起動も高速という特長があるエンジンということで、そういうのが求められる場所に配置されたものと思われます。

V8

若き王者が帰ってきたッ

どこへ行っていたンだッ チャンピオンッッ

俺達は君を待っていたッッッ V8 の登場だ――――――――ッ

v8.dev

JavaScriptエンジン3つ目で〜〜〜す!!!いえ〜〜〜〜〜〜〜〜〜〜〜〜い!!!!!!!!!

いやあ……どこに使ってるんだろ……まじでわからん……JavaScriptCoreとQuickJSがあったら大体のパターンいけるやろ……ええ……?

まとめ

YouTubeアプリってガチガチのObjC/Swift製ネイティブアプリだと思ってたんですけど、JavaScriptエンジンを3つも積んでてjQueryやClosure Libraryまで登場するとなると、それなりのハイブリッドアプリなのかなあと認識を改めた次第であります。

j2ObjCは5年前にちょっと調べたことがあったので、今でも元気にしているのが見れてちょっと嬉しかったです。

おまけ:妄言

というかアレなんですよね、React Nativeも「Yoga + JavaScriptCore」がレンダリングエンジン+言語エンジンの構成なのを考えると、YouTubeアプリの中に「JavaScriptにビジネスロジックを書いてネイティブUIをレンダリングする」仕組みが作れそうな気がするんですよね。もしかしてどこかの画面はそういうフレームワークになっているのかなあ……