********************************************************************** セッションS1-c チュートリアル テーマ:モデル駆動開発 ソフトウェア開発は自動化してしまえ コーディネータ: 太田 寛(マイクロソフト) 日時:9/2 21:00〜22:30 参加人数:約20人 ********************************************************************** 懇親会終わった後にセミナーとはいかがかと思うがこういうのもいいですね。 日ごろ思っていることを紹介したいと思います。 ●自己紹介 マイクロソフトでエンベデットのエバンジェリスト エバンジェリストとは、広い技術に関する説明を、各メーカーや、 こういったセミナーで導入や相談を受ける。 マイクロソフトには2006年の9月1日から、その前は富士ゼロックス、ファックスや プリンター、スキャナーのプログラムを作成。 後はMDDとかUMLとかオブジェクト指向とか社内的なエバンジェリスト的仕事をしていた。 少ない労力で魅力的で品質の良いものを作りたい。マイクロソフトに入ってからは 開発者にそういうプロセスでやっていってほしいということでやっている。 プログラムを書くようになって20数年 マニュフェスト、emacsをつかってた。 最近はeclipseにはまってた。話す内容はeclipseでも使ってた。 みなさん、モデル駆動開発は聞いたことがあると思う。 モデル駆動開発ってなんだっけ?それどうやるの?を説明する。 このセッションではモデルを書くための基板、かいたモデルをどう起こすかを Visual Studioを中心に説明する。 ●アジェンダ 問題解決ってなんだっけ? モデル駆動型開発? 何を自動化する? 各局面での自動化の技アラカルト 自動化のポイント 参考資料 ●問題解決ってなんだっけ? 問題とは「理想と現実のギャップ」 ソフトウェアで言えば、理想=要求を聞きました→設計しました→作りました バックスラッシュが改革 QC=向上などでの改善活動 源流での解決が基本。原因をほったらかしにして、症状を治すことはできない 本当は一番大事なのは風邪を引かないこと 燃え上がったプロジェクト →火を消していく人がいて、その人が英雄化(しかし偉くはない →エラーを起こさないで作れる人(評価は高くないが、こちらの方が良い、こうあるべき ソフトウェア開発では、プログラミングに起因する問題が多い どうせならプログラミングの工程をなくすべきではないか? ならば、コードを自動生成すればよい。 コード生成のプロセスをなくしてしまえば問題解決になる。 ・モデル駆動型開発 太田さんの考えるモデルとは「頭の中のアイディアを一定の形式に従って可視化し、 書き表したもの 頭で考えるだけではない、適当に書いた絵はモデルではない。 一定の形式が大事(UMLとか) プログラムもモデル、一定の形式に従って記述してるので、自然言語でも、 しっかりと定義されたものであればそれもモデル。 数式もきちんとモデルになっている。 モデル駆動型開発とは、モデルを使ってソフトウェア開発を進めていくこと ・モデル化の対象 頭の中にあるものをモノ・コトを形にしていく 一定の視点で抽出(視点をきちんときめて情報を整理して見せる) 逆からいえば、捨て去る(抽出して残ったものは捨てる) もちろん、視点は複数必要(仕様の観点・・・) ●モデル駆動開発? 仕様は仕様でモデル化、実装は実装でモデル化、それらを掛け算的にしようして モデル化する UMLは10何年やってきているが、何がしたいのか? UMLを書いて、仕様書書いて、ということをすると、ただUMLを書く肯定が増えるだけで、 UML書いたけれど、見ていない。 かけ離れているということがよくある。 従来のやり方に対して、手間が増えるのに、生産性上がらないなら実践する必要はない。 ・どんなモデル駆動開発がよいのか 自動化できること→コンピュータ化すること きれいなモデルを書くことが大事だけれど、「開発環境」の方が重要 モデリングが定着してない、それは最後に必要なのはプログラムだから。 プログラムは開発環境が充実している。モデリングもそういう環境が一般的にならない と普及しない。 このセッションでは開発環境からみたMDDを解説 MDD実践するには ・環境を作る人 人数:極小数 スキル:software Engineerignの達人、複数の開発環境、プラットフォームを熟知 プログラミングの達人、人の問題を分析・定式化 仕事:モデリング、フレームワーク開発、基本ライブラリ開発、自動生成環境開発 ・環境を使う人 人数:大多数 スキル:特定領域の専門意識、製品の使われ方を良く知っている人 仕事:与えられた環境で作業遂行、環境を作る人へのフィードバック 3・4年前、実現化できるのか?という意見があった→すでに当時から実現していた コピー機やFAXでは自動生成されたものがある これからも、プログラムがかけると威張れる時代ではない ・自動化することから考えてみませんか? 中途半端な自動生成をやっていくことは、人間がやっていることをただそのまま 電子化したITシステムと同様で、社会を幸福にしない。 実際にIT化するには、一体どういうデータがあるのか、どうデータが変化するのかを リエンジニアリングしないと使いやすくならない。 モデル駆動型開発も一緒 ●何を自動化する? UMLやその他モデリング言語、プログラミング言語、オブジェクトモデルからの 下流成果物生成、これがDSLの基本 確立したフレームワーク・パターンの活用する。フレームワーク・パターンを理解 してるならピンとくる。 定型化された作業、定型化されているなら自動生成すればよい。 開発者って以外と自分勝手にやりたい。強制されると嫌。 逆に提供して、気が付いたら強制されている、それが気持ちよくなる。 今日はVisual Studio 2010での話 今年月リリース。Windows上での開発環境 ・自動化シーン 開発ターゲットは、なんでもよい。 例:ETロボコンのRCX向けとか、Androidとか、Linuxとか むしろクロス開発を想定! 想定作業 →要求を定義 →アーキテクチャを・・・ ●自動化の技 →UMLからの自動生成 →DSL Toolkit →T4 Templete →Code DOM →Project/Item Template →IDEの拡張 これらで何ができるのかを踏まえて、モデルとしたらどのあたりをモデル化してと いうのもあり。 いろんな局面でいろんな技が使える。 大事なのは、基本テクニックをどう局面に生かすかの発想とアイディア Eclipseに対応するのもあるかもしれないのでEclipseでやるのも面白いかも? ・UMLからの自動生成 Visual StudioってUMLかけた? Visual Studio2010の一番高いバージョンにはある! 普通ではただのお絵かきツール「Visual Studio SDK」と「Visuallization 」を 使えばコードでアクセスできる。 UMLのデータがとれるようになる。 ・DLS ToolKit UMLはOMGが定義した。これは自分が定義したモデリング言語でモデリングできる。 どんなモデリング言語にするかを指定して実行すると、エディタになる。 DSLとは特定用途向けの言語のことで、別用途には試用できない。 しかし、問題領域に近いので書くのが簡単。 DSLで書かれたテキストからの自動生成 特定の開発環境で実装できる。 既存の言語をDSL的に拡張することもできる。 ・T4 Template もともとはWebのホームページを自動生成するのに作られたもの。 標示されているものはVSのプロジェクトの定義の生成。 UMLで定義したものからC++のヘッダファイルができる。 UMLではプログラムのことや、開発環境は無視する。それだからCでもC++でもできる。 スレッドの機構を埋め込むとかもできる。 ・code DOM:Document Object MOdel C#やVC++とかの文法モデル C#の生産性はC++の体感50倍。現場でクロスコンパイラを使っている以上C++で使わない といけない。 ・Project/Item Template 決まりきったプロジェクト構成、プロジェクト要素を生成するテンプレート ・IDEの拡張 Visual StudioのGUIで可能なことは、すべてプログラミングで叩くことが可能 Visual Studio2010はMFF(Managed Extension Framework)による拡張ポイントが数多く 仕込まれている。 できること →右クリックメニューに追加 →各種下流成果物自動生成起動 →DSLのバリデーション起動 →レビュー依頼 2010でようやくEclipseを超えたかな・・? ・Extension Manager 色々な拡張ができる。 ネットにいっぱい上がっている。 皆さんの作ったものも上げられていて、使える。 例えばNXTの開発環境を作りました、とか。 ●自動化のポイント One Fact In One Place 1つの情報を2つ以上の場所で手書きしない 可変ポイントのデータモデル化&スキーマ定義 自動化プロセスと従来プロセスは不連続 人がやっていることをそのまま自動化しても意味はない 作る側の苦労をMaxに、使う側の苦労をMinに 手順書ではなく、開発環境を提供しよう 自動化により学習曲線の立ち上がりを急に上げる 開発環境・IT技術の最大限の活用 生成できるのはコードだけじゃないし、変換技法も複数 使えるものは何でも使え 食わず嫌いは、なくそう 車輪の再開発をしている暇はない 最後に宣伝 今日からWindows7アプリ投稿キャンペーンをしている。 脳波センサをもらえる。 ●質疑応答 Mさん 環境を作るってのが本質的に難しいのは、複数の抽象的なものをまとめるのが難しい。 業務経験があってできると思う。 初級の人では習得がつらい。 初級の方でいうと、少なくともマクロソフトの環境はすごく良くできているけれど、 何をしていいかわからない。 太田さんが考える、初級エンジニアは何をしたらよいか? 太田さん 私がなりたてのころは、UNIXが全盛、GNUが出てきたて、C、C++を一個ずつ勉強して いました。 今は、何でもできるから何からしていいかわからない。 Mさん じゃあ、太田さんのお勧めは、Visual Studioでこの機能がお勧めとかはありますか? Wさん eclipseでGccじゃないんですか? 太田さん まずは、敷居が高いかもしれませんがDSL Tool Kitとかがお勧めです。 Wさん そういうツールとかって無料で使えるんですか? 太田さん 学生は無料でできる資料をもってきています。 Wさん 学生以外は? 太田さん 90日間使用可能です。 それと、モデリングで言うとExcutable UMLがお勧めです。 これをきちんと実践してみるのが一番良いかもしれない。 OMDとかコードヨードンとかヤコブソンの・・・OSなんとか・・・とかあれは駄目です。 シュレイアー・メラー法が一番マルチな視点でよい。 本が絶版かも。 Mさん Excutable UMLの本は購入可能。 正直いって、こういうものは、英語わかんないと難しい? 太田さん スティーブメラーの文章力がなってないので・・・。 英語は読めるだけは読めた方が良い。 いまなら英語でいくらでもソースがあるし、翻訳、例えばbingは結構簡単に日本語に 自動翻訳もだいぶましになってる。 Twitterで英語の人みつけて会話トライしてみるとか。 一番いいのはこういう会で、「達人」と繋がる。 自分で書いてディスカッションする。 モデリング力を上げるには、いいモデルを書く、書いたモデルで説明をする。 説明をしてみるとモデルに書いてないことを 必死に説明をしているから、そこをモデルにしていく。 そうすると、だんだんモデリング力が上がっていく。 以上。