seratch's weblog in Japanese

About Scala, Java and Ruby programming in Japaense. If you need English information, go to http://blog.seratch.net/

スキニー東京 1 資料 #skinnyjp

Skinny Framework Meetup Tokyo 1

ようこそ Skinny Framework Meetup Tokyo へ!!

http://skinnyjp.doorkeeper.jp/events/10607

entrance

(この記事は Skinny Framework Meetup Tokyo でのプレゼン内容です)

Skinny Framework

Scala on Rails です。

http://skinny-framework.org/

Skinny Framework の歴史

Skinny Framework は 0.9 時代も含めるとだいたい半年弱の歴史があります。

年月日 バージョン 内容
2013/08 後半 --- プロトタイプ実装に着手
2013/09/25 0.1.0 Kabukiza.tech #1 でお披露目
2013/10/19 0.9.4 怖くない Scala でデモ
2013/11/28 0.9.17 怖い Scala で進捗報告
2014/03/28 1.0.0 最初の安定版リリース
2014/05/01 1.0.12 今日時点での最新バージョン

基本的に細かいリリースはどんどんする方針です。未リリースの機能が使いたいけど、なかなかリリースされないなーというときは何らかの手段で私に ping してください。

Skinny Framework 1.0.0 以降の変更点

基本的にライブラリの API については、致命的な不具合を除くソースコード互換性は 1.0.0-RC* から維持されています。1.0.0 以降は実際の開発現場で利用してみて見つかった問題や改善点を少しずつ修正してきました。

一方で skinny-blank-app.zip の内容は結構変わっています。古いひな形からつくったものをずっと使っている場合は一度最新のものと突き合わせ or Yeoman での管理をおすすめします。

それでは 1.0.0 以降の主要なトピックをざっと見てみましょう(Releases からの抜粋です)。

https://github.com/skinny-framework/skinny-framework/releases

skinny-blank-app-with-deps.zip の提供

今までの skinny-blank-app.zip とは別に約 80MB の skinny-blank-app-with-deps.zip も提供しています。これは最低限必要となる jar も含めた形で zip にしたもので、普段 Scala の開発をやっていないマシンでもすぐに Skinny の開発ができるようにするためのパッケージです。Typesafe Activator と近い発想ではありますが、こちらは初回起動時のみの話なので、それ以降は普通の sbt プロジェクトです。

Ivy の依存性解決は時間がかかってしまうので、今日のような場では特に有効だと思います。

また ./skinny idea(実体は sbt gen-idea)で javadoc も持ってくることがかなりのボトルネックになるので、最近の blank-app ではデフォルトでは他の jar は何も取得しない設定になっています。

https://github.com/skinny-framework/skinny-framework/blob/1.0.12/yeoman-generator-skinny/app/templates/project/Build.scala#L60-L61

// Nil じゃなく空文字一つをもつ Seq じゃないとエラーになる
transitiveClassifiers in Global := Seq("")

ただ IDEA で見るなら普通ソースコードはあった方がいいとは思います。その場合は以下のように変更いただければと思います。

transitiveClassifiers in Global := Seq(Artifact.SourceClassifier)

これは Skinny 以外の Scala プロジェクトでも使える tips ですね。「gen-idea が大阪から東京に着くまでの新幹線で終わらない」という悲劇を回避できるのではないでしょうか。

Scala.js との連携を強化

Scala.js を使った開発がかなりやりやすくなりました。

https://github.com/skinny-framework/skinny-framework/releases/tag/1.0.8

blank-app の状態からいきなり

  • 一つの terminal window で ./skinny scalajs:watch を起動しておく
  • もう一つの terminal window から ./skinny run を起動しておく
  • src/main/webapp/WEB-INF/assets/scala 配下に Scala.js のコードを置く
  • アクセスする HTML 内で以下の 2 つの JS を読み込む
<script type="text/javascript" src="${uri("/assets/js/application-extdeps.js")}"></script>
<script type="text/javascript" src="${uri("/assets/js/application.js")}"></script>

これだけでブラウザでアクセスすると source maps にも対応した状態(デバッガも使える)で Scala.js のコードを書いて試すことができます。これはぜひ試してみていただければと思います。

Chrome Dev Tools

sbt 0.13.2 を使えなかった問題が解決して incremental compiler がデフォルトに

xsbt-web-plugin の前のバージョンが動作しないという問題があったため、見送っていましたが sbt 0.13.2 が使えるようになったので、現在の skinny-blank-app では incremental compiler がデフォルトで有効になっています。

IDE のデバッガ連携をサポート

@gakuzzzz さんが対応してくれました。./skinny run の代わりに ./skinny debug [port] を実行すると JDWP(Java Debug Wire Protocol)連携が使えます。

ParamType に独自の型を指定可能に

これも @gakuzzzz さんがつくってくれました。直接聞いてください。ドキュメントに書いた方がいいですね。

Servlet セッションなどが不要な場合向けに SkinnyApiController を提供

Skinny を使って API サーバを実装する場合 web.xmlServlet セッションを off にしてしまいたいというニーズもあるかと思います。Flash のようなセッションを前提としている機能、テンプレートエンジン連携などを削ぎ落とした SkinnyApiController/SkinnyApiServlet を追加しています。デフォルトで削ぎ落とされているだけで Feature trait を追加すれば機能を使うこともできます。

ファイルアップロード

ファイルアップロードを実装する場合、ScalatraServlet の機能をそのまま使いますが、わかりやすいよう FileUploadFeature という trait を提供するようにしました。

