hitode909の日記

以前はプログラミング日記でしたが、今は子育て日記です

UI変更批判バトルと複数のバージョンのウェブサービスを同時に配信することについて

http://www.flickr.com/photos/31189469@N05/8523651122

ウェブサービス,UI変えると,改悪とか,元に戻してとか,そういう意見が出る.

サービス提供する側の立場では,新しいUIのほうが使いやすかったり,機能が増えたり,収益が増えたりするので,新しい方を多くの人に提供することに価値がある.使いやすいかとか,儲かるかとかは,リリースまでに調べておく必要があり,リリースの結果使いにくくなったり収益減ったりしたら,失敗ということになる.

一方で,ユーザーの立場からすると,前の方がずっと使ってて愛着があったとか,新しい方を覚えるのは手間とか,確かにという感じはする.また,ウェブサービスは最終的にユーザーの手元のブラウザで表示されて動くので,映画の結末が気に入らないから変えたいといった要望よりは,受け入れやすい.データ構造についての,サーバー側の処理についてのユーザーからの要望というのはあまりなくて,このボタンがどうみたいな,UIの要望が多いと思う.

全部置いときたい

全てのバージョンを同時に配信できれば揉め事を減らせると思った.ユーザーが使いたいバージョンをいつでも選んで使える,という形.こういうのはよくあって,ウェブサービスじゃなくて,ユーザーのクライアントにインストールされて動く形のアプリケーションでは,ユーザーがバージョン上げずに固定で使う,とかができる.なんとかのバンドはファーストアルバムが最高とか言ってファーストアルバムだけ聞く人とかもいる.このブランドのシャツは何年まではアメリカ製だったのでデッドストックを探すとか.

ウェブサービスでこういうことができるか考えた.問題がいくつかある.

複数のバージョンを保守するコスト

複数のバージョンのソフトウェアを同時に保守するにはコストがかかる.バージョンは設定画面か何かで選べるというイメージ.Flickrとか見に行くと,最新のUIを試しますか?はい/いいえみたいなのが出る.新しい方はだいたい使いにくいのだけど,Flickrの場合はいずれは新しいUIに統一されるという見込みでやってる.今回は,古いのも永続的に残したいという話なので,バージョン数だけ保守すべきコードが増える.現実的に,不具合1個見つかるだけで100個のコードを直すのは現実的でないので,基本的に古いのは放置で,致命的な問題があったら,これより古いバージョンは捨てられる,みたいになると思う.あまりメリットない.

複数のバージョンを配信するコスト

複数のバージョンのアプリケーションを配信するのにコストがかかる.全バージョンのアプリケーションを起動しておくと,サーバーでバージョンの数だけメモリとか消費するので効率悪い.if文とかでバージョンが10以下ならとかやりだすとめちゃくちゃなことになるので,複数のアプリケーションが起動してるという形になると思う.めっちゃメモリ使いそうなので,よくない.

収益上問題がある

複数のバージョンを配信することで,収益に影響が出ることがある.あるバージョンまでは広告が出ないけど,ある時期から出るとすると,広告の出ないバージョンを最高のバージョンとして崇めて大切に使う,みたいなのが考えられる.昔,ゲーム機のファームウェア古いやつをハックして遊ぶ人とか居た.ゲーム機は一度買えば終わりだけど,広告収入が主なウェブサービスから広告消されると困る.ユーザーの立場では,サービス提供者が倒産したらそのサービス使えなくなるので,一時の快楽を求めて広告消すよりは,持続可能性を考えて,広告出るバージョンを選んでほしい.倒産したら次の会社を探すのもいいけど,構造的にそれでは長続きしない.

どうしても古いバージョンを使えない場合

多少の不具合くらいなら我慢して使うというのもできるけど,あまりに問題があると,すぐにバージョン上げないといけない,という場合がある.

セキュリティ上問題がある場合は,即座にバージョン上げないといけない.いくら気に入ってても,クレジットカード番号が流出しては困る.たまに脆弱性のある古いMovableTypeが攻撃されたりしてる.ユーザーのサーバーにインストールされるという形では,ユーザーが手作業でアップデートする必要がある.WordPressには自動アップデートという仕組みがあるけど,これだと,常に最新版を使うということになる.

パフォーマンス上問題がある場合もバージョン上げるべき.なぜかバブルソートでソートしてるとか,ユーザーのパソコンが重くなるだけなら自己責任なのでいいけど,過剰な頻度でリクエストを送るとか,サーバーが重くなる場合は,上げてほしい.

サーバー側で削除された機能は,ユーザーが古いバージョンを使いたくても,使えない.天気予報サービスは提供終了しましたとか言うと,それ以降は新しい天気予報取得できない.

