2006-12-16

組込みソフトの作り方[1]

本論に入る前に、先週の「MATLABのビジネスから見る知的生産性とは」の記事について、ある方からコメントをいただいた。

【「MATLABのビジネスから見る知的生産性とは」の記事について】

ブログいつも拝読しております。
MATLAB と Simulink には上記のような試行錯誤で作り上げる職人芸のような要素はない。

とありますが,ここは私はちょっと別の感想を持ちました。

というのは,最近ではクルマの制御ソフト開発で,MATLAB/Simulinkからの自動コード生成がかなり普及していて一部のサプライヤでは,MATLAB/Simulinkの枠内で,職人芸的なことをやっていると思います。なので,一概に「ない」とも言い切れない状況かなと感じるのです。
MATLAB , Simulink が、研究者と開発現場のエンジニア、科学技術を必要としている企業の橋渡し
とあるように,自動車業界でも,自動車メーカーとECUサプライヤの間では,MATLAB/Simulinkモデルが仕様書のスタンダートになっています。自動車メーカーが作ったモデルは確かにdoubleの世界ですが,これを受け取ったサプライヤは,モデルがマイコンで走る実際のソフトになるようfixed pointに書き換えるなど,実装に伴う苦労をしているわけです。

10年前は自動車業界でも,その苦労は一般の組み込みソフト開発と同じCプログラム上での試行錯誤でしたが,現在では自動コード生成が普及し,すっかりMATLAB上での試行錯誤に変わっています。

要は,『MATLAB/Simulinkだと職人芸がない』というよりも,『職人芸をインプリする抽象度が,より上のレイヤーに移っている業界も中にはある』というのが現実ではないでしょうか?

以下に詳しい資料があります。


●日経エレクトロニクス 2003年12月22日号,no. 863,What's New,p.27.
「ソフト開発でトヨタら先駆け,量産品に自動生成のコード」

●日経エレクトロニクス 2005年8月29日号,no. 907,What's New,p.42.
「自動コード生成の適用拡大,トヨタが来年開発車種から」,


【引用終わり】

メールをもらって、「なるほど、組込み業界の中でも自動車業界は進んでいる」と思った。でも、これって巨大な市場がある業界だからだろうなって気もした。いずれは多くの組込み業界もC言語プログラムをすり合わせるのではなくモデルをすり合わせるような方向に進んでいくのだろう。しかし、どんなに時代は進んでも組込みには職人芸が付きものっていうのがいいね。

さて、今回の記事の本題に入ろう。

このブログを読んでいるのは必ずしも組込みソフトエンジニアではないと思う。IT系のソフトウェアエンジニアもいるだろうし、学生やアカデミアンもいるだろう。

つい最近、組込みソフトを経験していないどころか、技術系でもない方に「いったい組込みソフトってなんですか」と聞かれたことがある。毎日毎日組込みソフトのことを考えていると、周りの人のが持っている組込みソフトの知識レベルは何ら変わっていないのに、自分の中だけで知らず知らずのうちに周りの人も組込みソフトについてよく知っているかのように思ってしまう。

何か一つのことにのめり込んで知識を蓄え、そのことについて友人からとんちんかんなつっこみをされるとつい「そんなことも知らないの?」とバカにしてしまう。その傾向がどんどん強まっていくとその人は周りの人からオタクと言われるようになる。

さて、組込みソフトエンジニアが外部のコミュニティで活動していると、組込みや組込みソフトのキーワードに触れる機会が多くなり、「組込みの認知度が高くなってきたから、組込み機器や組込みソフトに対する理解者は何もしなくても増えるだろう」と勝手に楽観的な未来を想像してしまうことがある。

でも、それは間違いだ。組込みや組込みソフトが世の中のどんなところで役に立っているのか、また、パソコンのアプリケーションソフトの作り方と何が違うのかについての説明を積極的に発信していかないと、組込みや組込みソフトの対する理解は深まらない。

そこで、今回は「組込みソフトはどのように作られてきたのか」について書いてみたいと思う。これは『組込みソフトエンジニアを極める』の第一章に書いてある内容に近いが、第一章に書いた視点とはまた別の視点で組込みソフトの原点を考えてみた。


[1] 組込みソフトの誕生

そもそもマイクロコンピュータが生まれる前は組込みソフトなるものは存在していなかった。現在の巨大化した組込みソフトは組込みソフトが誕生したときに比べると求められている役割が変わっている。現在、組込みソフト開発の現場で起こっている数々の問題は、組込みソフトに求められる役割の変化について組織の上位層やベテランエンジニアが理解できていないことに原因があるように思えてならない。