http://skinny-framework.org/documentation/controller-and-routes.html#file-upload

シンプルな HTTP クライアントを追加

m3dev/curly というライブラリがあって、これは元々 Java 向けのシンプルな HTTP クライアントに Scala ラッパーがあるものでしたが、基本的な実装を流用しつつ pure Scala で書いた skinny-http-client を追加しました。使い方はこの辺を見てください。

https://github.com/skinny-framework/skinny-framework/blob/develop/http-client/src/test/scala/skinny/http/HTTPSpec.scala

と、今気づきましたが、これは最近入ったばかりでまだドキュメントに説明がないので対応しないと、ですね。

テスト時の URLGenerator#url の NPE バグ への work around

Scalatra の URLGenerator#url が embedded Jetty を使った integration test 時のみ NPE を throw する既知の問題にとりあえず work around で対応しています(エラーにならないようにしているだけなので、リンクの href の assert はできない)。

scalatra #368

ScalikeJDBC を直接使ったコードのコンパイル時間大幅改善

昨日(5/1)の話ですが、ScalikeJDBC のコンパイル時間を改善する PR をいただき、効果が大きかったので ScalikeJDBC 1.7.7 とデフォルトで 1.7.7 に依存したものを使っていただくようにということで Skinny ORM 1.0.12 をリリースしました。

https://github.com/scalikejdbc/scalikejdbc/pull/241

ScalikeJDBC の APIソースコードに多く含まれる場合はかなりインパクトが大きいと思います。Skinny 1.0.12 を使うか ScalikeJDBC 1.7.7 を明示的に追加してください。

Skinny Framework 1.1 について

依存するライブラリ、フレームワークのバージョンアップ対応に依存していますが、以下の対応を想定しています。

  • Scala 2.10、2.11 対応(依存ライブラリ待ち)
  • Scalatra 2.3 対応(@takezoe さんに期待)
  • ScalikeJDBC 2.0 対応(今対応中)
  • ScalaTest 2.1 対応(scalikejdbc-test の互換問題だけ)

また、可能な範囲で既存の issue にあがっている機能追加も入れたいと考えています。何か要望があればこちらにあげてください(英語でお願いします)。

https://github.com/skinny-framework/skinny-framework/issues?state=open

ソースコード互換性を崩す必要のある変更は今のところ予定していません。また、もし発生した場合も極力 @deprecated 指定による移行期間をもうけるようにするつもりです。

Enjoy Skinny Framework!

私自身もドッグフーディングしていますが、Skinny Framework は十分に実用レベルで利用可能なフレームワークです。今日は実際に試したり、情報交換などできればと思います。

Skinny Framework 1.0.0-RC1 をリリース

English?

This is an article for Japanese developers. English article is here:

http://blog.seratch.net/post/77537302500/try-skinny-framework-1-0-0-rc1

Release Candidate 1

Skinny Framework 1.0.0-RC1 をリリースしました。基本的にはこれからは大きな機能追加はせずにバグの修正や API の最終的な確認・改善を行っていきます*1

これから約 1 ヶ月、いろんな方に試していただいて final を良い形でリリースできればと思っています。

まずチームに感謝

私一人の力ではありません。本業も忙しい中、contribute してくださった @BlackPrincess と @Arakaki の両氏と pull request を下さった全ての方に感謝いたします。

公式ドキュメント

こちらです。全て英語ですが、私が書いているので全部平易な表現で書かれています。

http://skinny-framework.org/

試す

Skinny Framework はすぐに試せます。JDK さえ入っていれば Mac OS XLinuxWindows を問わず skinny コマンドだけを使って起動するまではとても簡単に試せます。

wget https://github.com/skinny-framework/skinny-framework/releases/download/1.0.0-RC1/skinny-blank-app.zip
unzip skinny-blank-app.zip
cd skinny-blank-app
./skinny run

scaffold を試すのが理解の近道です。Rails と似た感じで*2、簡単に scaffold を試せます。基本的には動かしながら scaffold しても大丈夫です*3

./skinny g scaffold:jade members member name:String "nickname:String:varchar(64)" birthday:Option[LocalDate]
./skinny db:migrate
./skinny run

http://localhost:8080/members

にアクセスすると members テーブルの CRUD 画面が動作していることを確認できます。

テストを実行する

テストも大事ですね。db:migrate を忘れずに。

./skinny db:migrate test
./skinny test

カバレッジ計測も大事ですね。ということで scoverage を使えるようにしていますが

https://github.com/scoverage

./skinny scoverage:test

Skinny ORM の SkinnyCRUDMapper との相性が悪いようです。これはまだ詳細未調査なのでフィードバックできていないのですが、解決に向けて動いていければと思っています。

war ファイルをつくる

package コマンドを実行するだけです。build の下に生成されます。

./skinny package

スタンドアロン jar をつくる

Jenkins や GitBucket などダウンロードしてきた war ファイルを java -jar ですぐに Web サーバとして起動できるのは非常に便利ですが、そういうファイルをすぐにつくることもできます*4

こちらは素晴らしい sbt-assembly を使わせていただいていますが、skinny-blank-app.zip では既に諸々の設定がされているので、以下のコマンドを叩くだけ。

./skinny package:standalone

皆様のフィードバックをお待ちしています

*1:本当はもっと便利なものを入れたかったけど、ちょっと最近色々忙しいもので...これからも継続してやっていきます