というふうに,いろいろと問題ある.

APIによる解決

サービス本体はAPIだけを提供して,ユーザーは好きなクライアントを使う,という形にすると,多少は解決できる.

Twitterはこうなっていて,よくできてる.僕の身の回りではTwitter本体のウェブサイトはあまり見てる人いなくて,みんな夜フクロウとか勝手なクライアントでAPI経由で見てる.

APIのバージョン上がることで,古いバージョンを保守するコストを下げている.

配信するコストも,バージョン1と1.1だけで,日ごとに増えたりしてないし,バージョン1はもう使えない.

基本的にRESTfulなAPIだけ提供しているので,たとえば,ツイートの削除がめっちゃ重いので使わないでください,とかは起きにくい.また,時間あたりのリクエスト数に制限があるので,毎秒100回タイムラインを取得してサーバーを攻撃とかはできないようになってる.

Twitterのクライアントというのはネイティブアプリを指すことが多いけど,一般的には,静的なHTMLとJavaScriptだけでアプリケーションを作り,サーバーサイドはRESTfulなAPIだけを提供する,ということにすれば,複数のバージョンを配信できる.HTMLとJavaScriptは全バージョン置いておいて,cookieとかでバージョンを切り替えて配信するとかして.APIは共通.という形.これでも,脆弱性かなんかの理由で古いバージョンは提供が打ち切られるか,動かないまま打ち捨てられることになる.

解決してない

Twitter方式にしても問題があって,Twitter本体のサイト見てる人は文句言ってて,プロモーションのツイートが流れるのはうっとおしいとか,なんとか,いろいろ言ってる.

また,APIだけ提供しても,UIを作る人に不満が殺到するという構図は変えられなくて,なんとかっていうクライアントの最新版は最悪の出来とか,Twitterクライアント作ってる人がひたすら叩かれるということになる.ユーザーからすると,UI作ってるのが サービス提供者でも,サードパーティのアプリ作者でも誰でもよくて,結局は誰かが叩かれるので,根本的に解決したわけではない.

オープンソースによる解決

APIはこちらから配信するけど,HTMLとJavaScriptはオープンソースにして,文句があるなら勝手にforkして直して使え,という形にもできるけど,コード書けない人はUI変えたりできないので,過酷な世界観だと思う.過酷だけど筋は良くて,APIの実装は公開できないけど,HTMLとJavaScriptとか,ユーザーのブラウザで動き,テンプレートでサーバーサイドから値を埋めたりしない限りは,リポジトリを含めてユーザーに公開していいはず.なので,forkして自由に改造して使ってくださいというのが一番穏便だと思う.問題はあって,こういうことすると広告消されるに決まってる.けど,ブラウザで動く以上は,ユーザーがどう見ようと制御できない.これは右クリック禁止するのがださいというのと同じ話だと思う.建前としては広告消してはいけないけど消されたとしても消えた以上はサービス提供する側からはどうすることもできない.

これは,ブラウザ拡張とかGreasemonkeyとかでページを書き換えて好きに使うのと似てる.けど,これでも,ブラウザ拡張の作者が叩かれるのは変わらない.オープンソースなんだから,気に入らないならforkして使えっていうだけでいいのだけど,叩かれるだけでつらい.

なんか教えてください

UI変更するたびに怒られるのは大きな問題で,ユーザーの心情を考えるみたいな気をつけてやるみたいなのじゃなくて,仕組みで解決しないといけない.

APIとクライアントという形に完全に分離して,オープンソースにすればましになるかとか考えてたけど,いろいろある.

なんかいいプランがあったら教えてください.

photo by dek dav

 

追記

ブコメ見てると,最初に良いものを作って基本的には変えずにちょっとずつ変えるとか,ABテストでなんとかなるという意見が多いけど,そういうことはやった上で,古いバージョンを使いたい人がいて,そういう人をどうするかという話のつもりだった.2行目くらいに前提書いたつもりだった.

有料で古いバージョン使えるっていうのも現実的でないと思う.有料っていうのは月数百円とかを想定してると思う.ちょっとした変更くらいでも,こっちのほうが好みとかあるので,古いバージョンというのが大量にできて,メンテナンスできなくなると思う.それだけやって儲かるならいいけど,それだけで儲かるくらいにお金もらうと,月数百円くらいじゃ済まないと思う.2012年6月のUI,みたいに,このバージョンの挙動はここがこうとか,仕様を把握して保持するのも難しい.古いUIを使うことにお金取ってしまうと,機能を削除とか統合とか変更とかできなくなるので,身動きが取れなくなる.