SlideShare a Scribd company logo
1 of 41
Download to read offline
2014/2/15(土)
第29回 IT勉強宴会in名古屋

ジェネレーティブプログラミング
の世界
PHPメンターズ
久保敦啓 (KUBO Atsuhiro)
久保敦啓 (KUBO Atsuhiro)
●

Twitter @iteman

●

GitHub https://github.com/iteman

●

株式会社アイテマン

●

PHPメンターズ

●

Piece Framework

●

関西IT勉強宴会

Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
PHPメンターズ
●

PHPプログラマーを対象とするサービス
–
–

●

トレーニング、技術サポート、メンタリング
プログラミング道場

メンター
–

久保敦啓 @iteman

–

後藤秀宣 @hidenorigoto

Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
PHPメンターズ
●

Twitter @phpmentors

●

GitHub https://github.com/phpmentors-jp

●

Webサイト・ブログ
http://phpmentors.jp/

Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
Piece Framework
●

PHPフレームワーク、ツール
–

MakeGood

–

Stagehand_TestRunner

–

Stagehane_FSM
...

●

オープンソースソフトウェア

●

Piece Project

Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
Piece Framework
●

Twitter @piece_framework

●

GitHub https://github.com/piece

Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
ジェネレーティブプログラミング
(GP: Generative Programming)

Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
ジェネレーティブプログラミング
●

●

ソフトウェアシステムファミリのモデリングに
基づくソフトウェア工学のパラダイム[1]
与えられた特定の要求仕様を元に、構成の知識
を生かし、再利用可能な基本部分を使って、カ
スタム化かつ最適化された中間または最終製品
を自動的に生成[1]

Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
従来のソフトウェア開発

Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
ジェネレーティブプログラミング
に基づくソフトウェア開発

Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
ドメイン
●

●

知識、影響、または活動の領域[2]
限定されたエリア、もしくは関心のある領域
[4]

●

知識分野[1]

●

例:販売管理システム、状態マシン

Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
ドメインの相互関係
●

ドメインは一般的に複数のドメインから構成される

●

例:販売管理システムのドメイン
–
–

●

売上、在庫、仕入、…
Webアプリケーション、データベース、…

相互関係の種類:[1]
–

包含(サブドメイン)

–

使用(サポートドメイン)

–

類似(類似ドメイン)

Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
問題ドメイン(problem domain)
●

問題領域、アプリケーションドメイン(application
domain)、問題空間(problem space)

●

ユーザー(ドメインエキスパート含む)の活動領域

●

ドメイン知識(domain knowledge)

●

成果物:問題ドメインモデル
ドメインの定義、ドメイン辞書、概念モデル、ユース
ケースモデル、…

Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
ドメイン知識(domain knowledge)
●

●

●

●

ユーザーの関心が寄せられている知識の体系
[4]
分析するビジネスを構成するプロセス、エン
ティティ、そして制約[3]
実践者によって共通に理解される概念と用語の
集まり[1]
その分野のソフトウェアシステム(またはシス
テムの一部)の構築に関する知識[1]

Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
解決ドメイン(solution domain)
●

●

●

●

解決領域、解決空間(solution space)
ソフトウェアに関わる人間(主に開発者)の活
動領域
実装者の関心が中心になるが、システムユーザ
にとってもその界面部分は関心事項[4]
成果物:解決ドメインモデル
アーキテクチャ、基本コンポーネント、フレーム
ワーク、ドメイン特化言語、…

Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
ドメインモデル
“ドメインモデルとは特定の図ではなく、図が
伝えようとしている考え方である。これはドメ
インエキスパートの頭の中にある単なる知識で
はなく、その知識が厳密に構成され、選び抜か
れて抽象化されたものなのだ。”
ー『エリック・エヴァンスのドメイン駆動設
計』[2]

Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
ドメインモデル
“事業を眺めて、事業を要約する。こういう書
きかたでは、絶対にモデルにならない。なぜ
か。「解釈」のほうが先を歩いているからだ。
モデルは、「論理」によって、つまり論理規則
によって、構成をととのえていなければならな
い。”
ー 佐藤正美さんのツイート
https://twitter.com/satou_masami/status/384687177302437889

Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
ドメインモデル
●

●

●

