SlideShare a Scribd company logo
1 of 21
C#erのための
メタ プログラミング
西部ガス情報システム(株)
技術企画部
上野 伸一
Ueno Shinichi
About Me
上野 伸一
Ueno Shinichi
• 西部ガス情報システム(株) 技術企画部
uenoshinichi@sgis.co.jp
• https://github.com/s-ueno
• https://www.facebook.com/uen.agile
趣味
• 釣り(ヘチ釣り・落とし込み)
• 野鳥観察(探鳥)
• プログラミング
C#erのための メタ プログラミング
メタ プログラミングのお話 技術詳細はまたの機会に
メタ プログラミング
https://ja.wikipedia.org/wiki/Wikipedia:%E3%82%A6%E3%82%A3%E3%82%AD%E3%83%9A%E3%81%9F%E3%82%93#/media/File:Wikipe-tan_full_length.png
GNU Free Documentation License
ウィキペたん
ロジックを生成する
高位ロジック
“メタ” という言葉の定義について考えてみよう
メタ について
https://upload.wikimedia.org/wikipedia/commons/3/30/Wikipe-tan_needs_your_help.png
GNU Free Documentation License
ウィキペたん
メタ (という広義の枠組み)
メタファー
(比喩、暗喩)
メタ フィクション
(劇中劇)
メタ プログラミング
その中の一つ
一緒じゃないよ
“メタ” についてWikiぺたんに聞いてみた
別視点 DDDから
ドメイン駆動設計
データ中心アプローチ
DOA : Data Oriented Approach
モデル駆動
MDA : Model-Driven Architecture
GNU Free Documentation License
ウィキペたん
https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Neko_Wikipe-tan.svg
データモデリング スキル
データモデリングって何?
• ビジネスで利用するデータを、ルールに基づいて体系化
• RDBにおける ルール の例
• リレーショナル モデル
• E.F. Coddのデータモデリング。構文論(シンタックス)
• ERモデル
• Peter Chenのデータモデリング。意味論(セマンティクス)
• TH(椿-穂鷹)モデル
• ERモデルの pattern of 系。タイプリソースなどの考え方はここから。意味論(セマ
ンティクス)
• T字系ER(TM)モデル
• 数学基礎論に無矛盾の形で事業の管理過程を記述する。構文論(センマンティクス)
構文論(シンタックス) ・・・証明可能な論理や理論
意味論(セマンティクス) ・・・ parrerns, parrern of
データモデリングの一つ
• 業務での言葉や資源を用いての、 “もの・こと分析”
• 業務の言葉に”する”を付けて日本語として成立すれば、”こと”であり、そうではない
ものを”もの”として分ける作業です。
• 請求 については、請求する で言葉として成立するので、 こと に分類されます。
• 患者 については、患者する とは言えないため、 もの に分類されます。
請求番号
請求
請求日
請求先
イベント entity
患者ID
患者
患者名
性別
リソース entity
概念
個体識別子
個体
性質1
性質2
述語論理で記述可能
(一階)述語論理
• “数理論理学” という 論理学(哲学) に
数学的演算を加えた学問
• 理論を文書化して記述する目的で発展
• 数学以外も幾何学、プログラミング、データモデリング
と様々な分野に応用されている
GNU Free Documentation License
ウィキペたん
https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Wikipe-tan_holding_sign.png
(一階)述語論理
• “述語論理学” における “述語” とは
• 集合のなかで、項 t1…tn に応じて 真偽の定まる主張P(t1…tn ) を指す
• n項述語 という
• “言語学” における “述語” とは
• 主語を除くすべて を指す
私は 上野 伸一 である
(ある集合の中で)私(の名前)は 上野 伸一 である
∃x ( F(x) ∧ H(x) )
F(x) は “名前が上野伸一である” という述語H(x) は “今日のLT大会に参加したメンバー”
全称量化子∀…∀x P (すべての x に対して P である)
特称量化子∃…∃x P (ある x に対して P である)
結合記号∧ … 連言(AND)
結合記号∨ … 進言(OR)
結合記号¬ … 否定(NOT)
結合記号→ … 仮言(IF)
一階述語論理では 性質(属性)=述語 で表現可能
(一階)述語論理の世界における言語
述語論理の世界に翻訳するとこうなる
会話には隠れた文脈があるのでそれを()で明記
(一階)述語論理
ある集合
述語
Linq は一階述語論理のC#(英語)表現
私Pは
C#erにとって、より身近な世界に揺り戻し
MSDN C# Linqにおける Where 句の説明
(一階)述語論理
GNU Free Documentation License
ウィキペたん
https://ja.wikipedia.org/wiki/Wikipedia:%E3%82%A6%E3%82%A3%E3%82%AD%E3%83%9A%E3%81%9F%E3%82%93#/media/File:Wikipe-tan_dressed_in_a_Halloween_costume.png
一階述語論理の英語記述
SQL
そもそものSQL誕生の基礎理論が
SQLに関するウィキペたんの記事
二階述語論理、高階述語論理
GNU Free Documentation License
ウィキペたん
述語 が 新しい述語 を生成する
(性質 ≠ 述語)
一階述語論理 では 性質=述語 高階述語
一階 があるなら 二階 もあるの?
あるんだな
データモデリングって何?
• ビジネスで利用するデータを、なんらかのルールに基づいて体系化する作
業になります
• システム開発の歴史の中で現在は RDB(リレーショナル データベース) と言われ
る、表形式のデータベースが一般的に利用されるようになりました
• 様々なルール の例
• リレーショナル モデル
• E.F. Coddのデータモデリング。構文論(シンタックス)
• ERモデル
• Peter Chenのデータモデイング。意味論(セマンティクス)
• TH(椿-穂鷹)モデル
• ERモデルの pattern of 系。タイプリソースなどの考え方はここから。意味論(セマンティクス)
• T字系ER(TM)モデル。
• 数学基礎論に無矛盾の形で事業の管理過程を記述する。構文論(センマンティクス)
http://www.sdi-net.co.jp/FAQ-index02.htm
http://www.drinet.co.jp/technology/tsubaki/dri090/%E3%80%90%E7%AC%AC90%E5%8F%B7%E3%80%91%E3%83%87%E3%83%BC%E3%82%BF%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AE%E9%80%B2%E5%8C%96.html
http://www.sdi-net.co.jp/blackbook-index.htm
http://www.sdi-net.co.jp/logico-index.htm
https://www.sei-info.co.jp/it-keyword/data_modeling.html
くぁwせdrftgyふじこ
メタ プログラミング
プログラマーが
プログラミングする 行為
述語
数理論理の世界から、メタプログラミングの世界に揺り戻し
メタ プログラミング
をプログラミングする
IL
intermediate language
メタ は 述語 ”プログラミングする” 行為の 高階述語だった
高階述語として利用する
高階述語として利用する
メタ プログラミング
軽量・爆速 OR/M
DataReaderから任意の値を読み取って、ク
ラスにセットする
Dapperを例にメタプログラミングを知る
メタ プログラミング
実行時コンパイラ環境
(Just-In-Time Compiler)
プログラマーのその行為を
ILを利用して動的に生成している
Dapperを例にメタプログラミングを知る
ILを利用した メタプログラミング
メタ プログラミング
C#erにとって より敷居の低い メタプログラミング ツール
T4 Text Tempalte
メタメタ プログラミング
• メタがあるなら、メタメタプログラミングは?
メタプログラマーが利用する
ツールを開発するのが
メタメタプログラマー
T4製作者
あるんだな

