SlideShare a Scribd company logo
Submit Search
Upload
Dslからのコードジェネレーションで楽々play開発
Report
Yoshiteru Takeshita
Geisha Tokyo Entertainment Inc.
Follow
•
5 likes
•
3,184 views
1
of
17
Dslからのコードジェネレーションで楽々play開発
•
5 likes
•
3,184 views
Download Now
Download to read offline
Report
Engineering
Play framework 2 meetup http://connpass.com/event/6020/ の発表資料です。
Read more
Yoshiteru Takeshita
Geisha Tokyo Entertainment Inc.
Follow
Recommended
C#のやさしさを語る時間
kamukiriri
1.2K views
•
29 slides
Cocoa勉強会201302
Satoshi Oomori
1K views
•
18 slides
西区勉強会用スライド
Hiromi Kai
1.2K views
•
15 slides
【アジャイルサムライ】6章_ユーザストーリーを集める
Akio Terayama
7.3K views
•
48 slides
2014 08-30 life with roslyn
shibuki
8.4K views
•
26 slides
ラベリング 基本6-違う部分を明示する
Mizuhiro Kaimai
115 views
•
9 slides
More Related Content
What's hot
TypeScript補完計画 for Sublime Text 2
kamukiriri
4.8K views
•
19 slides
メタプログラミングでExcel仕様書よさらば
Kouji Matsui
15.9K views
•
65 slides
Roslynで体験してみるC#スクリプト #cs_fukuoka
Yuta Matsumura
2.1K views
•
25 slides
古い?ダサい?まだまだイケルChef!
Naoto Ishizawa
792 views
•
17 slides
ディープラーニングのフレームワークの自作
Ko Hamada
1.1K views
•
21 slides
俺とモデリング
Masayuki KaToH
596 views
•
33 slides
What's hot
(8)
TypeScript補完計画 for Sublime Text 2
kamukiriri
•
4.8K views
メタプログラミングでExcel仕様書よさらば
Kouji Matsui
•
15.9K views
Roslynで体験してみるC#スクリプト #cs_fukuoka
Yuta Matsumura
•
2.1K views
古い?ダサい?まだまだイケルChef!
Naoto Ishizawa
•
792 views
ディープラーニングのフレームワークの自作
Ko Hamada
•
1.1K views
俺とモデリング
Masayuki KaToH
•
596 views
データベース定義書の更新は再考の仕事
Atsushi Yasuda
•
2.5K views
コマンドライン使いもLibreOffice
Kiwamu Okabe
•
3.2K views
Viewers also liked
やさしいIteratee入門
Takashi Kawachi
8.7K views
•
44 slides
C# linq入門 意図編
Fujio Kojima
1.2K views
•
48 slides
SimpleModeler
Tomoharu ASAMI
2.5K views
•
68 slides
一番簡単なWebSocketの試し方
Shunji Konishi
13.2K views
•
11 slides
ORと経済学の「結婚」問題
Yosuke YASUDA
2.6K views
•
40 slides
文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox
Tomoharu ASAMI
3.1K views
•
61 slides
Viewers also liked
(20)
やさしいIteratee入門
Takashi Kawachi
•
8.7K views
C# linq入門 意図編
Fujio Kojima
•
1.2K views
SimpleModeler
Tomoharu ASAMI
•
2.5K views
一番簡単なWebSocketの試し方
Shunji Konishi
•
13.2K views
ORと経済学の「結婚」問題
Yosuke YASUDA
•
2.6K views
文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox
Tomoharu ASAMI
•
3.1K views
学ばないDSL
Kenta USAMI
•
1.2K views
DSLによる要求獲得でスーパーアジャイル
陽平 山口
•
1.2K views
恋人がいない30代前半女性が5年以内に結婚できる確率は17.6%【アラサー未婚女性へ】
Tomoya Tatekawa
•
5.4K views
RubyでDSL
Yukimitsu Izawa
•
12.1K views
DSLについて語るときに僕の語ること
Tomohiro Nishimura
•
1.8K views
Twitter API最新事情 - API Meetup Tokyo #1 #apijp
Yusuke Yamamoto
•
10.1K views
SI屋のためのF# ~DSL編~
bleis tift
•
5.7K views
この人と結婚していいの?を読んで
Shumpei Shiraishi
•
2.1K views
DSLの過去と未来
Akio Tajima
•
2.2K views
全角チルダ問題
tsudaa
•
104.3K views
地獄のElixir(目黒スタートアップ勉強会)
Tsunenori Oohara
•
12.8K views
婚活偏差値ランキングと傾向と対策
大和 金太郎
•
8.8K views
最高の自分を手に入れる方法
大和 金太郎
•
5.7K views
婚活の戦略「恋愛マスターのマインドセット」
大和 金太郎
•
6K views
Similar to Dslからのコードジェネレーションで楽々play開発
効率10倍UP 秀丸IDE化法
将 高野
4.8K views
•
23 slides
Scalaで萌える関数型プログラミング[エッセンシャル版]
Ra Zon
2K views
•
30 slides
Dot net+sql server tips
Oda Shinsuke
1.2K views
•
21 slides
トランザクションスクリプトのすすめ
pospome
3K views
•
14 slides
MongoDB〜その性質と利用場面〜
Naruhiko Ogasawara
65.2K views
•
61 slides
CA15卒勉強会 メタプログラミングについて
Huy Do
581 views
•
22 slides
Similar to Dslからのコードジェネレーションで楽々play開発
(20)
効率10倍UP 秀丸IDE化法
将 高野
•
4.8K views
Scalaで萌える関数型プログラミング[エッセンシャル版]
Ra Zon
•
2K views
Dot net+sql server tips
Oda Shinsuke
•
1.2K views
トランザクションスクリプトのすすめ
pospome
•
3K views
MongoDB〜その性質と利用場面〜
Naruhiko Ogasawara
•
65.2K views
CA15卒勉強会 メタプログラミングについて
Huy Do
•
581 views
デザインパターンを用いたリファクタリング
kei takakuda
•
1.4K views
C++ REST SDKを使ってWebサービスを利用する
You&I
•
6.7K views
Unityでreflection入門
Yoshiteru Takeshita
•
4.3K views
.NET Core と .NET Framework (続きは de:code 2016 で!)
Akira Inoue
•
2.7K views
プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6
健太 田上
•
754 views
Scalaで萌える関数型プログラミング[完全版]
Ra Zon
•
6.9K views
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
Fujio Kojima
•
2.7K views
インターネット広告の概要とシステム設計
MicroAd, Inc.(Engineer)
•
579 views
Inside of Asakusa DSL
Suguru ARAKAWA
•
3.4K views
[LT] T sql の parse と generator
Oda Shinsuke
•
746 views
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
•
88K views
Rデータ入力編
Monta Yashi
•
1K views
3日時間をもらったのでTypeScriptを触ってみた
Yasushi Kato
•
28K views
「Delphi/C++BuilderユーザーのためのSencha入門」
Embarcadero Technologies
•
871 views
More from Yoshiteru Takeshita
GraphQL with scala
Yoshiteru Takeshita
486 views
•
11 slides
Developing large-scale smart-phone game servers by a single person
Yoshiteru Takeshita
325 views
•
48 slides
Play framework+docker+aws ecr+aws beanstalk で楽々デプロイ
Yoshiteru Takeshita
618 views
•
8 slides
Scala Matsuri 2016コミュニティセッション
Yoshiteru Takeshita
694 views
•
9 slides
Scala導入あれこれ
Yoshiteru Takeshita
905 views
•
10 slides
Scala web framework比較
Yoshiteru Takeshita
5.3K views
•
10 slides
More from Yoshiteru Takeshita
(6)
GraphQL with scala
Yoshiteru Takeshita
•
486 views
Developing large-scale smart-phone game servers by a single person
Yoshiteru Takeshita
•
325 views
Play framework+docker+aws ecr+aws beanstalk で楽々デプロイ
Yoshiteru Takeshita
•
618 views
Scala Matsuri 2016コミュニティセッション
Yoshiteru Takeshita
•
694 views
Scala導入あれこれ
Yoshiteru Takeshita
•
905 views
Scala web framework比較
Yoshiteru Takeshita
•
5.3K views
Recently uploaded
lt.pptx
tomochamarika
39 views
•
13 slides
図解で理解するvetKD
ryoo toku
84 views
•
22 slides
SSH超入門
Toru Miyahara
12 views
•
21 slides
how query cost affects search behavior translated in JP
Tobioka Ken
9 views
•
16 slides
robotics42.pptx
Natsutani Minoru
165 views
•
18 slides
AIで始めるRustプログラミング #SolDevHub
K Kinzal
20 views
•
25 slides
Recently uploaded
(7)
lt.pptx
tomochamarika
•
39 views
図解で理解するvetKD
ryoo toku
•
84 views
SSH超入門
Toru Miyahara
•
12 views
how query cost affects search behavior translated in JP
Tobioka Ken
•
9 views
robotics42.pptx
Natsutani Minoru
•
165 views
AIで始めるRustプログラミング #SolDevHub
K Kinzal
•
20 views
3Dプリンタでロボット作るよ#1_黎明編
Yoshihiro Shibata
•
19 views
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)