Enviar pesquisa
Carregar
Play meetup-2-dev-best-practices
•
1 gostou
•
943 visualizações
K
k4200
Seguir
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 39
Baixar agora
Baixar para ler offline
Recomendados
PowerShellが苦手だった男がPowerShellを愛するようになるまで
PowerShellが苦手だった男がPowerShellを愛するようになるまで
Kazuhiro Matsushima
How to debug a perl script using gdb
How to debug a perl script using gdb
akirahiguchi
"Continuous Publication" with Python: Another Approach
"Continuous Publication" with Python: Another Approach
Daisuke Miyakawa
C++11とゲーム製作
C++11とゲーム製作
uchan_nos
Ocamlでpfffを拡張した話
Ocamlでpfffを拡張した話
Rie Nakau
Google container builderと友だちになるまで
Google container builderと友だちになるまで
lestrrat
GoらしいAPIを求める旅路 (Go Conference 2018 Spring)
GoらしいAPIを求める旅路 (Go Conference 2018 Spring)
lestrrat
PSR-1 と PSR-2 を5分でざっくり理解する
PSR-1 と PSR-2 を5分でざっくり理解する
Wataru Terada
Recomendados
PowerShellが苦手だった男がPowerShellを愛するようになるまで
PowerShellが苦手だった男がPowerShellを愛するようになるまで
Kazuhiro Matsushima
How to debug a perl script using gdb
How to debug a perl script using gdb
akirahiguchi
"Continuous Publication" with Python: Another Approach
"Continuous Publication" with Python: Another Approach
Daisuke Miyakawa
C++11とゲーム製作
C++11とゲーム製作
uchan_nos
Ocamlでpfffを拡張した話
Ocamlでpfffを拡張した話
Rie Nakau
Google container builderと友だちになるまで
Google container builderと友だちになるまで
lestrrat
GoらしいAPIを求める旅路 (Go Conference 2018 Spring)
GoらしいAPIを求める旅路 (Go Conference 2018 Spring)
lestrrat
PSR-1 と PSR-2 を5分でざっくり理解する
PSR-1 と PSR-2 を5分でざっくり理解する
Wataru Terada
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Shoot Morii
Play2 scalaを2年やって学んだこと
Play2 scalaを2年やって学んだこと
dcubeio
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
Hiroaki KOBAYASHI
DEV-011_TypeScript ~Any browser. Any host. Any OS. Open Source~
DEV-011_TypeScript ~Any browser. Any host. Any OS. Open Source~
decode2016
Small Basic を実務で使ってみませんか - CLR/H第56回勉強会ライトニングトーク
Small Basic を実務で使ってみませんか - CLR/H第56回勉強会ライトニングトーク
Jun-ichi Sakamoto
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころ
Junya Hayashi
実は怖くないDevOps
実は怖くないDevOps
Masanori Ishigami
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
辰徳 斎藤
Fluentd casual
Fluentd casual
oranie Narut
Twitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hack
kimukou_26 Kimukou
Easy scripting in Go
Easy scripting in Go
naoty_bot
Flutterを体験してみませんか
Flutterを体験してみませんか
cch-robo
Djangoフレームワークの紹介
Djangoフレームワークの紹介
Shinya Okano
Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用
Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用
Akira Inoue
10min r study_tokyor25
10min r study_tokyor25
Nobuaki Oshiro
10min r study_tokyor25
10min r study_tokyor25
Nobuaki Oshiro
Djangoフレームワークの紹介
Djangoフレームワークの紹介
Shinya Okano
TypeScript と Visual Studio Code
TypeScript と Visual Studio Code
Akira Inoue
Python東海GAEやってみた
Python東海GAEやってみた
Mori Shingo
Go Friday 傑作選
Go Friday 傑作選
Takuya Ueda
sbt 0.10 for beginners?
sbt 0.10 for beginners?
k4200
Lifthub (rpscala #31)
Lifthub (rpscala #31)
k4200
Mais conteúdo relacionado
Semelhante a Play meetup-2-dev-best-practices
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Shoot Morii
Play2 scalaを2年やって学んだこと
Play2 scalaを2年やって学んだこと
dcubeio
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
Hiroaki KOBAYASHI
DEV-011_TypeScript ~Any browser. Any host. Any OS. Open Source~
DEV-011_TypeScript ~Any browser. Any host. Any OS. Open Source~
decode2016
Small Basic を実務で使ってみませんか - CLR/H第56回勉強会ライトニングトーク
Small Basic を実務で使ってみませんか - CLR/H第56回勉強会ライトニングトーク
Jun-ichi Sakamoto
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころ
Junya Hayashi
実は怖くないDevOps
実は怖くないDevOps
Masanori Ishigami
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
辰徳 斎藤
Fluentd casual
Fluentd casual
oranie Narut
Twitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hack
kimukou_26 Kimukou
Easy scripting in Go
Easy scripting in Go
naoty_bot
Flutterを体験してみませんか
Flutterを体験してみませんか
cch-robo
Djangoフレームワークの紹介
Djangoフレームワークの紹介
Shinya Okano
Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用
Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用
Akira Inoue
10min r study_tokyor25
10min r study_tokyor25
Nobuaki Oshiro
10min r study_tokyor25
10min r study_tokyor25
Nobuaki Oshiro
Djangoフレームワークの紹介
Djangoフレームワークの紹介
Shinya Okano
TypeScript と Visual Studio Code
TypeScript と Visual Studio Code
Akira Inoue
Python東海GAEやってみた
Python東海GAEやってみた
Mori Shingo
Go Friday 傑作選
Go Friday 傑作選
Takuya Ueda
Semelhante a Play meetup-2-dev-best-practices
(20)
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Play2 scalaを2年やって学んだこと
Play2 scalaを2年やって学んだこと
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
DEV-011_TypeScript ~Any browser. Any host. Any OS. Open Source~
DEV-011_TypeScript ~Any browser. Any host. Any OS. Open Source~
Small Basic を実務で使ってみませんか - CLR/H第56回勉強会ライトニングトーク
Small Basic を実務で使ってみませんか - CLR/H第56回勉強会ライトニングトーク
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころ
実は怖くないDevOps
実は怖くないDevOps
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
Fluentd casual
Fluentd casual
Twitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hack
Easy scripting in Go
Easy scripting in Go
Flutterを体験してみませんか
Flutterを体験してみませんか
Djangoフレームワークの紹介
Djangoフレームワークの紹介
Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用
Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用
10min r study_tokyor25
10min r study_tokyor25
10min r study_tokyor25
10min r study_tokyor25
Djangoフレームワークの紹介
Djangoフレームワークの紹介
TypeScript と Visual Studio Code
TypeScript と Visual Studio Code
Python東海GAEやってみた
Python東海GAEやってみた
Go Friday 傑作選
Go Friday 傑作選
Mais de k4200
sbt 0.10 for beginners?
sbt 0.10 for beginners?
k4200
Lifthub (rpscala #31)
Lifthub (rpscala #31)
k4200
Lifthub (#rpscala 26)
Lifthub (#rpscala 26)
k4200
Scala勉強会 in 渋谷 2010→2011(鹿島)
Scala勉強会 in 渋谷 2010→2011(鹿島)
k4200
Grass
Grass
k4200
Chat+twitter app with lift
Chat+twitter app with lift
k4200
第5回scala勉強会in渋谷
第5回scala勉強会in渋谷
k4200
第4回scala勉強会in渋谷
第4回scala勉強会in渋谷
k4200
Mais de k4200
(8)
sbt 0.10 for beginners?
sbt 0.10 for beginners?
Lifthub (rpscala #31)
Lifthub (rpscala #31)
Lifthub (#rpscala 26)
Lifthub (#rpscala 26)
Scala勉強会 in 渋谷 2010→2011(鹿島)
Scala勉強会 in 渋谷 2010→2011(鹿島)
Grass
Grass
Chat+twitter app with lift
Chat+twitter app with lift
第5回scala勉強会in渋谷
第5回scala勉強会in渋谷
第4回scala勉強会in渋谷
第4回scala勉強会in渋谷
Play meetup-2-dev-best-practices
1.
Play! framework を使用した 小規模プロジェクトにおける Best
Practices () ! 鹿島和郎(かしまかずお)
2.
自己紹介 • 鹿島和郎(かしまかずお) • 家から出ないフリーのエンジニア。 •
同じく出不精のフリーエンジニア数人で 受託開発とかの仕事をしてます。 • リモート開発に最適化させた開発プロセスを作りたい と思って、いろいろやってます。 • GitHub: k4200, Twitter @k4200jp
3.
話す内容 • Play! framework
+ その他、で何か作ってます。 • その小規模開発プロジェクトでの Best Practices を 公開します。 • 懇親会の時に、みなさんの事例も聞かせて下さい。
4.
こんなの作ってます
5.
こんなの作ってます 開発チーム向け 内部文書検索エンジン http://issf.hidebu.info/
6.
こんなの作ってます 自分達用に作り始めた。 結構便利になってきたので ひっそり一般公開(β版)。 http://issf.hidebu.info/
7.
こんなの作ってます ひっそりすぎて 殆ど誰も使ってくれません。 http://issf.hidebu.info/
8.
こんなの作ってます 興味のある方は 声をかけてください。 m(_ _)m http://issf.hidebu.info/
9.
こんなの作ってます できること http://issf.hidebu.info/
10.
こんなの作ってます 以下のものをまとめて検索できます。 • GitHub issues •
GitHub wiki • Slack • Facebook groups • Gmail • 添付ファイル(pdf, docx, xlsx etc.) • その他、順次対応中です。
11.
こんなの作ってます こんなことありませんか? http://issf.hidebu.info/
12.
こんなの作ってます あれー、この部分の仕様 前にどっかで教えてもらった 気がするなぁ。 http://issf.hidebu.info/
13.
こんなの作ってます どのissueだっけなー Slackだったかな wikiだった気もするし・・・ http://issf.hidebu.info/
14.
こんなの作ってます とか http://issf.hidebu.info/
15.
こんなの作ってます GitHub の wiki
って なんで検索できねーんだよ http://issf.hidebu.info/
16.
こんなの作ってます という悩みを解決します。 http://issf.hidebu.info/
17.
こんなの作ってます デモ http://issf.hidebu.info/
18.
小規模プロジェクトの 開発環境 ※全て個人的な意見です
19.
開発環境 3つの環境 • ローカル開発 →
Vagrant • テスト → VM x 1 on Azure • 本番 → VM x 3 on Azure
20.
開発環境 ポイント • Ansibleで一発で構築。 • Chef
は小規模環境には向いていない気が。 • Puppet は使ったことない。 • Ansible Best Practices になるべく準拠。 • ディストリビューションは える。
21.
開発環境 CI は CircleCI
を使用 • Play (sbt) も当然使える。 • 主要なDBやキャッシュサーバーが 最初から起動している。 • 小規模プロジェクトなら無料プラ ンで十分。
22.
開発環境 Play! framework の話が 出てこないんですけど・・・
23.
開発環境 テクノロジースタック(DB周り) • Play! framework
2.3 • Slick 2.1 (ScalikeJDBCじゃなくてすみません) • Flyway SBT plugin • PostgreSQL 9.3
24.
開発環境 DB周りのポイント - テスト •
No inMemoryDatabase • あまりテストにならない。 • 違いを考慮したテストを書く必要があったり、 本末転倒。 • DBを使うテストは並列にしない。 • sbt でテストを動かす際の、3つのレベルの 並列性に注意。
25.
開発環境 DB周りのポイント - マイグレーション •
Evolutions ではなく Flyway を使う。 • Flyway はシンプルにSQLで書けてよい。 • evolutions の嫌なところ。 • ファイル名が <数字>.sql • よく inconsistent state になる。
26.
開発環境 DB周りのポイント - マイグレーション •
Playアプリケーション起動時に勝手に起 動する系は地雷。 • 設定でオフにしても、テスト時の FakeApplication で起動したりする。 • コマンドで手動実行、あるいはデプロイ スクリプトに組み込む。
27.
開発環境 DB周りのポイント - Flyway •
ファイル名は数字ではなくてタイム スタンプにする。 • 番号がかぶるのを避ける。 • 例:V201507051534__Create_foo.sql • outOfOrder を有効にする。
28.
開発環境 DB周りのポイント - Flyway なぜ
play-flyway ではなくて Flyway SBT plugin なのか? • 後述のコード生成と相性が悪い。 • そもそも、起動するタイミングとかコン トロールしたいし、プラグインを使う意 味があまりない。
29.
開発環境 DB周りのポイント - boilerplate •
Slick の code generator が便利。 • DB構造を読み込んでScalaのソー スを作成してくれる。 • sbtプラグインがあるらしい。
30.
開発環境 /** Entity class
storing rows of table Conversation * @param id Database column id DBType(serial), AutoInc, PrimaryKey * @param dataSourceId Database column data_source_id DBType(int2) * @param lastUpdatedAt Database column last_updated_at DBType(timestamp) * @param status Database column status DBType(int2) */ case class ConversationRow(id: Int, dataSourceId: Short, lastUpdatedAt: DateTime, status: Short) /** GetResult implicit for fetching ConversationRow objects using plain SQL queries */ implicit def GetResultConversationRow(implicit e0: GR[Int], e1: GR[Short], e2: GR[DateTime]): GR[ConversationRow] = GR{ prs => import prs._ ConversationRow.tupled((<<[Int], <<[Short], <<[DateTime], <<[Short])) } /** Table description of table conversation. Objects of this class serve as prototypes for rows in queries. */ class Conversation(_tableTag: Tag) extends Table[ConversationRow](_tableTag, "conversation") { def * = (id, dataSourceId, lastUpdatedAt, status) <> (ConversationRow.tupled, ConversationRow.unapply) /** Maps whole row to an option. Useful for outer joins. */ def ? = (id.?, dataSourceId.?, lastUpdatedAt.?, status.?).shaped.<>({r=>import r._; _1.map(_=> ConversationRow.tupled((_1.get, _2.get, _3.get, _4.get)))}, (_:Any) => throw new Exception("Inserting into ? projection not supported.")) /** Database column id DBType(serial), AutoInc, PrimaryKey */ val id: Column[Int] = column[Int]("id", O.AutoInc, O.PrimaryKey) /** Database column data_source_id DBType(int2) */ val dataSourceId: Column[Short] = column[Short]("data_source_id") /** Database column last_updated_at DBType(timestamp) */ val lastUpdatedAt: Column[DateTime] = column[DateTime]("last_updated_at") /** Database column status DBType(int2) */ val status: Column[Short] = column[Short]("status") /** Index over (dataSourceId) (database name conversation_data_source_id_key) */ val index1 = index("conversation_data_source_id_key", dataSourceId) } /** Collection-like TableQuery object for table Conversation */ lazy val Conversation = new TableQuery(tag => new Conversation(tag)) 1つのテーブルでこれくらい。
31.
使ってて 便利なライブラリ
32.
便利なライブラリ SecureSocial OAuth を使っている 各種SNS、webサービスへの ログイン機能を簡単に作れる Play用のライブラリ
33.
便利なライブラリ SecureSocial • 2月から更新されてない。 • 作者はやる気はあるらしい。 •
Play 2.4対応とか。
34.
便利なライブラリ SecureSocial • その間、とりあえず fork
したバージョ ンを使っている。 • Slack 対応などを独自で追加。 • 本家に PR は送っている。 • "tv.kazu" %% "securesocial" % "3.0.2"
35.
便利なライブラリ scalacache • 複数のバックエンドを透過的に扱える。 • memoize
が簡単で便利。 import scalacache._ import memoization._ ! implicit val scalaCache = ScalaCache(new MyCache()) ! def getUser(id: Int): User = memoize { // Do DB lookup here... User(id, s"user${id}") }
36.
便利なライブラリ scalacache • 質問とかにも、作者の Chris
さん (日本語堪能)が親切に対応してくれる。
37.
その他にも 色々話したいのですが、
38.
続きは懇親会で。
39.
ありがとうございました。
Baixar agora