nmi.jp Twitter → @tkihira
JavaScript で遅延評価を導入して起動を高速化した話

10 年前に JavaScript で Flash Player を開発し買収された話


2020-12-24
Takuo Kihira

この記事は、JavaScript で Flash Player の実現を頑張った(もしくは現在進行系で頑張っている)人たちの集う Flash Advent Calendar 2020 に参加しております。

私は過去に自分が設立した会社で ExGame という HTML5 実装の Flash Player(正確には Flash Runtime Engine)を開発し、その会社ごと DeNA に買収(M&A)されました。あまり出来ない体験であるのは間違いないので、Flash が終了を迎える今、改めて振り返ってみようと思います。

Flash Player の開発

今から 10 年前の 2010 年、ちょうど iPhone が普及し始めてきてガラケーのシェアが 8 割から 6 割くらいに落ちようとしていた時期に、私は Flash Player を JavaScript で実装していました。以前このブログにも書きましたが、それは当時としてはかなりの挑戦でした。

当時、私達の会社ではガラケー向けに Flash のバイナリを自動生成し、Flash 上で色々な機能を組み合わせてプログラミング的なことが出来る B2B システムを提供しておりました。しかしスマートフォンが破竹の勢いでシェアを伸ばし、遠くない未来にガラケーからスマートフォンの世界に切り替わることが予見され、会社としても早めの対応をしようと考えていたところでした。

  • ガラケー上の Flash 資産を iPhone 上で動かしたいという強い需要があった
  • 私達は Flash のバイナリ構造には相当詳しかった
  • JavaScript は自分が最も得意としている分野だった

Flash Player を JavaScript で開発するための条件は揃っておりました。そこからの紆余曲折は上のブログ記事に書きましたが、開発を決断出来て良かったと思っています。

技術的に面白い話をいくつかあげると

  • 最初は swf ファイルを事前に JSON に変換していたが、JSON を eval すると(当時は eval しかなかった)メモリを異常に消費した
  • swf ファイルをバイナリで直接読むようにすると、パース時間もメモリ消費も格段に少なくなった。実メモリは Jailbreak して計測していた
  • Flash は内部形式が固定小数点で JavaScript は浮動小数点なので、僅かな誤差がどうしても起こって大変だった
  • パフォーマンス改善のために一縷の希望を持って SVG 版を作ってみたが、全然速くなかったのですぐに諦めた
  • 結局 LRU で管理しながら Canvas を Cache し、dirty rect の計算を高速にして再描画領域を狭めるのが最も効果的だった

などなど、技術的なチャレンジは非常に多く、最終的に解決出来たので、開発自体は楽しかったです。

とはいえ、こんな昔話は他人にとって面白いものでもないでしょうから、「ソフトウェアを開発した会社が M&A されるとはどういうことか」ということに絞って話したいと思います。

売却の打診

まず大前提として、私達の会社は売却先を探していました。Flash Player の出来は大変良いものでしたので、会社の価値を高く見積もってくれるであろうという自信もありました。しかし、自ら「買ってください」と連絡をするのは、その後の交渉が難しくなりそうでしたし、当時の自分はそういった本音を忌憚なく話せる知人が売却候補先の会社内部にいませんでした。

そこで、Flash Player をライセンスで提供します、という形で料金表を作って交渉に臨みました。料金表といいつつ、その料金はアクセス数に比例するようなものであり、大手ソーシャルゲーム会社であればあっという間に天文学的な数字になるような料金システムでした。要するに、私達は「この料金表で商売するつもりはないです。会社を買いませんか?」というメッセージを料金表に込めて営業に行ったのです。万が一それで契約が取れても、それはそれでボロ儲けなのでヨシです。

最終的な M&A 先になった DeNA は、初回の打ち合わせに同席していただいた取締役の方に「この金額は私の権限の範囲を超えるので難しいです。それより会社を売るつもりはないですか?」と言われ、正確にメッセージを受け取って頂けました。あのスピード感は本当に素晴らしかったです。他の会社も何回かの打ち合わせの後、最終的に M&A を前提に交渉が進むことになりました。

大震災発生

その後順調に交渉が進んでいたのですが、2011 年 3 月 11 日、東日本大震災が発生します。これが状況を一変させました。震災の衝撃は大きく、今後日本の経済がどのように動くのか全く想像が出来なくなりました。そして M&A の交渉にも暗雲をもたらします。そこまで順調に進んでいた交渉が、全ての会社より一転「状況が変わったので一旦停止させてください」とストップが入りました。

これは大変な痛手でした。当時私達が提供していたガラケー向けの B2B サービスにおいてもお客様より「違約金を払うので契約を一旦解除したい」という申し入れがあったほどで、先行きが本当に見えなくなりました。起業時はリーマンショックに見舞われ、売却時は大震災、本当についていないなとつくづく思ったものです。

大震災による冷え込みは、私達の立場からすれば結果的には一時的な現象で終わったと言えるかと思います。私はその間、さらに企業価値を高めるため、Flash Player の改善に取り組んでいました。買収の交渉が止まっているせいで iPhone 3GS で高速に動作させることに全精力をつぎ込めたので、この期間のパフォーマンス向上はなかなかのものだったと自負しています。

再度、先方から連絡を取ってもらうために

大震災の影響が一段落した雰囲気になりつつあり、私は改めて交渉を継続したかったのですが、やはりこちらから声をかけると交渉がやりづらくなることを懸念しておりました。そこで今度は、新聞の取材を受けることにしました。新聞に私達の技術が載ることで先方の目にとまることを期待し、再度先方から私達にコンタクトを取ってもらおうという目論見です。

