ikeike443のブログ

ソフトウェアビジネスに関心がある系のブログ

第二回 Playframework 勉強会 in Tokyo やりました #play_ja

10月8日にPlayframework勉強会をやりました。
http://atnd.org/events/19107


当初は30人規模の会場でやろうとしていたんですが、あっという間に定員を倍以上オーバーしてしまったため、急遽100人規模の会議室を借りて開催しました。
ニフティさんにも打診したのですが、既に同日は埋まってたので、お金を出して借りることになりました。。

そんな感じで困っていたところに、気前よく資金提供いただいた株式会社イージフ様と株式会社シャノン様には心から感謝します。
イージフ様は来週の木曜、ビックサイトで行われる「eドキュメントJAPAN2011」に、AlfrescoのCTOを招聘して、「オープンソースの視点から見るECMのグローバル市場」という題名で出展されるそうです。
ご興味のある方はぜひ足をお運びください。


勉強会を主催するのって、会場押さえたり設営したり懇親会の場所押さえたり、結構大変でしたが、やってよかったなと感じることが出来ました。
こうやって勉強会をやってみると、意外にPlayframeworkが好きな人、使ってる人が多いことに気づけて、とても心強い感覚を得られたのが収穫でした。


運営を手伝ってくれたシャノンのゆかいな仲間たち(@fujya, @yosu, @twintaro)、それから早めに来て手伝ってくれた@tan_go238さん、ありがとうございました!


さて、勉強会の発表内容について、下記に報告します。

Play! の紹介

一発目は私の発表でした。
内容的には、Playframeworkについてよく知らない人を対象に、特徴を30分で紹介するというものです。
Play! についてよく知ってもらうには実際にコードを書いて動かしてみせるのが一番いいだろう、ということでライブコーディングをやりました。
詳しくはスライドとUstreamの録画をご覧ください。
...と言いたかったのですが、ミスでこの部分は録画できていません。。さーせん。。


大体下記のようなことを紹介しました。

  • Play! はJavaEEの規約ではなく、Webのアーキテクチャに従う
  • シェアードナッシング、非同期I/Oといった特徴を持つ
  • Kloutや英ガーディアンなどが使っている
  • SASSやCoffieScript、MongoDBなどのプラグインがあり、新しいトピックへの反応が速い
  • HerokuやCloudbees、GAEなど、あらゆるPaaSにデプロイ出来る
  • Play2.0でさらに進化する

ライブコーディングの内容は下記内容のものを解説しながら10分で作る、というものでした。

  • DBアプリ
  • 管理画面付き
  • JSONを返すREST API付き

ちょっと失敗したんですがw 
現場での雰囲気から推し量るに、このライブコーディングで伝えたかったPlay! の生産性の高さと分かりやすさについては、伝わったっぽいです。


と、いろいろ喋ったんですが、一番伝えたかったことを要約すると、下記の1行に尽きます。
JavaでWeb開発するのって、本来こんなに楽しいものなんだよ!!!


ぜひ資料をご覧ください。


playdocja のこれまでとこれから

ここからはUstの録画つきです。(途中からですが。。)

@garbagetown さんは、Play!が出始めた初期の頃に日本語翻訳サイト(playdocja)を立ち上げて翻訳をしてくださっている方です。
私もすこーしだけ協力していますが、翻訳の90%以上は@garbagetownさんによるものと言っても過言ではないです。
いつもお世話になっております。


発表資料がアップされていないのでここに貼れていませんが(10月13日追記:アップされました)、内容としては下記でした。

  • playdocjaを立ち上げたきっかけは、Play!内部に組み込まれているDocViewerプラグインに気づいたこと
  • 今回は翻訳の仕方をご紹介して、みんなを翻訳者として勧誘したいということw
  • playdocjaのホスト先であるGAEが値上げしたのでHerokuあたりに引っ越そうと考えていること

これを読んでいるみなさんはもちろん、翻訳協力してくれますよね?
興味のある方は@garbagetownさんに直接Twitterで話しかけるか、play_jaのMLに投稿頂けるといいかなーと思います。


play_jaで独自ドメイン取る? って話もありましたが、ちょっと本当に検討したいですねー。

