Submit Search
Upload
Dslからのコードジェネレーションで楽々play開発
•
5 likes
•
3,187 views
Yoshiteru Takeshita
Follow
Play framework 2 meetup http://connpass.com/event/6020/ の発表資料です。
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 17
Download now
Download to read offline
Recommended
C#のやさしさを語る時間
C#のやさしさを語る時間
kamukiriri
Cocoa勉強会201302
Cocoa勉強会201302
Satoshi Oomori
西区勉強会用スライド
西区勉強会用スライド
Hiromi Kai
【アジャイルサムライ】6章_ユーザストーリーを集める
【アジャイルサムライ】6章_ユーザストーリーを集める
Akio Terayama
2014 08-30 life with roslyn
2014 08-30 life with roslyn
shibuki
ラベリング 基本6-違う部分を明示する
ラベリング 基本6-違う部分を明示する
Mizuhiro Kaimai
SQLドリルの話(仮)
SQLドリルの話(仮)
Yuuki Tan-nai
Nespのコード生成
Nespのコード生成
Kouji Matsui
Recommended
C#のやさしさを語る時間
C#のやさしさを語る時間
kamukiriri
Cocoa勉強会201302
Cocoa勉強会201302
Satoshi Oomori
西区勉強会用スライド
西区勉強会用スライド
Hiromi Kai
【アジャイルサムライ】6章_ユーザストーリーを集める
【アジャイルサムライ】6章_ユーザストーリーを集める
Akio Terayama
2014 08-30 life with roslyn
2014 08-30 life with roslyn
shibuki
ラベリング 基本6-違う部分を明示する
ラベリング 基本6-違う部分を明示する
Mizuhiro Kaimai
SQLドリルの話(仮)
SQLドリルの話(仮)
Yuuki Tan-nai
Nespのコード生成
Nespのコード生成
Kouji Matsui
TypeScript補完計画 for Sublime Text 2
TypeScript補完計画 for Sublime Text 2
kamukiriri
メタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらば
Kouji Matsui
Roslynで体験してみるC#スクリプト #cs_fukuoka
Roslynで体験してみるC#スクリプト #cs_fukuoka
Yuta Matsumura
古い?ダサい?まだまだイケルChef!
古い?ダサい?まだまだイケルChef!
Naoto Ishizawa
ディープラーニングのフレームワークの自作
ディープラーニングのフレームワークの自作
Ko Hamada
俺とモデリング
俺とモデリング
Masayuki KaToH
データベース定義書の更新は再考の仕事
データベース定義書の更新は再考の仕事
Atsushi Yasuda
コマンドライン使いもLibreOffice
コマンドライン使いもLibreOffice
Kiwamu Okabe
やさしいIteratee入門
やさしいIteratee入門
Takashi Kawachi
C# linq入門 意図編
C# linq入門 意図編
Fujio Kojima
SimpleModeler
SimpleModeler
Tomoharu ASAMI
一番簡単なWebSocketの試し方
一番簡単なWebSocketの試し方
Shunji Konishi
ORと経済学の「結婚」問題
ORと経済学の「結婚」問題
Yosuke YASUDA
文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox
文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox
Tomoharu ASAMI
学ばないDSL
学ばないDSL
Kenta USAMI
DSLによる要求獲得でスーパーアジャイル
DSLによる要求獲得でスーパーアジャイル
陽平 山口
恋人がいない30代前半女性が5年以内に結婚できる確率は17.6%【アラサー未婚女性へ】
恋人がいない30代前半女性が5年以内に結婚できる確率は17.6%【アラサー未婚女性へ】
Tomoya Tatekawa
RubyでDSL
RubyでDSL
Yukimitsu Izawa
DSLについて語るときに僕の語ること
DSLについて語るときに僕の語ること
Tomohiro Nishimura
Twitter API最新事情 - API Meetup Tokyo #1 #apijp
Twitter API最新事情 - API Meetup Tokyo #1 #apijp
Yusuke Yamamoto
SI屋のためのF# ~DSL編~
SI屋のためのF# ~DSL編~
bleis tift
この人と結婚していいの?を読んで
この人と結婚していいの?を読んで
Shumpei Shiraishi
More Related Content
What's hot
TypeScript補完計画 for Sublime Text 2
TypeScript補完計画 for Sublime Text 2
kamukiriri
メタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらば
Kouji Matsui
Roslynで体験してみるC#スクリプト #cs_fukuoka
Roslynで体験してみるC#スクリプト #cs_fukuoka
Yuta Matsumura
古い?ダサい?まだまだイケルChef!
古い?ダサい?まだまだイケルChef!
Naoto Ishizawa
ディープラーニングのフレームワークの自作
ディープラーニングのフレームワークの自作
Ko Hamada
俺とモデリング
俺とモデリング
Masayuki KaToH
データベース定義書の更新は再考の仕事
データベース定義書の更新は再考の仕事
Atsushi Yasuda
コマンドライン使いもLibreOffice
コマンドライン使いもLibreOffice
Kiwamu Okabe
What's hot
(8)
TypeScript補完計画 for Sublime Text 2
TypeScript補完計画 for Sublime Text 2
メタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらば
Roslynで体験してみるC#スクリプト #cs_fukuoka
Roslynで体験してみるC#スクリプト #cs_fukuoka
古い?ダサい?まだまだイケルChef!
古い?ダサい?まだまだイケルChef!
ディープラーニングのフレームワークの自作
ディープラーニングのフレームワークの自作
俺とモデリング
俺とモデリング
データベース定義書の更新は再考の仕事
データベース定義書の更新は再考の仕事
コマンドライン使いもLibreOffice
コマンドライン使いもLibreOffice
Viewers also liked
やさしいIteratee入門
やさしいIteratee入門
Takashi Kawachi
C# linq入門 意図編
C# linq入門 意図編
Fujio Kojima
SimpleModeler
SimpleModeler
Tomoharu ASAMI
一番簡単なWebSocketの試し方
一番簡単なWebSocketの試し方
Shunji Konishi
ORと経済学の「結婚」問題
ORと経済学の「結婚」問題
Yosuke YASUDA
文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox
文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox
Tomoharu ASAMI
学ばないDSL
学ばないDSL
Kenta USAMI
DSLによる要求獲得でスーパーアジャイル
DSLによる要求獲得でスーパーアジャイル
陽平 山口
恋人がいない30代前半女性が5年以内に結婚できる確率は17.6%【アラサー未婚女性へ】
恋人がいない30代前半女性が5年以内に結婚できる確率は17.6%【アラサー未婚女性へ】
Tomoya Tatekawa
RubyでDSL
RubyでDSL
Yukimitsu Izawa
DSLについて語るときに僕の語ること
DSLについて語るときに僕の語ること
Tomohiro Nishimura
Twitter API最新事情 - API Meetup Tokyo #1 #apijp
Twitter API最新事情 - API Meetup Tokyo #1 #apijp
Yusuke Yamamoto
SI屋のためのF# ~DSL編~
SI屋のためのF# ~DSL編~
bleis tift
この人と結婚していいの?を読んで
この人と結婚していいの?を読んで
Shumpei Shiraishi
DSLの過去と未来
DSLの過去と未来
Akio Tajima
全角チルダ問題
全角チルダ問題
tsudaa
地獄のElixir(目黒スタートアップ勉強会)
地獄のElixir(目黒スタートアップ勉強会)
Tsunenori Oohara
婚活偏差値ランキングと傾向と対策
婚活偏差値ランキングと傾向と対策
大和 金太郎
最高の自分を手に入れる方法
最高の自分を手に入れる方法
大和 金太郎
婚活の戦略「恋愛マスターのマインドセット」
婚活の戦略「恋愛マスターのマインドセット」
大和 金太郎
Viewers also liked
(20)
やさしいIteratee入門
やさしいIteratee入門
C# linq入門 意図編
C# linq入門 意図編
SimpleModeler
SimpleModeler
一番簡単なWebSocketの試し方
一番簡単なWebSocketの試し方
ORと経済学の「結婚」問題
ORと経済学の「結婚」問題
文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox
文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox
学ばないDSL
学ばないDSL
DSLによる要求獲得でスーパーアジャイル
DSLによる要求獲得でスーパーアジャイル
恋人がいない30代前半女性が5年以内に結婚できる確率は17.6%【アラサー未婚女性へ】
恋人がいない30代前半女性が5年以内に結婚できる確率は17.6%【アラサー未婚女性へ】
RubyでDSL
RubyでDSL
DSLについて語るときに僕の語ること
DSLについて語るときに僕の語ること
Twitter API最新事情 - API Meetup Tokyo #1 #apijp
Twitter API最新事情 - API Meetup Tokyo #1 #apijp
SI屋のためのF# ~DSL編~
SI屋のためのF# ~DSL編~
この人と結婚していいの?を読んで
この人と結婚していいの?を読んで
DSLの過去と未来
DSLの過去と未来
全角チルダ問題
全角チルダ問題
地獄のElixir(目黒スタートアップ勉強会)
地獄のElixir(目黒スタートアップ勉強会)
婚活偏差値ランキングと傾向と対策
婚活偏差値ランキングと傾向と対策
最高の自分を手に入れる方法
最高の自分を手に入れる方法
婚活の戦略「恋愛マスターのマインドセット」
婚活の戦略「恋愛マスターのマインドセット」
Similar to Dslからのコードジェネレーションで楽々play開発
効率10倍UP 秀丸IDE化法
効率10倍UP 秀丸IDE化法
将 高野
Scalaで萌える関数型プログラミング[エッセンシャル版]
Scalaで萌える関数型プログラミング[エッセンシャル版]
Ra Zon
Dot net+sql server tips
Dot net+sql server tips
Oda Shinsuke
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめ
pospome
MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜
Naruhiko Ogasawara
CA15卒勉強会 メタプログラミングについて
CA15卒勉強会 メタプログラミングについて
Huy Do
デザインパターンを用いたリファクタリング
デザインパターンを用いたリファクタリング
kei takakuda
C++ REST SDKを使ってWebサービスを利用する
C++ REST SDKを使ってWebサービスを利用する
You&I
Unityでreflection入門
Unityでreflection入門
Yoshiteru Takeshita
.NET Core と .NET Framework (続きは de:code 2016 で!)
.NET Core と .NET Framework (続きは de:code 2016 で!)
Akira Inoue
プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6
プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6
健太 田上
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]
Ra Zon
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
Fujio Kojima
インターネット広告の概要とシステム設計
インターネット広告の概要とシステム設計
MicroAd, Inc.(Engineer)
Inside of Asakusa DSL
Inside of Asakusa DSL
Suguru ARAKAWA
[LT] T sql の parse と generator
[LT] T sql の parse と generator
Oda Shinsuke
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
Rデータ入力編
Rデータ入力編
Monta Yashi
3日時間をもらったのでTypeScriptを触ってみた
3日時間をもらったのでTypeScriptを触ってみた
Yasushi Kato
「Delphi/C++BuilderユーザーのためのSencha入門」
「Delphi/C++BuilderユーザーのためのSencha入門」
Embarcadero Technologies
Similar to Dslからのコードジェネレーションで楽々play開発
(20)
効率10倍UP 秀丸IDE化法
効率10倍UP 秀丸IDE化法
Scalaで萌える関数型プログラミング[エッセンシャル版]
Scalaで萌える関数型プログラミング[エッセンシャル版]
Dot net+sql server tips
Dot net+sql server tips
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめ
MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜
CA15卒勉強会 メタプログラミングについて
CA15卒勉強会 メタプログラミングについて
デザインパターンを用いたリファクタリング
デザインパターンを用いたリファクタリング
C++ REST SDKを使ってWebサービスを利用する
C++ REST SDKを使ってWebサービスを利用する
Unityでreflection入門
Unityでreflection入門
.NET Core と .NET Framework (続きは de:code 2016 で!)
.NET Core と .NET Framework (続きは de:code 2016 で!)
プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6
プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
インターネット広告の概要とシステム設計
インターネット広告の概要とシステム設計
Inside of Asakusa DSL
Inside of Asakusa DSL
[LT] T sql の parse と generator
[LT] T sql の parse と generator
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Rデータ入力編
Rデータ入力編
3日時間をもらったのでTypeScriptを触ってみた
3日時間をもらったのでTypeScriptを触ってみた
「Delphi/C++BuilderユーザーのためのSencha入門」
「Delphi/C++BuilderユーザーのためのSencha入門」
More from Yoshiteru Takeshita
GraphQL with scala
GraphQL with scala
Yoshiteru Takeshita
Developing large-scale smart-phone game servers by a single person
Developing large-scale smart-phone game servers by a single person
Yoshiteru Takeshita
Play framework+docker+aws ecr+aws beanstalk で楽々デプロイ
Play framework+docker+aws ecr+aws beanstalk で楽々デプロイ
Yoshiteru Takeshita
Scala Matsuri 2016コミュニティセッション
Scala Matsuri 2016コミュニティセッション
Yoshiteru Takeshita
Scala導入あれこれ
Scala導入あれこれ
Yoshiteru Takeshita
Scala web framework比較
Scala web framework比較
Yoshiteru Takeshita
More from Yoshiteru Takeshita
(6)
GraphQL with scala
GraphQL with scala
Developing large-scale smart-phone game servers by a single person
Developing large-scale smart-phone game servers by a single person
Play framework+docker+aws ecr+aws beanstalk で楽々デプロイ
Play framework+docker+aws ecr+aws beanstalk で楽々デプロイ
Scala Matsuri 2016コミュニティセッション
Scala Matsuri 2016コミュニティセッション
Scala導入あれこれ
Scala導入あれこれ
Scala web framework比較
Scala web framework比較
Dslからのコードジェネレーションで楽々play開発
1.
DSLからのコードジェネレー ションで楽々Play開発 芸者東京エンターテインメント株式会社 竹下 義晃
2.
自己紹介 東京大学 農学生命科学研究科 修士卒 竹下義晃 芸者東京エンターテインメントでScalaとC#を書い ています。 隔週でやってるScala勉強会の会場を提供してい ます。ぜひ来てください。 あと、9月開催のScalaMatsuriにも是非来てくださ い。
3.
動機 同様なコードを書くのが面倒 同様=コピペして、ちょこっと手直し
4.
たとえば ● PlayのControllerとMethodを作って、だいたい その名前に対応したURLをroutesに記述 ● DBモデルクラスとテーブル定義 ●
APIでのやりとりのために、サーバー(Scala)と クライアント(C#)で、ほぼ同じモデルクラスを作 る
5.
つまり ● 汎用的に作られたFrameworkと、個々のプロ ジェクトルールやビジネスルールとの差異を埋 める ● 異なる言語で同じようなコードを書く手間を減ら す
6.
解決策 DSLを定義して、そこからコードジェネレーションを 行う
7.
DSLとは Domain Specific Languageの略 特定の分野に限定し、それに特化した言語 正規表現やSQLもDSLの一種。
8.
DSL以外の選択肢 コードジェネレーションのベースとして使用されるも の 1. ClassにAnnotation 2. XMLなどの既存のフォーマット 3.
DBからのリバースエンジニアリング 4. UML 5. エクセル
9.
DSLの長所と短所 長所 ● プロジェクト特有の機能に対応できる ● 簡潔にかける 短所 ●
新しく学習すべきことが増えてしまう ● ツールサポートがない(簡潔にかけるからツール サポートいらない)
10.
どれくらい強力か? うまく言えないのでライブコーディングで確認してく ださい。
11.
Twitterクローンを作ってみる https://github.com/takezoux2/dslgen-at-play- meetup ● ログイン機能のみできている ● DSLからのコードジェネレーションは実装済み ●
つぶやく機能を追加
12.
機能実装に必要なもの ● DBモデルクラス ● Repositoryクラス ●
Serviceクラス ● Controllerクラス、メソッド ● Viewファイル ● View用モデルクラス ● routesファイル ● DBテーブル定義ファイル
13.
コードジェネレーションのためのトリック プロジェクトのコーディングルールをきっちり決める ● DBからの取得はIndexをはってあるフィールド を条件にしてでしか取得してこない ● Controllerの名前とメソッドから、URLを決定で きる
14.
どうでした? コードジェネレーションは非常に強力です。 ● ロジックのみに集中してコード出来る ● 新しい機能の追加が早く+確実+フォーマット が統一される ●
プロジェクトのルールが変わらない範囲の仕様 変更ならば、非常に楽に修正できる ● プロジェクトのルールが変わっても、少しの修正 で全てを直せる
15.
コードジェネレーションの欠点 ● コードジェネレーションを作るためのコストがか かる(今回のものぐらいで5時間程度かかりまし た。) -> フレームワーク化できたりするかな? ●
例外的なことに対応しにくい -> 既存コードと生成コードをうまくマージする機能 を付けることでわりと解決します
16.
実プロジェクトでは ● マーカーを仕込むことで、ファイルの一部のみ 自動生成されたコードを埋め込めるようにして いる ● クライアントと共有したいモデルクラスや定数も 生成 ●
デバッグ環境では、DBのテーブル更新も自動 化 ● DBのマイグレーションファイルも生成
17.
参考文献 Code generation in
action(Amazon) エリック・エヴァンスのドメイン駆動設計(Amazon)
Download now