SlideShare uma empresa Scribd logo
1 de 68
Baixar para ler offline
クラウド・アプリケーション
DSL駆動アプローチ
SimpleModelerの試み


浅海智晴
edge2.cc
2010年1月22日
話題

SimpleModeler(+edge2.cc)で
AppEngine Javaプログラム自動生成を
作っていて考えたこと
 クラウド・アプリケーション・アーキテクチャ
 オブジェクト・モデリングとクラウド・アプリケー
 ション
 DSL駆動開発とクラウド・アプリケーション
内容

SimpleModeler
DSL駆動開発
SimpleModler&AppEngine
SimpleModeler
Agile Modegramming for Cloud

                クラウド
              プラットフォーム




            Agile Modegramming
  アジャイル開発         for Cloud      モデル駆動開発
                テキストDSL
               モデルコンパイラ




                オブジェクト
                モデリング
SimpleModeler

 SimpleModel用モデル・コンパイラ
 テキストDSL
   Scala DSL
   Scala DSL&mavenによるモデル・リポジトリ
 Web仕様書、Java、Grails、Google App
 Engine Python/Javaを生成
ターゲットのプラットフォーム


             Java              .NET             LAMP
Cloud        AppEngine/Java    Windows Azure    AppEngine/Pyth
                               AppFabric        on

Web          Spring, Seaser,   Windows Server   PHP, Ruby on
             Grails            AppFabric        Rails, Python
                                                Django


Enterprise   JavaEE(SOA)       Windows Server   N/A
                               AppFabric
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
Scalaについて
 純粋オブジェクト指向言語+本格関数型言語
  関数型言語とクラウドは相性がよいはず
 静的型付+型推論
 Java VM上で動作
 言語仕様が複雑
  その代わり浅海の体感ではJavaの3倍ぐらいの生産性
  がある
 DSLのホスト言語として充実した機能を持っている
 モデル・コンパイラの実装言語として充実した機能
 を持っている
当面はScalaを
DSLプラットフォーム                       使用


 Scala                            状況によってXtext
  SimpleModelerで使用                またはOsloに移行
                                  するかもしれない
  内部DSL・外部DSL
 Xtext
  Eclipse Modeling Framework
  外部DSL
  WebSphereと近しい関係にあると思われる
 Oslo
  Windows SQL Server Modeling
  外部DSL
  AppFabricと統合されている
DSL駆動開発
DSL駆動開発とは
テキストDSLを用いたモデル駆動開発
 UMLをプログラミング言語的に用いることは間違いだっ
 た!?
テキストDSLでモデルを記述
 作成効率はテキストが圧倒的に効率的
必要に応じてUMLの図を生成
 モデルの視認性はUMLが上       モデルをテキストで記述する
テキストDSLの実現方法
                     モデルをデータとして
 内部DSL:ホスト言語上に構築     操作して成果物を生成する
 外部DSL:スクラッチで言語を作成
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           自動生成      コンポーネント

      OO分析

                   OO設計       OO実装   コンポーネント




DSL                 自動生成             コンポーネント




             DSL           自動生成      コンポーネント

      OO分析

                   OO設計       OO実装   コンポーネント
フレームワーク vs 自動生成


                        アプリケーション

    アプリケーション                                      DSL


                        アプリケーション
                                           自動生成
     定義ファイル              定義ファイル


                        フレームワーク
    フレームワーク



   Google App Engine   Google App Engine


     フレームワーク              自動生成
      アプローチ               アプローチ
DSL駆動開発で達成したいこと(1)

プログラムの自動生成
  契約
  コンポーネントの自動生成
  雛形の自動生成
One Source Multi Use (OSMU)
  AppEngine, Azure, JavaEE(SOA)
モデルの再利用
  アーキタイプ
DSL駆動開発で達成したいこと(2)
モデルの見える化
  仕様書自動生成
  マルチ・ビュー自動生成
  追跡性(tracability)
    このユースケースで更新しているエンティティは何か
    このエンティティを更新しているユースケースは何か
  メトリクス
モデル検証
テスト
  ユースケース→テスト・シナリオ
  契約→コンポーネント・テスト
プロジェクト管理の土台
  ユースケース駆動
  見積もり
考えないといけないこと

                                                             UI
                現実世界
             (ドメイン・モデル)
                                                            サービス
                                                     ア
                                                     ー      データ
                                        開発           キ
                                  ( 変換+ プログラミング)     テ
                                                     ク   インテグレーション
                                                     チ
              やりたいこと                                 ャ
                                                         イベント/リアクティブ
           (ユースケース・モデル)

                                                          サービス・バス


       クラウド・アプリケーションも          クラウド・アプリケーションの       クラウド・アプリケーションの
          記述できるPIM
   クラウドアプリケーションに            クラウドアプリケーション
                                    開発手法            クラウドアプリケーション
                                                     アーキテクチャ・要素技術
   対応した問題空間PIM              開発手法                    解決空間PIM

                                                   クラウドアプリケーション
                                                   PSM
PIM(Platform Independent Model)
PSM(Platform Specific Model)
クラウド・アプリケーション・アーキテクチャ
             論理層の観点から
                                                 サーバ側では、 GUIが使用する
                                                 サービスを提供する。


   クライアントはWebブラウザ上で
   動作するHTML5で本格的なGUI
                                   プレゼンテーション層
             を構築する。
                                                                    クラウド・アプリケーション
                              クライアント側           サーバ側                                      アプリケーションの論理的な構成は
                                                                                          従来のものと変わらない
                                                                     プレゼンテーション層
                               HTML5            サービス

                                                                       ビジネス層


                                                                       ドメイン層


   プレゼンテーション層はWeb指                                                      統合層           アクセス方式1: RDBMS
  向のMVC2ではなく、 クライアント                                                                  ACID特性を要求されるデータはRDBMSに
                                 アクセス方式4: 手続き呼出し
  /サーバ時代のGUIに回帰する。                                                                    格納する。
                               性能特性、 障害特性がローカル
                                の手続き呼び出しよりも脆弱 。


      アクセス方式5: メッセージング                                                 統合層
分散環境での連携に適応する特性をもつ。                                                                               RDBMS




                                メッセージ・キュー



                                                                                                  アクセス方式2: KVS
                                                                                    KVS           一般のデータはKVSに格納するのが望ましい 。
                                                       サービス             REST

                       サービス




                                                アクセス方式3:REST
                                       Webページを手繰って情報を取得する               サービス
クラウド・アプリケーション・アーキテクチャ
                    の例
                                     マスターデータなど更新頻度が低いデータは
                                           KVSで配布して直接参照する 。
                                                                                   結果を直接知りたい場合には 、 手続き呼
                                                                         KVS       び出しで同期型の連携を行う。
                                                                                   この形式の連携を行うとスケーラビリティが
                                                                                   低くなる。



プレゼンテーションの段階でできることをや
っておくと 、 スケールアウトの効果によって                    クラウド・アプリケーション
          スケーラビリティが高まる 。