そう考えると、組込みソフトが誕生したときの最初の役割がなんだったのかについてきちんと理解しておかないと、現在の変容した役割との差異が明確にならないし、その差異を説明することもできない。

マイクロコンピュータが発明され一般の製造業種にも利用できるようになると、組込み機器の開発の中にこれまでにはなかった新しい環境が生まれた。当然だが、そのころ製造業の中には組込みソフトエンジニアどころかソフトウェアエンジニアと呼ばれる職種もなかった。もちろん、そんな昔でもメインフレームなど大型計算機の世界ではソフトウェアエンジニアは存在していたし、製造業に携わる技術者も大学なので大型計算機を使ってプログラムを書く経験はしている。(プログラムの一行一行を一枚のカードにパンチして読み取らせたりしていた) でも、メインフレームのソフトウェアを書くことを仕事をしていたエンジニアと組込み機器の開発から生まれた組込みソフトエンジニアの出発点は実はまったく異なる。極論を言えばメインフレームの世界で培われたソフトウェア工学の技術は組込みの世界でも使えるけれど組込み向けにテーラリングしないと現場に浸透しない場合が多い。その原因はこの出発点の違いだと常々思っている。

マイコンが初めて組込み機器に使われるようになったころ、ハードウェアエンジニア、特に電気系のエンジニアの中では、アナログ系とデジタル系という役割分担はおぼろげながらできあがってきていた。自然界に存在する情報はアナログ情報だからセンサでセンシングするときはアナログ設計の技術が必要だ。しかし、アナログ情報をデジタルに変換した後はデジタル系のハードウェアエンジニアの出番となる。デジタル系のハードウェアエンジニアは規格化されたロジックデバイスを組み合わせて目的のデジタル回路を設計していく。

マイコンが登場したときにマイコンをプリントP板上に配置し、他のロジックデバイスと接続したのはデジタル系のハードウェアエンジニアだ。そして組込みソフトエンジニアが誕生する以前はデジタル系のハードウェアエンジニアがマイコンのプログラムを書いた。

デジタル系のハードウェアエンジニアは当時どのように仕事をしていたのだろうか。だいたい、次のような手順で仕事をしていたと考えて大きな間違いはないだろう。

<昔のデジタル回路の設計手順>
  1. デジタル回路の使用目的を考え、必要なロジックデバイスが何か目星をつける
  2. ロジックデバイスには必ず部品メーカが作ったデータブックがある。このデータブックを読んで、使用目的に耐えうるかどうか調べる
  3. 選んだロジックデバイスをつなぎ合わせて回路図を作る
  4. 実際にロジックデバイスの部品を入手し、マルチP板(穴がいっぱいあいていてすべての配線を自分で半田付けして行うためのP版)に部品を配置し設計した回路図どおり配線する。
  5. 電源をつないで思った通りに動くかどうか試してみる
  6. ダメだ。動かない。3にもどって回路図や配線を見直し想定した動きになるまで繰り返す。
  7. マルチP板の試作ボードが動いたら、本番用の配線をプリントしたP板を設計し生産する。
  8. 上がってきたP板に部品を載せ半田付けして完成させる。

この流れのうち、3~6の繰り返しは非常に効率が悪い。場合によっては部品を壊してしまったりもするので、きちんと完成するまでにどんどん時間は過ぎていく。この失敗の繰り返しを積み重ねていくとその製品や製品群に合った回路のパターンが見えてきて、その回路のパターンを再利用することになる。実際にうまくいった実績を持つ回路は珍重されることになり、新人は一から回路を設計するのではなく、先輩達が作った実績のある回路を眺めて、それを参考にするという手順が生まれる。

こんなことを繰り返しているデジタル系のハードウェアエンジニアのところに、マイコンという電子部品が現れた。マイコンという部品は他のロジックデバイスの接続に成功していれば、プログラムを書き換えることで上記の3~6を繰り返す必要がなくなる。組込み機器への入力の変化に応じて出力を変えたいときなど非常に便利だ。電子回路で要求仕様を満たすすべての組み合わせを設計していたら配線が間違っていたり、仕様が変わったりして手戻りが非常に大きい。

でもマイコンを使えばプログラムを書き込んだROMを差し替えることで間違いや仕様の変更に対応ができる。このころマイコンは自由度の高いシーケンサーだった。デジタル系のハードウェアエンジニアはロジックデバイスの延長線上としてマイコンという部品を見ていたと考えられる。