More Related Content

What's hot

ヤマムギVol.5 BIファーストステップre:dash
ヤマムギVol.5 BIファーストステップre:dashヤマムギVol.5 BIファーストステップre:dash
ヤマムギVol.5 BIファーストステップre:dashMitsuhiro Yamashita
 
OSS Study#19_LT
OSS Study#19_LTOSS Study#19_LT
OSS Study#19_LTNaoY-2501
 
はじめてのAIプログラミング 5章: 知識表現
はじめてのAIプログラミング 5章: 知識表現はじめてのAIプログラミング 5章: 知識表現
はじめてのAIプログラミング 5章: 知識表現nkazuki
 
ゼロから学ぶPython勉強会
ゼロから学ぶPython勉強会ゼロから学ぶPython勉強会
ゼロから学ぶPython勉強会sekikazu
 
Japan r2019 upset_analysis
Japan r2019 upset_analysisJapan r2019 upset_analysis
Japan r2019 upset_analysisMakoto Kubota
 
Machine learning and_system_design
Machine learning and_system_designMachine learning and_system_design
Machine learning and_system_designyusuke shibui
 
NetworkXによる語彙ネットワークの可視化
NetworkXによる語彙ネットワークの可視化NetworkXによる語彙ネットワークの可視化
NetworkXによる語彙ネットワークの可視化Shintaro Takemura
 
