月: 2020年3月

Performance of Opensource ApplicationsでAudrey Tangの章を読む

このところAudrey Tangという人がよく話題になっている。台湾のデジタル担当相みたいな大臣だという人だ。この人をとりあげた記事は日本語でもいくつかあるが、たしかにどれもおもしろい。

さてこのAudrey Tangの書いた技術文書が、Performance of Opensource Applicationsという本に収録されている。いろんなオープンソース開発者による、ソフトウェアの性能に着目した技術記事をあつめた本だ。ネットで公開されていて無料でも読める

本全体もひととおり読んでみたんだが、まあなんかそれほど感心するような内容でない章もそれなりにあった。ダメとかじゃなくて、なんというかふーーーん……で終わってしまったような……まあ読者の興味の方向性で面白さがかわるようなトピックだとおもうので、どの章がどう、という話は控える。たださいわいにして、Audreyの文章は個人的には面白い方に分類される内容だった。

この章ではSocialCalcというスプレッドシートアプリの性能改善について解説している。スプレッドシート(エクセルとかみたいな)だが、ブラウザでアクセスするウェブアプリであり、シートをみんなで共有できる。グーグルスプレッドシートとかみたいなやつ。ただしオープンソースでだれでもインスタンスを立てて動かせる。

ただユーザ数が増えたりデータが増えてくると性能的にどんどんつらくなっていったんだという。というのも、セルの計算のロジックやスプレッドシートのロジックが基本的にJSで書かれていたからのようだ。よくわからないけど、たぶんセル内の演算や関数なんかにもJSをそのまま使えるようになっていたのだと思われる。設計としてはすっきりしているけど、あまりにも更新が多いとユーザはアクセスするたびに全更新データを受け取って計算しないことにはスプレッドシートの最新状態を描画できなくて、これはいかにもつらい。

それで最終的には、Perlで書かれたサーバをNode.jsに移植し、同じコードでサーバ側でもスナップショットを取れるようにして、性能を改善した。さらにサーバサイドJSのボトルネックをさぐって性能を改善していった、という過程が説明されている。

本自体が2013年ころに刊行されており、書かれている出来事はそれよりちょっと昔だとおもわれるので、いろんな細部に時代を感じる面もある。そもそも当時のnodeってめちゃめちゃ初期だし、coffeescriptとかが熱い時代だったんだなとか。今でこそ、そりゃそんなものならNode.jsでいいでしょって思うかもしれないけど、必ずしもそれ自体がただしいかどうかは事前にはわからなかったのだろうな……といったところにも、面白さがある。

ところで、なんでAudreyがそんなソフトウェアに貢献していたんだろうか。しかもシートを数千人でシェアすると困るよね、みたいなことを言っているが、そんなに大規模にシェアすることってあるんだろうか? そういう動機みたいな話はとくに触れられていないのだけど、オープンガバメント系の運動に参加してきたがゆえにこういうプロジェクトに貢献していたんじゃないか、それがAudreyの今の姿につながっているようにも思えて、そこもまた興味深くおもえてくるのだった。