当時ROMに書かれていたプログラムは処理の流れのシーケンスが書かれていたのであって、ソースコードが設計要素のすべてであり、設計仕様やテスト仕様などの情報は必ずしも必要ではなかった。仕様書やテストの結果がなくても、誰からも怒られることもなかった。 なぜか? それはソースコードはたいした量ではなかったし、ちょっとだけコメント書いておけば、どんなシーケンスで動いていくのかソースコードを追うことで理解できたし、ソースコードを追っかけることは回路図の配線を確認することと対して違いがなかったのである。

また、電子回路のテストはよっぽどのことがなければ、シミュレーション環境を用意して事前に確認するような大がかりなことはしなかったから、回路図の見直しや配線のチェックは机上でしていたものの本当の思った通りに動くかどうかは試作用のP板を作るまではわからなかった。要するに動かしてみて、その動作から問題点を見つけて直すという手順だ。

マイコンが導入されたころは、これと同じ手順でプログラムが作られた。頭の中でシーケンスを思い浮かべながらコードを書き、プログラムをROMに書いて電源を投入し「さあ、動くか!」と息を飲む。

いろいろなパターンを想定してプログラムを作ったから、そのすべてのパターンを実際にテストしてみて、動作を確認しながら完成度を高めていく。

[2] そこで現役を卒業した技術者はソフトウェアはそういうものだと考え思考が止まる

シーケンスプログラムを実装し、試行錯誤で想定したパターンを実際にやってみて完成度を高めるという手順でプログラムを書いていたデジタル系のハードウェアエンジニアが管理職になって自称「ソフトウェアを作ったことのある」プロダクトマネージャや技術部長クラスになるとどうなるか。

<デジタル系ハードウェア技術者出身のプロダクトマネージャの頭の中>
  1. ソフトウェア(実際頭の中に浮かんでいるのはプログラムコードのこと)はソースコードが設計図
  2. 実装してからいろいろなパターン(テストケース)を試して完成度を高める
  3. バグが残るのは想定したパターン(テストケース)に抜けがあるからであり、パターン(テストケース)の想定漏れは経験のなさからくる

このような経験を持つ上司のもとで巨大化した組込みソフトウェアを作らなければならない組込みソフトエンジニアは間違いなく苦労することになる。

バグの原因はすべて「パターン(テストケース)の想定漏れ」であり、その原因は「エンジニアの経験不足」になってしまうからだ。

人間の脳の情報処理は具体的な体験、経験を階層的に抽象化しながら記憶していき、蓄積された記憶に新たに刺激を与えて出力されたアウトプットで思考が進む。だから、具体的な体験や経験の抽象化の階層が浅いと具体的な自分の経験に合致しない出来事は理解できないか、自分の体験に一番近いもので連想された答えが自分の感覚としてアウトプットされる。

だから、ソフトウェアのバグ=経験不足が原因という結論になってしまうのだ。実際、20年以上前なら、試行錯誤の経験を積んでいけば想定するパターン(テストケース)の漏れがなくなり、不具合も減っていった。

その成功体験だけで、21世紀のソフトウェア開発を同じように考えられたらたまらない・・・ が、現実にはそういった現場はたくさんある。

教育の現場でも同じような環境が発生する可能性はある。

なぜなら、ソフトウェアの設計技術として、要求の分析やアーキテクチャ設計、検証、妥当性確認などの意味や考え方、方法論を学生に教えずに、プログラム言語のテクニックだけを教えていると前述の昔のデジタル系ハードウェア技術者と同じようにソフトウェアエンジニアではなくプログラマを作ってしまうからだ。

そうなると、次の思考の呪縛から抜けきれない。
  1. ソフトウェア(実際頭の中に浮かんでいるのはプログラムコードのこと)はソースコードが設計図
  2. 実装してからいろいろなパターン(テストケース)を試して完成度を高める
  3. バグが残るのは想定したパターンに抜けがあるからであり、パターン(テストケース)の想定漏れは経験のなさからくる
このような経験しかしていない技術者の卵の軍団が会社に入ってきて、プロダクトマネージャや技術部長クラスのの思考回路もこんな感じだったら、サンドイッチになったソフトウェアエンジニアはどうすればいい?

この問題を解決するために、次回の記事では、マイコンがシーケンスをトレースする役割から変革していった過程を書きたいと思う。
 

2006-12-09

MATLABのビジネスから見る知的生産性とは

MATLAB というツールをご存じだろうか? MATLAB とは MATrix LABoratory の略で MathWork 社が市販している計算技術用ソフトウェアのひとつである。日本ではサイバネットシステム株式会社が販売代理店となっている。