外部サービスからRESTを用いて情報を取
      得するのが典型的な利用方法 。                                                                                       サービス利用の主力はメッセージである 。
                           プレゼンテーション                      サービス                             サービス
                                                                                                            この形式の連携を行うとスケールアウトに
                                                                                                            よってスケーラビリティを確保できる。




                                                                                           サービス           バックエンドのサービス群もメッセージによ
                                                              メッセージ・キュー
                              REST                                                                        って連携 。




                                                               サービス                       メッセージ・キュー

                                                                                                                      同期通信
                             サービス

                                                                                                                    メッセージ送信


                                                                                                                    メッセージ配信


                                                                 KVS              RDBMS
                           データベースをアクセスするスコープは
                              サービスに閉じておくのがよい 。




                                                                       KVSとRDBMSを適材適所で使い分ける 。
                                                                       可能であればKVSを使うのが望ましい 。
想定アーキテクチャ(最近考えていること)


Web GUI   UI Facade
                      Service                 Component
(HTML5)    Service




                            Reactive Framework




                           Integration Framework




                                Service Bus
SimpleModelingの本
オブジェクト・モデルの構成
                                     状態機械モデル

                                     ステートマシーン図




 ユースケースを現実化したものがコミュニケーショ
ン図/シーケンス図、 コミュニケーション図/シーケン
                                                               オブジェクト図/クラス
ス図を利用者の視点によるシステムの利用事例と
                                                               図、 コミュニケーション
       して抽象化したものがユースケース
                                                               図/シーケンス図に登
                                                               場するオブジェクトの
                                                               状態遷移を記述


  ユースケース図               コミュニケーション図                   オブジェクト図


       ユースケース
        (利用事例)


                                                                              クラス図をインスタンス
                                                                              化(実体化)したものが
                                                                              オブジェクト図




   コミュニケーション図を時間
   軸の側面から記述したもの        シーケンス図                        クラス図
                                       オブジェクト図上でコラ
         がシーケンス図
                                       ボレーション(メッセー
                                       ジの送受信の集まり)
                                       を記述したものがコミュ
                                       ニケーション図




                    協調モデル                            静的構造モデル
SimpleModeling全体像
                   ドメイン・モデル                        要求モデル               システム・モデル             設計モデル




                                   用語
                                   事実                      契約
 自然言語             規則               契約                     ユースケース
          宣言モデル        拡張   静的モデル          利用      動的モデル




                                                     変換
                                                                         コラボレーション              コラボレーション
                                                                       動的モデル                動的モデル          アプリケ
                                                                                                           ーション・
                              同期
                                                   機能モデル          変換                  具体化                   モデル
                                                    サービス契約             静的モデル                静的モデル
                                                    データフロー図                   クラス図                  クラス図
オブジェクト・
                                                            OCL
           同期




                                                                         操作




                                                                                              操作
 モデル
                                        OCL                                     OCL
                                    クラス図                                      クラス図                 クラス図
                            静的モデル                  変換                  静的モデル          具体化   静的モデル
                                                                                                           ドメイン・
                                                                                                            モデル
                                                                                            動的モデル
                    張
                   拡




                                                                                       化
                                                                                      体
                                                                                      具
ルール・モデル   宣言モデル                               変換                        宣言モデル
           ビジネス・ルール                                                      ビジネス・ルール
SimpleModelingモデル変換
業務モデル          ドメイン・モデル           要求モデル          システム・モデル                  設計モデル              実装



                    静的構造                             エンティティ                   ドメイン層                ドメイン層

          抽出
                                  具体化                                                                      格納
 現実世界
                                                                                                                     データベース




                                     ドメイン・モデル




        抽出
                                                     コントロール                 アプリケーション層         アプリケーション層
                             ボキャブラリ                              詳細化                    実現




  動的モデル
                                           具体化

                   文脈

                                  ユースケース




                                           具体化
                           利用事例                       バウンダリ                プレゼンテーション層        プレゼンテーション層


                                                                                                           操作

                              やりたいこと



                                                                                                           エンド・ユーザ


                                                            アプリケーション・モデル
クラウドの要件とモデリング技法

            エンティティ・モデル
 データベース選択
              データ種別


  データ分割

            ユースケース・モデル

 サービス分割      アクセス法解析

              責務抽出

  非同期処理      コラボレーション




  顧客要求
SimpleModelerでの対応方針
                                          状態機械モデル



                                                            DSLで記述。
                                          ステートマシーン図




                                                            自動生成。
      ユースケースを現実化したものがコミュニケーショ
     ン図/シーケンス図、 コミュニケーション図/シーケン
                                                                    オブジェクト図/クラス
     ス図を利用者の視点によるシステムの利用事例と
                                                                    図、 コミュニケーション
            して抽象化したものがユースケース
                                                                    図/シーケンス図に登
                                                                    場するオブジェクトの
                                                                    状態遷移を記述


       ユースケース図               コミュニケーション図                   オブジェクト図


            ユースケース
             (利用事例)


ユースケース、サービスをDSLで記述。                                                                クラス図をインスタンス
                                                                                   化(実体化)したものが

ユースケースからサービスまではモデル検証。                                                              オブジェクト図



サービス契約からコンポーネントの
骨組みを自動生成。
        コミュニケーション図を時間
        軸の側面から記述したもの        シーケンス図                        クラス図
                                            オブジェクト図上でコラ

                                                                              DSLで記述。
              がシーケンス図
                                            ボレーション(メッセー
                                            ジの送受信の集まり)
                                            を記述したものがコミュ
                                            ニケーション図
                                                                              自動生成。


                         協調モデル                            静的構造モデル
One Source Multi Use

      PIM




                                              JavaEE       Grails
                                              JAX-WS       Ruby on Rails
            AppEngine   Azure
                                              JAX-RS       Python Django
                                                SCA        …




                                Service Bus




                                          Integration Framework
                                               (Data Flow?)
SimpleModeler & AppEngine Java

 Web UI
 サービス
 エンティティ
Web UI

 Web MVC→Web GUI
 HTML5/CSS3
  REST/JSON
 GWT2
  GWT-RPC
 HTML4/jQuery
  REST/JSON
SimpleModeler & AppEngine/Java
サービス
サービス/コンポーネントの生成
                                                                                                    完全自動生成
                                                      コンポーネント本体
                                                         実装

                                                                                                     雛形生成




                              <<abstract>>
                                             サービス契約    <<abstract>>         外部リソース   <<abstract>>

                               プロトコル                                                   リソース
                                                      コンポーネント本体
                               ファサード                                                   アダプタ




                                                                      変化点



                                                                                       リソース
                                                       <<abstract>>
AtomPub   JSON   XML   WS-*             CSV                                            アダプタ            外部リソース
                                                        変化責務                            実装




                                                        変化責務
                                                         実装
動的モデルの記述と実装
   手続き                  関数(宣言)                    状態機械
                                                   モデル
                                                               サービスの挙動を
                                           モデルを作る
                      期待度大                                     適切なモデルで記述
                                           のが難しい
変換は
                                                                変換!
かなり難しい

イベント            状態   イベント                 イベント
                                     状態                   状態


                                                               実行時は
       状態機械
               ガード
                            状態機械
                                    ガード
                                                 状態機械
                                                         ガード
                                                               状態機械ベースの
                                                               リアクティブシステム
       アクション                アクション                アクション



                             実装