*2:デフォルトの DB は SQLite3 ではなく、ローカルファイルの H2 Database ですが

*3:db migrate してない状態で model クラスをロードするとエラーになります

*4:拡張子は jar ですが

デブサミ 2014「OSSコミッタ大集合」に登壇

させていただきました。@ayumin さん、@koichiroo さんが和やかな雰囲気をつくってくださったので、特に緊張することもなく楽しいセッションになったのはないでしょうか。

http://event.shoeisha.jp/devsumi/20140213/session/394/

http://togetter.com/li/628956

こんな感じの話をさせていただきました。うまく伝えられなかったところは若干補足しています。

  • 他の方のように既存のプロジェクトに貢献・コミットされているのとはちょっと違ったパターンで、自分で始めたプロジェクトを育てている事例として紹介できればと思う。
  • 仕事では必要に応じて issue や PR を投げたりするが、プライベートでやるならできるだけ自分のコントロール範囲が広い方が楽しいと思っている。(これはスライドに書いてあって口頭では説明できなかった・・)
  • Scala で色々やっているのは Scala が好きだからというのが一番だが ScalaOSS 界隈がブルーオーシャンだからというのも大きい。Ruby のような大きなエコシステムが出来上がっているわけではないので「こういうのないかな」と思って探しても普通になかったりする(誰もつくってない or もうメンテされてないなど)。なので、まだまだデファクトスタンダードをとれそうな領域が結構ある。
  • ScalikeJDBC は DB アクセスライブラリで、これは二年くらいやってきてだいぶ育ってきていて、国内外で利用事例が増えてきた。
  • Skinny Framework は Web フレームワーク。バズりたくて "Scala on Rails" というキャッチコピーをつけているが、Scalatra(ScalaSinatra)の上に作り込みをしているので Padrino Framework 的なもの。来月 version 1.0.0 を出す予定。
  • 最初の頃はコツコツつくりながら勉強会などで「使ってみて」と告知していたが、最近は国内外で利用してくれる方も増えてきた。実際使ってみた上での pull request や要望などが増えてきた。プロジェクトの方針として PR を reject するようなケースも出てきたし、プロジェクト運営としては個人でつくっているものから次の段階へと進み始めているのかなと思う。
  • 以前は全てを自分でコントロールしたいと思ってやっていたが、最近は手を挙げてくれる人、やってくれそうな人に積極的に任せるようにしている。そうしないと回らなくなってきているし、やはりその方が良いものができる。
  • Q: だいたい何人くらいでやってるの? A: (どちらも)だいたい 3 - 4 人くらいがアクティブに活動している状況。
  • Q: どんな反応が多い? A: 海外の人は GH の issue とかあげる前にカジュアルに gmail のアドレスとかにメールしてくる人が多い印象がある。日本で issue とかあげてくれるような人は律儀な人が多い気がする。世界で見るといろんな人がいるなぁという印象。先ほどの松田さんの Rails の話にも共感したが、関わってくれる人はうまくいくようにと思って行動してくれているわけなので、お互いがうまくいくようにと思いながら対応している。

