組込みUI屋さんに必要な知識とか

メーカとかメーカの下請けとかの立場で機器組込みソフトウェアを作る仕事をしている。もう20年間くらいずっとそれだ。その前の学生時代も似たような環境でプログラミングをやっていたので、もう30年くらい同じことをやっているような気がしている。機器組込みソフトウェアというのは、たとえば携帯電話とかテレビとか車とかに内蔵されているOSとか、自動販売機とかATMとかETC車載器とかそういう感じのやつをうまく動かすためのソフトだ。

 

高校生のころは「プログラマ30歳定年説」あるいは「将来はコンピュータが自分でプログラムを作る時代になるからプログラマは不要になる」などと言われていたので、40代にもなればアーリーリタイヤして会社のお荷物としてのんびり暮らそうと思っていたところが、まだまだこの先10年はプログラムを書いて生き続けれそうな気配がしており人生計画が台無しになってしまった。責任者出てこい。

 

僕は特にUI部分を担当させられているが、とくに日本人だけしか対象にしなくていいUIと、グローバルに使われる機器のUIではソフトウェアを作る難易度が全然違うということが分かっていない人が多く、いつも苦労しているたとえば「文字列が与えられたときに、アルファベットの小文字を大文字に変換する」というような仕様が出てくることがある。もうこの時点でヤバい臭いがしてくる。これに対してGoogleで「C言語 大文字 小文字 変換」などで検索して出てくるコードをあまり深い考えなしに使った場合と、まあ「それで済む範囲であればいいのだけど、それで済まない場合が全く考えていない(そういうケースがあることを思い付きもしていない)」という問題があとから発覚する。

 

なぜならよく見かけるコードは「a...zのどれかの文字があったら、それをA...Zに置き換える」というものだからだ。アメリカ人が英語しかつかわないならそれでOKかもしれない。

でも日本人だったら「全角の「a」はどうなるの?」という疑問が沸く。

「じゃあ全角のa...zもA...Zに置き換える処理を追加しよう」

となる。

「『ぁ』は置き換えないよね?」

「うん。だってそれはアルファベットじゃないもん」

アルファベットとは何かという問題。これは難しそうな気がする。

 

 

そして次にドイツ人の気持ちになったら…

ä, ö, ü, ßはどうするの?

「ä, ö, ü」は答えが簡単にわかるからまだいい。問題は「ß」である。Wikipediaによれば

語全体を大文字で書くときは SS と書くが、ß を大文字として使うか、Unicodeに登録されている ßの大文字)を使うことも散見される。固有名詞などは混同を避けるため ß をそのまま用いる。例えば姓の Weiss と Weiß を大文字で書くときは、それぞれ WEISS, WEIß, WEI になる。

https://ja.wikipedia.org/wiki/%C3%9F

は?…固有名詞かどうかで変換するかどうかが変わるって正気ですか?

いや、さすがにそこまでやる必要ないのだ。「僕がドイツ人なら間違いなく「ß」を大文字にしたときは「SS」への変換で満足する」と自信をもってその仕様で実装するべきだ。そしてお客様から指摘があった場合もそのように説明して押し切るのだ。

しかしドイツ語という、英語以外では一番簡単ではないかと思われる言語ですら、このような状況になってしまうのである。全世界のメジャー言語に対応しようとするとどうすればいいかなどわかりようもない。

 

 

基本的には早い段階で難しさを説明して「a...zしか対応しません」と仕様調整するか、こういう難しげなことを一律に面倒見てくれるICUというライブラリを使うしかない。後者は一見できそうに見えるが、ライブラリが必要とするメモリや処理速度がどうかとか、ライブラリで変換した結果が、実は自分の機器で扱えないような文字コードになる不具合が発生しないかなど、様々な調査が必要となり、茨の道であることが多い。

 

 

機器の性能が向上するに従い、より人間に寄り添ったUIが実現可能となった。その結果、人々が何を自然に思い、何を不自然に思うかということに対する幅広い知識がUI開発者には要求されるようになっている。このエントリでは大文字小文字の話しか書かなかったけど他の分野でも似たような雑学のようなものがいっぱいあって、僕らは日々そういう雑学を勉強している。一般の人が考えるようなソフトウェアの勉強はほとんどできずに開発をしているが、日々の開発に役立つのは雑学っぽい知識のほうである(もちろん基本的なソフト開発の知識は押さえているという前提で)。