SimpleModeler & AppEngine/Java
エンティティ
SimpleModelerが生成するレコード
 共通属性
  作成日時、更新日時
    論理更新、楽観ロックなど
    AtomPub
 自己記述的
  スキーマバージョン
    スキーマエボリューション
  スキーマメタデータ
    レコードのメタデータをインスタンスごとに持つ
  更新ログ
 論理更新、論理削除
  append-only
 AtomPubフィールド対応
メタ・モデル
              <<usecase>>
               UseCase




              <<service>>
                Usage




  <<actor>>    <<event>>    <<resource>>
   Actor         Event        Resource




              <<service>>   <<powertype>>
                Service      Powertype




               <<rule>>
                 Rule
メタ・モデルのインスタンス
                                                     サ ビ ・シ テ 外
                                                      ー ス ス ム
             ア ター 務 ス ム 物
              ク と業 シ テ の 語                            に る ブ ェクト
                                                       あ オ ジ             イ ン 参 す ア ター
                                                                          ベ トに 加 る ク         サ ビ ・シ テ が 理
                                                                                              ー ス ス ム 管
                                                                                             して る ブ ェクト
                                                                                               い オ ジ




     業 ユ ス ー の ー 中
      務 ー ケ ス フロ の で           業 タス 実 に って
                                務 クの 行 よ                                        ドメイン
   サ ビ ・シ テ と対 す ス ップ
    ー ス ス ム 話 る テ                 イ ン 発 す
                                   ベ トが 生 る
                                                                  アクター
                                                                         登 人
                                                                          場 物

                          業 ユ ス ー
                           務 ー ケ ス
        業 タス ア
         務 クを クターと                                                                                 道具
サ ビ ・シ テ の 話
 ー ス ス ム 対 として 体
              具 化                 脚本                                                        リソース
                           業 タス
                            務 ク
                                                                  イ ン
                                                                   ベ ト
                                                                                           状 機
                                                                                            態 械
                                                                         出 事
                                                                          来
                                      物語




                                                                                                            イ ン よて 態
                                                                                                             ベ トに っ 状 が
                         シ テ ・ユ ス ー
                          ス ム ー ケ ス
                                                                                                            遷 す
                                                                                                             移 る

                          シ テ ・タス
                           ス ム ク              サ ビ
                                               ー ス                  サ ビ ・シ テ 上
                                                                     ース ス ム            イベ トに って 新 照
                                                                                         ン よ 更 (+参 )
                                                                    で 生 るベ ト
                                                                     発 す イ ン           され リソ ス
                                                                                         る ー




     アクター ー ス ス ム 物
         とサ ビ ・シ テ の 語
関連
 <<aggregate>>
                            関連の種類
                               関連(association)
                               集約 (aggregation)
                               合成 (composition)
                               whole-partの合成
                            多重度
                               1, 0..1(?), 1..N(+), 0..N(*)
                            DataStore Id
                               Key, String, Long
                            物理ID、論理ID
                            エンティティ参照
                               物理ID、論理ID
                            自動採番、手動採番
                            物理更新、論理更新
                            物理削除、論理削除
                 <<part>>
                            unary、binary
                            リンク参照、Query参照
                            キャッシュ有無
                            トランザクション
                               気にしない、BASE、ACID
EntityとValue Object(document)
間の転記

          <<document>>
        DD顧客購入依頼文書
                                                         <<actor>>
          日時: DateTime                                   DEA顧客

        顧客番号: DVI顧客番号                <<event>>       顧客番号: DVI顧客番号
          商品番号: DVI商品番号             DEE顧客購入           顧客名: PartyName
1...N         価格: Money        顧客取引番号: DVI顧客取引番号
            個数: XUnsignedInt       日時: DateTime
                                 顧客番号: DVI顧客番号




                                     <<item>>
                                 DEI顧客購入商品明細
          <<document>>
        DD顧客購入結果文書             顧客取引番号: DVI顧客取引番号         <<actor>>
顧客取引番号: DVI顧客取引番号                商品番号: DVI商品番号           DER商品

          日時: DateTime            明細番号: ItemNo       商品番号: DVI商品番号
        顧客番号: DVI顧客番号               価格: Money         商品名: DVN商品名
         顧客名: PartyName           個数: XUnsignedInt   在庫数: XUnsignedInt
          商品番号: DVI商品番号
           商品名: DVN商品名
1...N
              価格: Money
            個数: XUnsignedInt
同期write +
非同期ログwrite + 管理情報cache
                   /customer/c11/update-async?name=ABC_Taro


                                              アプリケーション            ②
  Web    ①                                                            Customer
                                                (Servlet)
 ブラウザ
               ⑤

                                                        ④
                         ③



                                                  TaskQueue



                                                        ⑥
                         /_system/event/log
                                              アプリケーション                処理結果
                                                (Servlet)              ログ
                                                                  ⑦




                                                  memcache


                                                        ⑨
                                 /_system/flush
                                                              ⑩
                                              アプリケーション                Customer
        Cron
                     ⑧                          (Servlet)             管理情報
非同期write
                   /customer/c11/update-async?name=ABC_Taro


                                              アプリケーション
  Web     ①
                                                (Servlet)
 ブラウザ
          ③

                                                       ②




                                                  TaskQueue



                                                       ④
                                                                  ⑤   Customer
               /customer/c11/update?name=ABC_Taro
                                              アプリケーション
                                                (Servlet)

                                                                  ⑦   処理結果
                                                        ⑥              ログ



                                                  memcache


                                                        ⑨
                                 /_system/flush
                                                              ⑩
                                              アプリケーション                Customer
        Cron
                  ⑧                             (Servlet)             管理情報
powertype/区分コード
                             <<actor>>              <<powertype>>
                             DEA顧客                   DP料金区分

                                                  無料
                                                  エントリ
                                                  プロフェッショナル



       DD顧客                  DEA顧客                           DP料金区分

  ID          12345     ID               12345      ID       料金区分名      updated

 名前           山田太郎     名前                山田太郎       1           無料     2008-10-10

料金区分           3      料金区分                3         2          エントリ    2008-10-10

 料金区分                  料金区分
               プロ                         プロ        3      プロフェッショナル   2009-05-05
_料金区分名                _料金区分名
                      料金区分
                                     2009-03-03
                      _updated
モデルとレコード
                                                                           1..*
                       <<actor>>                     <<event>>                       <<part>>        <<resource>>
                       DEA注文                          DEE注文                        DEP注文詳細             DER商品




       DEA顧客                                                           DEE注文                                               DER商品

  ID      12345                      ID      1234567                                                     ID         商品_名前          価格     updated

 名前       山田太郎                     発効日       山田太郎                                                        135        みかん            100   2009-05-05

updated   2009-03-03                顧客       23456                                                       246         りんご           80    2009-05-05

                                   顧客_名前     山田太郎                                                        369         ぶどう           120   2009-05-05

                                                                 DEP注文詳細

                                                     ID          商品        商品_名前       価格       個数

                                                     1           135       みかん          100     5
                                   注文詳細
                                                     2           246        りんご         80      3

                                                     3           369        ぶどう         120     8



                                   updated   2009-09-09
