Date post: | 06-Dec-2014 |
Category: |
Documents |
Upload: | takafumi-ikeda |
View: | 6,187 times |
Download: | 3 times |
Play! と業務と私@ikeike443
2011/08/06 第一回 Playframework 勉強会 In 関西
11年8月6日土曜日
Play! の (・∀・)イイネ!!@ikeike443
2011/08/06 第一回 Playframework 勉強会 In 関西
11年8月6日土曜日
自己紹介
11年8月6日土曜日
@ikeike443
池田尚史(いけだたかふみ)
株式会社シャノン
Jenkinsプラグイン開発者
Playframework好き
11年8月6日土曜日
略歴2001年 コンサルタントとしてスタート
SAPの導入とか
2005年~2009年 業務パッケージソフト開発者
Delphi, Java を使った3-tierのアプリ(not web)
2010年~ シャノンでWebサービス開発者
11年8月6日土曜日
シャノンの紹介マーケティングプラットフォームというサービスをSaaS型で提供しています
見込み顧客管理システムです
11年8月6日土曜日
シャノンの紹介キャンペーン、メール配信、Webトラッキングなど
イベント、セミナー管理に特に強いです
デブサミ、Interopなどのイベントにも使われています
企業のマーケティング部門で使っていただいています
11年8月6日土曜日
私の位置づけ・主業務ソリューションエンジニア的な仕事をしています
自社APIの利用サポートなどもしています
自社プロダクトと、SalesForce、社内システム、Webサイト(MTやWordpress)との連携システム構築や、その支援も行っています
自社プロダクトはPerlなのに私だけJava!
11年8月6日土曜日
playdocjaの翻訳をほんのちょっとだけ手伝ってます
11年8月6日土曜日
翻訳協力者募集中です!
11年8月6日土曜日
勢いで日本Playframeworkユーザー会ML作っちゃった
11年8月6日土曜日
http://groups.google.com/group/play_ja
11年8月6日土曜日
是非、ご参加を!
11年8月6日土曜日
私とPlay!
11年8月6日土曜日
実は1.0.1から使ってます
きっかけは
11年8月6日土曜日
ある日
11年8月6日土曜日
Javaでプロダクト書いてよ
(Oracle出身のCTOは元々Javaのエンジニア)
11年8月6日土曜日
Railsじゃだめですか? と言いかけたその時!
11年8月6日土曜日
11年8月6日土曜日
HotDeployサポート
ActiveRecordっぽい機構がある
URLマッピングも超単純
なにより、XML を書かなくてイイ!!
11年8月6日土曜日
キタ━━━━(゚∀゚)━━━━ッ!!
11年8月6日土曜日
2010年1月頃、1.0.1 から触り始めた
1.0.2 で1案件
1.0.3.2 で 2案件 + 1プロダクト
1.1.1 で 1案件
1.2.2 で新人教育を兼ねて 1案件
1.2.2 でプロトタイプ 2件 作成中
11年8月6日土曜日
Jenkins plugin も書いた
11年8月6日土曜日
業務で使ってみた!!
充分使える! 使いやすい!
で、特に感じたPlayのいいところを宣伝!
今日のお話し
11年8月6日土曜日
Play! の (・∀・)イイネ!!
11年8月6日土曜日
Playclipse@erwan が作ってるEclipseプラグイン
https://github.com/erwan/playclipse
11年8月6日土曜日
PlayclipseECLIPSE_HOME/dropins に入れて再起動
m/v/c/routesボタン
view上でクラス名補完
11年8月6日土曜日
Hot DeployECJ(Eclipse Compiler for Java)を使ってる
他に比べてHotDeployのトラブルが極端に少ない(ハズだと思うが未検証)
Sessionを持たない構造なのが大きい?
後述のスキーマ自動変更と組み合わせると再起動ゼロで開発できる
11年8月6日土曜日
JPA on steroidsXMLを書かずとも動く(CoC!)
@Entityアノテーションを打つだけ
public なフィールドは全てDBスキーマとして利用
getter/setter いらない(書くことも出来る)
11年8月6日土曜日
JPA on steroidsPlay! はデフォルトでスキーマ自動変更がOn(DEV)
Modelクラスを変更するだけで勝手にCreate/Alterが発行されてスキーマが更新される
緩くDB設計して、細部は作りながら微調整できる
11年8月6日土曜日
DBプラグインhttps://github.com/pepite/play--database
内部でHibernateのSchemaExportを利用してる
開発時はPlay! に任せてスキーマ変更
固まったらDDLを抜き出し、整形し直してリリース
11年8月6日土曜日
p6spyも普通に使えますPlay! が実行時に発行してるSQLを見たいならp6spy
conf/application.conf に下記のように書く
db.driver=com.p6spy.engine.spy.P6SpyDriver
lib 配下に p6spy.jar を置く
conf 配下に spy.properties を置けばOK
11年8月6日土曜日
ノンブロッキングI/OContinuation の実装がされている
1リクエスト中に重たい処理があってもスレッドを占有しない(みたい)
大量のリクエストを上手くさばくことが出来る
11年8月6日土曜日
ノンブロッキングI/Onode.js との比較記事あり
個人的に翻訳しているが未公開
http://www.subbu.org/blog/2011/03/nodejs-vs-play-for-front-end-apps11年8月6日土曜日
ノンブロッキングI/OJava のみのサポート
Java であっても、war にして サーブレットコンテナに載せてしまうと恩恵を受けられない(ハズ)
※ ServletWrapperを経由しちゃうので
素の Play! をそのままデプロイすべき
11年8月6日土曜日
MemcachedPlayにはHttpSessionはない
Controller#sessionの実態はただのCookie
セッション管理にはMemcachedを使うのがおすすめ
セッションレプリケーション?なにそれ美味しいの
11年8月6日土曜日
MemcachedMemcachedを複数クラスタで使うのも簡単
memcached.1.host=mem.shanon.co.jp:11211
memcached.2.host=mem2.shanon.co.jp:11211
11年8月6日土曜日
お手軽なインタセプタController にプリセット
@Before, @After, @Catch, @Finally
それぞれ、Controllerの初期処理、終了処理、例外処理として共通化して書ける
11年8月6日土曜日
お手軽なインタセプタ@With
各Controllerを横断して挿し込みたい処理を書く
障害通知メール、ロギング、認証などに使える
11年8月6日土曜日
@With(Aop.class)public class MyController extends Controller{....}
public Aop extends Controller{ @Before(priority=1) public static void checkCSRF{ ... } @Before(priority=2) public static void auth{ ... } @Catch(priority=99,value=Exception.class) public static void sendAlert(){ new SimpleMail.send(“Alert!”); }}
11年8月6日土曜日
テンプレートも悪くないhtmlを切りだしてユーザー定義タグを作れる
複数画面で使うようなViewを部品化
Javaで拡張タグも作れる
最終的には素のGroovyをゴリゴリ書く
※ フィクスチャにも同じエンジンを適用できる(後述)
11年8月6日土曜日
Job非同期ジョブ実行の仕組みがある
cron の代わりに使える
実行サイクルをアノテーションで記述
@OnApplicationStart, @On, @Every
11年8月6日土曜日
Job実行サイクルの外出し可能
ジョブコントローラに下記
@On(“cron.somethingjob”)
conf/application.conf に下記
cron.somethingjob=0 * * * * ?
11年8月6日土曜日
Job環境によってジョブ実行を止めることも出来る
%test.cron.somethingjob=never
%prod.cron.somethingjob=never
※ 1.1で取り込まれた私のパッチです
11年8月6日土曜日
環境の切り替えplay id の機構を使う
conf/application.conf
%mymac.db=mem
%prod.db=mysql...
11年8月6日土曜日
テスト・CI以下が組み込まれており、テスト・CIもしやすい
JUnit
HtmlUnit + Selenium
H2 (インメモリDB) ※1.1.1以前まではHSQLDB
フィクスチャ
Coberturaプラグイン
11年8月6日土曜日
Jenkins勉強会でも発表させていただきました
11年8月6日土曜日
フィクスチャPlay! のテンプレートタグが書ける
つまりGroovyも書ける(ハズ)
例
11年8月6日土曜日
依存関係管理Play1.2からの新機能
Mavenリポジトリを使って推移的依存関係解決
内部ではivyを使ってる(Gradleと一緒?)
下記のように実行出来る
$ play deps
$ play auto-test --deps
11年8月6日土曜日
依存関係管理外部リポジトリも使える
私は社内Mavenリポジトリを指定してます
conf/dependencies.ymlの例
11年8月6日土曜日
repositories: - Shanon: type: http artifact: "http://ts-development3.shanon.co.jp/repo/SsApi/[artifact]/[revision]/[artifact]-[revision].[ext]" contains: - SsApi -> SsApiCommon 0.1
11年8月6日土曜日
play auto-test はまり道play サーバが起動してからFirephoque(HtmlUnit)が起動しないといけない
auto-test コマンド内で、logs/system.out の特定文字列を監視してる
log4j を使ってると system.out に出力されなくなる!
気をつけて使いましょう
11年8月6日土曜日
play auto-test はまり道私は下記のようにしています
log4j.properties を2つ用意
conf/application.conf を下記のように設定
application.log.path=log4j.properties
%test.application.log.path=log4.properties.autotest
11年8月6日土曜日
Jenkins play-plugin要望受付中
軽くデモ
11年8月6日土曜日
その他の (・∀・)イイネ!!API書きやすい(renderXML, renderJSON)
メールもコントローラで書く
マルチパートも簡単に書け管理しやすい
セキュリティもOK
CSRF対策も組み込みで対応
Websocket!
11年8月6日土曜日
Play! の (>_<)キモイネ!!
11年8月6日土曜日
キモかわいいところ
Controller内部でExceptionをGoToに使ってる
play.classloading.Enhancerパッケージ
LocalVariablesNamesEnhancer
ControllersEnhancer
ContinuationEnhancer
11年8月6日土曜日
この後も…今日は Play! について語らいましょう!
11年8月6日土曜日
11年8月6日土曜日