昨今、ネイティブアプリ全盛が故に、WebサービスのUXを作れるエンジニアが少なくなってるんじゃないか説がある。
また、受託からWebサービスが主流になったことで、一つのソースコードをこねくり回す機会が増え、新規にWeb UIを作り込む頻度が低くなり、そもそも鍛えられていないんじゃないか説もある。
例えば、商品登録画面のような何かのテキスト情報と一緒に登録する画像アップロードを考えてみる。
その際に、「入力確認画面」が必要だと仮定する。また、それなりに秘匿性を意識すべき企業用途のサービスだとする。
書きながら2002年の案件を思い出してるので、なんか古い話だったらゴメンよ。
1.いつどこに画像を保存するのか? post or ajax ?
2.Webサーバに置くのか?S3に上げてしまうのか?今時ないかもしれないがObject Databaseに登録する?Webサーバに置いたらロードバランサーとの関係は?
3.いずれにせよ、いきなりpublic領域にあげてしまって良いものなのか?
4.商品IDはその段階で決まっている?、その場合の画像ファイルの仕様は?
5.確認画面の段階ではまだ画像は外には見えてはいけないかもしれないのでパーミッションは?
6.やっぱやーめたって確認画面でブラウザを閉じられた時に残るテンポラリファイルの処遇は?
7.確認画面では仮にアクセス管理されたテンポラリ領域に登録しておいて、じゃぁ、本番にアップロードされた時にどうやって公開する?
8.確認画面から戻って画像を入れ替えたり、削除された時のテンポラリファイルの削除は?
9.確認画面から「戻る」ボタンで戻された時に画像を残すことはできますか?
などなど、画像アップロード一つとっても案外考えることがあって、こういうのをしっかり作り上げた先に、良いコンテンツ登録画面のUXというものがついて回ることがあるのだが、案外、世の中もっと適当かもしれないですね、と。
どこまでのパーミッションで、どこまでの画像を残すのか?テンポラリファイルの処遇などは、アップロードするファイルの特性によって変わるだろう。企業用途Webにおける個人情報ともなれば、最新の注意を払うところとも言える。
うっかり登録画面でキャンセルした情報が、実はpublicに公開されていました、なんてのは絶対に避けないといけない。
ファイル名にハッシュを使ってURLが予測できないのは「偶然」なんですよね。論理的には許されないわけで。
また、これ以外に、アップロードしているファイルサイズが大きい場合の途中経過表示とかもありますね。ドラッグアンドドロップだとか、ファイル情報の並べ替えへの考慮だとか、まぁいろいろ考えることはありますよね。きっと。
またセキュリティだけではなく、戻るボタンを押した時の挙動をできる限りポジティブに守るというのは、ユーザに迷いを与えないユーザエクスペリエンスに影響しているポイントである。
あと確定ボタン押下後に、「戻る」「戻る」された時にどうあるべきか?とか。ここまで来るとWeb Appplication Frameworkのところでコントロールされているから、「どうあるべきか?」なんて考えたことない人もいるでしょうしね。
書いてて思ったけど、ステートレスなWebブラウザにステートを持たせるの、くっそ面倒くさいですねw
更に、テンポラリファイルの削除やどこに保存して、どうやって本番公開するのか?などは、システムのスケーラビリティに影響する。例えば、この辺を一番簡単にする方法として、データベースの中にバイナリで入れてしまうという技が昔は見たことあるが、当然、Max connectionsの影響を受けるDBに重いデータのやり取りを任せるのはご法度である。完全イントラならありうるかもしれないが、スケールするWebサイトでやることではない。(書いてて思ったが、今時ならCDNに任せるって手もあるのか)
まぁwordpressあたりは割り切っているので、企業向けサービスでも、その辺を真似すればいいという話でもあるのかもしれないです。
何かを真似するにせよ、ちゃんと技術要件に照らし合わせて、思想を持ち、画面遷移やデータの持ち方を考えることも「エンジニアリング=技術力」の範疇だと思うのだが、あまりこの辺のことをスキルとして形容する言葉がないような気がしていて心配している。
プロフィールにSPAがどうのこうの、とか、◯◯というフレームワークを使ってきました、などということが書いてあっても判断がつかないのだ。
こういうスキルは、
・フロントエンドエンジニア
ではなく、
・サーバサイドエンジニア
なんだろうか?!
冒頭に書いた通り、最近のサーバサイドエンジニアはAPI主体だったりもして、実はこの領域はフロントエンドと言われる会社もあるんじゃないかと思う。
ちなみに、ネイティブアプリならアプリ内で画像プレビューを作り込むから、ネイティブアプリエンジニアのところで完結してしまう。
あと、最近はこういうのが面倒くさいからプレビューなどは一切ないサービスも少なくはない。でも画像は、どこかしらにアップロードされていたりするから、その処遇が謎である。
いずれにぜよ、
・スケーラビリティ
・セキュリティ
・機能=ユーザエクスペリエンス
この3つの要素にしっかり気を使ってくれて、「良いWebサービス」を作りたいWebのエンジニアを採用できたらいいなと思っております。