ScalikeJDBC の説明で「最近だと Nulab さんの新しいサービス (http://www.typetalk.in/) でも使ってくださってるんですよー!」とかドヤ顔するつもりだったんですが、すっかり忘れていました・・

ちなみに、オフラインだといくつかの会社さんでも使ってくださってるとうかがっているのですが、差し支えなければ、「使ってるよ」と公言していただけると私としても非常にうれしいです。

今年は、知名度の向上、ドキュメントの更なる充実など実装以外のやるべきことにももっと取り組んでいきたいと思っています。

NHK 番組表 API の Scala クライアント

http://api-portal.nhk.or.jp/ja

正式な開始は 1/27 みたいだけど、API キーも発行できるみたいだし、ひまつぶしに Scala クライアントを書いてみました。

実装は・・カッとなってやった感満載なので、気になる人は pull request とかいただければうれしいです。

https://github.com/seratch/nhk4s

sbt-sonatype を使ってリリースしました。問題なく使えました。すばらしいです。

http://search.maven.org/#search%7Cga%7C1%7Cnhk4s

NHKAPI は確か去年の 6 月にリリースするということになっていましたが、おそらく前例もないことで色々大変だったんだろうと思います。中の方々、チャレンジ大変お疲れさまでした。

npm login で default value must be string or number

ブログに書くことで記憶に定着させよう程度の内容ですが、新しいマシンで npm publish しようとして、まず npm login しようとすると謎めいたエラーメッセージが。username/password は合ってるのに。

$ npm -v
1.3.21

$ npm login
Username: xxxx
Password:
npm ERR! Error: default value must be string or number
npm ERR!     at read (/usr/local/Cellar/node/0.10.24/lib/node_modules/npm/node_modules/read/lib/read.js:15:11)
npm ERR!     at readEmail (/usr/local/Cellar/node/0.10.24/lib/node_modules/npm/lib/adduser.js:96:3)
npm ERR!     at loop (/usr/local/Cellar/node/0.10.24/lib/node_modules/npm/lib/adduser.js:33:20)
npm ERR!     at /usr/local/Cellar/node/0.10.24/lib/node_modules/npm/lib/adduser.js:89:5
npm ERR!     at Interface.onLine (/usr/local/Cellar/node/0.10.24/lib/node_modules/npm/node_modules/read/lib/read.js:111:5)
npm ERR!     at Interface.EventEmitter.emit (events.js:95:17)
npm ERR!     at Interface._onLine (readline.js:202:10)
npm ERR!     at Interface._line (readline.js:531:8)
npm ERR!     at Interface._ttyWrite (readline.js:760:14)
npm ERR!     at ReadStream.onkeypress (readline.js:99:10)
npm ERR! If you need help, you may report this *entire* log,
npm ERR! including the npm and node versions, at:
npm ERR!     <http://github.com/isaacs/npm/issues>

エラーメッセージをググるとすぐわかるレベルの話で、これと類似なんですが

https://github.com/npm/npm/issues/4363

npm は $HOME/.npmrc に email が設定済であることが前提になっているようで。

.npmrc を開いて email=xxx@example.com と一行書き足すか、npm config set email xxx@example.com で設定する。そうするとうまくいくはず。

将来のバージョンではもう少し気の利いたエラーメッセージになってるといいですね。

私の 2013 年

こういうのをブログに書いたことはないのですが、今年は結構活動した年だったので、自分の中で整理するためにまとめてみました。誰得ですが公開しますね ^ ^; なお、本業に関連するものについては書ける内容からピックアップして取り上げています*1

1 月

ScalikeJDBC Cookbook を発売

正月休みに Kindle Direct Publishing で本を出してみたいなぁと思い立ち、手探りで色々やってなんとか出版までやってみました。今でも時々売れています。買っていただいた皆様、ありがとうございます。

http://seratch.hatenablog.jp/entry/2013/01/03/192020

本の内容は GitHub にあるので間違いなど見つけたらお気軽に pull request ください。

https://github.com/scalikejdbc/scalikejdbc-cookbook

英語版も出そうと思っていたけど、scalikejdbc.org のドキュメントを充実させる方が先かなぁという感じになっています*2

Scala Conference in Japan 2013 の準備

2013 年に入ってから、いよいよ逆算してあれをやっておかないと間に合わない、というのが増えてきてバタバタしてきた頃です。この頃から私は割とかかりきりの状態になりました。平日はあまり進捗しないのが常だったので、定期ミーティングの頻度を増やして放置されているタスクがないか確認するようになりました。それ以外の時間も co-meeting 上の議論や諸々の事務作業をしていたことが多かった気がします。

JPA、QueryDsl との格闘

Spring Data JPA と QueryDsl が魅力的だったので*3、新規案件での実戦投入に向けて機能を作り込んでみました。ただ、既存 DB との連携が多くて障壁があったことと、やはりハマりポイントが多い JPA は私のやりたいことにフィットしないという判断で、最終的にはその実装をすべて捨てて別の実装に切り替えました。

QueryDsl は APT を使った好例という感じで Java であれば今でもなかなかよい選択肢なのではないかと思います。また QueryDsl を使った経験は後の ScalikeJDBC の DSL 実装のモチベーションに強い影響を与えました。なので、最初は名前だけはかぶらないようにしようということで Query Interface と書いていましたが、ユーザの方々も Query DSL と呼ぶので途中から開き直って QueryDSL と表記するようになりました。

2 月

Scala Conference in Japan 2013 の準備

相変わらず co-meeting に張り付いていた記憶があります。本業も忙しくなってしまって、結構大変だった記憶があります。

MOONGIFT さんが Gistub を取り上げてくれた

急にスターが増えたなぁと思ったら MOONGIFT さんが取り上げてくださっていました。これを機に Twitter 上などで見た限り、いくつかの会社さんで実際に導入いただいていました。今も使っていただいているとうれしいですが。

社内で立てられるGistサーバ「Gistub」

http://www.moongift.jp/2013/02/20130205/

これについてはブログにも書きました

http://seratch.hatenablog.jp/entry/2013/02/07/001757

ltsv4s を書いた

突如、日本の IT エンジニアの間で空前の LTSV ブームが発生し、実際私の周辺でも LTSV 化が進んだりしましたが

http://ltsv.org/

Scala 実装がまだなかったので「Scala ならそれ parser combinator でできるよ」ということで書きました。

http://seratch.hatenablog.jp/entry/2013/02/09/103917

虎ノ門 Scala 会

虎ノ門近辺で勤務する Scala 好きなエンジニアで飲み会をしました。日本酒が美味しかったですね。某社の方々がこぞって「sbt つらい」と言っていたのが印象に残っています。

3 月

Scala Conference in Japan 2013 本番

3/2 に東工大の大岡山キャンパスにて Scala Conference in Japan 2013 が開催されました。至らない点もあったかと思いますが、運営の一員として参加いただいた皆様に改めてお礼申し上げます。

Scala Conference in Japan 2013

http://scalaconf.jp/

プログラミング言語「Scala」の日本初カンファレンスが開催、盛況で立ち見のセッションも

http://itpro.nikkeibp.co.jp/article/NEWS/20130329/467341/

これほどの規模のカンファレンスの準備となると(特に直前は)あまりにも多くの時間をとられてしまうことと、できれば発表者としても参加したいという気持ちから、次回以降は私は中心メンバーからは外してくださいと言っていますが、今後も無理のない範囲では協力させていただくつもりです。どうやら次回の構想は水面下で進んでいるようですので、期待して待ちましょう。

とはいえ、実際のところ、参加者の方々が思っている以上に運営側は手薄です(どのカンファレンスもそうかとは思うのですが)。運営チームの人数はどうあれ、カンファレンスの準備や運営に心身のリソースをガッツリさける人というのはやはり一部に限られますし。

なので 2013 で運営をやっていなかった方で「手伝いたい」「自分で色々提案して実現したい」という気持ちをお持ちの方は、ぜひ @kmizu さんや @gakuzzzz さんにコンタクトしてみてください。きっとよい経験になりますし、やってよかったと後から思えるはずです。

ScalikeJDBC 1.5.0 リリース

Type Dynamic 呼び出しを macro でチェックしてコンパイルエラーにする機能が追加されました。公開されていたコードを参考にさせていただいたり stackoverflow で回答いただいたりして @pab_tech さんのおかげでこぎつけたリリースでした。

http://seratch.hatenablog.jp/entry/2013/03/28/210928

elasticsearch 導入

本業で elasticsearch を導入しました。一つ一つのデータ件数はさほど多くないのですが、今まで Solr を個別に立てていたのを一カ所に集約できればということで、実際、いくつかのサービスが elasticsearch の利用を開始することになりました。この辺のことはここに書いておきましたので、興味があればご覧ください。

http://seratch.hatenablog.jp/entry/2013/09/03/234712

4 月

年度始めということもあり、結構仕事が忙しかったようです。GitHub での活動は細々やってはいましたが。

5 月

「RubyKaigi 2013」で LT

LT をさせていただきました。rspec-kickstarter という RSpec ソースコードのひながたを自動生成してくれる gem について話しましたが、今改めて録画を観てみるとかなり固いですね・・w

http://rubykaigi.org/2013/lightning_talks#seratch

これは元々の話し方の問題もあるんですが、実は入念に keynote のカンペを準備していたのが当日の環境で使えなかった*4ので、かなり余裕がなかったのが大きいです。。あと、英語プレゼンだったので事前に練習をしている中で厳しさを感じてだいぶ内容を削ったのですが、今見るとちょっと削りすぎた気がします。今客観的に観るとかなりアッサリした発表になってしまっているなぁと思います。

GitHub が提供してくれた懇親会では @sonots さんや多くの方とお話しして、初めての RubyKaigi でしたが、楽しむことができました。

自分でいうのもなんですが rspec-kickstarter は結構便利で、私は普段の開発でかなり必須ツールというくらいに使っています。よかったら試してみてください。

https://github.com/seratch/rspec-kickstarter

「Atlassianユーザーグループ」で発表

コードレビューツールとして Crucible を使っているのですが、それについてプレゼンさせていただきました。後にここで知り合った方の会社との交流会なども行いました。またそういう機会がつくれればいいですね。

http://www.zusaar.com/event/735003

http://seratch.hatenablog.jp/entry/2013/05/26/115810

ScalikeJDBC 1.6.0 リリース

QueryDSL が追加されました。これで現在の機能がすべて出そろった感じですね。もっと前から提供していた気がしていましたが、半年前でしたか。

http://seratch.hatenablog.jp/entry/2013/05/12/001057

社内の Tech Talk 開始

私が時々 #m3dev というハッシュタグでつぶやいているときがありますが、社内で M3 Tech Talk という社内 LT 大会のようなものをこの頃から始めました。隔週で今年は 16 回開催、エンジニア約 40 名の体制で毎回 3 つの発表がそろっていたのでなかなか成功したといえると思います。来年もできるだけ続けていきたいですね。

公開可能なものは資料を公開しているのでこちらからご覧ください。

http://m3dev.github.io/

「カンファレンスカンファレンス」に参加

scalaconfjp の運営側ということで参加しました。他の方々と色々とカンファレンスについて情報交換・・もしましたが、割と普通に雑談していた気も。登壇いただいた皆様のお話は普段あまり語られないことが多かったので、参考になりましたね。

http://connpass.com/event/2253/

6 月

「Play もくもく会」に参加

@kara_d さんがやっている Play もくもく会に参加して、ちょっとした発表と ScalikeJDBC を宣伝してきました。ScalikeJDBC を使っている方にも実際にお会いできたし、よい機会でした。来年も機会があれば参加したいと思っています。

http://playframeworkja.doorkeeper.jp/events/4219/

息子が 2 歳になりました

順調に育っています。

7 月

Typesafe Activator テンプレートをつくった

Typesafe 社が Activator というのを提供していて 3rd party が簡単にテンプレートを登録できるようになっているのですが、あまり作っている人がいなかったので試しにやってみました。

http://seratch.hatenablog.jp/entry/2013/07/02/005454

それから半年経って、テンプレートも若干増えてはいますが、いまいちエコシステムが確立されないというか Typesafe 以外の人が面白がってる感じが足りない気がしますね。つくること自体は簡単なので、興味のある方はやってみるとよいのではないでしょうか。

「JetBrains Night #jbnight」に参加

これは一参加者として参加しました。JetBrains CEO 来日に合わせて GREE さんで開催されました。あの新製品っていつ頃公開なのかな。

http://www.zusaar.com/event/844003

「第1回 かわいいKotlin勉強会 懇親会 #jkug」に参加

ドリコムさんで。これも参加者として。スーツ率の高さに驚きました*5。 あと、この手の勉強会にしては女性が多かったのも印象的でした。Kotlin コミュニティはなかなか興味深いですね。

http://www.zusaar.com/event/934003

「Heroku Meetup #9 Summer & Beer !!」に参加

Heroku は趣味で使っているくらいですが、これも参加者として。この月は勉強会にたくさん参加してますね。 シャノンさんのエンジニアの方々と特に色々話させていただいた記憶があります。この場でまた虎ノ門 Scala 会をやろうという話になりました。

http://herokujp.doorkeeper.jp/events/4687

8 月

AWScala 盛り上がる

Java の AWS SDK を Scala から使うのは結構つらいよね、特に REPL から使うとか無理ゲー」という感があったので API を理解するのもかねて Java SDK のラッパーを作り始めました。

https://github.com/seratch/AWScala

@OE_uia さんも面白がってくれて EC2 の実装を提供してくれました。

「第1回 ElasticSearch勉強会」に参加

参加者として。@cbirchall が発表していました。懇親会では @johtani さんやロンウィットの方々とお話しできてよかったです。

http://atnd.org/event/E0018616/0

「PlayFramework関西ビギナーズ 第2回 #play_kb」にエアー参加

大阪で Play の初心者向け勉強会が開催されているのを Twitter 上で観測したので、ブログ記事を書いて参加しました。

http://seratch.hatenablog.jp/entry/2013/08/03/151251

虎ノ門 Scala 会(飲み会)開催

第二回を開催しました。某 G 社の方々も参加されましたし、虎ノ門の枠にとらわれない感じになりました。Scala じゃない人もいたような気がします。

9 月

歌舞伎座.tech #1」で LT

歌舞伎座.tech で LT しました。ScalikeJDBC-Async の紹介と Skinny Framework のお披露目でした。歌舞伎座タワーはよい場所ですね。D 社の皆様も ScalikeJDBC や Skinny をお試しいただければ幸いです。

http://connpass.com/event/3278/

http://seratch.hatenablog.jp/entry/2013/09/25/215834

IAM 認証フェデレーション proxy をつくった

これは本業の方ですが「AWS のマネージメントコンソールへのアクセス管理が面倒で困っちゃうな」という感じになっていたので IAM の認証フェデレーションを利用した proxy をつくりました*6。これで IAM ユーザをたくさんつくったりする必要がなくなったので非常によかったです。認証時に各ユーザが AWS アカウントごとに用意したカスタムポリシーを有効化できるように作り込んだ点がポイントだったかなと思います*7

もう少し汎用化できれば OSS にしてもいいかなと思ったりはしていますが、同じようなことやってる人がいたら情報交換してみたいですね。

「Async Hack-a-thon」に会場提供&参加

@gakuzzzz さんが主催してくれたハッカソンに会場係兼参加者として。

最初は ScalikeJDBC-Async を使ってベンチマークとってドヤ顔するつもりでしたが DB 接続部分以外がボトルネックになって、想定した結果が得られなかったので、途中で方針転換して ScalikeJDBC のクエリ実行結果を取得できるフックポイントを実装して Fluentd 経由で送る、みたいなデモをした気がします。一応、非同期・・かな、と。

http://www.zusaar.com/event/991003

scct を fork した

Scala のカバレッジ計測ツールとしては現時点では最もクオリティの高い scct ですが、作者は完全にメンテナンスしないモードに入っていて、issue も PR も放置されている状態が続いていました。

私にとっては scct は以下のような問題があって

  • scct を使っているライブラリは意図せずに scct に compile スコープで依存してしまう*8
  • sonatype/maven central で配布されていない
  • バージョンがずっと 0.2-SNAPSHOT のまま

issue 登録してみたけど、案の定全くリアクションもなく、今後本家で対応される気配が感じられなかったので、自分で使う用のために fork して上記の点を修正したものです。

https://github.com/seratch/scct

https://github.com/seratch/sbt-scct

すると後継を目指して scct という orgnization を作ってる人がいて、どうせなら一緒にやろうみたいなことになったけど結局あまり貢献はできず(私は他のことに時間を使いたかった)、ただ一応私がやっていた sonatype への publish 設定だけは流用されたようで、そのうちあっちを使えればいいなぁと思っていたら、最近見たら、なんだかよくわからない状態に・・。

うまくいくといいですけどね。

10 月

Skinny Framework 0.9.x リリース開始

Skinny Framework は来年 3 月までに 1.0 を出すと宣言していますが、それを強く意識するために 0.9.x というバージョニングポリシーに変えました。0.9.x はまだプレビュー版なところがあるので、細かくリリースしています。また設計ミスなどによる改善点が見つかれば細かい API や挙動が変更になることが多々あります。

「怖くないScala勉強会」で発表

「めんどくさくない Scala」というタイトルで Scala での開発全般について私の考えを述べたのと ScalikeJDBC、Skinny Framework の紹介をしました。結構力を入れて準備したプレゼンでした。

http://seratch.hatenablog.jp/entry/2013/10/20/085453

DTS さんではこのような一般公開の勉強会は初めての試みとのことでしたし、当日のキャンセルも結構多くて @garbagetown さんはじめとする運営の皆様はなかなか大変だったかと思いますが、勉強会の内容は充実していたと思います。懇親会では初めて @takezoen さんとお話ししたり、よい機会でした。

http://connpass.com/event/3420/

「2013年秋 Web開発最前線テックトーク」に参加

参加者として。じげんさんが主催。会社のすぐ近くだったので参加しやすかったです。@naoya_ito さんのプレゼンが非常に参考になりました。

http://atnd.org/events/44191

JS 無双な日だったので @takezoen さんの Scala アピールが劣勢で大変そうでしたね。Slick のテーブル定義のコードを見て「やってみたい」と思ってもらえるかというとちょっと厳しいかなというのは感じました。

11 月

Skinny Framework 日本語導入資料

を gist で公開しました。元々は自分用に実装すべき要件を日本語で整理していたものだったのですが、これが日本での普及のきっかけになればということで。

https://gist.github.com/seratch/7382298#file-getting_started_ja-md

「怖いScala」で LT

GREE さんにて。「Skinny Framework 進捗どうですか?」というタイトルで Skinny Framework の紹介をしました。この日の発表でもそうでしたが @j5ik2o さんが「ScalikeJDBC は DDD の DB アクセス部分に使いやすい」と発信してくださっていて、とてもありがたいですね。

http://connpass.com/event/4112/

ScalikeJDBC 1.7.0 リリース、ウェブサイト公開、Twitter アカウント

ScalikeJDBC の organization を com.github.seratch から org.scalikejdbc に変更しました。

また Middleman を使って http://scalikejdbc.org/ をつくりました。内容は GitHub の wiki にあった情報を集約しました。ドキュメントは Scala のライブラリにしては充実している方ですが、もう少し親切な記述を増やしたいとは思っています。

https://github.com/scalikejdbc/scalikejdbc.github.io

またリリースなどをお知らせするために Twitter アカウントをつくりました。ぜひフォローしてくださいね。

https://twitter.com/scalikejdbc

Skinny Framework ウェブサイト公開、Twitter アカウント

こちらも ScalikeJDBC のやり方をそのまま流用しただけですが、ウェブサイトを公開しました。

http://skinny-framework.org/

https://github.com/skinny-framework/skinny-framework.github.io

こちらもリリースなどをお知らせするために Twitter アカウントをつくりました。試しに Scala に関心のありそうなユーザの方々をフォローして認知していただくという PR 活動をしてみました。あまりやりすぎるとよくないとは思いますが、ある程度認知はしていただけたのかなという感触でした。

https://twitter.com/skinnyframework

AWScala 0.1.0 リリース

AWScala はいったん一段落した感があったので、区切りとして 0.1.0 としてリリースしました。

12 月

アドベントカレンダー

に便乗して結構ブログ記事を書きました。何だか忙しくなってしまって Scala 版の方、途中でやってる余裕なくなったので穴を埋めるのあきらめました。ちょっと残念でした。Scala コミュニティはまだそんなに大きくないので、アドベントカレンダーは Scala と Play で分けずに Scala の一つくらいがちょうどよさそうですね。

http://www.adventar.org/calendars/104

http://www.adventar.org/calendars/114

まとめ

今年は主に Scala コミュニティでいろいろとやらせていただきました。本業では JSON API の設計・実装・運用を結構な数やったのと複数の Rails アプリを開発・運用したのが主な内容でした。Rails 3 -> 4 のアップグレードとか結構たくさんやった気がします。あと AWS でもいくつかトライした年でした。

いつもそうなのですが、来年の目標は特に立てていなくて、そのときの流れに合わせてその都度納得のいく行動ができればいいかなと思っています。直近では Skinny の 1.0.0 にたどり着けるよう引き続きやっていきます。

それでは、よいお年を。

*1:という、仕事もしてたんですよアピール

*2:ドキュメントはもし手伝ってくれる方がいると非常にうれしいです...

*3:O'Reilly本も買って読んだり

*4:ゆっくり確認する時間があれば設定を変更できたのでしょうけど...

*5:エンタープライズ受け?

*6:Rails アプリで Ruby の AWS SDK を使って実装しました

*7:たとえば development 環境ではほぼ何でもできる状態で使いたいんだけど、本番は最低限のオペレーションだけにしておきたいとか

*8:https://github.com/mtkopone/scct/issues/54

Play Framework 2 徹底入門を読んで #play_ja

Play Framework に関する初めての本格的な日本語書籍となる「Play Framework 2 徹底入門」を献本いただいたので、読ませていただきました。索引まで含めると 529 ページの力作です。著者の方々、大変お疲れ様でした。

タイトルに「Java ではじめるアジャイル Web 開発」とある通り、この書籍では基本的には Play2 Java がターゲットとなっており Scala での開発は 9 章のみで触れられています。

私は Scala 版はドキュメント、ソースコードを読んだり、実際にアプリケーションを書いたり、プラグインをサポートしたり、とそれなりに経験があるのですが、Java の方はしっかりと使ったことがなく、把握していなかった内容が多かったこともあり、楽しんで読ませていただきました。

とにかく初心者に優しく

まず一言で言うと、本書はとにかく「Play1、Scala どちらも未経験という方にも分かるよう、可能な限り親切に書かれた入門書」という印象を受けました。あとは Web アプリケーション開発自体の経験がそれほど多くない方も読者層として想定された書き方になっています。これだけ丁寧に書かれているのですから、500 ページを超えるボリュームになってしまうのも納得です。

スクリーンショットやサンプルつきの手順解説はもちろんのこと、COLUMN コーナーで読者がハマりそうなところ、疑問に思いそうなところを先回りして説明されているあたりに現場で Play2 Java を使ってきた先達である著者の気配りが感じられます。sbt の PermGen のサイズ、Windows での文字化けなど「あるある」ですよね。

Play2 JavaScala の知識を全く知らずには使えませんが、かといって「Scala 勉強してから来い」は Java で利用できる点を魅力に感じるユーザにとってはハードルが高すぎますね。

本書では Scala 初心者の方に少しずつ Play2 Java を使う上で必要となる Scala の知識を丁寧に説明していくことで、初心者の方がそこでつまづいてしまわないように注意が払われています。一方で、あまり最初の方で詳細について長い説明をしすぎないようになっていて、この辺は構成にかなり気を使われたのではないかと思います。

特に Scala Template と Routes は Play 独自の仕様なので、かなり丁寧に説明されています。特にテンプレートファイルが一旦 Scalaソースコードとして出力されてからコンパイルされるあたりは、本書の想定読者にとっては馴染みのないアプローチかと思うので、本書のような丁寧な説明は助かると思います。

4.1 で Play2 Java 選定がマッチする開発チームの条件を以下のように定義されています(この中でいくつか当てはまるなら Play2 Java は妥当な選択肢という意味です)。

  • シンプルな MVC 構成の Web アプリケーションを Java で作りたい。
  • Java 経験者で構成されたチームである、もしくは Java が得意なパートナーが多い。
  • Java を使用することが前提の開発案件である。
  • 分散並行処理を楽に行いたい。
  • 専用サーバーでの運用が前提で、クラウドでの利用も検討されている。
  • Play Framework に関して関心のあるメンバーがいる。
  • Scala に関心がある。

書籍内でも説明がありますが、最後の「Scala に関心がある。」というのは将来的に Scala を使っていきたいという志向の Java エンジニアを想定しています。Play2 Java を使った開発では Scala を全く意識せずに使えるというわけではないので、得意な Java で開発しつつ徐々に Scala のアプローチに慣れていくことになります。裾野を広げるという意味でいいことなのかもしれません。

ということで、本書は上記のような Java エンジニア読者層への入門書として最後までブレずに書かれているので「まさに自分が上記の条件に該当する」という方には非常にオススメできると思います。例えば「使ったことないし、よくわかってないけど Play2 Java 案件をやることになった」という方は、本書を手元に置いておくときっと何度も助けられるのではないでしょうか*1

Java 版もなかなかいいところあるのでは

正直、ほとんど初めて真剣に Java 版の Play2 に向き合ったのですが(すみません)、Java 版にもなかなかいいところあるかなというのが個人的には発見でした。

例えばフォームの入力値バリデーションは JSR-303 Bean Validation をラップした処理が Form.java に作り込まれていますが、拡張も含めて誰でもメンテナンスしやすいでしょうし、標準仕様なので場合によっては他の Java アプリとロジックを共有できるかもしれません。

本書にとって残念なことはかなり力を入れて解説している EBean が「開発がアクティブでない」という理由で次の 2.3.0 以降 Play の標準スタックから外れる見込みである点ですね*2。執筆者の立場からすると「ちょ、おまwww」という感じではないかと。お察しいたします。

私自身、EBean をしっかり使いこんだことはなかったのですが、本書で読む限りだと EBean は一般的に ORM に期待されるところには応えているんじゃないかなという印象は持ちました。既に EBean を使って作り込んでいる場合はとりあえずそれはそれでよいのかもしれません*3。今後、新しく開発するものはどうするかは Play 2.3 以降の動向を見つつの判断になりそうですね。

あと、テストコードはできるだけ簡単に書けるようにフレームワークが機能を提供すべきで、そうでないとテストが書かれないという事態に陥りがちかなと思いますが、Play2 Java ではある程度簡潔に書けますし JUnit なのでとっつきやすそうです。7.1 ではテストについて実際のサンプルもまじえながら説明されていますので、参考になると思います。

Scala 寄りの見方をすると Play2 は Scala の技術をベースにしているので Scala でやった方がよいという意見になるのですが、本書を読んでみて感じたのはやはり Java 版の方が初心者の方には相当にハードルが低いのだろうということでした。Play2 Java を使うことで高い生産性・品質を確保でき、開発チームのモチベーションの面でもよい効果が出ているという状況であれば、無理に Scala でなくてもよいのかもしれません。

ともあれ、この日本語書籍の存在が 2014 年の日本における Play2 Java の普及を後押しするとよいですね。

Play2 Java での開発をより快適に

ただ Play2 Java を使った場合でも Scala Template など直接 Scala を扱うことがなくなるわけではなく、Scalaコンパイル時間の長さに悩まされるケースがないわけでもないと思います*4

とりあえず開発マシンはそれなりの性能のものを使いましょうというのが前提になりますね。

本書ではなるべく標準の機能を使うように解説されていますが、テンプレートエンジンは別のものに差し替えるという判断もあってもよいかもしれません*5Java での開発なのに Scalaコンパイル待ちがネックになって利用が見送られるのは残念なので、この辺はコミュニティでアイデアを出し合えればいいですね。

宣伝: ScalikeJDBC も登場

ちなみに応用編の 9 章でのみ Scala による開発について触れられているのですが、そこで ScalikeJDBC を一言紹介してくださっていました。どうもありがとうございます。

年末年始に Play2 Java

を試してみてはいかがでしょうか?

See also

【献本御礼】「Play Framework 2徹底入門」は思っていた以上に実践的 - TEPPEI STUDIO http://teppei.hateblo.jp/entry/2013/12/22/065758

追記

空いていたので Play framework 2.x Java and 1.x Advent Calendar 2013 の 25 日目とさせていただきました(一日過ぎてるけど)。

http://www.adventar.org/calendars/104

*1:現状、そういうケースがどれくらいあるのか分かりませんが 2014 年は増えるといいですね

*2:https://github.com/playframework/playframework/issues/1518

*3:使い込んだことはないのであまり断言はできません

*4:https://groups.google.com/forum/#!topic/play_ja/Mv01m6T41iI

*5:http://d.hatena.ne.jp/xuwei/20131224/1387848493