スキーマ・エボリューション(課題)


    スキーマ V1


    スキーマ V2

    スキーマ V3   生成

                                       スキーマ V1
                             スキーマ V1    レコード
                              ハンドラ


                   スキーマ V3   スキーマ V2   スキーマ V2
                   エンティティ     ハンドラ      レコード
アプリケーション
                             スキーマ V3
                              ハンドラ     スキーマ V3
                                        レコード
まとめ
クラウド・アプリケーションはイベント駆動アーキテク
チャのリアクティブシステムと想定。
クラウド・アプリケーションをDSL駆動で開発するた
めには、クラウド・アプリケーションを記述できるメ
タ・モデルとDSL文法が必要。
静的構造モデルと状態機械モデルはモデルから自
動生成ができる。一方、ユースケースモデルからは
自動生成できないので工夫が必要。
SimpleModeler&AppEngineで色々と試してみ
た感触では、相当のことができそうな気がしている。
おまけ:SimpleModelerデモ
諸元

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




  CSV
                            ③       Google App Engine
                                                          Python/Django/Dojo Toolkit

                                         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デモ
ステートマシーン図と状態遷移表

Mais conteúdo relacionado

Mais procurados

Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Yuji Kubota
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みChihiro Ito
 
Vue.js 基礎 + Vue CLI の使い方
Vue.js 基礎 + Vue CLI の使い方Vue.js 基礎 + Vue CLI の使い方
Vue.js 基礎 + Vue CLI の使い方Kei Yagi
 
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャーssuser070fa9
 
はじめてのVue.js
はじめてのVue.jsはじめてのVue.js
はじめてのVue.jsKei Yagi
 
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Uehara Junji
 
はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)Masatoshi Tada
 
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」Hiroyuki Ohnaka
 
Android程序的编译,安装和运行 | 小米科技 汪文俊
Android程序的编译,安装和运行 | 小米科技 汪文俊Android程序的编译,安装和运行 | 小米科技 汪文俊
Android程序的编译,安装和运行 | 小米科技 汪文俊imShining @DevCamp
 

Mais procurados (11)

Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
 
Vue.js 基礎 + Vue CLI の使い方
Vue.js 基礎 + Vue CLI の使い方Vue.js 基礎 + Vue CLI の使い方
Vue.js 基礎 + Vue CLI の使い方
 
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
 
はじめてのVue.js
はじめてのVue.jsはじめてのVue.js
はじめてのVue.js
 
Ajax 応用
Ajax 応用Ajax 応用
Ajax 応用
 
Heap statsfx analyzer
Heap statsfx analyzerHeap statsfx analyzer
Heap statsfx analyzer
 
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
 
はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)
 
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
 
Android程序的编译,安装和运行 | 小米科技 汪文俊
Android程序的编译,安装和运行 | 小米科技 汪文俊Android程序的编译,安装和运行 | 小米科技 汪文俊
Android程序的编译,安装和运行 | 小米科技 汪文俊
 

Destaque

C# linq入門 意図編
C# linq入門 意図編C# linq入門 意図編
C# linq入門 意図編Fujio Kojima
 
ORと経済学の「結婚」問題
ORと経済学の「結婚」問題ORと経済学の「結婚」問題
ORと経済学の「結婚」問題Yosuke YASUDA
 
Dslからのコードジェネレーションで楽々play開発
Dslからのコードジェネレーションで楽々play開発Dslからのコードジェネレーションで楽々play開発
Dslからのコードジェネレーションで楽々play開発Yoshiteru Takeshita
 
文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox
 文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox 文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox
文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDoxTomoharu ASAMI
 
学ばないDSL
学ばないDSL学ばないDSL
学ばないDSLKenta USAMI
 
DSLによる要求獲得でスーパーアジャイル
DSLによる要求獲得でスーパーアジャイルDSLによる要求獲得でスーパーアジャイル
DSLによる要求獲得でスーパーアジャイル陽平 山口
 
恋人がいない30代前半女性が5年以内に結婚できる確率は17.6%【アラサー未婚女性へ】
恋人がいない30代前半女性が5年以内に結婚できる確率は17.6%【アラサー未婚女性へ】恋人がいない30代前半女性が5年以内に結婚できる確率は17.6%【アラサー未婚女性へ】
恋人がいない30代前半女性が5年以内に結婚できる確率は17.6%【アラサー未婚女性へ】Tomoya Tatekawa
 
DSLについて語るときに僕の語ること
DSLについて語るときに僕の語ることDSLについて語るときに僕の語ること
DSLについて語るときに僕の語ることTomohiro Nishimura
 
Twitter API最新事情 - API Meetup Tokyo #1 #apijp
Twitter API最新事情 - API Meetup Tokyo #1 #apijpTwitter API最新事情 - API Meetup Tokyo #1 #apijp
Twitter API最新事情 - API Meetup Tokyo #1 #apijpYusuke Yamamoto
 
SI屋のためのF# ~DSL編~
SI屋のためのF# ~DSL編~SI屋のためのF# ~DSL編~
SI屋のためのF# ~DSL編~bleis tift
 
この人と結婚していいの?を読んで
この人と結婚していいの?を読んでこの人と結婚していいの?を読んで
この人と結婚していいの?を読んでShumpei Shiraishi
 
DSLの過去と未来
DSLの過去と未来DSLの過去と未来
DSLの過去と未来Akio Tajima
 
全角チルダ問題
全角チルダ問題全角チルダ問題
全角チルダ問題tsudaa
 
地獄のElixir(目黒スタートアップ勉強会)
地獄のElixir(目黒スタートアップ勉強会)地獄のElixir(目黒スタートアップ勉強会)
地獄のElixir(目黒スタートアップ勉強会)Tsunenori Oohara
 
婚活偏差値ランキングと傾向と対策
婚活偏差値ランキングと傾向と対策婚活偏差値ランキングと傾向と対策
婚活偏差値ランキングと傾向と対策大和 金太郎
 
最高の自分を手に入れる方法
最高の自分を手に入れる方法最高の自分を手に入れる方法
最高の自分を手に入れる方法大和 金太郎
 
婚活の戦略「恋愛マスターのマインドセット」
婚活の戦略「恋愛マスターのマインドセット」婚活の戦略「恋愛マスターのマインドセット」
婚活の戦略「恋愛マスターのマインドセット」大和 金太郎
 
恋愛の悩み解決講座:テーマ「結婚」 先生:ぐっどうぃる博士
恋愛の悩み解決講座:テーマ「結婚」 先生:ぐっどうぃる博士恋愛の悩み解決講座:テーマ「結婚」 先生:ぐっどうぃる博士
恋愛の悩み解決講座:テーマ「結婚」 先生:ぐっどうぃる博士schoowebcampus
 

Destaque (20)

C# linq入門 意図編
C# linq入門 意図編C# linq入門 意図編
C# linq入門 意図編
 
ORと経済学の「結婚」問題
ORと経済学の「結婚」問題ORと経済学の「結婚」問題
ORと経済学の「結婚」問題
 