12月7日に 毎年恒例の MATLAB EXPO 2006 が東京プリンスホテルパークタワーで開催された。

MATLAB EXPO に行くといつも不思議に思うのはどうして一つの製品とそれにまつわるサードパーティだけの資金でこんなに派手な展示会ができるのだろうという疑問だ。

MATLAB EXPO 2006では、ランチボックスの券が配られていたし、講演を聴いたり、サードパーティのブースに立ち寄ってポイントを集めると帰りに抽選ができ、マウンテンバイクやニンテンドウDS Lite などが当たる。はずれても500円のクオカードがもれなくもらえる。他の展示会と比べてもかなりリッチな感じがする。

MATLAB のビジネスがなぜリッチなのかは後で触れるとして、MATLAB EXPO 2006 で MATLAB と Simulink をそれぞれ1時間ずつさわる機会があった。

簡単な例題をMATLAB と Simulink を使い、インストラクターの指示に従いながらノートパソコンで実際にやってみるというトラックだ。

MATLABの演習トラックの例題は、excelシートに格納されたいろいろな周波数が混在した信号のデータ列を読み込んで FFTをかけて、パワースペクトルを表示させて信号の周波数特性を眺めてみるというものだった。

この例題を通して 分かったMATLAB の特徴とは次のようなものだ。
  1. データは何も指定しなければ double 型で読み込まれる。(インストラクターはMATLABは通常のプログラミング言語のようにデータ型を指定する必要がないと言っていたが、正確にはデフォルトで double型になるということ)
  2. MATLABはBASICのようなインタプリタ型であり、コマンドラインから入力した命令を1行ごとに解釈し実行する。
  3. いろいろ試行錯誤してうまくいったら、プログラムファイルに実行したコマンドをコピーして整形し保存するような使い方が一般的。
  4. プログラムファイルにはスクリプトのファイルと関数のファイルの2種類があり、用途によって使い分けることができる。
  5. スクリプトファイルと関数ファイルはテキストなのでライブラリとして公開することが簡単にできる。(利益を考えなくて良い研究者達には便利)
  6. GUIのインターフェースはあらかじめいろいろなものが用意されている。

さて、用意された信号データの周波数成分を調べる演習で感じたのは「これって、自分が excel でやってた手順と同じだなあ」という感覚だ。

信号処理の仕事を生業としていた技術者としては、A/D変換したデータの周波数特性を調べるという作業はなじみが深い。

今回 MATLAB で実施したようなことは、ちょっと面倒だが excelのシート上で計算を行い、最終的に出た結果をグラフ表示させることで同じことができる。じゃあ、なんで MATLAB EXPO がこんなにリッチなのか。それは、MATLAB のパッケージ力と simulink のコンビネーションが強力なのだ。

MATLAB と Simulinkのコンビネーションが利益を生み出すしくみについては後で触れるとして、次に、Simulink の例題を行った。Simulink では MATLABで作成したコンポーネントをワークスペースに配置し、コンポーネント同士を結線して必要なシステムを構成していく。コンポーネントは分野ごとにライブラリが用意されており、自分でコンポーネントをわざわざ作らなくても大抵のことができてしまう。ただ、特定の分野によって必要なライブラリをパッケージにした商品が別売りされておりこれらのパッケージを売るサードパーティの会社がたくさんある。(ここに MATLAB EXPO がリッチである秘密がある)

演習では、SIN波を発生させて、スコープで眺めたり、ノイズを混入させた音声信号にフィルタをかけ、FFTを行ってパワースペクトルを取り、生波形を表示させながらフィルタの効きを見たりした。

MATLAB を使うとローパスフィルタの設計も簡単にできる。たとえば、カットオフ周波数0.4Hz、次数7、通過帯域リップル1dB、遮断周波数30dBの仕様を満たす楕円フィルタを設計したいとしたら、

>> [b,a] = ellip(7, 1, 30, 0.4)

と打ち込めば、b=分子係数と a=分母係数が求まる。このフィルタの周波数特性をグラフに表示させるとあら不思議、狙った通りの特性がでている。

さて、ここからが本論だ。

信号処理系の組込みソフトエンジニアは、MATLAB と Simulink がいとも簡単にやってのけるこのようなフィルタ設計をどうやってやって設計してきたか。

まず、前提条件として8ビット、16ビットの汎用的なCPUで、double の演算をバシバシ使うフィルタを設計したらまず先輩から「バカ」と言われる。C言語で書いた浮動小数点の演算をアセンブラのコードに落とすとどうなるのか見たことがあるエンジニアなら分かると思うが、整数演算なら3インストラクションで終わるようなたった一行の処理が、浮動小数点演算では100インストラクション以上かかったりする。