Play!で作る業務アプリケーション構成例

@genki_ さんによる、Play!で業務アプリを作っていますよ、っていうおはなし。

資料は下記です。
「業務で使うPlay!」


私も業務でPlay!を使っていますが、それは私が所属しているのが自社サービスをやっている会社だからできるのであって、SI案件でPlay!を提案して通したって言うのはすごいなーと思います。

Play!を使うとAOPも結構簡単に書けるし、業務アプリ開発にも全く問題ないよー、っていう発表でした。
これは参考になった方多かったのではないでしょうか?


また、@genki_さんは発表をiPadのkeynoteでされていて、iPadの画面を指でグリグリ触ってポインタを動かしていたんですね。
それもとても注目されていました。
iPadのkeynoteにあんな機能があるなんて知らなかった。。
そのへんも注目して御覧ください。


Play! + GAEで作ったアプリをPlay! + Heroku で動かすとどうなるか

@hagikuratakeshiさんによる発表。

Play!+GAEで作ったサービスを、Herokuに移行してみたよーっていうタイムリーでおもろい話でした。

みんなGAEの値上げには困っているみたいですね。。
Googleさんも商売なので値上げ自体はしょうがないと思うのですが、ベンダーロックインでこの価格帯だと、正直割りに合わないよねー、っていうのが会場とTLの雰囲気でしたね。。


@hagikuratakeshiさんの発表が面白いのは、ただHerokuに移行したよーだけで話が終わらず(これだけで充分興味深いんだけど)、MongoDBも使ってみたよ、Sienaで上手く動かなかったからSienaのMongoDB用PersistenceManagerを書いて動くようにしたよ、っていうところですよね。

Siena-MongoDBが本家にマージされることを期待して待ってます!

LT

LTもやりました。5分×6人で30分を予定していたのですが、一人分枠が余ったので、最後に私もLTしましたw

大阪勉強会の続きのはなし

大阪勉強会でPlay! on GAEについて発表してくれた@daiksyさんが、なんと上京してくれました!!

また大阪でもやりましょう!

Play FrameworkでWebSocketを使ってSVGのビジュアルチャットを作ってGDD open call html5に応募してみたけど落ちました

@kara_dさんによるPlay!+WebSocketの話。
電車のなかで設計してラウンジオフィスで開発して帰りの電車でデプロイした、みたいな話をさらっとするあたりかっこいいすね!

WebSocketの仕様の変わりっぷりとか、Chromeのバージョンアップの勝手っぷりとかを軽くDisってましたが、私も共感しましたw

残念ながら5分で終わりませんでしたが、とても面白いLTでした。

Play!+WebSocketハッカソンを近々やる予定みたいです。
参加してみたいなー。

HerokuのPlay! 対応について

セールスフォース社のエバンジェリストである、@mitsuhiro 岡本充洋さんもいらしてくれました。
LT枠で、Heorkuについてかっこ良くプレゼンしてくれました。

資料の洗練されっぷりにみな圧倒されていました。

Herokuはとても開発しやすくて、いいPaaSだよなーと思いましたね。

5分で説明するPlay-Scala

@masahitoさんによる、Play! Scalaの紹介。
今回の勉強会ではScalaに関する言及が少なかったのですが、@masahitoさんがやってくれました。
開発の仕方から、Anormなどのモジュールの説明まで、分かりやすく紹介してくれました。

NettyはPlay!でどう使われてるのか的な話

@tan_go238さんによる、Play!内部でのNettyの使われ方に関するLT。
@tan_go238さんも大阪の勉強会の続きでLTしてくれました!
Play!の内部では、NettyというJBoss由来の非同期I/Oライブラリを使っているのですが、そいつがPlay!内部でどう使われているかについて、さらっと分かりやすく説明してくれました。

この辺のコードを読むとすごく面白いので、ソースコードリーディングもやりたいですね!て話を懇親会でしましたw
やりたいなあ。

Jenkins+Play!で気軽にCI

最後に、枠が余ってたので私がしゃべりました。
今年2月ごろにJenkins勉強会でLTした内容をもう一回しゃべりました。
Jenkins勉強会でやったときは5分で終わらなかったので、リベンジですw