Dslからのコードジェネレーションで楽々play開発
Dslからのコードジェネレーションで楽々play開発Dslからのコードジェネレーションで楽々play開発
Dslからのコードジェネレーションで楽々play開発
 
文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox
 文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox 文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox
文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox
 
学ばないDSL
学ばないDSL学ばないDSL
学ばないDSL
 
DSLによる要求獲得でスーパーアジャイル
DSLによる要求獲得でスーパーアジャイルDSLによる要求獲得でスーパーアジャイル
DSLによる要求獲得でスーパーアジャイル
 
恋人がいない30代前半女性が5年以内に結婚できる確率は17.6%【アラサー未婚女性へ】
恋人がいない30代前半女性が5年以内に結婚できる確率は17.6%【アラサー未婚女性へ】恋人がいない30代前半女性が5年以内に結婚できる確率は17.6%【アラサー未婚女性へ】
恋人がいない30代前半女性が5年以内に結婚できる確率は17.6%【アラサー未婚女性へ】
 
RubyでDSL
RubyでDSLRubyでDSL
RubyでDSL
 
DSLについて語るときに僕の語ること
DSLについて語るときに僕の語ることDSLについて語るときに僕の語ること
DSLについて語るときに僕の語ること
 
Twitter API最新事情 - API Meetup Tokyo #1 #apijp
Twitter API最新事情 - API Meetup Tokyo #1 #apijpTwitter API最新事情 - API Meetup Tokyo #1 #apijp
Twitter API最新事情 - API Meetup Tokyo #1 #apijp
 
SI屋のためのF# ~DSL編~
SI屋のためのF# ~DSL編~SI屋のためのF# ~DSL編~
SI屋のためのF# ~DSL編~
 
この人と結婚していいの?を読んで
この人と結婚していいの?を読んでこの人と結婚していいの?を読んで
この人と結婚していいの?を読んで
 
DSLの過去と未来
DSLの過去と未来DSLの過去と未来
DSLの過去と未来
 
全角チルダ問題
全角チルダ問題全角チルダ問題
全角チルダ問題
 
地獄のElixir(目黒スタートアップ勉強会)
地獄のElixir(目黒スタートアップ勉強会)地獄のElixir(目黒スタートアップ勉強会)
地獄のElixir(目黒スタートアップ勉強会)
 
婚活偏差値ランキングと傾向と対策
婚活偏差値ランキングと傾向と対策婚活偏差値ランキングと傾向と対策
婚活偏差値ランキングと傾向と対策
 
最高の自分を手に入れる方法
最高の自分を手に入れる方法最高の自分を手に入れる方法
最高の自分を手に入れる方法
 
婚活の戦略「恋愛マスターのマインドセット」
婚活の戦略「恋愛マスターのマインドセット」婚活の戦略「恋愛マスターのマインドセット」
婚活の戦略「恋愛マスターのマインドセット」
 
Techoyaji
TechoyajiTechoyaji
Techoyaji
 
恋愛の悩み解決講座:テーマ「結婚」 先生:ぐっどうぃる博士
恋愛の悩み解決講座:テーマ「結婚」 先生:ぐっどうぃる博士恋愛の悩み解決講座:テーマ「結婚」 先生:ぐっどうぃる博士
恋愛の悩み解決講座:テーマ「結婚」 先生:ぐっどうぃる博士
 

Semelhante a SimpleModeler

クラウド・アプリケーション・モデリングへのアプローチ
クラウド・アプリケーション・モデリングへのアプローチクラウド・アプリケーション・モデリングへのアプローチ
クラウド・アプリケーション・モデリングへのアプローチTomoharu ASAMI
 
[JavaOne Tokyo 2012] JavaFX and Web Integration
[JavaOne Tokyo 2012] JavaFX and Web Integration[JavaOne Tokyo 2012] JavaFX and Web Integration
[JavaOne Tokyo 2012] JavaFX and Web IntegrationKazuchika Sekiya
 
Mvc conf session_3_takehara
Mvc conf session_3_takeharaMvc conf session_3_takehara
Mvc conf session_3_takeharaHiroshi Okunushi
 
19-D-2_業務システム特化型RIA「Nexaweb」
19-D-2_業務システム特化型RIA「Nexaweb」19-D-2_業務システム特化型RIA「Nexaweb」
19-D-2_業務システム特化型RIA「Nexaweb」Developers Summit
 
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireSDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireAkio Katayama
 
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Akira Inoue
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発Akira Inoue
 
Mithril - 軽量/高速なMVCフレームワーク
Mithril - 軽量/高速なMVCフレームワークMithril - 軽量/高速なMVCフレームワーク
Mithril - 軽量/高速なMVCフレームワークsairoutine
 
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介david9142
 
企業システムで使えるマイクロサービスの特長と実践 (Oracle Cloudウェビナーシリーズ: 2021年4月15日)
企業システムで使えるマイクロサービスの特長と実践 (Oracle Cloudウェビナーシリーズ: 2021年4月15日)企業システムで使えるマイクロサービスの特長と実践 (Oracle Cloudウェビナーシリーズ: 2021年4月15日)
企業システムで使えるマイクロサービスの特長と実践 (Oracle Cloudウェビナーシリーズ: 2021年4月15日)オラクルエンジニア通信
 
Web技術勉強会 第31回
Web技術勉強会 第31回Web技術勉強会 第31回
Web技術勉強会 第31回龍一 田中
 
Windows Azure ではじめる Windows ストアアプリ開発
Windows Azure ではじめる Windows ストアアプリ開発Windows Azure ではじめる Windows ストアアプリ開発
Windows Azure ではじめる Windows ストアアプリ開発Shotaro Suzuki
 
Webアプリの動的部分に着目したグレーボックス統合テストとテンプレート変数カバレッジの提案
Webアプリの動的部分に着目したグレーボックス統合テストとテンプレート変数カバレッジの提案Webアプリの動的部分に着目したグレーボックス統合テストとテンプレート変数カバレッジの提案
Webアプリの動的部分に着目したグレーボックス統合テストとテンプレート変数カバレッジの提案Kazunori Sakamoto
 

Semelhante a SimpleModeler (20)

クラウド・アプリケーション・モデリングへのアプローチ
クラウド・アプリケーション・モデリングへのアプローチクラウド・アプリケーション・モデリングへのアプローチ
クラウド・アプリケーション・モデリングへのアプローチ
 
[JavaOne Tokyo 2012] JavaFX and Web Integration
[JavaOne Tokyo 2012] JavaFX and Web Integration[JavaOne Tokyo 2012] JavaFX and Web Integration
[JavaOne Tokyo 2012] JavaFX and Web Integration
 
Backbone.js入門
Backbone.js入門Backbone.js入門
Backbone.js入門
 
Ajn24
Ajn24Ajn24
Ajn24
 
Mvc conf session_3_takehara
Mvc conf session_3_takeharaMvc conf session_3_takehara
Mvc conf session_3_takehara
 