当時の私達の技術は世の中においてかなり必要とされていたという背景もあり、幸運にも日経産業新聞の一面に掲載していただくことが出来ました。それによって目論見通り DeNA からご連絡を頂くことが出来て、再度交渉を進めることが出来ました。DeNA の担当者の方が勤勉に仕事をされていたおかげで助かりました。

技術のお試し導入から売却まで

私達の Flash Player が実際にプロダクションで使えるレベルであるのかを判断するため、DeNA の Mobage において「ガンダムロワイヤル」というゲームの iPhone 版をリリースするので実際に使ってみましょう、という話になりました。こちらとしても願ってもいない話だったので、全面的に協力してスムーズな導入が可能になりました。Flash Player において必要なのは JavaScript のファイル一つだけ、というのは、先方側での導入においてもとてもポジティブな体験であったようです。

そしてガンダムロワイヤルが公開されると、そのなめらかなアニメーションは業界の注目の的になり、すぐに JavaScript による Flash Player の存在が世間に明らかになりました。当時 Twitter をエゴサしていたのですが、本当にすごい勢いで技術が明かされていく様を見ているのはとても楽しかったです。

当時はオープンソースの良い obfuscator(今でいう minifier)がなかったので、私は難読化ツールをパーサジェネレータを使って文法ファイルから自作していました。その自作ツールはコメントでコピーライトを出力していたのですが(DeNA にコピーライトをソースコードに掲載してよい許可は得ておりました)、技術者の方がそのコピーライトを発見され、公開された日の夜には何名かのエンジニアの方から私宛に Twitter の DM で相談や質問を投げかけて頂いたのも良い体験でした。当時は Flash Player 開発業界みたいなのがあって、謎の勢いがありました。

エンジニアだけでなく、他の売却候補の会社からもこの話をきっかけに M&A の話の継続を持ちかけていただきました。最終的に複数社からのオファーがあり、最も高い金額を提示していただいた DeNA に売却することになりました。2011 年 6 月 30 日付けでの売却です。

この時私達の会社は 1 億円を超える出資を受けていたのですが、この M&A によって出資者の皆様は数倍のリターンを得たはずです。起業としては、成功の部類に入ったと思います。

なお私は、オファーを頂いたとある会社の M&A 交渉の担当者だった方と、その後結婚しました。Flash Player の開発は、あらゆる意味で私の人生を変えたイベントになりました。

DeNA 以降の Flash Player

DeNA に M&A されてからは、すぐに内製のゲームで 10 ほど問題なく導入され、その高い信頼性が証明されました。 M&A された数週間後にはオープンプラットフォームで提供するための準備が進み、1 ヶ月後にはサードパーティのゲームに向けて無償提供が始まったと記憶しています。サードパーティの皆様にも非常に高く評価され、そこから数ヶ月で 300 を超えるゲームに Flash Player を導入していただきました。嬉しくて 100 くらいまでは数えておりました。

当時、街を歩いていてふと目に入ったスマホのスクリーンのゲーム上で私の Flash Player が動いていたり、テレビ CM で使われているシーンが私の Flash Player の出力であったり、自分の作った製品が広く使われていることに、とても感動しました。また(今でもたまにあるのですが)お店で飲んでいたりする時に、同業者の方がわざわざご挨拶に来ていただいて、Flash Player のおかげで助かりました、ありがとう、とお声がけいただいた経験が何度かあり、本当に嬉しかったです。

きっとこういった感動は、OSS の世界だともっとあるのでしょう。Jenkins 開発者の川口さんから、SFO 空港のイミグレの待機列で目の前の人のバッグに Jenkins バッチが付いていた、という話を聞いた時は、本当に羨ましいなと思ったものです。そういう経験をわずかでも(当時は)プロプライエタリのプロダクトで得られたことにはとても感謝しています。

私はその後、Flash Player の改良に関わる一方で、DeNA の ngcore というゲームエンジンの HTML5 移植も担当し、そこでも様々な知見を得ることが出来ました。それが高じて新しく会社を設立し、そこでは iOS から HTML5 への変換技術に挑戦したのですが、その話はまた別の機会に譲ろうかと思います。

技術会社を売却するということ

ここに挙げたストーリーは、偶然が重なって起こった幸運な出来事であると思います。上手く行ったのはたまたまでしょう。

そして、良い話だな、と純粋に感じた人に対する責任として、M&A のネガティブな面の話もしておきたいと思います。

まず、会社の M&A は、基本的には株を金銭で売却することになります。そして創業者は一定期間会社に居続ける義務を負うことが多いです(キーマンクローズ、もしくはロックアップと呼びます)。一般的にキーマンクローズは買収された人の負担になることが多いでしょう。私は DeNA における Web 系の開発がとても楽しかったと断言出来ますが、それでもキーマンクローズが負担であったことは否めません。

会社の M&A は、金銭ではなく株式交換によって為されることもあります。技術会社に対する M&A の場合、創業者のモチベーションを会社の成長と連動出来る点では良いのですが、交換した株が非上場株式であることがほとんどなので、売却した側がリスクを負う側面が否めません。もちろん、株式交換で M&A した結果、会社が上場して大成功というルートも存在します(日本だと最近の glucose 社が良い例ですね)。

あくまで今回のストーリーは、スタートアップの文脈の話です。起業し、四苦八苦し、なんとか exit をしようと努力した、その果てにあるストーリーです。あなたが生粋の技術者で、本気で打ち込んでいるプロダクトがあり(おそらくそれは OSS でしょう)、それにまつわる買収の話が出ている場合は、今回の話は参考にならないかもしれません。技術者主体・主導のプロダクトに当てはめようとしないよう、重ねて記載しておきます。

Merry Christmas

今日は 2020 年 12 月 24 日、クリスマスイブですね。皆さんが理不尽な目にあわずに暮らしていける世界が続くことを祈っています。良いお年を!