ちなみに、見事5分以内にしゃべり終わりました!
やったね!!

懇親会

私は腸を痛めていたので飲めませんでしたが、私以外の皆さんはとても楽しく飲んでいましたw
いや、私もウーロン茶で楽しく語り合えてとてもよかったです。

Play!に興味を持っている人、既にぞっこんLOVEな人、いろんな方がいらっしゃいました。

とっても楽しかったです。

次回は?

次回はいつやりましょうかね。
2,3ヶ月後にはやりたいなーとは思ってるんですが。
発表形式でやるか、ソースコードリーディングやるか、または他のことやるか。

続きはMLで話しましょう!

また一緒にPlay!しましょう!!

Playframework勉強会やります

今週の土曜日に、Playframework勉強会を執り行ないます。
http://atnd.org/events/19107

あいにく既に満席ですが、当日になってキャンセルされる方がでる可能性もあります。

興味が有る方はとりあえず補欠登録してみてください。当日来てみたら入れた、って可能性は充分あります。


当日来場が難しい方は、Ustで御覧ください。

下記がUst放送予定地です。
http://www.ustream.tv/channel/playframework%E5%8B%89%E5%BC%B7%E4%BC%9A


SalesForceエバンジェリストの方もいらしてPlay on HerokuについてLTでお話ししてくれますし、楽しい勉強会になるといいなと思います。

Play! on Heroku 翻訳

HerokuがJavaのみならず、Playframeworkをネイティブにサポートすると発表しました
以下はその翻訳です。一部意訳したりしてます。翻訳の間違いなど、是非ご指摘ください! Play!いいよね!


Play! on Heroku
by Jesper - 8 hrs ago


JavaRubyの両方を経験しているWeb開発者はしばしば疑問に思うことがある。なぜJavaのWeb開発はこんなにややこしいんだ? Ruby, 特にRailsで開発するとこんなにシンプルなのに。
この疑問に答える方法はたくさんある。しかし重要なのは、Java言語そのものに問題があるわけではないということだ。Play! Frameworkの中の人たちが、RubyにおけるRailsのように、エレガントで生産的なWebフレームワークを作り、そのことを証明してみせた。


ここに、Play! on Herokuのパブリックベータをアナウンスできることを大変嬉しく思う。


Play! on Heroku クイックスタート


Play!のver.1.2.3以降をダウンロードし、Play!アプリケーションを新規作成してみよう:

$ play new helloworld
~        _            _ 
~  _ __ | | __ _ _  _| |
~ | '_ \| |/ _' | || |_|
~ |  __/|_|\____|\__ (_)
~ |_|            |__/   
~
~ play! 1.2.3, http://www.playframework.org
~
~ The new application will be created in /Users/jjoergensen/dev/tmp/helloworld
~ What is the application name? [helloworld] 
~
~ OK, the application is created.
~ Start it with : play run helloworld
~ Have fun!
~
$ cd helloworld

次にProcfileを作成する:

web: play run --http.port=$PORT $PLAY_OPTS 

Gitにコミットし、Cedarにアプリを作成し、デプロイする:

$ git init
$ git add .
$ git commit -m init

$ heroku create --stack cedar

$ git push heroku master
Counting objects: 30, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (22/22), done.
Writing objects: 100% (30/30), 35.95 KiB, done.
Total 30 (delta 1), reused 0 (delta 0)

-----> Heroku receiving push
-----> play app detected
-----> Installing Play!..... done
-----> Building Play! application...
       ~        _            _ 
       ~  _ __ | | __ _ _  _| |
       ~ | '_ \| |/ _' | || |_|
       ~ |  __/|_|\____|\__ (_)
       ~ |_|            |__/   
       ~
       ~ play! 1.2.3, http://www.playframework.org
       ~
       1.2.3
       Play! application root found at ./
       Resolving dependencies: .play/play dependencies ./ --forceCopy --sync --silent -Duser.home=/tmp/build_2rgcv7zjrtyul 2>&1
       ~ Resolving dependencies using /tmp/build_2rgcv7zjrtyul/conf/dependencies.yml,
       ~
       ~
       ~ No dependencies to install
       ~
       ~ Done!
       ~
       Precompiling: .play/play precompile ./ --silent 2>&1
       Listening for transport dt_socket at address: 8000
       16:14:33,716 INFO  ~ Starting /tmp/build_2rgcv7zjrtyul
       16:14:34,372 INFO  ~ Precompiling ...
       16:14:37,656 INFO  ~ Done.