19-D-2_業務システム特化型RIA「Nexaweb」
19-D-2_業務システム特化型RIA「Nexaweb」19-D-2_業務システム特化型RIA「Nexaweb」
19-D-2_業務システム特化型RIA「Nexaweb」
 
Springの今
Springの今Springの今
Springの今
 
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireSDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
 
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発
 
20200304 vuejs
20200304 vuejs20200304 vuejs
20200304 vuejs
 
Mithril - 軽量/高速なMVCフレームワーク
Mithril - 軽量/高速なMVCフレームワークMithril - 軽量/高速なMVCフレームワーク
Mithril - 軽量/高速なMVCフレームワーク
 
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
 
Ajn24
Ajn24Ajn24
Ajn24
 
Ajax basic
Ajax basicAjax basic
Ajax basic
 
企業システムで使えるマイクロサービスの特長と実践 (Oracle Cloudウェビナーシリーズ: 2021年4月15日)
企業システムで使えるマイクロサービスの特長と実践 (Oracle Cloudウェビナーシリーズ: 2021年4月15日)企業システムで使えるマイクロサービスの特長と実践 (Oracle Cloudウェビナーシリーズ: 2021年4月15日)
企業システムで使えるマイクロサービスの特長と実践 (Oracle Cloudウェビナーシリーズ: 2021年4月15日)
 
Vue入門
Vue入門Vue入門
Vue入門
 
Web技術勉強会 第31回
Web技術勉強会 第31回Web技術勉強会 第31回
Web技術勉強会 第31回
 
Windows Azure ではじめる Windows ストアアプリ開発
Windows Azure ではじめる Windows ストアアプリ開発Windows Azure ではじめる Windows ストアアプリ開発
Windows Azure ではじめる Windows ストアアプリ開発
 
Webアプリの動的部分に着目したグレーボックス統合テストとテンプレート変数カバレッジの提案
Webアプリの動的部分に着目したグレーボックス統合テストとテンプレート変数カバレッジの提案Webアプリの動的部分に着目したグレーボックス統合テストとテンプレート変数カバレッジの提案
Webアプリの動的部分に着目したグレーボックス統合テストとテンプレート変数カバレッジの提案
 

Mais de Tomoharu ASAMI

アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】
アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】
アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】Tomoharu ASAMI
 
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】Tomoharu ASAMI
 
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】Tomoharu ASAMI
 
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】Tomoharu ASAMI
 
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】Tomoharu ASAMI
 
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】Tomoharu ASAMI
 
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】Tomoharu ASAMI
 
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】Tomoharu ASAMI
 
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】Tomoharu ASAMI
 
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】Tomoharu ASAMI
 
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】Tomoharu ASAMI
 
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】Tomoharu ASAMI
 
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】Tomoharu ASAMI
 
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】Tomoharu ASAMI
 
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】Tomoharu ASAMI
 
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】Tomoharu ASAMI
 
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】Tomoharu ASAMI
 
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】Tomoharu ASAMI
 
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】Tomoharu ASAMI
 
分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】
分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】
分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】Tomoharu ASAMI
 

Mais de Tomoharu ASAMI (20)

アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】
アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】
アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】
 
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
 
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
 
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】
 
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
 
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】
 
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
 
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
 
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】
 
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
 
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】
 
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】
 
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】
 
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
 
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】
 
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
 
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】
 
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】
 
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
 
分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】
分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】
分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】
 

