相談フォーム信頼の「飲んだくれマーク」をご確認下さい。前回の日記の続きです。プログラムを打ってて常々思うのが、ユーザーは作った側が全く想像しなかった使い方をするんですね。作る側はあらゆるパターンに対応出来るようになんて作れないので、いつもこういうところで悩まされる。今回の例も、自分が作ったサービスが、何のプログラムに関する知識をも持ち合わせていない人が使うということで、すごく勉強になりました。最初に言われたのが、「画面が固まる!アップロードできない!」というものでした。私はちゃんと、FireFoxとAndroidブラウザからアップロード出来ることくらいは確認していたので、あれ?おかしいな。エラーが出るならまだしも、画面が固まるってのはおかしいな・・・。単純にアップロードに時間かかってるだけじゃないか?と予測しました。仕様上の話だと、FOMAハイスピードならば上り最大5.7Mbpsとなっているようです。こんなもん、絶対仕様通りの速度が出るとはもちろん思いませんので、まあ、1Mbpsに届かないくらいが関の山だろうな。すると、くらいなんだろうな。何MBの動画をアップロードしてるのか分からないけど、せいぜいでかくても2~30MBでしょう。30MBならば4分くらいかかる計算だね。4分画面が遷移しないと固まると思うかもしれんね・・・なんて思ってました。したら、結果的にその人は30分待ったらしいとのこと。どんだけ大容量の動画なんだと見てみると、たった11MBしかないのです。逆算すると、なんと133kbps!当初予想の13%の速度しか出ていません。いやー、たまげたモンだ。私が試しにスマホからアップロードした動画ファイルも数MBはあったのだが、wifi環境からアップロードしたため、そんな速度しかでないとはとても思わなかった。私はアップロードページにこう書き加えた。「なるべくwifiから接続してください。なければPCから接続して下さい。携帯の電波(3G)から送信するとすごく時間がかかります。時間がかかっても放置しておいて下さい」と。「wifi接続」「3G」などという単語を果たして何人のユーザーが理解しているだろうか。知っていたとしても、スマホからwifiに接続できるユーザーが何人いるだろうか。私はしょうっちゅうルーターの設定の仕方などを友達から聞かれるのだが、まあ、そういう背景を考えると、少なくともPCやデジタル機器に関心がある人でないとやらないだろうね。次は、「本当にアップロードされているのかどうか不安になる。何十分も放置しておけない。プログレスバーを表示して欲しい」と言われた。普通はそう思うだろう。時間のかかる作業にはプログレスバーや進捗率を表示して欲しい・・・。簡単に端折って言うと、いまのインターネットの仕様では、こういうことは基本的に出来ない。基本的に、今のインターネットのシステムというのは、黎明期にテキストデータと簡単な画像やバイナリデータなどのやりとりが出来ればそれで良い、という、ひどく簡単に作られたシステムを10年単位のスパンで引き継いでるので、色々と困ることが顕在化してきている。欠陥と言っても良いと思う。まともなエンジニアなら、誰しもがHTTPの仕様に憤慨しているはずで、じゃあ、なぜそれを作り替えないかというと、つまり、昔の物を捨ててそれを作り替えると言うことは、これまで作られた全てのブラウザ、機器、また、HTTPを作る全てのソフトが無用の長物になるということから、なかなか出来ないまま2010年代に突入してしまった。最近になってようやく、googleあたりがいま頑張ってどうにかしようとしている。前述のプログレスバーの要求で言えば、「Webページへの要求と応答は必ず1セットで、それぞれ一つずつ」という仕様がこの実現を難しくしている。「この動画データを、送りますよおおおおおおおおおおおおおお」って、何分もかけて送ってる間、受け取る側は何も返答できないのだ。全部送ってから初めて「ハイ!受け取りました!」と応答することが出来る。嘘付けー、アップロード最中にプログレスバー表示されてるの見たことあるぞ、と、言う人も居るだろう。それはブラウザが「100個あるうちの40番目まで読み込んだから40%だな」って適当に出してる(※)か、Ajaxとか呼ばれる方法で裏で頑張ってるかのどっちかだ。(※)つまり、読み込む画像が100個あれば、100回要求を送っていると言うこと。これだけでいかに非効率か想像が付くだろう。Androidブラウザとかでは、プログレスバーの表示はなめらかに見えるが、じっくり観察するとカク付いていたり、突然進捗バーが後ろに戻ったりするのが分かる。これは、進捗率の表示を読み込むべきコンテンツ(画像とか動画とかFlashとか)の数を使っているので、粒度が荒いためだ。Ajaxというのは、一時期、「Web2.0」とかもてはやされてた時代の技術(しかも、過去の技術の再発見)である。なんかすごいぜ!みたいな感じをふんだんに各社押し出していたが、まあ、昔からある技術をなんとか応用してやりくりして、前述の欠陥と言ってもいいレベルの遺物を表面的にごまかしてお茶を濁しているだけである。したエンジニアであれば、Web2.0なんて単なるビジネス上のバズワードであって、何ら意味がないと見抜いていただろう。その通り、今、Web2.0なんてアホみたいなことを言う輩は居ない。プログレスバーを表示させるのはすごく難しい。具体的に言えば、サーバーにWebフレームワーク、たとえばrailsとか、Djangoとか、TomcatでServletとか、そういうものの環境一式を整え、ブラウザがアップロードを開始する前に、すべてのユーザーの間で重複しないセッションIDを生成して、それをクッキーで渡して、それがセッションの間中生きるようにして、で、アップロード中にJQueryとかつかって、セッションIDをキーにして進捗率表示のための動的ページにアクセスして定期的に進捗率を取ってくるようにして、その間、データを受け取ってるサーバー側プログラムはセッションIDごとに進捗率表示のための動的ページに情報を送って・・・という、クソクソクソクソクソクソクソクソクソクソクソ面倒なことをしなければならない。俺はそういうページを作ったことがないので正確には分からんが、裏でこういうことをやっているのは間違い無い。そんだけクソ面倒なことをやって出来ることと言うのは、「アップロードに進捗率が表示される」という、出来て当たり前と見なされる、ひたすら地味な機能である。今時、プログレスバーが表示されたくらいですげー!!と喜んでくれる人は皆無だろう。多くのWebストレージサービスは、専用のソフトやアプリを提供することになる。ブラウザ上でこれを実現するよりも、プログラムを書いた方がずっと楽だからだ。ユーザーは、その苦労が分からないため、「なんだよ、プログレスバーも表示されねーのかよ。」と、いう評価を下すわけであるが。場合はさらに細かく「何十分待たされてもじっと待ち続けて下さい」と注意書きを書くに留めたが、これが、ビジネス上のサービスならとんでもねーことだよなあ。