IoTLT長野 vol.1 SORACOM Air for Cellarer の plan-D/plan-K を試してみた
IoTLT長野 vol.1 SORACOM Air for Cellarer の plan-D/plan-K を試してみたIoTLT長野 vol.1 SORACOM Air for Cellarer の plan-D/plan-K を試してみた
IoTLT長野 vol.1 SORACOM Air for Cellarer の plan-D/plan-K を試してみたKoichiro Oki
 
Beginning comfortable documentation with jenkins and doxygen ( public )
Beginning comfortable documentation with jenkins and doxygen ( public )Beginning comfortable documentation with jenkins and doxygen ( public )
Beginning comfortable documentation with jenkins and doxygen ( public )Hidenori Matsuki
 
WindowsでPython
WindowsでPythonWindowsでPython
WindowsでPythondrillan
 

What's hot (15)

ヤマムギVol.5 BIファーストステップre:dash
ヤマムギVol.5 BIファーストステップre:dashヤマムギVol.5 BIファーストステップre:dash
ヤマムギVol.5 BIファーストステップre:dash
 
OSS Study#19_LT
OSS Study#19_LTOSS Study#19_LT
OSS Study#19_LT
 
はじめてのAIプログラミング 5章: 知識表現
はじめてのAIプログラミング 5章: 知識表現はじめてのAIプログラミング 5章: 知識表現
はじめてのAIプログラミング 5章: 知識表現
 
ゼロから学ぶPython勉強会
ゼロから学ぶPython勉強会ゼロから学ぶPython勉強会
ゼロから学ぶPython勉強会
 
stapy#23 LT
stapy#23 LTstapy#23 LT
stapy#23 LT
 
S18 t0 introduction
S18 t0 introductionS18 t0 introduction
S18 t0 introduction
 
Japan r2019 upset_analysis
Japan r2019 upset_analysisJapan r2019 upset_analysis
Japan r2019 upset_analysis
 
Stapy#22 LT
Stapy#22 LTStapy#22 LT
Stapy#22 LT
 
Machine learning and_system_design
Machine learning and_system_designMachine learning and_system_design
Machine learning and_system_design
 
NetworkXによる語彙ネットワークの可視化
NetworkXによる語彙ネットワークの可視化NetworkXによる語彙ネットワークの可視化
NetworkXによる語彙ネットワークの可視化
 
IoTLT長野 vol.1 SORACOM Air for Cellarer の plan-D/plan-K を試してみた
IoTLT長野 vol.1 SORACOM Air for Cellarer の plan-D/plan-K を試してみたIoTLT長野 vol.1 SORACOM Air for Cellarer の plan-D/plan-K を試してみた
IoTLT長野 vol.1 SORACOM Air for Cellarer の plan-D/plan-K を試してみた
 
ODSC East 2017 Report
ODSC East 2017 ReportODSC East 2017 Report
ODSC East 2017 Report
 
Beginning comfortable documentation with jenkins and doxygen ( public )
Beginning comfortable documentation with jenkins and doxygen ( public )Beginning comfortable documentation with jenkins and doxygen ( public )
Beginning comfortable documentation with jenkins and doxygen ( public )
 
検索の工夫
検索の工夫検索の工夫
検索の工夫
 
WindowsでPython
WindowsでPythonWindowsでPython
WindowsでPython
 

Similar to メタ プログラミングについて

Real-time personalized recommendation using embedding
Real-time personalized recommendation using embeddingReal-time personalized recommendation using embedding
Real-time personalized recommendation using embeddingRecruit Lifestyle Co., Ltd.
 
ITフォーラム2024 AITCセッション(2)
ITフォーラム2024 AITCセッション(2)ITフォーラム2024 AITCセッション(2)
ITフォーラム2024 AITCセッション(2)aitc_jp
 
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識Katsuhiro Morishita
 
リモートデバッグツール Weinerをつかってみた
リモートデバッグツール Weinerをつかってみたリモートデバッグツール Weinerをつかってみた
リモートデバッグツール WeinerをつかってみたMasakazu Muraoka
 
リアルタイムにデータ分析してWebサービスの面白さを伝えたい
リアルタイムにデータ分析してWebサービスの面白さを伝えたいリアルタイムにデータ分析してWebサービスの面白さを伝えたい
リアルタイムにデータ分析してWebサービスの面白さを伝えたいx1 ichi
 