(unsigned short)x = (unsigned short)x /2



(double)x = (double)x /2.0

は両方ともたった一行で表される式だけれども、アセンブラにすれば上は汎用レジスタに格納して右に一回シフトして終わり。ところが下は延々と処理をこなさないと答えがでない。

要するに浮動小数点の演算は CPUに負荷をかけるし、組込みシステムのCPUはフィルタ以外にもやらなければいけない処理がたくさんあるので、組込みソフトエンジニアはできるだけ整数演算で目的の周波数特性に近い特性が得られるようなフィルタを設計する。

このようなフィルタは基本的な設計の指針はあるものの、最後は組込みソフトエンジニアが試行錯誤で作り上げることになる。組込みソフトエンジニアが要求と制約条件をすり合わせて最適解を求めるのだ。

MATLAB と Simulink がいとも簡単に目的の周波数特性のフィルタを作り上げることができるのは、PCの能力が格段に上がっているからだ。昔なら大学の計算機センターくらいでしかできなかった計算を今ならパソコン上で待ち時間なしで実行できる。

MATLAB と Simulink には上記のような試行錯誤で作り上げる職人芸のような要素はない。MATLAB と Simulink で作るモデルは MDD(Model Driven Design)で言うところの PIM(Platform Independent Model)になるのだろう。ただ、負け惜しみ的な気持ちも含めて言うと、プラットフォームに依存していないといっているのは、非常に高性能なプラットフォームを想定していて、かつ、データ型はデフォルトで double 型にしているからPIM(Platform Independent Model)だと言えるのであって、MATLAB と Simulink で作ったモデルは(コストアップをともなわずに)必ずしも組込みシステムに実装できるとは限らない。

コストアップをともなわずにと注釈を入れたのは、DSP(Digital Signal Processor)を使ったり、FPGAのIP(Intellectual Property:知的財産)に落とし込んでしまえば実装が可能なところまで実装技術が進んでおり、コストを気にしなければPIMはPSM(Platform Specification Model)に変換できる世の中になっているからだ。しかし、多くの場合このようなアプローチはコストアップがともなう。でも、MATLAB と Simulink を使って作ったモデルが商品の価値となり、コストアップとその価値のトレードオフの結果がユーザーに受け入れられるのであれば問題ないし、職人芸で作り上げるコンポーネントよりも早く開発でき品質が高いのであれば、ツールやライブラリが高かったとしても最終的にはペイできるかもしれない。

ところで、Simulink と非常に似ているツールでナショナルインスツルメンツ社の LabVIEW というものがある。LabVIEW も Simulink と同じで、豊富に用意されたコンポーネントをつなぎ合わせて、あっという間にカスタマイズしたオシロスコープなどができてしまう。

MATLAB , Simulink にあって、LabVIEW にないもの、それは研究者に対する配慮ではないだろうか。MATLAB , Simulink は自然科学の研究者にとってとても有効なツールだと思う。過去の研究者が発表した理論式を組み合わせたり修正したりして、まだ未着手の分野の対象から取り出したデータに適用して、グラフィカルに表示させれば論文用の図があっという間にできてしまう。

コンポーネント化された知見を組み合わせるか、モディファイするか、パラメータを変えるかして、未開拓の分野の問題を解決する実験をパソコン上でシミュレーションをし、よさげな結果がでたらグラフィカルに表示して論文にする。うーん、こんなおいしい話はない。(いずれにせよ、科学技術の研究とはそういうものかもしれないが・・・)

そして、新しくできた知見はパッケージにして売り出すこともできる。ただ、ひとつ問題なのは、MATLAB , Simulink で作ったモデルは、強力な性能のCPUと浮動小数点演算によって裏打ちされたPIMであり、ひ弱なCPUと整数演算と限られたメモリいう制約条件を持つシステムに実装するには、また別の組込み技術が必要になるということだ。(どんな技術が必要かは『組込みソフトエンジニアを極め』を参照されたし)

しかし、そうはいうものの、CPUの性能は常に向上し続けており、メモリの価格も安くなっている。分野や用途によっては、研究者が考えた新しいコンポーネントを人の手を介すことなく製品に組み込むことも可能になってきた。

このことは MATLAB , Simulink が、研究者と開発現場のエンジニア、科学技術を必要としている企業の橋渡ししているとも言える。個人的な偏見かもしれないが、研究者と現場のソフトウェアエンジニアは仲が悪い。なぜなら、浮動小数点演算に象徴されるように、研究者は組込みソフトの開発現場の制約条件を考えてくれていないという思いが技術者サイドにあるからである。