問題ドメインのドメイン知識を入力とし、解決
ドメインにおいて構成された抽象
モデリング(モデル化、モデル制作)による成
果物
論理規則によって形式化されるのが望ましい

Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
ドメイン特化言語
●

DSL: Domain-Specific Languages

●

ドメイン固有言語、アプリケーション固有言語

●

●

●

特定の問題に焦点を当てたプログラミング言語
[3]
特定のドメインの特定のモデル用にあつらえたプ
ログラミング言語[4]
ドメイン知識をユーザーのニーズに合わせた詳細
レベルで記述するための言語

Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
ドメイン特化言語
“ドメイン固有言語は、システムファミリの具
体的なメンバを「発注」するのに使い、ゆえに
ジェネレーティブプログラミングにおいて重要
な役割を果たします。”
ー『ジェネレーティブプログラミング』[1]

Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
意図性(Intentionality)
"意図的な記述は、何が必要なのかを直接かつ
明確に示し、余計ながらくたや不要な実装の詳
細を避けます。これらは、理解しやすさ、分析
しやすさ、修正しやすさ、保守のしやすさなど
の、良いコードが持つすべての属性を備えてい
ます。ドメインに固有な表記法により、意図性
を達成します。"
ー『ジェネレーティブプログラミング』[1]
Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
グラフィカルDSL

Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
テキスト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.
ジェネレーター
●

●

●

ソフトウェア部品の高レベルな仕様から、その
実装を生成するプログラム[1]
ドメイン特化言語で記述されたドメイン知識を
解決ドメインモデルの組み合わせに変換するプ
ログラム
実行可能な形式(オブジェクト、バイトコー
ド)やソースコード、その他の形式を生成

Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
ドメイン工学
●

●

特定のドメインのシステムまたはシステムの一部の構築に関
する過去の経験を再利用可能な資産として集めて、まとめ
て、蓄積すること[1]
SCV
–

スコープ(scope)

–

共通性(commonality)

–

可変性(variability)

–

ドメイン間の関係(relationship)、SCV + R[4]

●

システムファミリ

●

マルチパラダイムデザイン[4]はドメイン工学の一形態

Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
ドメインスコープ
●

垂直ドメイン(vertical domain)
単一システムドメイン、アプリケーションドメイン
例:販売管理システム

●

水平ドメイン(horizontal domain)
システムカテゴリドメイン
例:状態マシン

Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
共通性、可変性
●

●

分析の形式[4]
ほとんどすべての設計手法の根底に存在する直
観的な概念[4]

●

人間の思考が抽象を生み出すやり方の本質[4]

●

システムファミリの共通部分と可変部分

Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
システムファミリ
●

●

●

●

ソフトウェアファミリ
共通な資産から作るに十分な特徴を共有するシステ
ム集合[1]
構造(structure)、名前(name)、振る舞い
(behavior)といった評価基準に基づいて、データ
構造と機能(function)をグルーピングされた、何
らかの関連性を持つグループ[4]
構造化プログラミングの提唱者であるダイクストラ
(Dijkstra)を起源とする概念

Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
ドメイン工学
に基づくソフトウェア開発

Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
ドメイン工学に基づくソフトウェア開発 ー『ジェネレーティブプログラミング』[1]

Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
ドメイン工学+ドメイン駆動設計

Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
ジェネレーティブプログラミング
に基づくソフトウェア開発

Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
Copyright (c) 2014 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
関連パラダイム
●