フィジカルコンピューティング入門 USB-MIDIベースのPepper-Monakaを使う
フィジカルコンピューティング入門  USB-MIDIベースのPepper-Monakaを使うフィジカルコンピューティング入門  USB-MIDIベースのPepper-Monakaを使う
フィジカルコンピューティング入門 USB-MIDIベースのPepper-Monakaを使うYoshitaka Kuwata
 
Nervesが開拓する「ElixirでIoT」の新世界
Nervesが開拓する「ElixirでIoT」の新世界Nervesが開拓する「ElixirでIoT」の新世界
Nervesが開拓する「ElixirでIoT」の新世界Hideki Takase
 
WebpackとReactで作るGoogle Chrome 拡張
WebpackとReactで作るGoogle Chrome 拡張WebpackとReactで作るGoogle Chrome 拡張
WebpackとReactで作るGoogle Chrome 拡張K Sasaki
 
初学者のためのプロンプトエンジニアリング実践.pptx
初学者のためのプロンプトエンジニアリング実践.pptx初学者のためのプロンプトエンジニアリング実践.pptx
初学者のためのプロンプトエンジニアリング実践.pptxAkifumi Niida
 
ノンコーディングで LINE Bot 開発! Azure Logic Apps × Azure Cognitive Services ×LINE メッセー...
ノンコーディングで LINE Bot 開発! Azure Logic Apps × Azure Cognitive Services ×LINE メッセー...ノンコーディングで LINE Bot 開発! Azure Logic Apps × Azure Cognitive Services ×LINE メッセー...
ノンコーディングで LINE Bot 開発! Azure Logic Apps × Azure Cognitive Services ×LINE メッセー...典子 松本
 
システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法Takuma Watabiki
 
Inside CyberAgent's Game Development
Inside CyberAgent's Game DevelopmentInside CyberAgent's Game Development
Inside CyberAgent's Game DevelopmentSuguru Shirai
 
たのしいアノテーション
たのしいアノテーションたのしいアノテーション
たのしいアノテーションKazuhiro Sasao
 
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発
JavaScript LT会 〜 React.js   Node.js歓迎 〜 Deno で やってみるweb開発JavaScript LT会 〜 React.js   Node.js歓迎 〜 Deno で やってみるweb開発
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発虎の穴 開発室
 
scikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアルscikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアル敦志 金谷
 

Similar to メタ プログラミングについて (20)

Real-time personalized recommendation using embedding
Real-time personalized recommendation using embeddingReal-time personalized recommendation using embedding
Real-time personalized recommendation using embedding
 
React vtecx20170822
React vtecx20170822React vtecx20170822
React vtecx20170822
 
React vtecx20171129
React vtecx20171129React vtecx20171129
React vtecx20171129
 
ITフォーラム2024 AITCセッション(2)
ITフォーラム2024 AITCセッション(2)ITフォーラム2024 AITCセッション(2)
ITフォーラム2024 AITCセッション(2)
 
Web study20171007
Web study20171007Web study20171007
Web study20171007
 
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
 
リモートデバッグツール Weinerをつかってみた
リモートデバッグツール Weinerをつかってみたリモートデバッグツール Weinerをつかってみた
リモートデバッグツール Weinerをつかってみた
 
React vtecx20171025
React vtecx20171025React vtecx20171025
React vtecx20171025
 
リアルタイムにデータ分析してWebサービスの面白さを伝えたい
リアルタイムにデータ分析してWebサービスの面白さを伝えたいリアルタイムにデータ分析してWebサービスの面白さを伝えたい
リアルタイムにデータ分析してWebサービスの面白さを伝えたい
 
フィジカルコンピューティング入門 USB-MIDIベースのPepper-Monakaを使う
フィジカルコンピューティング入門  USB-MIDIベースのPepper-Monakaを使うフィジカルコンピューティング入門  USB-MIDIベースのPepper-Monakaを使う
フィジカルコンピューティング入門 USB-MIDIベースのPepper-Monakaを使う
 
Nervesが開拓する「ElixirでIoT」の新世界
Nervesが開拓する「ElixirでIoT」の新世界Nervesが開拓する「ElixirでIoT」の新世界
Nervesが開拓する「ElixirでIoT」の新世界
 
WebpackとReactで作るGoogle Chrome 拡張
WebpackとReactで作るGoogle Chrome 拡張WebpackとReactで作るGoogle Chrome 拡張
WebpackとReactで作るGoogle Chrome 拡張
 
初学者のためのプロンプトエンジニアリング実践.pptx
初学者のためのプロンプトエンジニアリング実践.pptx初学者のためのプロンプトエンジニアリング実践.pptx
初学者のためのプロンプトエンジニアリング実践.pptx
 
