クラウド時代のアプリケーション開発について、「クラウド・アプリケーション・モデリング」、「クラウド・アプリケーション開発のモデル体系」と考察してきました。
クラウド・アプリケーション開発では、実装時のプログラミングで「関数」が重要な構成要素となってきています。そうなると、この「関数」を上流のモデリングでどのように扱っていくのかということが重要な論点になります。
このような観点から、上流のモデリングから実装時のOFP(Object-Functional Programming)まで、オブジェクトと関数を融合させ一気通貫にまとめた開発方法論をModegramming StyleではObject-Functional Analysis and Design(OFAD)と呼んでいます。
Modegramming Styleでは2012年ぐらいからOFADについて考察を進めてきました。クラウド・アプリケーションのモデリングの検討を進めていく上で、OFADが一つの軸となると思います。このOFADについて、2012年に要求開発アライアンスでのセッション『Object-Functional Analysis and Design: 次世代モデリングパラダイムへの道標』向けにまとめたものがあります。
今回はこの2012年版OFADのふりかえりを行い、検討を進めていくうえでの論点整理を行いたいと思います。
Object-Functional Analysis and Design 2012
クラウド・アプリケーションの開発方法論を整備していくためには「関数」を理解した上で、関数とオブジェクトの関係を整理しないといけないという動機もあり、OFPの有力言語であるScalaを2008年から使い始めました。
ある程度「関数」とOFPについて勘所がつかめてきたところで、2012年に『Object-Functional Analysis and Design: 次世代モデリングパラダイムへの道標』というセッションのタイミングで一度まとめるタイミングがありました。
このセッションの内容は以下にまとまっています。
- Object-Functional Analysis and Design: 次世代モデリングパラダイムへの道標
- Object-Functional Analysis and Design まとめ
- Object-Functional Analysis and Design まとめのまとめ
また関連して以下のような考察を行っています。
- 関数型言語の技術マップ (最新版: 関数型プログラミング技術マップ2015)
- オブジェクト・モデリングのボトルネック
- 代数的構造デザインパターン
- 圏論デザインパターン
- オブジェクトと関数の連携(1)
- オブジェクトと関数の連携(2)
- オブジェクトと関数の連携(3)
- データフローの実装技術
- 関数型とデータフロー(1)
- 関数型とデータフロー(2)
- 関数型とデータフロー(3)
- 関数型とデータフロー(4)
- DSL駆動によるクラウド・アプリケーション開発
- OFADの要素技術/関連技術
- DSL指向プログラミング
- Domain-Driven Design (DDD)
- オブジェクトの世界と関数の世界
- EDAとオブジェクトと関数
- メタモデル
- DCI (Data Context Interaction)
- CQRS, EDA
- 関数型とデータフロー(5)
ふりかえり
今の目でOFAD 2012をチェックしてみましたが、それほど違和感はなく、以下の基本的な考え方については変更はありませんでした。
- オブジェクトと関数の使い分け
- オブジェクトと関数の連携
- デザインパターン(代数的構造、圏論)
- Domain-Driven Design (DDDD)
ただ、オブジェクトと関数の連携方法は2012年当時よりも手持ちの選択肢が増えたと思うので、その辺りは反映していきたいところです。
このタイミングで再検討したいのが以下の項目です。Reactive Streamsを始め、2012年以降、要素技術が大きく進化しているのでこれらの技術を取り込んだ上で新しい枠組みで考えてみたいと思います。
- DSL
- データフロー
以下のアーキテクチャ的な話題については2012年以降、特に大きな動きはなかったと思います。これらについてはOFADの再検討の中で対応を考えていきたいと思います。
- EDA
- DCI
- CQRS
OFAD 2012以降の技術動向
OFAD 2012以降に起きた技術的な大きなムーブメントとしては以下の2つがあります。後者は我々の提案ですが、最近注目されているServerless Architectureに通じるところがあると思います。
- Reactive Streams
- Application Cloud Platform
Reactive Streams
より広い枠組みとしてはFunctional Reactive Programming(FRP)という切り口もありますが、Reactive Streamsの方が現状にあっていると思うのでReactive Streamsの用語を使います。
Modegramming Styleではscalaz-streamを中心にReactive Streamsについても考察を行ってきました。
- Scala的状態機械/FP編
- [scalaz-stream]シーケンス番号とエンドマーク
- [scalaz-stream]ストリーミングで状態機械
- [FP]パイプライン・プログラミング
- State的状態機械2016
また幾つかのセッションでお話させていただいたのでスライドとしてもまとめました。
- Monadic Programmingのススメ - Functional Reactive Programmingへのアプローチ (QConTokyo 2015)
- Scalaz-StreamによるFunctional Reactive Programming (Reactive System Meetup in 西新宿)
純粋な数学的な計算はよいとして、システムの振る舞いをFunctional Programming(FP)でどのように記述するのかという点がFP実用化の重要な論点だと思いますが、モナドベースのReactive Streamsが一つの解としてブレークスルーの起点となりそうです。
そのような意味でOFADでの関数を考える上でReactive Streamsは重要な論点になります。
分析モデルの段階で、Reactive Streamsに対応するモデル要素を見つけることができればモデルから実装まで一気通貫でつなげるルートを確保することができます。
Application Cloud Platform
OFAD 2012の後、クラウド時代のアプリケーション開発ではクラウド・プラットフォームが重要な構成要素になると考え、その製品化を行う活動をしてきました。その成果として「Prefer Cloud Platform」をリリースすることができました。
Prefer Cloud PlatformのようなクラウドプラットフォームをModegramming StyleではApplication Cloud Platform(ACP)と呼んでいます。Prefer Cloud Platform自体もScalaによるOFPによって実装されていますが、この開発の中でOFPに関するノウハウ、OFADに対するヒントを蓄積することができました。
またACPによってアプリケーション開発の大きな部分を省略することができることが期待できます。こうなると、モデリングの目的はビジネスとアプリケーションの連携方法の分析とシステムの拡張方法の分析設計に絞られます。このような文脈の中での開発方法論ということもクラウド時代の開発方法論であるOFADに求められる点といえます。
まとめ
「クラウド・アプリケーション・モデリング」を起点に進めている考察は『Object-Functional Analysis and Design: 次世代モデリングパラダイムへの道標』によって始動したOFAD 2012を最新技術動向やApplication Cloud Platform(ACP)の活用を前提に、2016年版OFADとして再構築を行うという目的のものです。
この検討を進めるためのベースとしてOFAD 2012を簡単にふりかえり、論点整理を行いました。
このフィードバックを活かして、次回はOFADのモデル体系について考えてみたいと思います。
お知らせ
10月24日に開催される「QCon Tokyo 2016」で以下のテーマでお話させていただくことになりました。
- オブジェクト‐関数型プログラミングからオブジェクト‐関数型分析設計へ~クラウド時代のモデリングを考える
現在検討しているOFADについてのチュートリアル的な内容になる予定です。
0 件のコメント:
コメントを投稿