-----> Discovering process types
       Procfile declares types -> web
-----> Compiled slug size is 26.2MB
-----> Launching... done, v5
       http://blazing-water-545.herokuapp.com deployed to Heroku

デプロイできたら、URLにアクセスして、Herokuの上でPlay!が動いていることを確認しよう。


ラジカルなアプローチ


JavaでWebアプリが書かれれば書かれるほど、Web開発を簡単にしようと試みるフレームワークが増殖していく。しかしこの問題にクリーンルームアプローチで取り組もうとするフレームワークは存在しなかった。皆、サーブレットコンテナやJSPとの互換性を保たないといけないと思い込み、スタンダードなJavaのWebアプリ構成に準拠しようとし、Javaオブジェクト指向の原則に適合させようとしてきた。時にはそれが無理なことだと分かっていても。


Play!はフレッシュな状態から書かれた最初のJava Webフレームワークだ。Railsから多くのアイディアを拝借し、built-for-deploymentなフレームワークとして作られている。Play!アプリケーションはパッケージにしたり、配布したり、といったことは意図されていない。そのままデプロイ出来るように作られている。これはJavaのネストしたパッケージ構造や、XMLによる制御を捨てることが出来、WARファイルのことを忘れることができ、代わりに分かりやすく、生産的なプロジェクト構造を保つことが出来る。


例えば、helloworldアプリは一個のJavaクラスからなるコントローラによって作ることが出来る:

package controllers;

import play.*;
import play.mvc.*;

import java.util.*;

import models.*;

public class Application extends Controller {

    public static void index() {
        render();
    }

}


このクラスはindex()というメソッドによってHTTPのエントリポイントを定義している。このメソッドはindex.htmlというテンプレートファイルに対して、render()というメソッドでレンダリングを行っている。


定型的なクラスもなければ、XMLの設定ファイルも必要ない。Play!は規約をフレッシュなアプローチで提供している。そして意味の有るところではStaticコードを使う。例えば、コントローラのエントリポイントはステートレスであり、オブジェクト指向であるよりもHTTP指向であるべきなので、Staticメソッドとして実装されているのだ(上記index()メソッド)。


他にも、開発者にとって嬉しい機能が付いている。例えば開発時の自動コンパイルだ。君も、他のJavaのWebフレームワークに比べて、Play!のドラマチックとでも言うべき生産性の高さを目のあたりにすることになる。

コンテナレス


Jettyと言えばコンテナレス開発の筆頭だった。ただ、十年以上もの間、たった一人でその場に立ち続けていた感じだ。
その使い勝手はちょっと悪いことがあった。なぜなら、コンテナレス開発をしていることを意識しないといけないからだ。Play!はコンテナレス開発およびデプロイのやり方をシンプルかつエレガントに提示してみせた。プロダクションで使うには、プロジェクトを丸ごとアップロードして、play run --%prod を実行するだけだ。


Herokuはまさにこのやり方にあうようにデザインされていた。Play!アプリは自然なホームをHerokuの上に見出したことになる。Herokuの上で開発するには、ローカルでplay runしてテストまたはforman startすればいい。デプロイの準備が出来たら、プロジェクト全体をそのまままるごとgit push heroku masterするだけだ。するとHerokuはそれをプロダクションモードでplay runする。このデプロイ方法はシンプルで、開発とプロダクションの差異も理解しやすいものだ。実際、ローカルで実行したのと全く同じ方法でHerokuの上でも実行される。環境の違いによる問題は発生しない。


簡単なだけじゃない


ここまで読んで、Play!は使いやすさによるコストパフォーマンスとロバストネスに過度にフォーカスしたものなんだと結論づけたくなる人もいるだろう。結局、他のフレームワークで構築されたアプリや、高度に最適化されたライブラリを置き換える理由になるの? と。


