Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

ジェネレーティブプログラミングの世界

5.573 Aufrufe

Veröffentlicht am

Veröffentlicht in: Technologie
  • Login to see the comments

ジェネレーティブプログラミングの世界

  1. 1. 2014/2/15(土) 第29回 IT勉強宴会in名古屋 ジェネレーティブプログラミング の世界 PHPメンターズ 久保敦啓 (KUBO Atsuhiro)
  2. 2. 久保敦啓 (KUBO Atsuhiro) ● Twitter @iteman ● GitHub https://github.com/iteman ● 株式会社アイテマン ● PHPメンターズ ● Piece Framework ● 関西IT勉強宴会 Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  3. 3. PHPメンターズ ● PHPプログラマーを対象とするサービス – – ● トレーニング、技術サポート、メンタリング プログラミング道場 メンター – 久保敦啓 @iteman – 後藤秀宣 @hidenorigoto Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  4. 4. PHPメンターズ ● Twitter @phpmentors ● GitHub https://github.com/phpmentors-jp ● Webサイト・ブログ http://phpmentors.jp/ Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  5. 5. Piece Framework ● PHPフレームワーク、ツール – MakeGood – Stagehand_TestRunner – Stagehane_FSM ... ● オープンソースソフトウェア ● Piece Project Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  6. 6. Piece Framework ● Twitter @piece_framework ● GitHub https://github.com/piece Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  7. 7. ジェネレーティブプログラミング (GP: Generative Programming) Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  8. 8. ジェネレーティブプログラミング ● ● ソフトウェアシステムファミリのモデリングに 基づくソフトウェア工学のパラダイム[1] 与えられた特定の要求仕様を元に、構成の知識 を生かし、再利用可能な基本部分を使って、カ スタム化かつ最適化された中間または最終製品 を自動的に生成[1] Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  9. 9. 従来のソフトウェア開発 Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  10. 10. Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  11. 11. ジェネレーティブプログラミング に基づくソフトウェア開発 Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  12. 12. Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  13. 13. ドメイン ● ● 知識、影響、または活動の領域[2] 限定されたエリア、もしくは関心のある領域 [4] ● 知識分野[1] ● 例:販売管理システム、状態マシン Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  14. 14. ドメインの相互関係 ● ドメインは一般的に複数のドメインから構成される ● 例:販売管理システムのドメイン – – ● 売上、在庫、仕入、… Webアプリケーション、データベース、… 相互関係の種類:[1] – 包含(サブドメイン) – 使用(サポートドメイン) – 類似(類似ドメイン) Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  15. 15. 問題ドメイン(problem domain) ● 問題領域、アプリケーションドメイン(application domain)、問題空間(problem space) ● ユーザー(ドメインエキスパート含む)の活動領域 ● ドメイン知識(domain knowledge) ● 成果物:問題ドメインモデル ドメインの定義、ドメイン辞書、概念モデル、ユース ケースモデル、… Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  16. 16. ドメイン知識(domain knowledge) ● ● ● ● ユーザーの関心が寄せられている知識の体系 [4] 分析するビジネスを構成するプロセス、エン ティティ、そして制約[3] 実践者によって共通に理解される概念と用語の 集まり[1] その分野のソフトウェアシステム(またはシス テムの一部)の構築に関する知識[1] Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  17. 17. 解決ドメイン(solution domain) ● ● ● ● 解決領域、解決空間(solution space) ソフトウェアに関わる人間(主に開発者)の活 動領域 実装者の関心が中心になるが、システムユーザ にとってもその界面部分は関心事項[4] 成果物:解決ドメインモデル アーキテクチャ、基本コンポーネント、フレーム ワーク、ドメイン特化言語、… Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  18. 18. Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  19. 19. ドメインモデル “ドメインモデルとは特定の図ではなく、図が 伝えようとしている考え方である。これはドメ インエキスパートの頭の中にある単なる知識で はなく、その知識が厳密に構成され、選び抜か れて抽象化されたものなのだ。” ー『エリック・エヴァンスのドメイン駆動設 計』[2] Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  20. 20. ドメインモデル “事業を眺めて、事業を要約する。こういう書 きかたでは、絶対にモデルにならない。なぜ か。「解釈」のほうが先を歩いているからだ。 モデルは、「論理」によって、つまり論理規則 によって、構成をととのえていなければならな い。” ー 佐藤正美さんのツイート https://twitter.com/satou_masami/status/384687177302437889 Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  21. 21. ドメインモデル ● ● ● 問題ドメインのドメイン知識を入力とし、解決 ドメインにおいて構成された抽象 モデリング(モデル化、モデル制作)による成 果物 論理規則によって形式化されるのが望ましい Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  22. 22. ドメイン特化言語 ● DSL: Domain-Specific Languages ● ドメイン固有言語、アプリケーション固有言語 ● ● ● 特定の問題に焦点を当てたプログラミング言語 [3] 特定のドメインの特定のモデル用にあつらえたプ ログラミング言語[4] ドメイン知識をユーザーのニーズに合わせた詳細 レベルで記述するための言語 Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  23. 23. Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  24. 24. ドメイン特化言語 “ドメイン固有言語は、システムファミリの具 体的なメンバを「発注」するのに使い、ゆえに ジェネレーティブプログラミングにおいて重要 な役割を果たします。” ー『ジェネレーティブプログラミング』[1] Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  25. 25. 意図性(Intentionality) "意図的な記述は、何が必要なのかを直接かつ 明確に示し、余計ながらくたや不要な実装の詳 細を避けます。これらは、理解しやすさ、分析 しやすさ、修正しやすさ、保守のしやすさなど の、良いコードが持つすべての属性を備えてい ます。ドメインに固有な表記法により、意図性 を達成します。" ー『ジェネレーティブプログラミング』[1] Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  26. 26. グラフィカルDSL Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  27. 27. テキストDSL ... PHPMentorsTrainingCourseRegistrationDomainDataRegistration: getters: paymentMethod: - NotBlank: { message: "選択してください" } lastName: &mandatoryText - NotBlank: &notBlankText message: "入力してください" - MaxLength: &maxLengthText limit: 255 message: "{{ limit }} 文字以下で入力してください" firstName: *mandatoryText email: - NotBlank: *notBlankText - Email: { message: "正しいメールアドレスを入力してください" } .. Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  28. 28. ジェネレーター ● ● ● ソフトウェア部品の高レベルな仕様から、その 実装を生成するプログラム[1] ドメイン特化言語で記述されたドメイン知識を 解決ドメインモデルの組み合わせに変換するプ ログラム 実行可能な形式(オブジェクト、バイトコー ド)やソースコード、その他の形式を生成 Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  29. 29. Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  30. 30. ドメイン工学 ● ● 特定のドメインのシステムまたはシステムの一部の構築に関 する過去の経験を再利用可能な資産として集めて、まとめ て、蓄積すること[1] SCV – スコープ(scope) – 共通性(commonality) – 可変性(variability) – ドメイン間の関係(relationship)、SCV + R[4] ● システムファミリ ● マルチパラダイムデザイン[4]はドメイン工学の一形態 Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  31. 31. ドメインスコープ ● 垂直ドメイン(vertical domain) 単一システムドメイン、アプリケーションドメイン 例:販売管理システム ● 水平ドメイン(horizontal domain) システムカテゴリドメイン 例:状態マシン Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  32. 32. 共通性、可変性 ● ● 分析の形式[4] ほとんどすべての設計手法の根底に存在する直 観的な概念[4] ● 人間の思考が抽象を生み出すやり方の本質[4] ● システムファミリの共通部分と可変部分 Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  33. 33. システムファミリ ● ● ● ● ソフトウェアファミリ 共通な資産から作るに十分な特徴を共有するシステ ム集合[1] 構造(structure)、名前(name)、振る舞い (behavior)といった評価基準に基づいて、データ 構造と機能(function)をグルーピングされた、何 らかの関連性を持つグループ[4] 構造化プログラミングの提唱者であるダイクストラ (Dijkstra)を起源とする概念 Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  34. 34. ドメイン工学 に基づくソフトウェア開発 Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  35. 35. ドメイン工学に基づくソフトウェア開発 ー『ジェネレーティブプログラミング』[1] Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  36. 36. ドメイン工学+ドメイン駆動設計 Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  37. 37. Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  38. 38. ジェネレーティブプログラミング に基づくソフトウェア開発 Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  39. 39. Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  40. 40. 関連パラダイム ● インテンショナルプログラミング(Intentional Programming) ● ジェネレーティブプログラミング(GP: Generative Programming) ● ソフトウェアファクトリ(Software Factories) ● ソフトウェアプロダクトライン(SPL: Software Product Lines) ● ドメイン特化モデリング(DSM: Domain Specific Modeling) ● ドメイン特化言語(DSL: Domain-Specific Languages) ● ドメイン駆動設計(DDD: Domain-Driven Design) ● マルチパラダイムデザイン(Multi-Paradigm Design) ● メタプログラミング(Metaprogramming) ● モデル駆動開発(MDD: Model Driven Development) ● 宣言的プログラミング(Declarative Programming) ● 言語ワークベンチ(Language Workbenches) ● 言語指向プログラミング(LOP: Language-Oriented Programming) Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
  41. 41. 参考文献 1. クシシュトフ・チャルネッキ、ウールリシュ・W・アイセンアッカー 著/津田 義史、今関 剛、朝比奈 勲 訳『ジェネレーティブプログラミング』翔泳社、2008(原著 Krzysztof Czarnecki, Ulrich Eisenecker, “Generative Programming: Methods, Tools, and Applications”, Addison-Wesley Professional, 2000) 2. エリック・エヴァンス 著/今関 剛、和智 右桂、牧野 祐子 訳『エリック・エヴァンスのドメイン駆動 設計』翔泳社、2011(原著 Eric Evans, "Domain-Driven Design: Tackling Complexity in the Heart of Software", Addison-Wesley Professional, 2003) 3. Debasish Ghosh 著/佐藤 竜一 訳『実践プログラミングDSL』翔泳社、2012(原著 Debasish Ghosh, "DSLs in Action", Manning Publications, 2010) 4. ジェームス・O・コプリン 著/平鍋 健児、金澤 典子、羽生田 栄一 訳『新装版マルチパラダイムデ ザイン』ピアソン・エデュケーション、2009(原著 James O. Coplien, “Multi-Paradigm Design for C++”, Addison-Wesley Professional, 1998) 5. Magnus Christerson, Henk Kolk, "Domain Expert DSLs", 2008, http://www.slideshare.net/deimos/magnus-christerson-henk-kolk-domain-expert-ds-ls Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.

×