インテンショナルプログラミング(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.
参考文献
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.

More Related Content

What's hot

さくらのVPSに来る悪い人を観察する その2
さくらのVPSに来る悪い人を観察する その2さくらのVPSに来る悪い人を観察する その2
さくらのVPSに来る悪い人を観察する その2ozuma5119
 
Project Loom - 限定継続と軽量スレッド -
Project Loom - 限定継続と軽量スレッド - Project Loom - 限定継続と軽量スレッド -
Project Loom - 限定継続と軽量スレッド - Yuichi Sakuraba
 
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようCognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようShuto Suzuki
 
Building the Game Server both API and Realtime via c#
Building the Game Server both API and Realtime via c#Building the Game Server both API and Realtime via c#
Building the Game Server both API and Realtime via c#Yoshifumi Kawai
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ信之 岩永
 
〜僕の初めてのリアクティブプログラミング Reactor を使ってリアクティブに昇龍拳を繰り出してみた!
〜僕の初めてのリアクティブプログラミング Reactor を使ってリアクティブに昇龍拳を繰り出してみた!〜僕の初めてのリアクティブプログラミング Reactor を使ってリアクティブに昇龍拳を繰り出してみた!
〜僕の初めてのリアクティブプログラミング Reactor を使ってリアクティブに昇龍拳を繰り出してみた!Akihiro Kitada
 
ドメイン駆動設計という仕事の流儀
ドメイン駆動設計という仕事の流儀ドメイン駆動設計という仕事の流儀
ドメイン駆動設計という仕事の流儀増田 亨
 
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~normalian
 
RENDERING 最適化「禍つヴァールハイト」
RENDERING 最適化「禍つヴァールハイト」RENDERING 最適化「禍つヴァールハイト」
RENDERING 最適化「禍つヴァールハイト」KLab Inc. / Tech
 
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則現場で役立つシステム設計の原則
現場で役立つシステム設計の原則増田 亨
 
NumPyの歴史とPythonの並行処理【PyData.tokyo One-day Conference 2018】
NumPyの歴史とPythonの並行処理【PyData.tokyo One-day Conference 2018】NumPyの歴史とPythonの並行処理【PyData.tokyo One-day Conference 2018】
NumPyの歴史とPythonの並行処理【PyData.tokyo One-day Conference 2018】Atsuo Ishimoto
 
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメYoji Kanno
 
ジャストシステムJava100本ノックのご紹介
ジャストシステムJava100本ノックのご紹介ジャストシステムJava100本ノックのご紹介
ジャストシステムJava100本ノックのご紹介JustSystems Corporation
 
テストを書こう!!
テストを書こう!!テストを書こう!!
テストを書こう!!拓 小林
 
Javaバイトコード入門
Javaバイトコード入門Javaバイトコード入門
Javaバイトコード入門Kota Mizushima
 
Node.js Native ESM への道 〜最終章: Babel / TypeScript Modules との闘い〜
Node.js Native ESM への道  〜最終章: Babel / TypeScript Modules との闘い〜Node.js Native ESM への道  〜最終章: Babel / TypeScript Modules との闘い〜
Node.js Native ESM への道 〜最終章: Babel / TypeScript Modules との闘い〜Teppei Sato
 
【Unite Tokyo 2018】チームラボ × Unity ~Unityで制作するデジタルアートの世界~
【Unite Tokyo 2018】チームラボ × Unity ~Unityで制作するデジタルアートの世界~【Unite Tokyo 2018】チームラボ × Unity ~Unityで制作するデジタルアートの世界~
【Unite Tokyo 2018】チームラボ × Unity ~Unityで制作するデジタルアートの世界~UnityTechnologiesJapan002
 
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころPython におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころJunya Hayashi
 
Java Just-In-Timeコンパイラ
Java Just-In-TimeコンパイラJava Just-In-Timeコンパイラ
Java Just-In-TimeコンパイラKazuaki Ishizaki
 
北護大/FHIR 開發簡介與應用
北護大/FHIR 開發簡介與應用北護大/FHIR 開發簡介與應用
北護大/FHIR 開發簡介與應用Lorex L. Yang
 

What's hot (20)

さくらのVPSに来る悪い人を観察する その2
さくらのVPSに来る悪い人を観察する その2さくらのVPSに来る悪い人を観察する その2
さくらのVPSに来る悪い人を観察する その2
 
Project Loom - 限定継続と軽量スレッド -
Project Loom - 限定継続と軽量スレッド - Project Loom - 限定継続と軽量スレッド -
Project Loom - 限定継続と軽量スレッド -
 
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようCognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しよう
 
Building the Game Server both API and Realtime via c#
Building the Game Server both API and Realtime via c#Building the Game Server both API and Realtime via c#
Building the Game Server both API and Realtime via c#
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ
 
〜僕の初めてのリアクティブプログラミング Reactor を使ってリアクティブに昇龍拳を繰り出してみた!
〜僕の初めてのリアクティブプログラミング Reactor を使ってリアクティブに昇龍拳を繰り出してみた!〜僕の初めてのリアクティブプログラミング Reactor を使ってリアクティブに昇龍拳を繰り出してみた!
〜僕の初めてのリアクティブプログラミング Reactor を使ってリアクティブに昇龍拳を繰り出してみた!
 
ドメイン駆動設計という仕事の流儀
ドメイン駆動設計という仕事の流儀ドメイン駆動設計という仕事の流儀
ドメイン駆動設計という仕事の流儀
 
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
 
RENDERING 最適化「禍つヴァールハイト」
RENDERING 最適化「禍つヴァールハイト」RENDERING 最適化「禍つヴァールハイト」
RENDERING 最適化「禍つヴァールハイト」
 
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
 
NumPyの歴史とPythonの並行処理【PyData.tokyo One-day Conference 2018】
NumPyの歴史とPythonの並行処理【PyData.tokyo One-day Conference 2018】NumPyの歴史とPythonの並行処理【PyData.tokyo One-day Conference 2018】
NumPyの歴史とPythonの並行処理【PyData.tokyo One-day Conference 2018】
 
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
 
ジャストシステムJava100本ノックのご紹介
ジャストシステムJava100本ノックのご紹介ジャストシステムJava100本ノックのご紹介
ジャストシステムJava100本ノックのご紹介
 
テストを書こう!!
テストを書こう!!テストを書こう!!
テストを書こう!!
 
Javaバイトコード入門
Javaバイトコード入門Javaバイトコード入門
Javaバイトコード入門
 
Node.js Native ESM への道 〜最終章: Babel / TypeScript Modules との闘い〜
Node.js Native ESM への道  〜最終章: Babel / TypeScript Modules との闘い〜Node.js Native ESM への道  〜最終章: Babel / TypeScript Modules との闘い〜
Node.js Native ESM への道 〜最終章: Babel / TypeScript Modules との闘い〜
 
【Unite Tokyo 2018】チームラボ × Unity ~Unityで制作するデジタルアートの世界~
【Unite Tokyo 2018】チームラボ × Unity ~Unityで制作するデジタルアートの世界~【Unite Tokyo 2018】チームラボ × Unity ~Unityで制作するデジタルアートの世界~
【Unite Tokyo 2018】チームラボ × Unity ~Unityで制作するデジタルアートの世界~
 
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころPython におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころ
 
Java Just-In-Timeコンパイラ
Java Just-In-TimeコンパイラJava Just-In-Timeコンパイラ
Java Just-In-Timeコンパイラ
 
北護大/FHIR 開發簡介與應用
北護大/FHIR 開發簡介與應用北護大/FHIR 開發簡介與應用
北護大/FHIR 開發簡介與應用
 

Viewers also liked

Constexprとtemplateでコンパイル時にfizz buzz
Constexprとtemplateでコンパイル時にfizz buzzConstexprとtemplateでコンパイル時にfizz buzz
Constexprとtemplateでコンパイル時にfizz buzz京大 マイコンクラブ
 
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会Akihiko Matuura
 
Boostのあるプログラミング生活
Boostのあるプログラミング生活Boostのあるプログラミング生活
Boostのあるプログラミング生活Akira Takahashi
 
闇魔術を触ってみた
闇魔術を触ってみた闇魔術を触ってみた
闇魔術を触ってみたSatoshi Sato
 
覚えておきたいプログラミング作法
覚えておきたいプログラミング作法覚えておきたいプログラミング作法
覚えておきたいプログラミング作法Junya Shimazu
 
クロージャデザインパターン
クロージャデザインパターンクロージャデザインパターン
クロージャデザインパターンMoriharu Ohzu
 
Visual C++で使えるC++11
Visual C++で使えるC++11Visual C++で使えるC++11
Visual C++で使えるC++11nekko1119
 
Template Meta Programming入門から応用まで
Template Meta Programming入門から応用までTemplate Meta Programming入門から応用まで
Template Meta Programming入門から応用までyoshihikoozaki5
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードShigenori Sagawa
 
ネイティブ開発アンチパターン
ネイティブ開発アンチパターンネイティブ開発アンチパターン
ネイティブ開発アンチパターンYuki Tamura
 
Final LINQ Extensions II
Final LINQ Extensions IIFinal LINQ Extensions II
Final LINQ Extensions IIKouji Matsui
 
Final LINQ Extensions
Final LINQ ExtensionsFinal LINQ Extensions
Final LINQ ExtensionsKouji Matsui
 
Final LINQ extensions III
Final LINQ extensions IIIFinal LINQ extensions III
Final LINQ extensions IIIKouji Matsui
 
エクストリームC++11/14プログラミング
エクストリームC++11/14プログラミングエクストリームC++11/14プログラミング
エクストリームC++11/14プログラミングegtra
 
いまさら恥ずかしくてAsyncをawaitした
いまさら恥ずかしくてAsyncをawaitしたいまさら恥ずかしくてAsyncをawaitした
いまさら恥ずかしくてAsyncをawaitしたKouji Matsui
 
良質なコードを高速に書くコツ
良質なコードを高速に書くコツ良質なコードを高速に書くコツ
良質なコードを高速に書くコツShunji Konishi
 
これからの「async/await」の話をしよう
これからの「async/await」の話をしようこれからの「async/await」の話をしよう
これからの「async/await」の話をしようKouji Matsui
 
async/awaitダークサイド is 何
async/awaitダークサイド is 何async/awaitダークサイド is 何
async/awaitダークサイド is 何Kouji Matsui
 
async/await不要論
async/await不要論async/await不要論
async/await不要論bleis tift
 

Viewers also liked (20)

Constexprとtemplateでコンパイル時にfizz buzz
Constexprとtemplateでコンパイル時にfizz buzzConstexprとtemplateでコンパイル時にfizz buzz
Constexprとtemplateでコンパイル時にfizz buzz
 
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会
 
Boostのあるプログラミング生活
Boostのあるプログラミング生活Boostのあるプログラミング生活
Boostのあるプログラミング生活
 
闇魔術を触ってみた
闇魔術を触ってみた闇魔術を触ってみた
闇魔術を触ってみた
 
覚えておきたいプログラミング作法
覚えておきたいプログラミング作法覚えておきたいプログラミング作法
覚えておきたいプログラミング作法
 
クロージャデザインパターン
クロージャデザインパターンクロージャデザインパターン
クロージャデザインパターン
 
Visual C++で使えるC++11
Visual C++で使えるC++11Visual C++で使えるC++11
Visual C++で使えるC++11
 
Template Meta Programming入門から応用まで
Template Meta Programming入門から応用までTemplate Meta Programming入門から応用まで
Template Meta Programming入門から応用まで
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
 
ネイティブ開発アンチパターン
ネイティブ開発アンチパターンネイティブ開発アンチパターン
ネイティブ開発アンチパターン
 
Final LINQ Extensions II
Final LINQ Extensions IIFinal LINQ Extensions II
Final LINQ Extensions II
 
Final LINQ Extensions
Final LINQ ExtensionsFinal LINQ Extensions
Final LINQ Extensions
 
C++の黒魔術
C++の黒魔術C++の黒魔術
C++の黒魔術
 
Final LINQ extensions III
Final LINQ extensions IIIFinal LINQ extensions III
Final LINQ extensions III
 
エクストリームC++11/14プログラミング
エクストリームC++11/14プログラミングエクストリームC++11/14プログラミング
エクストリームC++11/14プログラミング
 
いまさら恥ずかしくてAsyncをawaitした
いまさら恥ずかしくてAsyncをawaitしたいまさら恥ずかしくてAsyncをawaitした
いまさら恥ずかしくてAsyncをawaitした
 
良質なコードを高速に書くコツ
良質なコードを高速に書くコツ良質なコードを高速に書くコツ
良質なコードを高速に書くコツ
 
これからの「async/await」の話をしよう
これからの「async/await」の話をしようこれからの「async/await」の話をしよう
これからの「async/await」の話をしよう
 
async/awaitダークサイド is 何
async/awaitダークサイド is 何async/awaitダークサイド is 何
async/awaitダークサイド is 何
 
async/await不要論
async/await不要論async/await不要論
async/await不要論
 

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

意図を表現するプログラミング
意図を表現するプログラミング意図を表現するプログラミング
意図を表現するプログラミングAtsuhiro Kubo
 
マイクロサービス開発が捗る Project Tye
マイクロサービス開発が捗る Project Tyeマイクロサービス開発が捗る Project Tye
マイクロサービス開発が捗る Project TyeYuta Matsumura
 
Eclipse PDT + MakeGoodによるPHPコードのテスト
Eclipse PDT + MakeGoodによるPHPコードのテストEclipse PDT + MakeGoodによるPHPコードのテスト
Eclipse PDT + MakeGoodによるPHPコードのテストAtsuhiro Kubo
 
C#ユーザー会 //build/ まとめ(サーバー編)
C#ユーザー会 //build/ まとめ(サーバー編)C#ユーザー会 //build/ まとめ(サーバー編)
C#ユーザー会 //build/ まとめ(サーバー編)Keiji Kamebuchi
 
初めてのWebプログラミング講座
初めてのWebプログラミング講座初めてのWebプログラミング講座
初めてのWebプログラミング講座DIVE INTO CODE Corp.
 
Azure Function GAした!Visual Studio Tools for Azure Functions もプレビューだ!
Azure Function GAした!Visual Studio Tools for Azure Functions もプレビューだ!Azure Function GAした!Visual Studio Tools for Azure Functions もプレビューだ!
Azure Function GAした!Visual Studio Tools for Azure Functions もプレビューだ!Yasuaki Matsuda
 
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座DIVE INTO CODE Corp.
 
WebRTCを始めよう! HTML5fun 第一回勉強会
WebRTCを始めよう! HTML5fun 第一回勉強会WebRTCを始めよう! HTML5fun 第一回勉強会
WebRTCを始めよう! HTML5fun 第一回勉強会Yusuke Naka
 
明日からはじめるネットワーク運用自動化
明日からはじめるネットワーク運用自動化明日からはじめるネットワーク運用自動化
明日からはじめるネットワーク運用自動化Taiji Tsuchiya
 
20141023 IPv6 Summit in FUKUOKA 2014 IPv6対応Webサービスの作り方
20141023 IPv6 Summit in FUKUOKA 2014 IPv6対応Webサービスの作り方20141023 IPv6 Summit in FUKUOKA 2014 IPv6対応Webサービスの作り方
20141023 IPv6 Summit in FUKUOKA 2014 IPv6対応Webサービスの作り方v6app
 
Eclipse PDT + MakeGood による PHP コードのテスト
Eclipse PDT + MakeGood による PHP コードのテストEclipse PDT + MakeGood による PHP コードのテスト
Eclipse PDT + MakeGood による PHP コードのテストAtsuhiro Kubo
 
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築You&I
 
Azure App Service Overview LT
Azure App Service Overview LTAzure App Service Overview LT
Azure App Service Overview LTKeiji Kamebuchi
 
Microsoft Copilot Studio.pdf
Microsoft Copilot Studio.pdfMicrosoft Copilot Studio.pdf
Microsoft Copilot Studio.pdfTomokazu Kizawa
 
Power shell で DSL
Power shell で DSLPower shell で DSL
Power shell で DSLurasandesu
 
Visual Studio 2019で始める「WPF on .NET Core 3.0」開発
Visual Studio 2019で始める「WPF on .NET Core 3.0」開発Visual Studio 2019で始める「WPF on .NET Core 3.0」開発
Visual Studio 2019で始める「WPF on .NET Core 3.0」開発Atsushi Nakamura
 
Spring I/O 2018 報告 RESTDocs RAML, Cloud Contract
Spring I/O 2018 報告 RESTDocs RAML, Cloud ContractSpring I/O 2018 報告 RESTDocs RAML, Cloud Contract
Spring I/O 2018 報告 RESTDocs RAML, Cloud ContractTakuya Iwatsuka
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版DIVE INTO CODE Corp.
 
Visual Studio Code で C# でのアプリ開発
Visual Studio Code で C# でのアプリ開発Visual Studio Code で C# でのアプリ開発
Visual Studio Code で C# でのアプリ開発m ishizaki
 

Similar to ジェネレーティブプログラミングの世界 (20)

意図を表現するプログラミング
意図を表現するプログラミング意図を表現するプログラミング
意図を表現するプログラミング
 
マイクロサービス開発が捗る Project Tye
マイクロサービス開発が捗る Project Tyeマイクロサービス開発が捗る Project Tye
マイクロサービス開発が捗る Project Tye
 
Eclipse PDT + MakeGoodによるPHPコードのテスト
Eclipse PDT + MakeGoodによるPHPコードのテストEclipse PDT + MakeGoodによるPHPコードのテスト
Eclipse PDT + MakeGoodによるPHPコードのテスト
 
C#ユーザー会 //build/ まとめ(サーバー編)
C#ユーザー会 //build/ まとめ(サーバー編)C#ユーザー会 //build/ まとめ(サーバー編)
C#ユーザー会 //build/ まとめ(サーバー編)
 
初めてのWebプログラミング講座
初めてのWebプログラミング講座初めてのWebプログラミング講座
初めてのWebプログラミング講座
 
Azure Function GAした!Visual Studio Tools for Azure Functions もプレビューだ!
Azure Function GAした!Visual Studio Tools for Azure Functions もプレビューだ!Azure Function GAした!Visual Studio Tools for Azure Functions もプレビューだ!
Azure Function GAした!Visual Studio Tools for Azure Functions もプレビューだ!
 
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
 
WebRTCを始めよう! HTML5fun 第一回勉強会
WebRTCを始めよう! HTML5fun 第一回勉強会WebRTCを始めよう! HTML5fun 第一回勉強会
WebRTCを始めよう! HTML5fun 第一回勉強会
 
明日からはじめるネットワーク運用自動化
明日からはじめるネットワーク運用自動化明日からはじめるネットワーク運用自動化
明日からはじめるネットワーク運用自動化
 
20141023 IPv6 Summit in FUKUOKA 2014 IPv6対応Webサービスの作り方
20141023 IPv6 Summit in FUKUOKA 2014 IPv6対応Webサービスの作り方20141023 IPv6 Summit in FUKUOKA 2014 IPv6対応Webサービスの作り方
20141023 IPv6 Summit in FUKUOKA 2014 IPv6対応Webサービスの作り方
 
Eclipse PDT + MakeGood による PHP コードのテスト
Eclipse PDT + MakeGood による PHP コードのテストEclipse PDT + MakeGood による PHP コードのテスト
Eclipse PDT + MakeGood による PHP コードのテスト
 
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築
 
Azure App Service Overview LT
Azure App Service Overview LTAzure App Service Overview LT
Azure App Service Overview LT
 
Microsoft Copilot Studio.pdf
Microsoft Copilot Studio.pdfMicrosoft Copilot Studio.pdf
Microsoft Copilot Studio.pdf
 
Power shell で DSL
Power shell で DSLPower shell で DSL
Power shell で DSL
 
Visual Studio 2019で始める「WPF on .NET Core 3.0」開発
Visual Studio 2019で始める「WPF on .NET Core 3.0」開発Visual Studio 2019で始める「WPF on .NET Core 3.0」開発
Visual Studio 2019で始める「WPF on .NET Core 3.0」開発
 
Spring I/O 2018 報告会
Spring I/O 2018 報告会Spring I/O 2018 報告会
Spring I/O 2018 報告会
 
Spring I/O 2018 報告 RESTDocs RAML, Cloud Contract
Spring I/O 2018 報告 RESTDocs RAML, Cloud ContractSpring I/O 2018 報告 RESTDocs RAML, Cloud Contract
Spring I/O 2018 報告 RESTDocs RAML, Cloud Contract
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版
 
Visual Studio Code で C# でのアプリ開発
Visual Studio Code で C# でのアプリ開発Visual Studio Code で C# でのアプリ開発
Visual Studio Code で C# でのアプリ開発
 

More from Atsuhiro Kubo

Enaction, Not Design on MPD Osaka Extra 1
Enaction, Not Design on MPD Osaka Extra 1Enaction, Not Design on MPD Osaka Extra 1
Enaction, Not Design on MPD Osaka Extra 1Atsuhiro Kubo
 
Enaction, Not Design on Symfony Meetup Kansai 2
Enaction, Not Design on Symfony Meetup Kansai 2Enaction, Not Design on Symfony Meetup Kansai 2
Enaction, Not Design on Symfony Meetup Kansai 2Atsuhiro Kubo
 
The Birth of FormalBears - A new META for BEAR.Sunday applications
The Birth of FormalBears - A new META for BEAR.Sunday applicationsThe Birth of FormalBears - A new META for BEAR.Sunday applications
The Birth of FormalBears - A new META for BEAR.Sunday applicationsAtsuhiro Kubo
 
Lean Architecture / DCI Evening Report
Lean Architecture / DCI Evening ReportLean Architecture / DCI Evening Report
Lean Architecture / DCI Evening ReportAtsuhiro Kubo
 
Frameworks We Live By: Design by day-to-day framework development: Multi-para...
Frameworks We Live By: Design by day-to-day framework development: Multi-para...Frameworks We Live By: Design by day-to-day framework development: Multi-para...
Frameworks We Live By: Design by day-to-day framework development: Multi-para...Atsuhiro Kubo
 
Frameworks We Live By: Design by day-to-day framework development: Multi-para...
Frameworks We Live By: Design by day-to-day framework development: Multi-para...Frameworks We Live By: Design by day-to-day framework development: Multi-para...
Frameworks We Live By: Design by day-to-day framework development: Multi-para...Atsuhiro Kubo
 
Software Development with Symfony
Software Development with SymfonySoftware Development with Symfony
Software Development with SymfonyAtsuhiro Kubo
 
Introduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGoodIntroduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGoodAtsuhiro Kubo
 
Getting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnitGetting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnitAtsuhiro Kubo
 
Introduction to Continuous Testing
Introduction to Continuous TestingIntroduction to Continuous Testing
Introduction to Continuous TestingAtsuhiro Kubo
 
Symfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るためにSymfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るためにAtsuhiro Kubo
 
MakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をMakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をAtsuhiro Kubo
 
How To Create Custom DSLs By PHP
How To Create Custom DSLs By PHPHow To Create Custom DSLs By PHP
How To Create Custom DSLs By PHPAtsuhiro Kubo
 
Piece Framework 2.0 Background
Piece Framework 2.0 BackgroundPiece Framework 2.0 Background
Piece Framework 2.0 BackgroundAtsuhiro Kubo
 

More from Atsuhiro Kubo (15)

MPD Osaka Extra 5
MPD Osaka Extra 5MPD Osaka Extra 5
MPD Osaka Extra 5
 
Enaction, Not Design on MPD Osaka Extra 1
Enaction, Not Design on MPD Osaka Extra 1Enaction, Not Design on MPD Osaka Extra 1
Enaction, Not Design on MPD Osaka Extra 1
 
Enaction, Not Design on Symfony Meetup Kansai 2
Enaction, Not Design on Symfony Meetup Kansai 2Enaction, Not Design on Symfony Meetup Kansai 2
Enaction, Not Design on Symfony Meetup Kansai 2
 
The Birth of FormalBears - A new META for BEAR.Sunday applications
The Birth of FormalBears - A new META for BEAR.Sunday applicationsThe Birth of FormalBears - A new META for BEAR.Sunday applications
The Birth of FormalBears - A new META for BEAR.Sunday applications
 
Lean Architecture / DCI Evening Report
Lean Architecture / DCI Evening ReportLean Architecture / DCI Evening Report
Lean Architecture / DCI Evening Report
 
Frameworks We Live By: Design by day-to-day framework development: Multi-para...
Frameworks We Live By: Design by day-to-day framework development: Multi-para...Frameworks We Live By: Design by day-to-day framework development: Multi-para...
Frameworks We Live By: Design by day-to-day framework development: Multi-para...
 
Frameworks We Live By: Design by day-to-day framework development: Multi-para...
Frameworks We Live By: Design by day-to-day framework development: Multi-para...Frameworks We Live By: Design by day-to-day framework development: Multi-para...
Frameworks We Live By: Design by day-to-day framework development: Multi-para...
 
Software Development with Symfony
Software Development with SymfonySoftware Development with Symfony
Software Development with Symfony
 
Introduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGoodIntroduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGood
 
Getting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnitGetting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnit
 
Introduction to Continuous Testing
Introduction to Continuous TestingIntroduction to Continuous Testing
Introduction to Continuous Testing
 
Symfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るためにSymfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るために
 
MakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をMakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発を
 
How To Create Custom DSLs By PHP
How To Create Custom DSLs By PHPHow To Create Custom DSLs By PHP
How To Create Custom DSLs By PHP
 
Piece Framework 2.0 Background
Piece Framework 2.0 BackgroundPiece Framework 2.0 Background
Piece Framework 2.0 Background
 

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