Play!について調べると、スクラッチから作るやり方が最もパフォーマンスがいいことに気づくだろう。Play!はリクエストの非同期処理のサポートについて、一から考えてデザインされている。この技術はNode.jsやPythonのTwisted、RubyのEventMachineなどで広く採用された技術だ。


Play!はNettyを使っている。NettyはJBossチームによって開発されたノンブロッキングI/Oライブラリだ。Play!はノンブロッキングI/Oと継続プログラミングモデルを統合し、リクエストの非同期処理を実現している。

例えば、PDFのレンダリングはリクエストをサスペンドしておいて、バックグラウンドで行われる。こんなふうにシンプルに:

public static void generatePDF(Long reportId) {
    Promise<InputStream> pdf = new ReportAsPDFJob(report).now();
    InputStream pdfStream = await(pdf);
    renderBinary(pdfStream);
}

Play!はJavaのWebフレームワークにはつきもののステートフルなセッションも捨て去った。シェアナッシングモデルを取り入れることで、Play!は、ノードを追加するだけでアプリケーションを水平にスケールアウトさせることに成功した。


さらに詳しく


ここまで読んできて、Play!はただ生産的なだけではなく、楽しいものだってことが分かったと思う。すぐにアプリ作りを始めよう!

Special Thanks


ZenexityのPlay! Frameworkチームに感謝したい。特にGuillaume Bortには大変お世話になった。またErwan Loisantにはいくつかの機能要望を受け入れてもらい、Herokuに統合してもらった。

*1:[http://playdocja.appspot.com/documentation/1.2.3/5things:title=ここ]に日本語訳があります。

The First Play! meetup in Japan

The Play! meetup in Japan was held at Kronos co., LTD's seminar room on 6 Aug. 2011.
It might be the first time about play meetup in Japan.


I went to this meetup and talked about play good points I felt while using for work.
My slide is this:


I hope it was help and great info for those who bored about Java EE and Servlet programming.
Play! is fun. Java programming is also fun fundamentaly. I think.



Other people's slide are also here:


This slide is gae and siena module tutorial for Play! beginners presented by @daiksy.
Many of audience were interested about this slide and easiness for getting started with Play! on GAE.




This slide mentioned about Netty and NIO in Play! presented by @tan_go238.
@tan_go238 demonstrated a little NIO server that notify onto growl developed with Netty.



After the all presentations finished, it was free time that audience tried to use Play! and talked about the first impression about Play!.
At this free time, @kiy0taka, groovy hacker, demonstrated his first Play! app mostly written by groovy.
It was very funny. At first, this app started up groovy console in Play! view html, and then touch a model instance and do save() on groovy console.
It was joke app! but we loved it and his improvised idea. ;-p
His code is below:



This meetup was very very fun!
The next Play! meetup is coming soon!
I planned the next in Tokyo.

Keep in touched! :-)

第一回 Playframework 勉強会 in 関西に行ってきたよ!

去る8月6日土曜日、大阪の株式会社クロノスさんのセミナールームにて、第一回Playframework勉強会in関西が開催されました!
http://atnd.org/events/17724

つーわけで行ってきた!
業務でPlayframeworkを使う中で(・∀・)イイネ!!と感じたことをだらだらとしゃべってきた!
まとまってなくてごめんなさい!! スライドはこれです!


他の参加者の方々のスライドは下記です。


@daiksyさんによるPlay! on GAEのチュートリアル。
@daiskyさんのスライドとプレゼンテーションはとっても分かりやすくて、とても勉強になりました。



@tan_go238さんによるNettyとノンブロッキングI/O周りの話。
Play!は1.1から内部でNettyを使ってるんですよね。
NettyからGrowlに通知をするサンプルアプリなんかもデモしてくれて、とても充実した内容でした。


また、@s_kozakeさんによるPlayframeworkガイダンスもとてもわかり易くて、初めてPlayframeworkに触れる人にとってとてもいい内容でした。スライドアップ待ってます!
@s_kozakeさんは、Playframeworkのこのムービーの内容を暗記しているみたいで、ムービーに合わせて内容説明をするということをやってくれてました。
あれとっても分かりやすくてよかったです。


