⽂文書をプログラムにする技術!
-­‐	
  SimpleModeler	
  +	
  	
  
	
  	
  Mindmap	
  &	
  SmartDox
2012年年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/Java
Google 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 DSL
package com.yorozu

import    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

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

  • 1.
    ⽂文書をプログラムにする技術! -­‐  SimpleModeler  +        Mindmap  &  SmartDox 2012年年10⽉月22⽇日 浅海智晴
  • 2.
    浅海のプロフィール •  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フェロー
  • 3.
    開発プログラム •  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ベースの⽂文書処理理システム
  • 4.
  • 5.
    論論点 •  ソフトウェア開発における⽇日本語記述の仕様の取り扱い •  ⽇日本語、モデル、プログラムを連携する技法 •  ⽇日本語記述による仕様を形骸化させない •  考え⽅方、⽅方法論論、ツール •  オントロジーその他、他分野の技術を活⽤用できないか? •  ご意⾒見見を頂きたいポイントです。
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
    オブジェクトモデリング 協調の実装技術 がボトルネック ドメイン・モデル になっている 状態 機械 協調 静的   アプリケーション 構造 モデル
  • 13.
    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、 …)
  • 14.
    クラウド時代のソフトウェア 開発 業務 業務 アーキテクチャ 方式 開発 クラウドに飲み込まれてしまう! 製造 コンポーネント開発 プラットフォームの共用 コンポーネント・サービスの再利用 オフショア開発 プログラム自動生成 システム保守・運用 システム保守・運用 ハードウェア保守・運用 ハードウェア保守・運用
  • 15.
    DSL駆動開発&コンポーネン ト 分析 設計 実装 DSL 自動生成 コンポーネント OO分析 OO設計 OO実装 コンポーネント DSL 自動生成 コンポーネント DSL 自動生成 コンポーネント OO分析 OO設計 OO実装 コンポーネント
  • 16.
    DSL駆動開発とは •  テキストDSLを⽤用いたモデル駆動開発 • UMLをプログラミング⾔言語的に⽤用いることは間違いだっ た!? •  テキストDSLでモデルを記述 •  作成効率率率はテキストが圧倒的に効率率率的 •  必要に応じてUMLの図を⽣生成 •  モデルの視認性はUMLが上 モデルをテキストで記述する •  テキストDSLの実現⽅方法 モデルをデータとして •  内部DSL:ホスト⾔言語上に構築 操作して成果物を⽣生成する •  外部DSL:スクラッチで⾔言語を作成
  • 17.
  • 18.
    SimpleModelingモデル変換 業務モデル ドメイン・モデル 要求モデル システム・モデル 設計モデル 実装 静的構造 エンティティ ドメイン層 ドメイン層 抽出 具体化 格納 現実世界 データベース ドメイン・モデル 抽出 コントロール アプリケーション層 アプリケーション層 ボキャブラリ 詳細化 実現 動的モデル 具体化 文脈 ユースケース 具体化 利用事例 バウンダリ プレゼンテーション層 プレゼンテーション層 操作 やりたいこと エンド・ユーザ アプリケーション・モデル
  • 19.
    SimpleModeling全体像 ドメイン・モデル 要求モデル システム・モデル 設計モデル 用語 事実 契約 自然言語 規則 契約 ユースケース 宣言モデル 拡張 静的モデル 利用 動的モデル 変換 コラボレーション コラボレーション 動的モデル 動的モデル アプリケ ーション・ 同期 機能モデル 変換 具体化 モデル サービス契約 静的モデル 静的モデル データフロー図 クラス図 クラス図 オブジェクト・ OCL 同期 操作 操作 モデル OCL OCL クラス図 クラス図 クラス図 静的モデル 変換 静的モデル 具体化 静的モデル ドメイン・ モデル 動的モデル 張 拡 化 体 具 ルール・モデル 宣言モデル 変換 宣言モデル ビジネス・ルール ビジネス・ルール
  • 20.
    UMLの⻑⾧長所と短所 •  ⻑⾧長所 •  唯⼀一の標準オブジェクト・モデル記法である。 •  メタ・モデルが厳密に定義されている。 •  グラフィカル⾔言語であり、概要情報の伝達にすぐれてい る。 •  短所 •  オブジェクト・モデル以外の記述には必ずしも適してい ない。 •  オブジェクト・モデルも完全に記述できるわけではない。 •  作成効率率率が必ずしも⾼高くない。 •  モデル・リポジトリの操作性がよくない。 •  ⼤大規模開発に必ずしも適していない。 •  ⾃自然⾔言語情報の取り扱いが不不⼗十分。
  • 21.
    Modegramming (モデグラミング) •  Modeling+ Programming •  モデリングとプログラミングの融合 •  テキストDSL+モデルコンパイラによるモデル駆動 開発 •  DSL (Domain Specific Language) •  Scala DSL •  Mindmap DSL (MindmapModeling) •  Excel DSL, XML DSL, JRuby DSLなど必要に応じて •  メタ・モデル(モデル体系) •  SimpleModeling •  モデルコンパイラ •  SimpleModeler
  • 22.
    SimpleModeling技術 •  SimpleModeling •  企業アプリケーション向けモデリング⼿手法 •  業務モデリング、ドメイン・モデリング、要求モデリング、 システム・モデリング •  MindmapModeling •  SimpleModelingのモデル抽出⼿手法 •  ドメイン・モデリング(+業務モデリング) •  SimpleModeler •  SimpleModeling⽤用モデル・コンパイラ
  • 23.
  • 24.
    MindmapModeling •  MindmapModelingはマインドマップを使ってモデルを 作成する⼿手法。 •  稚内北北星学園⼤大学東京サテライト校で実務者をターゲット としたモデリング教育向けに開発 •  問題空間側のモデルをマインドマップで記述することが できる。 •  業務モデル : 業務ユースケース •  ドメイン・モデル : 静的構造モデル •  MindmapModelingと⼀一般的なマインドマップの違い。 •  MindmapModelingモデルは、マインドマップの上に独⾃自構造 を拡張しており、オブジェクト・モデルに落落とし込む⼿手順が確 ⽴立立している。
  • 25.
    なぜMindmapModelingなのか •  ⾃自然⾔言語(⽇日本語)による⽂文章情報からいかにオブジェクト・モ デルを作成するのか? •  ⾃自然⾔言語(⽇日本語)→UMLを直接作成するのは難しい。 •  ⾃自然⾔言語(⽇日本語)ベースの中間的な構造モデルがあるとよい。 •  この⽬目的にはマインドマップが最適。 •  単なるマインドマップでは不不⼗十分 •  オブジェクト・モデルへの変換を前提にしたマインドマップベー スのフォーマットが有効。 •  このためには⽬目的にかなったメタ・モデルをバックグラウンドに したマインドマップのフォーマットでなければならない。 •  このフォーマットがMindmapModeling。 •  オブジェクト・モデルをメタファで理理解できる。 •  オブジェクト・モデリングの”コツ”を習得
  • 26.
    MindmapModelingのコツ •  ⼊入⼒力力となる⾃自然⾔言語の⽂文章(雑誌記事など)は、仕様化の ための⽅方針やモデルの⾻骨格、詳細情報が不不⼗十分なので、 その現実を受け⼊入れて適宜モデルを補う。 •  構想⼒力力、提案⼒力力もモデリング技術のうち •  MindmapModelingのモデルは、プログラムで実装可能 であることが重要。実装がイメージできないモデルは、 間違いと考えてよい。 •  仕様の⾻骨格は「物語」で構築する。「物語」を明確にす ることで、モデルの取捨選択、モデル化⽅方針の選択、不不 ⾜足部分の補完を⾏行行うことができる。
  • 27.
    MindmapModelingについて •  このスライドが参考になると思います。 • MindmapModelingチュートリアル •  http://www.slideshare.net/asami224/ mindmapmodeling •  毎⽉月勉強会やってます。 •  横浜モデリング勉強会 •  http://www.facebook.com/groups/223587707726703/ •  ワークショップの進め⽅方 •  http://www.facebook.com/groups/223587707726703/ doc/370544933030979/
  • 28.
  • 29.
  • 30.
  • 31.
    SmartDox DSL •  SmartDox •  https://github.com/asami/smartdoxprocessor •  SmartDoc後継 •  Emacs org-modeベースの⽂文書処理理システム •  SmartDox DSL •  固いモデル:プログラムに落落ちるモデル •  ドメイン・モデルなど •  柔らかいモデル:プログラムに落落ちないモデル •  要求仕様など •  SmartDoc DSLで記述した⽂文書 •  固いモデルと柔らかいモデルが混在 •  ⽂文書の中からマーキングルールを使って⾃自動抽出
  • 32.
  • 33.
    SimpleModeler •  https://github.com/asami/simplemodeler •  SimpleModel⽤用モデル・コンパイラ •  Relaxer後継 •  テキストDSL •  Scala DSL •  Scala DSL&mavenによるモデル・リポジトリ •  Web仕様書、Java、Androidを⽣生成 •  昔:Grails、Google App Engine Python/Java
  • 34.
    SimpleModeler service •  勉強会での確認⽤用にマインドマップモデルからクラス図 を⽣生成するサービスを提供 •  http://www.mindmapmodeling.org/service •  SmartDox DSLからクラス図の⽣生成も可能
  • 35.
    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 プログラム 企画中
  • 36.
    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
  • 37.
    昔のバージョンのデモ •  メタモデルをだいぶ改造したので、現時点では動かなく なっていますが、昔やっていたデモを参考資料料として紹 介します。 •  新しいメタモデルをベースに、プログラムの⾃自動⽣生成は 改めて実装中です。 •  ⽣生成対象となるプラットフォームも変わる予定です。
  • 38.
    諸元 •  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
  • 39.
    デモ⼿手順 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仕様書
  • 40.
    CSVとクラス図 demo.csv #actor,parts,attrs customer,,phone #resource goods,,note #event buy,customer;goods
  • 41.
  • 42.
  • 43.
    SimpleModelerデモ ②マインドマップ→Scala DSL(SimpleModelリポジトリ) $ simplemodeler–project demo $ cd demo $ simplemodeler –import ../demo.csv – import.package:com.demo $ mvn compile
  • 44.
    SimpleModelerデモ ③Scala DSL→Grails $ grailscreate-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
  • 45.
  • 46.
    SimpleModelerデモ ④Scala DSL→Google AppEngine/Python $ simplemodeler –gae com.demo – gae.project:simplemodelerdemo –output:gae $ dev_appserver.py gae $ cd gae $ cd appcfg.py update simplemodelerdemo
  • 47.
  • 48.
    SimpleModelerデモ ⑤Scala DSL→Google AppEngine/Java [Eclipse]gaejプロジェクト作成 $ simplemodeler –gaej com.demo – gaej.project:simplemodelerdemo –gaej.gwt – output:../gaej [Eclipse]リフレッシュ [Eclipse]Gaejプロジェクト起動 [Eclipse]Googleアップロード
  • 49.
  • 50.
  • 51.
    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
  • 52.
  • 53.
  • 54.
    SimpleModelerデモ Scala DSL package com.yorozu import 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) }
  • 55.
  • 56.
  • 57.
    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> }
  • 58.
  • 59.
  • 60.
    まとめ •  ユビキタス⾔言語の設計と運⽤用が⾮非常に重要 • ツールのアシストは必須 •  マインドマップによるユビキタス⾔言語記述はブレインス トーミングと教育向け •  Scala DSLでのユビキタス⾔言語は「柔らかいモデル」の 記述に不不満 •  SmartDox DSLで「柔らかいモデル」と「固いモデル」 を統合
  • 61.