「コード汚くてもデザインが見えればいいじゃん」への返答

なぜコードが綺麗じゃないといけないの?という質問をごく一部の方、特にデザイナーさんから受けることがあるので(半分くらいの人はネタで言ってますが)、自分なりの意見をまとめたいと思う。勉強不足で浅い感あるので、偉い人にご指摘いただけると嬉しいです。

「コード汚くてもデザインが見えればいいじゃん」の定義について

「コード汚くてもデザインが見えればいいじゃん」はかなりふわっとした印象を持つので、ここでは「コードが汚い」の定義として、以下の2つを挙げる。

  • メンテナンス性に欠ける
  • (W3Cの)仕様に沿っていない

なので「コード汚くてもデザインが見えればいいじゃん」というのを「メンテナンス性に欠け、仕様に沿っていなくても、デザインが見えていればいいじゃん」という意味に置き換えて話を進める。 確かに表面的な視点で見ると、エンドユーザーには関係がなさそうに見えるかもしれない。 例えばメンテナンス性の高いコードというのは、開発側の都合も多分に含んでいるからです。

しかし本当にそれだけなのかな、と思う。

メンテナンス性について

長期的な目線

まずはメンテナンス性について、長期的な運用の目線で考えてみる。 仮にメンテナンス性に欠けるコードに、モジュールの再定義が必要になった場合や、新しくページを追加することになった場合、またはJSの挙動を変更することになった場合、恐ろしく"余計な"時間がかかることになる。 その"余計な"時間をUIやグラフィックやアクセシビリティの改善に使っていれば、ユーザー体験の向上につなげることが出来たかもしれない。 "余計な"時間がかかるために、コストの問題で新しい機能の実装を諦め、ユーザーに損失を与えることになるかもしれない。

メンテナンス性が高ければ出来たのに!!!!!

短期的な目線

もちろん、メンテナンス性の向上を意識すると、なにも考えずにコードを書くより工数がかかる。 しかし、実装の最中にも仕様というのは変化していくもの。 メンテナンス性の悪いコードだと「あ、これアカンやつや・・がっつり書きなおさなくちゃ・・」みたいなことになって"余計な"時間がかかる可能性もある。 もしメンテナンス性が高ければサクッと直せたかもしれない。

このように場合によっては、きちんとメンテナンス性を考慮して書いていたほうがファーストコミットの工数だけ見ても、短くなる可能性がある。 そしたらその分のコストをUIの改修に回せてユーザーが幸せになる。

これらを考慮すると、メンテナンス性を考慮したコードというのが、開発者だけでなくエンドユーザーにも良い影響を及ぼすことがあるというのがわかると思う。全然エンドユーザー関係なくない。

(W3Cの)仕様について

これについては、僕の考えでは「ルールだから」というのが一番明確で絶対的な答えだと思っている。

Webにはきちんとしたルール、推奨されている手法が、根拠とともに仕様書として明文化されている。
みんなが使いやすいWebにするために、(頭のいい)みんなで決めたルールがある。

ライブラリとかプラグインのドキュメントを読まずに「なんか動いてるし大丈夫やろ」って使い続ければいずれハマるしトリッキーな展開になったらどうしようもなくなる。 Webにもきちんとルールというか説明書があるということを改めて認識すべきだと思う。

そして、(学習コストはかかるけど)実装に際しては余計な時間がかかることはない。 「知っているか・いないか」の違いで、セマンティックになるか、そうでなくなるかになってくる。

だけど「そんなのエンドユーザーには関係ないじゃん」という人も驚くことに存在する。 では本当に仕様準拠はエンドユーザーに関係ないのか。 そんなことは断じてない。

アクセシビリティの問題

一番はアクセシビリティの問題。 情報にそもそも辿り着きにくくなる。

例えば極端の例で言えば img タグに alt が入っていない場合、目が見えない人にとってその情報は得られなくなってしまう。 また、全てを画像で構成するWebサイトなどを見た事があるのですが、alt が全て入っていなかったため、そのサイトは目の見えない人にとって無価値。 また、文書構造をしっかりと設計していない場合は、音声ブラウザで読み上げても情報へ到達しにくくなり、場合によっては支離滅裂な順序で読み上げられてしまいかねない。 そういったユーザーへの配慮はコストがかかるけど、最低限の担保で機会損失は随分防げる。

パフォーマンスの問題

アクセシビリティだけではなく、パフォーマンスの問題もある。 パフォーマンスを意識して作るか、作らないかだけで描画スピードは随分変わる。 高速化はユーザー体験に計り知れない影響を与える。また、SEO にも非常に有効だ。 サイトの高速化によりユーザーは良い体験得て、情報により辿り着きやすくなる。

まとめ

これらを見ると「よくわからないから」などの理由は別として「見えてればエンドユーザーには関係ないでしょ」なんてとても言えないと思う。

ぼく自身、勉強不足で全然いいコードが書けている実感はないけれど、意識して勉強を続けている。 とても難しいし、完璧なコードは存在しないとしても、美しいコードは単なるエンジニアのエゴイズムではなくユーザーにも関係することなのだから、コードの質の向上を目指す人が好きだしそうなりたいなと思う(戒め)