発表が終わった後、2時間くらいのフリータイムがあって、各々初めてのPlayframeworkアプリ作成にトライしました。
また、気が向いた人がLTをやる、みたいな感じで進みました。


LTの白眉は@kiy0takaさんによる初めてのPlayframeworkアプリBy Groovyでした。
ViewテンプレートにGroovyを使っていて、素のGroovyをゴリゴリ書けることを聞いた@kiy0takaさん。
ViewのなかでGroovy consoleを起動して、その中からモデルに触ってデータ更新するというアプリ(?)を作ってくれました。
Groovyで何かネタを出来ないかといつも狙っている感のある@kiy0takaさんならではですね。

コードは下記です。


最後は懇親会で酒を飲みました。
当日のTogetterまとめは下記です!
http://togetter.com/li/171094


というわけで、第一回Playframework勉強会in関西、とっても楽しかったです。


次回の開催は、私の方で主催して、東京でやろうと思ってます。
いつ頃がいいですかね?


参加したい、発表してもイイ、LTならなんかしゃべってもイイ、っていう人は、是非Twitterなどでお知らせください

Jenkins plugin for Playframeworkをアップデートしました

Jenkins plugin for Playframeworkを0.0.5にアップデートし、先ほどJenkinsのリポジトリにアップロードしました。
おそらく数日中にみなさんのJenkinsからインストール出来るようになると思います。

アップデート内容

従来Playframeworkのパスの設定は、Jenkins全体で一つしか持てませんでしたが、これをジョブごとに変更できるようにしました。

経緯とか以下雑記

Jenkins plugin for Playframeworkをリリースしてから、大分放置してたのですが、なんだか最近このプラグインに対する質問が、TwitterやGithub上で少し来るようになっていました。

Playframeworkのユーザーが増えてる感じがあり、嬉しい限りですね。

特に多かったのが、ジョブごとにPlay!のバージョンを変えたいというニーズで、そうだよなあと思いつつ、なんとなく手を付けてなかったのですが、先日、ついにpull requestが来ました。

pull requestを送ってくれたのはCloudbeesに所属している@IvanMeredithさん。

IvanはPlayframeworkをCloudbeesにデプロイ出来るようにするプラグインなんかも書いてて、Cloudbeesのサイトにこんな記事も書いてます。

なぜだかとってもPlayframeworkが好きらしい。Cloudbees内部でも彼の周りの何人かはPlayframeworkにいれこんでいるという話。いいですなー。


っちゅうわけでよければ使ってください。


…そういえばIvanからplay-cloudbeesを使ったレポートをブログに書いてよ、って言われてたような気もするけど、アレどうなったんだっけ。。

Zazzle で Play! framework のステッカーを勝手に作ってみた

Zazzle っていうなんだか便利気なサイトが日本上陸していたので使ってみました。

Zazzle ってなに? って人は下記をチェック。
http://mag.executive.itmedia.co.jp/executive/articles/1005/19/news013.html

要は、Web でオリジナルデザインが出来て、それをそのまま Tシャツやステッカーにしてもらえるサービスみたい。

というわけで、Play! framework のロゴステッカーを勝手に作ってみました!
f:id:ikeike443:20110606224023j:image

元画像はここにあるものを使ってます。商売目的じゃないし、いいよね。。

気になる値段ですが、

  • 4.5x2.7インチ、4枚分で、¥580
  • 送料が ¥630

合計で ¥1210 でした。

U.S.から送られてくることを考えると、送料 ¥630 は安いほうかも知れません。

まあちょっと高いですけど、何でも自由にデザインできるので、オリジナルの何かを気軽に作りたい人にはもってこいなんじゃないでしょうか。

デザインしたものをそのまま Zazzle 上で販売することも出来るみたいですし、悪くないサービスかなーと思いました。


ただ、なんか運送は信用できないですね。。今回受け取った郵便物の中に、僕が頼んだステッカーの他に、全然関係ない人が注文したものが一緒に紛れ込んで配達されてました。。まじアメリカぱねぇ。。