しかし、『組込みソフトエンジニアを極める』第2章 機能分割のハードルを越える p147 図2.23 制約条件をクリアしながら最適化を図る に描いたように、規模が拡大したソフトウェアシステムではもうすり合わせ的な作り方では開発が間に合わないし、品質を確保することもできない。

科学技術をコンポーネント化し組み合わせの部品として使うことができればアドバンテージになりやすい。しかも科学技術の部分は利益を欲しないアカデミアンの研究成果やサードパーティのライブラリを使うこともできる。

でも、コンポーネントの組み合わせだけでは十分に要求を満たせないのが組込みソフトの難しいところだ。グニャグニャしたすり合わせ的な要素は必ずある。そして、そのすり合わせ的な要素が商品の快適性や低消費電力を可能にしていたりする。

MATLAB , Simulink を触ってみて分かったのは、MATLAB , Simulink は知的生産性を高めるための道具として優れているいうことだ。科学技術をパッケージ化し、必要な分野の企業に売る。パッケージ化したコンポーネントはオブジェクト指向設計と同じで、高凝集・疎結合なモジュールとなっているためつなぎ合わせて使いやすい。

このコンポーネントの需要が高めれば、黙っていてもどんどん売れる。科学技術をコンポーネントに隠蔽して商品として売るビジネスモデルは当たれば利益率が良いだろう。

組込みソフトウェア、組込み機器自体は、実は知的生産性の高めることに成功した顕著な例と言える。組込み機器のソフトウェアに知見を隠蔽することができ価値が認められば、製品は黙っていても工場がどんどん作ってくれ、知見は製品に乗ってどんどん売れる。

問題は組込みソフトウェアの規模が大きくなってきたので、組込み機器の内部で組み合わせ用のコンポーネントを使わないと開発効率が上がらなくなってきたということだ。

ところが、組込みシステムに使うミドルウェアは必ずといっていいほどチューニングが必要であり、ポーティングを行うことが多い。これは黙っていてもどんどん売れるという流れではない。知的生産性が悪い。

コンサルティングなども同じだ。人がコンサルテーションによって知見を伝えることができる効率には限界がある。著名なコンサルタントの単価を上げても普通のコンサルタント100人分にすることはできないだろう。

一方、書籍は知見を広めるには非常にいい媒体で知的生産性が高いが、単価が安いので利益率が低い。

でも、MATLAB , Simulink はツールを媒介して、比較的単価の高いパッケージを流通させることができる。だから、MATLAB EXPO はリッチなのだ。

今後、MATLAB , Simulink で作ったコンポーネントが組込みシステムに実装できるかどうかは、組込みアーキテクトが組込みシステムを科学技術が適用される部分と適用されない部分に切り分けて設計できるかどうかにかかっていると思う。

科学技術を適用する部分をパッケージにし、インターフェースを明確にして、システムの制約条件をクリアすることができれば製品の付加価値を高めることにつながる。

科学技術は先人の科学者が何百年もかけて積み上げた知見のたかまりだ。すり合わせて作るソフトウェアには数人のエンジニアの知見しか作り込めないが、科学技術をコンポーネント化して組込みシステムに実装できれば、のべ何百人分もの知見を製品にインプリメントすることができる。

それが他社に真似できないような知見ならさらに競争力は高まる。

ちなみに、MATLAB , Simulink を使わなくても、科学技術を利用する部分を特定しコンポーネント化することができ、制約条件をクリアして実装する技術があれば、付加価値の高い製品を作り上げることはできるので、慌ててMATLAB , Simulink の購入を検討するのはやめた方がいい。
 

2006-12-02

エンジニアにどうやってインセンティブを与えるか

先週「組込みか組込みでないかの違いはどこにある?」の記事の中で、任天堂の Wii コントローラを題材にして、組込みか組込みでないかの違いは「世界を固定するかしないかの違い」ではないかと書いた。

この記事の中でハードウェアデバイスは日々進化しており、それらのハードウェアデバイスを取り入れることで世界は広がるはずだとも書いた。

でも、その後よく考えてみたら、これは「洗濯機メーカーは新しい洗濯機を開発しようとしてはいけない」の記事で書いた「真のユーザーニーズ」のことを考えていなかったかもしれないと思った。