SimpleModeler

  • 2. 話題 SimpleModeler(+edge2.cc)で AppEngine Javaプログラム自動生成を 作っていて考えたこと クラウド・アプリケーション・アーキテクチャ オブジェクト・モデリングとクラウド・アプリケー ション DSL駆動開発とクラウド・アプリケーション
  • 5. Agile Modegramming for Cloud クラウド プラットフォーム Agile Modegramming アジャイル開発 for Cloud モデル駆動開発 テキストDSL モデルコンパイラ オブジェクト モデリング
  • 6. SimpleModeler SimpleModel用モデル・コンパイラ テキストDSL Scala DSL Scala DSL&mavenによるモデル・リポジトリ Web仕様書、Java、Grails、Google App Engine Python/Javaを生成
  • 7. ターゲットのプラットフォーム Java .NET LAMP Cloud AppEngine/Java Windows Azure AppEngine/Pyth AppFabric on Web Spring, Seaser, Windows Server PHP, Ruby on Grails AppFabric Rails, Python Django Enterprise JavaEE(SOA) Windows Server N/A AppFabric
  • 8. 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 プログラム 企画中
  • 9. 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
  • 10. Scalaについて 純粋オブジェクト指向言語+本格関数型言語 関数型言語とクラウドは相性がよいはず 静的型付+型推論 Java VM上で動作 言語仕様が複雑 その代わり浅海の体感ではJavaの3倍ぐらいの生産性 がある DSLのホスト言語として充実した機能を持っている モデル・コンパイラの実装言語として充実した機能 を持っている
  • 11. 当面はScalaを DSLプラットフォーム 使用 Scala 状況によってXtext SimpleModelerで使用 またはOsloに移行 するかもしれない 内部DSL・外部DSL Xtext Eclipse Modeling Framework 外部DSL WebSphereと近しい関係にあると思われる Oslo Windows SQL Server Modeling 外部DSL AppFabricと統合されている
  • 13. DSL駆動開発とは テキストDSLを用いたモデル駆動開発 UMLをプログラミング言語的に用いることは間違いだっ た!? テキストDSLでモデルを記述 作成効率はテキストが圧倒的に効率的 必要に応じてUMLの図を生成 モデルの視認性はUMLが上 モデルをテキストで記述する テキストDSLの実現方法 モデルをデータとして 内部DSL:ホスト言語上に構築 操作して成果物を生成する 外部DSL:スクラッチで言語を作成
  • 14. 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、 …)
  • 15. モデル駆動開発&コンポーネント 分析 設計 実装 DSL 自動生成 コンポーネント OO分析 OO設計 OO実装 コンポーネント DSL 自動生成 コンポーネント DSL 自動生成 コンポーネント OO分析 OO設計 OO実装 コンポーネント
  • 16. フレームワーク vs 自動生成 アプリケーション アプリケーション DSL アプリケーション 自動生成 定義ファイル 定義ファイル フレームワーク フレームワーク Google App Engine Google App Engine フレームワーク 自動生成 アプローチ アプローチ
  • 17. DSL駆動開発で達成したいこと(1) プログラムの自動生成 契約 コンポーネントの自動生成 雛形の自動生成 One Source Multi Use (OSMU) AppEngine, Azure, JavaEE(SOA) モデルの再利用 アーキタイプ
  • 18. DSL駆動開発で達成したいこと(2) モデルの見える化 仕様書自動生成 マルチ・ビュー自動生成 追跡性(tracability) このユースケースで更新しているエンティティは何か このエンティティを更新しているユースケースは何か メトリクス モデル検証 テスト ユースケース→テスト・シナリオ 契約→コンポーネント・テスト プロジェクト管理の土台 ユースケース駆動 見積もり
  • 19. 考えないといけないこと UI 現実世界 (ドメイン・モデル) サービス ア ー データ 開発 キ ( 変換+ プログラミング) テ ク インテグレーション チ やりたいこと ャ イベント/リアクティブ (ユースケース・モデル) サービス・バス クラウド・アプリケーションも クラウド・アプリケーションの クラウド・アプリケーションの 記述できるPIM クラウドアプリケーションに クラウドアプリケーション 開発手法 クラウドアプリケーション アーキテクチャ・要素技術 対応した問題空間PIM 開発手法 解決空間PIM クラウドアプリケーション PSM PIM(Platform Independent Model) PSM(Platform Specific Model)
  • 20. クラウド・アプリケーション・アーキテクチャ 論理層の観点から サーバ側では、 GUIが使用する サービスを提供する。 クライアントはWebブラウザ上で 動作するHTML5で本格的なGUI プレゼンテーション層 を構築する。 クラウド・アプリケーション クライアント側 サーバ側 アプリケーションの論理的な構成は 従来のものと変わらない プレゼンテーション層 HTML5 サービス ビジネス層 ドメイン層 プレゼンテーション層はWeb指 統合層 アクセス方式1: RDBMS 向のMVC2ではなく、 クライアント ACID特性を要求されるデータはRDBMSに アクセス方式4: 手続き呼出し /サーバ時代のGUIに回帰する。 格納する。 性能特性、 障害特性がローカル の手続き呼び出しよりも脆弱 。 アクセス方式5: メッセージング 統合層 分散環境での連携に適応する特性をもつ。 RDBMS メッセージ・キュー アクセス方式2: KVS KVS 一般のデータはKVSに格納するのが望ましい 。 サービス REST サービス アクセス方式3:REST Webページを手繰って情報を取得する サービス
  • 21. クラウド・アプリケーション・アーキテクチャ の例 マスターデータなど更新頻度が低いデータは KVSで配布して直接参照する 。 結果を直接知りたい場合には 、 手続き呼 KVS び出しで同期型の連携を行う。 この形式の連携を行うとスケーラビリティが 低くなる。 プレゼンテーションの段階でできることをや っておくと 、 スケールアウトの効果によって クラウド・アプリケーション スケーラビリティが高まる 。 外部サービスからRESTを用いて情報を取 得するのが典型的な利用方法 。 サービス利用の主力はメッセージである 。 プレゼンテーション サービス サービス この形式の連携を行うとスケールアウトに よってスケーラビリティを確保できる。 サービス バックエンドのサービス群もメッセージによ メッセージ・キュー REST って連携 。 サービス メッセージ・キュー 同期通信 サービス メッセージ送信 メッセージ配信 KVS RDBMS データベースをアクセスするスコープは サービスに閉じておくのがよい 。 KVSとRDBMSを適材適所で使い分ける 。 可能であればKVSを使うのが望ましい 。
  • 22. 想定アーキテクチャ(最近考えていること) Web GUI UI Facade Service Component (HTML5) Service Reactive Framework Integration Framework Service Bus
  • 24. オブジェクト・モデルの構成 状態機械モデル ステートマシーン図 ユースケースを現実化したものがコミュニケーショ ン図/シーケンス図、 コミュニケーション図/シーケン オブジェクト図/クラス ス図を利用者の視点によるシステムの利用事例と 図、 コミュニケーション して抽象化したものがユースケース 図/シーケンス図に登 場するオブジェクトの 状態遷移を記述 ユースケース図 コミュニケーション図 オブジェクト図 ユースケース (利用事例) クラス図をインスタンス 化(実体化)したものが オブジェクト図 コミュニケーション図を時間 軸の側面から記述したもの シーケンス図 クラス図 オブジェクト図上でコラ がシーケンス図 ボレーション(メッセー ジの送受信の集まり) を記述したものがコミュ ニケーション図 協調モデル 静的構造モデル
  • 25. SimpleModeling全体像 ドメイン・モデル 要求モデル システム・モデル 設計モデル 用語 事実 契約 自然言語 規則 契約 ユースケース 宣言モデル 拡張 静的モデル 利用 動的モデル 変換 コラボレーション コラボレーション 動的モデル 動的モデル アプリケ ーション・ 同期 機能モデル 変換 具体化 モデル サービス契約 静的モデル 静的モデル データフロー図 クラス図 クラス図 オブジェクト・ OCL 同期 操作 操作 モデル OCL OCL クラス図 クラス図 クラス図 静的モデル 変換 静的モデル 具体化 静的モデル ドメイン・ モデル 動的モデル 張 拡 化 体 具 ルール・モデル 宣言モデル 変換 宣言モデル ビジネス・ルール ビジネス・ルール
  • 26. SimpleModelingモデル変換 業務モデル ドメイン・モデル 要求モデル システム・モデル 設計モデル 実装 静的構造 エンティティ ドメイン層 ドメイン層 抽出 具体化 格納 現実世界 データベース ドメイン・モデル 抽出 コントロール アプリケーション層 アプリケーション層 ボキャブラリ 詳細化 実現 動的モデル 具体化 文脈 ユースケース 具体化 利用事例 バウンダリ プレゼンテーション層 プレゼンテーション層 操作 やりたいこと エンド・ユーザ アプリケーション・モデル
  • 27. クラウドの要件とモデリング技法 エンティティ・モデル データベース選択 データ種別 データ分割 ユースケース・モデル サービス分割 アクセス法解析 責務抽出 非同期処理 コラボレーション 顧客要求
  • 28. SimpleModelerでの対応方針 状態機械モデル DSLで記述。 ステートマシーン図 自動生成。 ユースケースを現実化したものがコミュニケーショ ン図/シーケンス図、 コミュニケーション図/シーケン オブジェクト図/クラス ス図を利用者の視点によるシステムの利用事例と 図、 コミュニケーション して抽象化したものがユースケース 図/シーケンス図に登 場するオブジェクトの 状態遷移を記述 ユースケース図 コミュニケーション図 オブジェクト図 ユースケース (利用事例) ユースケース、サービスをDSLで記述。 クラス図をインスタンス 化(実体化)したものが ユースケースからサービスまではモデル検証。 オブジェクト図 サービス契約からコンポーネントの 骨組みを自動生成。 コミュニケーション図を時間 軸の側面から記述したもの シーケンス図 クラス図 オブジェクト図上でコラ DSLで記述。 がシーケンス図 ボレーション(メッセー ジの送受信の集まり) を記述したものがコミュ ニケーション図 自動生成。 協調モデル 静的構造モデル
  • 29. One Source Multi Use PIM JavaEE Grails JAX-WS Ruby on Rails AppEngine Azure JAX-RS Python Django SCA … Service Bus Integration Framework (Data Flow?)
  • 30. SimpleModeler & AppEngine Java Web UI サービス エンティティ
  • 31. Web UI Web MVC→Web GUI HTML5/CSS3 REST/JSON GWT2 GWT-RPC HTML4/jQuery REST/JSON
  • 33. サービス/コンポーネントの生成 完全自動生成 コンポーネント本体 実装 雛形生成 <<abstract>> サービス契約 <<abstract>> 外部リソース <<abstract>> プロトコル リソース コンポーネント本体 ファサード アダプタ 変化点 リソース <<abstract>> AtomPub JSON XML WS-* CSV アダプタ 外部リソース 変化責務 実装 変化責務 実装
  • 34. 動的モデルの記述と実装 手続き 関数(宣言) 状態機械 モデル サービスの挙動を モデルを作る 期待度大 適切なモデルで記述 のが難しい 変換は 変換! かなり難しい イベント 状態 イベント イベント 状態 状態 実行時は 状態機械 ガード 状態機械 ガード 状態機械 ガード 状態機械ベースの リアクティブシステム アクション アクション アクション 実装
  • 36. SimpleModelerが生成するレコード 共通属性 作成日時、更新日時 論理更新、楽観ロックなど AtomPub 自己記述的 スキーマバージョン スキーマエボリューション スキーマメタデータ レコードのメタデータをインスタンスごとに持つ 更新ログ 論理更新、論理削除 append-only AtomPubフィールド対応
  • 37. メタ・モデル <<usecase>> UseCase <<service>> Usage <<actor>> <<event>> <<resource>> Actor Event Resource <<service>> <<powertype>> Service Powertype <<rule>> Rule
  • 38. メタ・モデルのインスタンス サ ビ ・シ テ 外 ー ス ス ム ア ター 務 ス ム 物 ク と業 シ テ の 語 に る ブ ェクト あ オ ジ イ ン 参 す ア ター ベ トに 加 る ク サ ビ ・シ テ が 理 ー ス ス ム 管 して る ブ ェクト い オ ジ 業 ユ ス ー の ー 中 務 ー ケ ス フロ の で 業 タス 実 に って 務 クの 行 よ ドメイン サ ビ ・シ テ と対 す ス ップ ー ス ス ム 話 る テ イ ン 発 す ベ トが 生 る アクター 登 人 場 物 業 ユ ス ー 務 ー ケ ス 業 タス ア 務 クを クターと 道具 サ ビ ・シ テ の 話 ー ス ス ム 対 として 体 具 化 脚本 リソース 業 タス 務 ク イ ン ベ ト 状 機 態 械 出 事 来 物語 イ ン よて 態 ベ トに っ 状 が シ テ ・ユ ス ー ス ム ー ケ ス 遷 す 移 る シ テ ・タス ス ム ク サ ビ ー ス サ ビ ・シ テ 上 ース ス ム イベ トに って 新 照 ン よ 更 (+参 ) で 生 るベ ト 発 す イ ン され リソ ス る ー アクター ー ス ス ム 物 とサ ビ ・シ テ の 語
  • 39. 関連 <<aggregate>> 関連の種類 関連(association) 集約 (aggregation) 合成 (composition) whole-partの合成 多重度 1, 0..1(?), 1..N(+), 0..N(*) DataStore Id Key, String, Long 物理ID、論理ID エンティティ参照 物理ID、論理ID 自動採番、手動採番 物理更新、論理更新 物理削除、論理削除 <<part>> unary、binary リンク参照、Query参照 キャッシュ有無 トランザクション 気にしない、BASE、ACID
  • 40. EntityとValue Object(document) 間の転記 <<document>> DD顧客購入依頼文書 <<actor>> 日時: DateTime DEA顧客 顧客番号: DVI顧客番号 <<event>> 顧客番号: DVI顧客番号 商品番号: DVI商品番号 DEE顧客購入 顧客名: PartyName 1...N 価格: Money 顧客取引番号: DVI顧客取引番号 個数: XUnsignedInt 日時: DateTime 顧客番号: DVI顧客番号 <<item>> DEI顧客購入商品明細 <<document>> DD顧客購入結果文書 顧客取引番号: DVI顧客取引番号 <<actor>> 顧客取引番号: DVI顧客取引番号 商品番号: DVI商品番号 DER商品 日時: DateTime 明細番号: ItemNo 商品番号: DVI商品番号 顧客番号: DVI顧客番号 価格: Money 商品名: DVN商品名 顧客名: PartyName 個数: XUnsignedInt 在庫数: XUnsignedInt 商品番号: DVI商品番号 商品名: DVN商品名 1...N 価格: Money 個数: XUnsignedInt
  • 41. 同期write + 非同期ログwrite + 管理情報cache /customer/c11/update-async?name=ABC_Taro アプリケーション ② Web ① Customer (Servlet) ブラウザ ⑤ ④ ③ TaskQueue ⑥ /_system/event/log アプリケーション 処理結果 (Servlet) ログ ⑦ memcache ⑨ /_system/flush ⑩ アプリケーション Customer Cron ⑧ (Servlet) 管理情報
  • 42. 非同期write /customer/c11/update-async?name=ABC_Taro アプリケーション Web ① (Servlet) ブラウザ ③ ② TaskQueue ④ ⑤ Customer /customer/c11/update?name=ABC_Taro アプリケーション (Servlet) ⑦ 処理結果 ⑥ ログ memcache ⑨ /_system/flush ⑩ アプリケーション Customer Cron ⑧ (Servlet) 管理情報
  • 43. powertype/区分コード <<actor>> <<powertype>> DEA顧客 DP料金区分 無料 エントリ プロフェッショナル DD顧客 DEA顧客 DP料金区分 ID 12345 ID 12345 ID 料金区分名 updated 名前 山田太郎 名前 山田太郎 1 無料 2008-10-10 料金区分 3 料金区分 3 2 エントリ 2008-10-10 料金区分 料金区分 プロ プロ 3 プロフェッショナル 2009-05-05 _料金区分名 _料金区分名 料金区分 2009-03-03 _updated
  • 44. モデルとレコード 1..* <<actor>> <<event>> <<part>> <<resource>> DEA注文 DEE注文 DEP注文詳細 DER商品 DEA顧客 DEE注文 DER商品 ID 12345 ID 1234567 ID 商品_名前 価格 updated 名前 山田太郎 発効日 山田太郎 135 みかん 100 2009-05-05 updated 2009-03-03 顧客 23456 246 りんご 80 2009-05-05 顧客_名前 山田太郎 369 ぶどう 120 2009-05-05 DEP注文詳細 ID 商品 商品_名前 価格 個数 1 135 みかん 100 5 注文詳細 2 246 りんご 80 3 3 369 ぶどう 120 8 updated 2009-09-09
  • 45. スキーマ・エボリューション(課題) スキーマ V1 スキーマ V2 スキーマ V3 生成 スキーマ V1 スキーマ V1 レコード ハンドラ スキーマ V3 スキーマ V2 スキーマ V2 エンティティ ハンドラ レコード アプリケーション スキーマ V3 ハンドラ スキーマ V3 レコード
  • 48. 諸元 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
  • 49. デモ手順 Groovy/Spring/Hibernate Grails CSV ③ Google App Engine Python/Django/Dojo Toolkit 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仕様書
  • 53. SimpleModelerデモ ②マインドマップ→Scala DSL(SimpleModelリポジトリ) $ simplemodeler –project demo $ cd demo $ simplemodeler –import ../demo.csv –import.package:com.demo $ mvn compile
  • 54. 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
  • 56. 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
  • 58. 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アップロード
  • 61. 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
  • 64. 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) }
  • 67. 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> }