ノンコーディングで LINE Bot 開発! Azure Logic Apps × Azure Cognitive Services ×LINE メッセー...
ノンコーディングで LINE Bot 開発! Azure Logic Apps × Azure Cognitive Services ×LINE メッセー...ノンコーディングで LINE Bot 開発! Azure Logic Apps × Azure Cognitive Services ×LINE メッセー...
ノンコーディングで LINE Bot 開発! Azure Logic Apps × Azure Cognitive Services ×LINE メッセー...
 
システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法
 
Inside CyberAgent's Game Development
Inside CyberAgent's Game DevelopmentInside CyberAgent's Game Development
Inside CyberAgent's Game Development
 
たのしいアノテーション
たのしいアノテーションたのしいアノテーション
たのしいアノテーション
 
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発
JavaScript LT会 〜 React.js   Node.js歓迎 〜 Deno で やってみるweb開発JavaScript LT会 〜 React.js   Node.js歓迎 〜 Deno で やってみるweb開発
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発
 
人工知能とアート
人工知能とアート人工知能とアート
人工知能とアート
 
scikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアルscikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアル
 

Recently uploaded

UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 

Recently uploaded (9)

UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 

メタ プログラミングについて

Editor's Notes

  1. 西部ガス情報システム(株) 技術企画部の上野といいます 今日は オレオレLT大会 ということで、ライブラリ開発者は息をするように使う技術の一つですが みなさんの普段の開発にはあまり関わりのない マニアックな話をしてみたいと思います よろしくお願いします。
  2. 趣味は釣りで、ヘチ釣りや落とし込みをメインにしています。 バチ抜け時とかルアーなげたりもします 野鳥観察も好きで、家の周りや、自然公園、山とかで探鳥といって野鳥さんを探して写真とったりしています 寒い冬がシーズンで、まさにいい季節になってきました。
  3. C#erのための IL と メタプログラミング ということで、 マイクロソフト系テクノロジーを軸に、その本質について触れたいと思います ただ、わかっていたことながら資料を執筆しながら、10分ではどう考えても無理だと思ったので 今日は メタプログラミング にフォーカスをあてたいと思います。
  4. 言葉の定義とはとても大事で、 メタプログラミングというからには メタ という単語について深堀したいと思います。 ちなみに、この右側のキャラクターは 『ウィキぺたん』という非公式ながらGNUライセンスされた ウィキペディアのキャラクターです ウィキペたんにメタプログラミングについて聞いてみると プログラミング技法の一種で、ロジックを生成する高位ロジック と説明があります。 それ以外の説明は本質を外していたので載せませんでしたが、ここが重要です。
  5. ちなみに メタについても wikiペタン に聞いてみると 高次な と説明があります。 よくわからんですよね? よくある アニメや映画、漫画で表現される メタファー とか メタフィクション とかも メタのサブタイプです。 メタプログラミングも広義のメタ の一種で、メタファーやメタフィクションとはサブセットの関係です。 全体集合の中の一部分 という意味ですね。 ここら辺は混乱するので、同じメタの枠組みだけど異なる概念であると説明しておきます。
  6. さて、ちょっと回り道をして みなさんがよくご存じの DDDから メタまで歩いてみたいと思います。 これもwikiペタンに聞いてみると、端的に1行で 『複雑なドメインの設計は、モデルベースで行うべき』 と記述があります。 そうですね。 DDDの本質は モデル駆動であり データ中心アプローチ(DOA) などの データモデリング の知識が理解を促進させます。
  7. さて、データモデリングとは何かですが、端的にいうと ビジネスで利用するデータを、なんらかのルールに基づいて体系化したもの を指します。 RDBにおける ルールの例  リレーショナル モデル ・・・・ ちなにみ、構文論とは証明可能な理論や論理のことを指します。 意味論とは、パターン本に例えられる統計的なデータから導き出された最適解を指します。 ファウラーのEofPaa もエバンズのDDDもパターンオブですが、皆さんご存知ですか?ちゃんとついてきていますか?
  8. さて、話を続けるとデータモデリングでもっとも有名なものに ものこと分析があります。  知っている人??? ユースケースで分析した業務での言葉や資源をもちいて、 ものこと分析して 概念モデルエンティティを獲得します。 具体的には、業務の言葉に “する” をつけて日本語として成立すれば “こと” であり、そうではない場合は “もの” として分ける作業です。 たとえば、請求 という言葉は 請求する として言葉として成立するため、 こと に分類されます。 出来事であり、イベントエンティティにカテゴライズされます。 患者、組織、従業員などは 患者する として言葉が成立しないので、 もの いわゆる リソースに分類されます。 ここで獲得した概念エンティティに、個体識別子と個体の性質(述語、属性)を整理していくと、述語論理という数理論の式に当てはめることができるようになります
  9. 述語論理とは 何か? ですが 数理 論理学 という論理学(哲学)に数学的演算を加えた学問 になります。 もう少し具体的には、数学的な理論を文書化して記述するための目的で発展してきた学問です。 ただ、数学以外にもプログラミング、データモデリングなどの様々な分野で応用されている 基礎数学の一つになります。
  10. さて、述語論理学における 述語 とは 集合の中で 、項 t1…tn に応じて 真偽の定まる主張P(t1…tn ) を指します。 これを n項述語 といいます。 ちなみに、言語学における述語 とは 文章から 主語を除くすべてを指します。 具体的には、 、、 私は上野伸一である とある文章の私は が主語で 上野伸一である が述語です。 この文章には 暗黙の文脈が入っていて、 ある集合の中で私の名前は 上野伸一である が正しい表現になります。 これを一階述語論理ではこのように表現します。 ターンE( F(X) AND H(X) ) 、H(X)は今日のLT大会に参加したメンバーという人の集合で、F(x)とは、名前が上野伸一であるという述語になります。 ちなみに、全称量子化記号、特殊量子化記号、結合記号などを用いて理論の文書化することを一階述語論理といいます。 一階述語論理では、 上野伸一である という性質のことを述語 と同義ととらえます。
  11. もう少し身近な話に戻すと、これはMSDNのC#のLinq、Where句に関する記述です。 ここに 述語フィルターを指定する とありますよね。 先ほどの述語倫理の式をC#で表現すると、LTに参加した人リストというコレクションに対して、私Pは name が上野伸一である という述語で表現します。 この述語 を指しています。
  12. もともとが 元IBMのCodd博士が第一階述語論理を英語で表現するためのツールとして 関係データベース(RDB)とその演算体系であるSQLを構築したので、先ほどのC#でのLinq表現もつまるところ第一階述語論理を透過的に表現していることになります。 最初の方で Coddは意味論ではなく構文論といったのは、こいうことで 数学の専門学者が 第一階述語論理を 英語をベースに完結に表現したものが SQL で皆さんが普段集合に対して用いているツールになります。
  13. 第一階述語論理というだけあって、第二階や高階述語論理というものもあります。 第一階では性質と述語は同義であったのですが、階が上がる 高階述語では 述語が新しい述語を生成する 理論体系を指します。 つまり単純な 性質 が 述語 とはなりえない世界になります。
  14. くぁwせdrftgyふじこ と、これ以上やると 頭がおかしくなりそうなので、 少しだけ 話を基に戻しましょう
  15. メタ プログラミングとは、 プログラマーがプログラミングする行為 
  16. を プログラミングする という高階述語論理 を表します。 メタ の意味は 高次な といっていましたが、やっとつながりましたね。 プログラミングするという述語 を生成する 述語 が メタプログラミング です。 そのためのツールとして、 IL(中間言語)やT4(text Template)といった道具を用います。
  17. 代表的な例の一つとして、 軽量・爆速 OR/MのDapperなどがあります。 通常であれば、SQLを発行した後に、DataReaderからデータを読み取って、クラスのプロパティに値をセットするという行為をプログラマーが実装します。 ちょこっと C# をかじったことがある人なら リフレクション で抽象化できる と思うかもしれません。 ただ、そんなことを 20プロパティある 5万件のレコードに対して いちいちやっているようであれば、Dapperはこんな人気にはならなかったでしょう
  18. 最も効率が良い、DataReaderからデータを読み取るプログラミング行為を ILを利用して動的に生成・キャッシュして これを適用することで 軽量爆速なOR/Mとして人気を博しています。
  19. Visual Studio を利用した メタプグロラミング では T4 TextTemplat というものもあります。 これは Demoする時間があればデモしてみましょう
  20. Visual Studio を利用した メタプグロラミング では T4 TextTemplat というものもあります。 これは Demoする時間があればデモしてみましょう
  21. 最後に メタプログラミング があるなら さらに階を上げて メタメタプログラミング ってあるの? という話ですが あります。 そうですよね。メタプログラミング開発者が利用するツールを開発する人は メタメタプログラマーですよね。