「洗濯機メーカーは新しい洗濯機を開発しようとしてはいけない」の記事で書いたのは1993年に聞いた当時東京理科大の高橋 武則先生(現 慶應義塾大学大学院教授,工学博士,健康マネジメント研究科 教授)の話で、ユーザーは衣類をきれいにしたいのであって洗濯機は衣類をきれいにする手段のひとつで、ワイシャツ1枚10円でクリーニングしてくれるクリーニング屋が現れたら、必要なくなるかもしれないという話だ。

この話の真意を考えれば、日々進化するハードウェアデバイスを取り入れることが世界を閉ざさないことに通じるという考え方はおかしい、間違っている。

なぜなら、新しいハードウェアデバイスを取り入れることは手段であって、ユーザーニーズを満たすための本質ではない。

インターネットショップで買ったものが思ったようなものではなかったり、サイズが間違っていたとき、無料で引き取ってくれるサービスを始めた店が売り上げを伸ばしているというニュースを見たことがある。インターネットショッピングで「しまった。やめておけばよかった。」ということはよくある。間違った買い物に対して、ショップが無料で引き取ってくれると店との信頼関係が生まれ次の買い物も安心して気軽に選べる。

これは「プロダクトのよさ」を追求したのではない、サービスのよさを追求した結果だ。

日経ビジネス 2006年11月27日号 に-「お母さん」を狙え! 任天堂がWiiに託すお茶の間戦略 -を読んだ。「組込みか組込みでないかの違いはどこにある?」の記事を書いた後だ。

この記事を見た最初に感じたのは Wii がプロダクトとしてワクワクするのは組込みとか非組込みとかいうことではなく、岩田社長を始め任天堂のトップマネージメントたちは家族を巻き込んで使ってもらうプロダクトやサービスは何かを考えていたということだ。

冒頭の写真は、2006年の5月、米ロサンゼルスの展示会「E3」で Wii Sports をプレゼンする岩田聡社長(左)と宮本茂専務だ。

この写真を見て、社長と専務が自分たちのプロダクトをこんなに楽しそうに披露できる会社ってうらやましいなと思った。

任天堂は今でこそ、ニンテンドウDS Lite が大ヒットしているが、ファミリーコンピュータ以降、ゲームキューブのときに売り上げの低迷を経験している。

岩田社長はもともとゲームソフトHAL研究所から2002年に任天堂に移り社長になった。岩田社長とソフト開発部門のトップの宮本専務とハード開発部門トップの竹田専務の3トップでゲーム人口減少への危機感で議論を重ねたそうだ。

岩田社長がすごいと思うのは、自分が若くゲームソフト会社から来た外様であり、前任社長の山内氏は鋭い直感を武器にカリスマを崇められてきたオーナーであるということをふまえて、自分が何を言ったとしても生え抜き社員が素直に言うことに従うとは限らないと考え、「徹底して丁寧し説明し、同意を得る」ことにしようと決めたことだ。

経営陣とまず議論を重ね、出た結論を自分の言葉で繰り返し社内に説明し続けた。

「高機能・高画質ではない手段で、たくさんのユーザーが楽しめる据え置き型ゲーム機を目指す」という3トップの意見は一致したが、社内からは疑念の声が多く上がったそうだ。これに対して岩田社長は時間をかけて丁寧に説明し、目標を具体的に示した。

この「高機能・高画質ではない手段で、たくさんのユーザーが楽しめる据え置き型ゲーム機を目指す」という目標に、即座に「その通り」と反応する社員が数多くいた一方で、方針転換になかなか踏ん切りにつかない社員もいたそうだ。しかし、ニンテンドウDSが市場に受け入れらたことを目の当たりにして、躊躇していた社員も態度を変えるようになった。

岩田社長が考えるニンテンドウのゲーム機のコンセプトは「ゲームに関心のなかった人にも邪魔に思われないような、特に家庭のお母さんに嫌われないようなゲーム機」とのこと。

これには我が家も見事にはまっている。ニンテンドウDS Lite を手に入れた子供はまず、「どうぶつの森」を買った。どうぶつの森はドラゴンクエストのようなゲームとは違い、特に達成すべき目標のようなものがない。四季が移り変わるどうぶつの森で、虫取りや魚釣りなどをしながら、どうぶつの森の住人達と関わってただ時間を過ごすだけなのだ。

「家庭のお母さんに嫌われない」秘訣がここにある。子供はゲームをしていると季節によってなる果物や釣れる魚の違いがわかったり、お金を貯めて家のローン返すといったことを学ぶことができ、発見したことを母親や父親にうれしそうに話す。そうすると親は「DSは勉強にもなるのか」と思う。

実際、自分は「英語漬け」というソフトを買って、ディクテーション(発音された単語や文章を書き取ること)を続けている。

