• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
 文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox
 

文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox

on

  • 1,932 views

 

Statistics

Views

Total Views
1,932
Views on SlideShare
1,553
Embed Views
379

Actions

Likes
4
Downloads
11
Comments
0

4 Embeds 379

http://urasoko.hatenablog.jp 206
http://modegramming.blogspot.jp 170
http://modegramming.blogspot.com 2
http://modegramming.blogspot.de 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

     文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox 文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox Presentation Transcript

    • ⽂文書をプログラムにする技術!-­‐  SimpleModeler  +        Mindmap  &  SmartDox2012年年10⽉月22⽇日浅海智晴
    • 浅海のプロフィール•  1985年年-2001年年:富⼠士通 •  UNIX OSをビジネス向けに改造する仕事 •  ファイル管理理、分散ファイルシステム、Webサーバなど •  信頼性、運⽤用管理理、COBOL向けの改造 •  1993年年頃からオブジェクト・モデリングの調査を始める •  1995年年からJavaの利利⽤用を始める •  1998年年からJava&XMLのフリーソフトを開発・公開(個⼈人活動) •  SmartDoc(XML⽂文書処理理系)、Relaxer(プログラム⾃自動⽣生成)•  2001年年-現在:浅海智晴事務所代表 •  モデリング、XML、Javaのコンサルティング、教育活動•  2002、2003年年度度:IPA未踏に採⽤用 •  Relaxer (DSLによるプログラムの⾃自動⽣生成)•  2005年年度度-2007年年度度:稚内北北星学園⼤大学東京サテライト校教授•  2007年年度度-現在:⽇日本Javaユーザグループ副会⻑⾧長•  2009年年2⽉月-現在:edge2.cc主宰•  2009年年5⽉月-現在:匠Labフェロー
    • 開発プログラム•  SmartDoc (1998年年)[Java] •  XML⽂文書処理理系 •  専⽤用XML⽂文書からHTML、LaTeX、プレインテキストを⽣生成•  Relaxer (2000年年)[Java] •  XMLスキーマ⾔言語RELAXをDSLとして⽤用いたスキーマ・コンパイラ •  RELAXからJavaプログラム、W3C XML Schemaなどを⽣生成•  SmartCase (2004年年、試作)[Java] •  専⽤用XML⽂文書でユースケース・モデルを記述 •  仕様書を⽣生成•  JavaDSL (2007年年、試作)[Java] •  JavaをDSLのメタ⾔言語としてオブジェクト・モデルを記述 •  Javaプログラムと仕様書を⽣生成•  SimpleModler (2008年年〜~)[Scala] •  ScalaをDSLのメタ⾔言語としてオブジェクト・モデルを記述 •  Javaプログラムと仕様書を⽣生成•  SmartDox (2012年年〜~)[Scala] •  Emacs org-modeベースの⽂文書処理理システム
    • ⽂文脈
    • 論論点•  ソフトウェア開発における⽇日本語記述の仕様の取り扱い•  ⽇日本語、モデル、プログラムを連携する技法 •  ⽇日本語記述による仕様を形骸化させない •  考え⽅方、⽅方法論論、ツール•  オントロジーその他、他分野の技術を活⽤用できないか? •  ご意⾒見見を頂きたいポイントです。
    • アジェンダユビキタス⾔言語 MindmapModeling SmartDox DSL DSL SimpleModeler
    • ユビキタス⾔言語
    • ⽇日本語、モデル、プログラム
    • ⽇日本語、モデル、プログラム
    • ユビキタス⾔言語
    • メタ・モデル
    • オブジェクトモデリング協調の実装技術がボトルネック ドメイン・モデル になっている 状態 機械 協調 静的  アプリケーション 構造 モデル
    • PIM/PSM/実装 CIM : Computer Independent Model DSL PIM : Platform Independent Model CIM PIM PSM : Platform Specific Model DSL: Domain Specific Language DSL PSM 非機能要求 実装 プラットフォーム (Java、 XML、 …)
    • クラウド時代のソフトウェア開発 業務 業務 アーキテクチャ 方式 開発 クラウドに飲み込まれてしまう! 製造 コンポーネント開発 プラットフォームの共用 コンポーネント・サービスの再利用 オフショア開発 プログラム自動生成 システム保守・運用 システム保守・運用ハードウェア保守・運用 ハードウェア保守・運用
    • DSL駆動開発&コンポーネント 分析 設計 実装 DSL 自動生成 コンポーネント OO分析 OO設計 OO実装 コンポーネント DSL 自動生成 コンポーネント DSL 自動生成 コンポーネント OO分析 OO設計 OO実装 コンポーネント
    • DSL駆動開発とは•  テキストDSLを⽤用いたモデル駆動開発 •  UMLをプログラミング⾔言語的に⽤用いることは間違いだっ た!?•  テキストDSLでモデルを記述 •  作成効率率率はテキストが圧倒的に効率率率的•  必要に応じてUMLの図を⽣生成 •  モデルの視認性はUMLが上 モデルをテキストで記述する•  テキストDSLの実現⽅方法 モデルをデータとして •  内部DSL:ホスト⾔言語上に構築 操作して成果物を⽣生成する •  外部DSL:スクラッチで⾔言語を作成
    • SimpleModelingの本
    • SimpleModelingモデル変換業務モデル ドメイン・モデル 要求モデル システム・モデル 設計モデル 実装 静的構造 エンティティ ドメイン層 ドメイン層 抽出 具体化 格納 現実世界 データベース ドメイン・モデル 抽出 コントロール アプリケーション層 アプリケーション層 ボキャブラリ 詳細化 実現 動的モデル 具体化 文脈 ユースケース 具体化 利用事例 バウンダリ プレゼンテーション層 プレゼンテーション層 操作 やりたいこと エンド・ユーザ アプリケーション・モデル
    • SimpleModeling全体像 ドメイン・モデル 要求モデル システム・モデル 設計モデル 用語 事実 契約 自然言語 規則 契約 ユースケース 宣言モデル 拡張 静的モデル 利用 動的モデル 変換 コラボレーション コラボレーション 動的モデル 動的モデル アプリケ ーション・ 同期 機能モデル 変換 具体化 モデル サービス契約 静的モデル 静的モデル データフロー図 クラス図 クラス図オブジェクト・ OCL 同期 操作 操作 モデル OCL OCL クラス図 クラス図 クラス図 静的モデル 変換 静的モデル 具体化 静的モデル ドメイン・ モデル 動的モデル 張 拡 化 体 具ルール・モデル 宣言モデル 変換 宣言モデル ビジネス・ルール ビジネス・ルール
    • UMLの⻑⾧長所と短所•  ⻑⾧長所 •  唯⼀一の標準オブジェクト・モデル記法である。 •  メタ・モデルが厳密に定義されている。 •  グラフィカル⾔言語であり、概要情報の伝達にすぐれてい る。•  短所 •  オブジェクト・モデル以外の記述には必ずしも適してい ない。 •  オブジェクト・モデルも完全に記述できるわけではない。 •  作成効率率率が必ずしも⾼高くない。 •  モデル・リポジトリの操作性がよくない。 •  ⼤大規模開発に必ずしも適していない。 •  ⾃自然⾔言語情報の取り扱いが不不⼗十分。
    • Modegramming (モデグラミング)•  Modeling + Programming •  モデリングとプログラミングの融合•  テキストDSL+モデルコンパイラによるモデル駆動 開発 •  DSL (Domain Specific Language) •  Scala DSL •  Mindmap DSL (MindmapModeling) •  Excel DSL, XML DSL, JRuby DSLなど必要に応じて •  メタ・モデル(モデル体系) •  SimpleModeling •  モデルコンパイラ •  SimpleModeler
    • SimpleModeling技術•  SimpleModeling •  企業アプリケーション向けモデリング⼿手法 •  業務モデリング、ドメイン・モデリング、要求モデリング、 システム・モデリング•  MindmapModeling •  SimpleModelingのモデル抽出⼿手法 •  ドメイン・モデリング(+業務モデリング)•  SimpleModeler •  SimpleModeling⽤用モデル・コンパイラ
    • MindmapModeling
    • MindmapModeling•  MindmapModelingはマインドマップを使ってモデルを 作成する⼿手法。 •  稚内北北星学園⼤大学東京サテライト校で実務者をターゲット としたモデリング教育向けに開発•  問題空間側のモデルをマインドマップで記述することが できる。 •  業務モデル : 業務ユースケース •  ドメイン・モデル : 静的構造モデル•  MindmapModelingと⼀一般的なマインドマップの違い。 •  MindmapModelingモデルは、マインドマップの上に独⾃自構造 を拡張しており、オブジェクト・モデルに落落とし込む⼿手順が確 ⽴立立している。
    • なぜMindmapModelingなのか•  ⾃自然⾔言語(⽇日本語)による⽂文章情報からいかにオブジェクト・モ デルを作成するのか? •  ⾃自然⾔言語(⽇日本語)→UMLを直接作成するのは難しい。 •  ⾃自然⾔言語(⽇日本語)ベースの中間的な構造モデルがあるとよい。 •  この⽬目的にはマインドマップが最適。•  単なるマインドマップでは不不⼗十分 •  オブジェクト・モデルへの変換を前提にしたマインドマップベー スのフォーマットが有効。 •  このためには⽬目的にかなったメタ・モデルをバックグラウンドに したマインドマップのフォーマットでなければならない。 •  このフォーマットがMindmapModeling。•  オブジェクト・モデルをメタファで理理解できる。 •  オブジェクト・モデリングの”コツ”を習得
    • MindmapModelingのコツ•  ⼊入⼒力力となる⾃自然⾔言語の⽂文章(雑誌記事など)は、仕様化の ための⽅方針やモデルの⾻骨格、詳細情報が不不⼗十分なので、 その現実を受け⼊入れて適宜モデルを補う。 •  構想⼒力力、提案⼒力力もモデリング技術のうち•  MindmapModelingのモデルは、プログラムで実装可能 であることが重要。実装がイメージできないモデルは、 間違いと考えてよい。•  仕様の⾻骨格は「物語」で構築する。「物語」を明確にす ることで、モデルの取捨選択、モデル化⽅方針の選択、不不 ⾜足部分の補完を⾏行行うことができる。
    • MindmapModelingについて•  このスライドが参考になると思います。 •  MindmapModelingチュートリアル •  http://www.slideshare.net/asami224/ mindmapmodeling•  毎⽉月勉強会やってます。 •  横浜モデリング勉強会 •  http://www.facebook.com/groups/223587707726703/ •  ワークショップの進め⽅方 •  http://www.facebook.com/groups/223587707726703/ doc/370544933030979/
    • MindmapModelingの例例
    • SimpleModelerで⽣生成したクラス図
    • SmartDox  DSL
    • SmartDox DSL•  SmartDox •  https://github.com/asami/smartdoxprocessor •  SmartDoc後継 •  Emacs org-modeベースの⽂文書処理理システム•  SmartDox DSL •  固いモデル:プログラムに落落ちるモデル •  ドメイン・モデルなど •  柔らかいモデル:プログラムに落落ちないモデル •  要求仕様など•  SmartDoc DSLで記述した⽂文書 •  固いモデルと柔らかいモデルが混在 •  ⽂文書の中からマーキングルールを使って⾃自動抽出
    • SimpleModeler
    • SimpleModeler•  https://github.com/asami/simplemodeler•  SimpleModel⽤用モデル・コンパイラ •  Relaxer後継•  テキストDSL •  Scala DSL •  Scala DSL&mavenによるモデル・リポジトリ•  Web仕様書、Java、Androidを⽣生成 •  昔:Grails、Google App Engine Python/Java
    • SimpleModeler service•  勉強会での確認⽤用にマインドマップモデルからクラス図 を⽣生成するサービスを提供 •  http://www.mindmapmodeling.org/service•  SmartDox DSLからクラス図の⽣生成も可能
    • SimpleModelerの動作 Web仕様書 project クラス図 html ステート CSV import マシーン図 java SimpleModelリポジトリ (Maven project) Javaプログラム convert grails Scala DSL Grailsプログラム import gae Mindmap (Xmind) Google App Engine/Python プログラム gaej verify testset import Google App Engine/Java gaeo プログラム Excel 検証結果 テストセット Google App Engine Oil プログラム 企画中
    • SimpleModelerが⽣生成するコード Web Controller/ Action/Template HTML Form JSP index.jsp EntityRepositoryService Servlet Dojoウィジェット index.jsp index.jsp DEACustomerController index.jsp <<document>> DDCustomer GwtCustomer DSYorozuEntity GWT RepositoryService GWT-RPC JDO index.html Servlet <<entity>> GwtYorozuEntity DEACustomer GWTCustomer RepositoryServiceImpl Editor JDO Atom AtomPub AtomPub Servlet AtomYorozuDomain Atomクライアント RepositoryServiceServlet DataStore HTML Form REST JSON Servlet Webブラウザ RESTYorozuDomain (JavaScript) RepositoryServiceServlet
    • 昔のバージョンのデモ•  メタモデルをだいぶ改造したので、現時点では動かなく なっていますが、昔やっていたデモを参考資料料として紹 介します。•  新しいメタモデルをベースに、プログラムの⾃自動⽣生成は 改めて実装中です。 •  ⽣生成対象となるプラットフォームも変わる予定です。
    • 諸元•  SimpleModeler 0.1.5•  Grails 1.0.4•  Google App Engine/Python 1.1.9•  Eoogle App Engine/Java 1.2.0•  Google Web Toolkit 1.6.4•  Eclipse 3.4 Java EE Developers + Google App Engine Plugin
    • デモ⼿手順 Groovy/Spring/Hibernate Grails Python/Django/Dojo Toolkit CSV ③ Google App Engine Python SimpleModel リポジトリ ④ Java/JDO/ ① Scala Google App Engine Servlet/JSP/Dojo Toolkit DSL ⑤ Java マインドマップ ② Google App Engine Java/JDO/Google Web Toolkit Java Google Web Toolkit ⑥ クラス図/ステートマシーン図/ 状態遷移表 Web仕様書
    • CSVとクラス図 demo.csv #actor,parts,attrs customer,,phone #resource goods,,note #event buy,customer;goods
    • SimpleModelerデモ①CSV→マインドマップ$ simplemodeler –convert demo.csv
    • SimpleModelerデモマインドマップ
    • SimpleModelerデモ②マインドマップ→Scala DSL(SimpleModelリポジトリ)$ simplemodeler –project demo$ cd demo$ simplemodeler –import ../demo.csv – import.package:com.demo$ mvn compile
    • SimpleModelerデモ③Scala DSL→Grails$ grails create-app grailsdemo$ simplemodeler –grails com.demo – output:grailsdemo$ cd grailsdemo$ grails generate-all com.demo.DeeBuy$ grails generate-all com.demo.DeaCustomer$ grails generate-all com.demo.DerGoods$ grails run-app
    • SimpleModelerデモGrails
    • SimpleModelerデモ④Scala DSL→Google App Engine/Python$ simplemodeler –gae com.demo – gae.project:simplemodelerdemo –output:gae$ dev_appserver.py gae$ cd gae$ cd appcfg.py update simplemodelerdemo
    • SimpleModelerデモGoogle App Engine/Python
    • SimpleModelerデモ⑤Scala DSL→Google App Engine/Java[Eclipse]gaejプロジェクト作成$ simplemodeler –gaej com.demo – gaej.project:simplemodelerdemo –gaej.gwt – output:../gaej[Eclipse]リフレッシュ[Eclipse]Gaejプロジェクト起動[Eclipse]Googleアップロード
    • SimpleModelerデモGoogle App Engine/Java Servlet/JSP/Dojo Toolkit
    • SimpleModelerデモGoogle App Engine/JavaGoogle Web Toolkit
    • SimpleModelerデモ⑥CSV→マインドマップ→Scala DSL→Web仕様書$ simplemodeler –convert yorozu.csv$ simplemodeler –project yorozu$ cd yorozu$ simplemodeler –import ../yorozu.csv$ mvn compile$ simplemodeler –html com.yorozu –output:target/ html.d
    • SimpleModelerデモCSVで記述できることyorozu.csv#actor,base,parts,attrs,powers,states,roles顧客,,,住所個⼈人顧客,顧客,,,性別(男性;⼥女女性)法⼈人顧客,顧客従業員,,,,,,店員#role店員#resource商品,,製品+,,,商品状態(⼊入荷待;在庫中;配送中;販売完)製品#event顧客取引,,顧客;店員顧客購⼊入,顧客取引,商品+
    • SimpleModelerデモマインドマップ(XMind)
    • SimpleModelerデモScala DSLpackage com.yorozuimport org.simplemodeling.dsl._import org.simplemodeling.dsl.datatype._import org.simplemodeling.dsl.domain._import org.simplemodeling.dsl.domain.values._case class DER製品 extends DomainResource { term = "製品" caption = "製品" brief = <t></t> description = <text></text> id("製品Id", DVI製品Id()) attribute("製品Name", DVN製品Name())}case class DVI製品Id extends DomainValueId { term = "製品Id" caption = "製品Id" brief = <t></t> description = <text></text> attribute("value", XString)}case class DVN製品Name extends DomainValueName { term = "製品Name" caption = "製品Name" brief = <t></t> description = <text></text> attribute("value", XString)}
    • SimpleModelerデモWeb仕様書
    • SimpleModelerデモクラス図
    • SimpleModelerデモScala DSL→ステートマシーン図package com.yorozu case class DMS⼊入荷待 extends DomainState {import org.simplemodeling.dsl._ term = "⼊入荷待"import org.simplemodeling.dsl.datatype._ caption = "⼊入荷待"import org.simplemodeling.dsl.domain._ brief = <t></t>import org.simplemodeling.dsl.domain.values._ description = <text></text>case class DER商品 extends DomainResource { transition(DEE商品⼊入荷(), DMS在庫中()) term = "商品" } caption = "商品" brief = <t></t> case class DMS在庫中 extends DomainState { description = <text></text> term = "在庫中" caption = "在庫中" id("商品Id", DVI商品Id()) brief = <t></t> attribute("商品Name", DVN商品Name()) description = <text></text> association("製品", DER製品(), OneMore) statemachine(DM商品状態()) transition(DEE顧客購⼊入(), DMS配送中())} transition(DEE顧客購⼊入(), DMS販売完()) }・・・中略略・・・case class DM商品状態 extends DomainStateMachine { case class DMS配送中 extends DomainState { term = "商品状態" term = "配送中" caption = "商品状態" caption = "配送中" brief = <t></t> brief = <t></t> description = <text></text> description = <text></text> state(DMS⼊入荷待()) transition(DEE商品配送(), DMS販売完()) state(DMS在庫中()) } state(DMS配送中()) state(DMS販売完()) case class DMS販売完 extends DomainState {} term = "販売完" caption = "販売完" brief = <t></t> description = <text></text> }
    • SimpleModelerデモステートマシーン図と状態遷移表
    • デモ•  マインドマップからクラス図を⽣生成•  SmartDox DSLからクラス図を⽣生成
    • まとめ•  ユビキタス⾔言語の設計と運⽤用が⾮非常に重要 •  ツールのアシストは必須•  マインドマップによるユビキタス⾔言語記述はブレインス トーミングと教育向け•  Scala DSLでのユビキタス⾔言語は「柔らかいモデル」の 記述に不不満•  SmartDox DSLで「柔らかいモデル」と「固いモデル」 を統合
    • END