結局、どうぶつの森は家族全員がやることになり、母親は「ゲームに関心のなかった人にも邪魔に思われないような、特に家庭のお母さんに嫌われないようなゲーム機」に見事にはまっている。

ちょっと話はそれるが、このバーチャルな世界で現実の世界を学習したかのように感じることには問題点もある。どうぶつの森の魚釣りはそれなりに難しいがコツをつかめば釣れる確率は非常に高い。でも実際の釣りはそんなに簡単なものではないだろう。いろいろな経験を疑似体験できるのは良い面もあるが、現実の厳しさや厳しさを乗り切るための我慢強さの重要性を学ぶことができないのはよくない。

現実の世界で、自分の思った通りにならないとキレやすい子供を作っているのはちょっと苦労すれば欲しいものが手に入るバーチャルな世界に慣れてしまっているからではないだろうか。ゲームの存在する世界をいまさら否定することはできないが、ゲームによる弊害についても考えておく必要があると思う。

さて、任天堂の会社の話に戻そう。

Wii の企画で、ハードウェア技術者はロードマップから外れたものを作るという決断に対して不安に思っていたという。そもそも任天堂では (おそらく技術)ロードマップ があったというところがすごい。他社の様子を見ながらの行き当たりばったりの開発ではなく、数年もしくは10年後に開発が進むであろう新しい技術やデバイスの取り込みの準備をしていたに違いない。

そんなロードマップから外れても岩田社長は「ゲームに関心のなかった人にも邪魔に思われないような、特に家庭のお母さんに嫌われないようなゲーム機」を作りたい、作らなければならないというコンセプトを伝え、方針の転換に理解を求めた。

そして、浮かんでは消えた試作品の数々を経て、Wiiリモコンができた。

Wii はハードウェアもすごい、Tech-on の記事によると、「Wii を分解して驚くのは,低コストを狙い,徹底的に練られた設計である」とのこと。

一目見てシンプルと分かるメイン・ボードに載る部品点数はおそらく1000を大幅に切る少なさ。いくつかのカスタムLSIとゲームキューブとの互換性を保つためのコネクタ類を除くと,大半の部品に汎用品を採用している。

数百万台作っても同じ品質を保つのは本当に難しい。ハードもソフトも同じで生産時の検査で乗り切ろうとしても限界がある。設計時に品質を作り込まなければ絶対ムリだ。

だから、Wiiの設計方針は決して低コスト一辺倒ではない。ここぞという部分には思い切ってコストを掛けるメリハリがあり、その象徴が金メッキ部品の多用とのこと。

すぐれたプロダクトには見えないところにさまざまな工夫が施されている。ゲームの遊ぶ側だけした体験していない子供達が、多くの人々に受け入れられるようなプロダクトを作れる技術者になれるのだろうか? ちょっと不安が残る。

Wii の開発秘話で分かったのは、よいプロダクトを生み出すのに必要なのは組織上層部やプロジェクトリーダーの熱意だったりするということだ。

なぜ「だったりする」のかというと、これはあまり科学的でもエンジニアリングでもない話であり、「熱意がなけりゃ良いもの作れないのかよ」という不満も含まれているからだ。

一つ言えるのは組込みはプロジェクトに「熱意」を伝えやすいということだ。プロダクトが形に見えるものであり、最終的に自分たちが思った通りに動くようになるとうれしいし、そのプロダクトが多くの人に受け入れられることを想像すると力がわく。

でも当たり前だが「熱意」だけではものづくりは成就できない。ベースに技術がなければムリだ。また、品質を高く保つには技術だけでなく、組織内でのルールや規範も必要になってくる。

エンジニアにインセンティブを与えるには、市場やユーザーが求めている 顕在的価値(Real Value)と潜在的価値(Potential Value) が何であるかを分析し、根気よく伝え、それらの価値を創造するための製品やサービスを実現するために技術を身につけなければならないと考えてもらうことだろう。(ものづくり戦略とソフトウェア品質 を参照されたし)

市場やユーザーが求めている価値が何であるかがエンジニアに伝われば、必要な技術が何かを理解できるようになり、ツールや規範もなぜ守らなければいけないのかが分かるようになる。

市場やユーザーが求める価値を実感するには、自分以外の人間に心の底から「ありがとう」と感謝される経験を重ねることが大事だ。自分のくふうで感謝される経験が積み重なれば、どんなくふうをすればプロダクトの価値を高めることができるのか分かるようなる。

このことはカルロス・ゴーン氏が語った「働くことの本質は貢献である」につながる。