JGGUGニュースレター<第11号>をお届けします。このメールマガジンでは、
Grails/Groovy 関連ニュースや技術的な記事、JGGUGの活動報告等を、ほぼ月刊
でJGGUGメンバ全員にお送りしています。
▼目次
* ヘッドラインニュース: Grails 1.3.1, Gaelyk 0.4, Groovy++ 0.2.5他
* イベントスケジュール
* 活動レポート: G*ワークショップ in 仙台
* G*なブロガー: fumokmmさん「Groovyに想いを寄せて」
* 便利なGDKメソッド: 第一回 GDK概要とFileクラス
* Grailsプラグイン探訪: 第11回「Cassandra access プラグイン」
----------------------------------------------------------------------
■ヘッドラインニュース
* Grails 1.3, 1.3.1リリース!
待望の(1.2から半年もたってませんが)メジャーアップデート1.3、そして
そのバグフィックス版1.3.1が立て続けにリリースされました。
▽山本さんのまとめ
http://d.hatena.ne.jp/mottsnite/20100511/1273593235
http://d.hatena.ne.jp/mottsnite/20100517/1274113168
* Gaelyk 0.4リリース!
GAE/J用軽量Groovyツールキット、Gaelykにシンプルなプラグイン機構が実装
され、最新のGroovy 1.7.2、App Engine SDK 1.3.3.1にも対応。
▽開発リーダー、Guillaume Laforgeからのアナウンス
http://groups.google.com/group/gaelyk/browse_thread/thread/e6042d48f2b558df
* Groovy++ 0.2.5リリース
静的型情報を利用し、Java並みの性能やコンパイル時の型チェックなどの実現
を狙う野心的プロジェクト、Groovy++の0.2.5がリリースされました。
▽GoogleグループとGoogle Code
http://groups.google.com/group/groovyplusplus
http://code.google.com/p/groovypptest/
* GR8 Conference Europe 2010開催!
G*技術の祭典、GR8イベントが5/19,20にコペンハーゲンで開催されました。
▽イベントサイト
http://eu.gr8conf.org/eu2010/
▽Canooのメンバによるまとめブログ
http://canoo.com/blog/2010/05/24/gr8-europe-conference-wrap-up/
▽関連つぶやき(#gr8conf)
http://twitter.com/#search?q=%23gr8conf
▽会場でGriffon 0.3.1がリリース(今回からドキュメントが付属!)
http://www.jroller.com/aalmiray/entry/griffon_0_3_1_released
▽スライド
http://www.slideshare.net/glaforge/groovy-to-infinity-and-beyond-gr8conf-europe-2010-guillaume-laforge
(Groovy)
http://www.slideshare.net/glaforge/gaelyk-quickie-gr8conf-europe-2010-guillaume-laforge
(Gaelyk)
http://www.slideshare.net/aalmiray/gr8conf-flying-with-griffon (Griffon)
(by 関谷)
----------------------------------------------------------------------
■イベントスケジュール
* 第10回 G*ワークショップ
日時: 5月27日(木)
場所: NTTソフトウェア セミナールーム (品川駅徒歩5分)
詳細: http://www.jggug.org/news/10th_g_workshop
▼JGGUGの公開Googleカレンダー!購読して最新情報をチェック!
http://www.google.com/calendar/embed?src=amdndWcub3JnX3EyamlrYW8yZTJjaW44azlwM2lzMGllMGJzQGdyb3VwLmNhbGVuZGFyLmdvb2dsZS5jb20
▼JGGUGの公式Twitterアカウントもよろしく!
http://twitter.com/jggug
----------------------------------------------------------------------
■活動レポート: G*ワークショップ in 仙台
日時: 2010/04/24(土) 14:00-18:00
場所: 富士通東北システムズ セミナールーム (仙台市青葉区)
初めての出張ワークショップということで、日本全国のG*な人たちが仙台に集
まりました。当日は天気が少し悪く大雨も降っていましたが、開始時間が近づ
くと雨も止み、たくさんの方に参加して頂きました。
* 「はじめてのGroovy」須江信洋さん
http://www.slideshare.net/nobusue/gworkshop-sendai-20100424
Groovyの基本から言語仕様までを幅広くわかりやすく解説してくださいました。
あまりのわかりやすさにGroovyクイズでは多くの人が正解し、最後はじゃんけ
んで「Groovyイン・アクション」がScalaな人にわたる結果となりました。
きっと今頃は読破してくれていることと思います。
* 「Grailsとことん入門」山本剛さん
http://www.slideshare.net/tyama/g-in-grails
「とことん入門」というようにGrailsの歴史から、最新の情報まで広く深い内
容でした。個人的に少しGrailsから離れていたので、知らない新しい機能も多
く、Grailsを使いたくなりました。さすがにあの伊達政宗公も絶賛するだけの
ことはあります。(資料参照)
* 「Grailsでシステム構築」石川めぐみさん
http://www.slideshare.net/lemur314/grails-3852722
仕事で初めてGroovyやGrailsを使われ、発見した良いところや困ったところを
話して頂きました。色んな苦労話がありましたが、最終的にはGroovyに興味を
持たれ、また懇親会では仕事について熱く語られていたのが印象的でした。仙
台は熱いところです。
* 「Groovyではじめるアレやコレ」いまいまさのぶさん
http://dl.dropbox.com/u/126447/gwsendai2010/index.html
「marsのメモ」でおなじみ、いまいまさのぶさんのセッション。最後にGroovy
の良いところを全部まとめて説明して頂きました。コードとデモが動いている
のを見つつ、IntelliJが気になったのは私だけではないはず。懇親会では
IntelliJの良さをじっくり教えて頂きました。IDD(IntelliJ Driven
Development)の境地に至るにはまだまだ修行が必要です。
G*ワークショップ in 仙台については参加された方がブログ等に感想を書かれ
ています。すべてのURLをここにまとめることが出来ませんでしたが、いまい
さんがTogetterに参加者のつぶやきをまとめてくださいました。
http://togetter.com/li/16728
また、当日の様子の一部がPicasaににも上がっています。
http://picasaweb.google.com/kazuchika/GIn
JGGUGでは今後も様々な場所へ出張を計画しています。次は地元でと言う方は
ぜひ、運営委員までご一報ください。もちろん、仙台ではまた開催したいと思
います!(今回私は何もしていませんがw)
(by 奥)
----------------------------------------------------------------------
■G*なブロガー: fumokmmさん「Groovyに想いを寄せて」
どうも、はじめまして。はてなダイアリーで「No Programming, No Life」と
いうブログを書いているfumokmm(ふも)と申します。JGGUGの関谷さんから当
コーナーの記事の執筆のお話をいただきまして大変光栄に思っております。駄
文で申し訳ありませんが、少々お付き合いいただけたら嬉しく思います。
◎ ◎ ◎
現在は名古屋でシステムエンジニアをしておりまして、業務はもっぱらJava中
心のシステム構築を行っています。ずっとJavaを触ってきたせいか、Rubyのよ
うなダイナミックな言語に憧れておりまして、Rubyについて調べ始めていた矢
先に、Groovyに偶然出会いました。
最初の印象としましては、「Java(Groovy)でここまでできるんなら、Ruby要ら
ないじゃん」でした。Groovyと付き合うようになってからは逆にJavaのことを
もっと深く知れるようになったように思います。なるほど…ちょっと厳格で重々
しいJavaでもこうやってこうすればGroovy!!に生まれ変わることだってできる
んだ。そんな感じですね。
とにかく便利なコレクションフレームワークの拡張など、感動して書き綴った
記事がこれ http://d.hatena.ne.jp/fumokmm/20081224/1230124652 になりま
す。ちょうどJavaでのリストやマップ操作にうんざりしていたころなので本当
に新鮮でした。
最近は、GrailsやらGrapeやら、進化し続けているGroovyに付いて行けていな
いので、今後も勉強の日々が続いて行くのだと思っています。ずっと興味の尽
きない素敵な言語だと思っています。(ただ、最近はScalaやClojureやErlang
やHaskellといった関数型言語に浮気しています(笑) 関数型の魅力にとりつか
れたのも、Groovyでクロージャに出会えたから…なのですが)
◎ ◎ ◎
さて、JVM上で動く動的言語というとGroovy以外にも(Scala, JRuby, Jython,
...etc)いろいろとありますがGroovyがよいのは、Better Javaに徹していると
ころだと私は思っております。
* ほぼJavaコードそのままでも動かせること
* 利用しているクラスはJavaクラスそのものであること
この特徴によって、Javaでコードを書く前にGroovyでささっとメソッドを書き、
テストした後、そのコードをそのまま業務コードにコピペして利用させてもらっ
ています。(Javaのためにセミコロンをつけるなどは必要だが)
Groovyで動かしてみた事実がそのままJavaでの事実であることも大きいと思い
ます。たとえば、Windows環境で以下のようなGroovyコードを実行してみます。
(以下、GroovyConsoleにて実行)
groovy> '\uff5e'
Result: "~"
ほほう、\uff5eはナミダッシュなのか。
groovy> '\uff5e'.getBytes('Windows-31J').collect{
"0x${Integer.toHexString(it & 0xff)}" }
Result: [0x81, 0x60]
ほほう、ナミダッシュはWindows-31Jでは 0x81, 0x60 なのか。なるほど。
この、ナミダッシュはWindows-31Jでは 0x81, 0x60であるという事実はJava上
のコードでも変わらぬ事実です。このように手っ取り早く対話的にJavaコード
をいじれるところが魅力的ですよね。
Javaコードが手軽にポータブルに扱いやすくなり、それによって更にJavaが身
近になった感覚。まさにBetter JavaはGroovyであると思います。
◎ ◎ ◎
G*なブロガーということで…Groovyで作成した一番大きなプロダクツと考えて
みるとやっぱり「fumobot(ふもぼ)」になるのではないかと思います。ふもぼ
ははてなハイク向けに作ったBOTです。動作プラットフォームとしてはGAE/J+
Gaelykで動いています。もともと自宅サーバでGroovyでスクリプトを書いて動
かしていたんですが、GAEでJavaが動かせるならGAEで動かしたほうが面白いか
も!と思い移植して動かしています。その際、軽量のGAEフレームワークであ
るGaelykのおかげでスムーズに移植することができました。
▽ふもぼのプロフィール
http://www.hatena.ne.jp/fumobot/
▽ふもぼのはてなハイク
http://h.hatena.ne.jp/fumobot/
▽一応ソースも公開されているのでご興味のある方はご覧下さい
http://code.google.com/p/fumobot-project/
▽ふもぼのためにJavaで書いたはてなハイクAPIラッパー (HatenaHaiku4J)
http://d.hatena.ne.jp/fumokmm/20090905/1252143947
◎ ◎ ◎
それから最近はGroovyの断片コードを扱う日本語サイトが意外と少ないなぁと
いう想いから、コピペで動かしてみることができるコード片を集めたブログを
書こうかなと思っております。
国内において、いまいちGroovyが浸透しない理由の一つにサンプルがないこと
があげられると思っています。本当に基本的な事柄でも初心Groovyistにとっ
ては助け舟になるかもしれないという想いを込めて。
一応形だけはすでにあります
▽fumokmmのGroovyな日記
http://groovy.g.hatena.ne.jp/fumokmm/
更新をさぼりすぎなので、せっかくの機会ですし、これを機にまじめに更新し
ていけたらなと思っています。
◎ ◎ ◎
最後になりましたが、私の普段の主な活動先をご紹介させていただき終わりと
させていただきたく思います。気軽に声をかけていただいたり、コメントいた
だけると非常に喜びます!今後とも、よろしくお願い致します。
▽プロフィール
http://www.google.com/profiles/fumo.kmm
▽No Programming, No Life
http://d.hatena.ne.jp/fumokmm/
▽適当につぶやいています
http://twitter.com/fumokmm
http://h.hatena.ne.jp/fumokmm
▽メールアドレス
fumo...@gmail.com
----------------------------------------------------------------------
■便利なGDKメソッド: 第一回 GDK概要とFileクラス
こんにちは、須江と申します。本ニュースレターでは初登場となります。
みなさんはGDK(Groovy JDK)をご存知でしょうか?個人的には、GDKこそGroovy
が"Better Java"を実現するための重要な仕組みであり、他のJVM言語にはない、
Groovyならではの特徴だと思っています。
ということで、GDKの便利さをお伝えすべく、連載企画を立ち上げました。今
回は初回ということで、GDKの概要と、私の一押しであるFileクラスのGDKをご
紹介します。
* GDKとは?
Javaを使っていて「このクラスにこういうAPIがあればいいのに」と思ったこ
とはありませんか?GroovyではGDKという機構によって、既存のJavaクラスに
後付けで便利なAPIを追加しています。どのようなAPIが追加されているかは、
GDKのリファレンスで確認することができます。
http://groovy.codehaus.org/groovy-jdk/
これを見ると、例えばjava.lang.Objectに対して非常に多くのメソッドが追加
されていることが分かります。どこでも"println"が使えるのも、実はGDKのお
かげだったんですね。
#ちなみに、GDKのメソッドの実体がどうなっているのか興味のある方は、
#org.codehaus.groovy.runtime.DefaultGroovyMethodsのソースコードを見て
#みるとよいです。
* java.io.FileクラスのGDKメソッド
Javaで面倒なものの代表例がファイル操作ではないでしょうか?
これは、java.io.Fileクラスで提供されているAPIが貧弱なためですが、
GroovyではGDKによってFileクラスが大幅にパワーアップしており、スクリプ
ト処理でも手軽に使えるようになっています。
例えば、テキストファイルを読み込んで1行づつ処理する場合は、eachLineメ
ソッドが使えます。
new File('hoge.txt').eachLine{
println it //1行毎の処理
}
また、ファイルへの追加を行う場合、<<演算子が利用できます。
(<<演算子はleftShiftメソッドに読みかえられます。)
def f = new File('new.txt')
f << 'aaa\n' << 'bbb\n' << 'ccc\n'
eachFileRecurseメソッドを使えば、ディレクトリ階層をたどってファイルを
処理できます。
new File('.').eachFileRecurse{
println it.name //ファイル毎の処理
}
また、複雑なファイルI/Oを行う場合に便利なのがwith系メソッドです。
例えば、withWriterメソッドを使うと、FileWriterのインスタンスをクロージャ
の引数として渡してくれるだけでなく、ファイルのフラッシュや、例外発生時
の後始末まで自動的に実施してくれます。
new File('writer.txt').withWriter{ w ->
(1..10).each{ w.println(('#'*it).padLeft(10)) }
}
* 最後に
次回から、リレー形式でいろんな方のお気に入りGDKメソッドを紹介していき
たいと思います。我こそはという方は、ぜひご連絡を!
(宛先: newsletter[at]jggug.org)
(by 須江)
----------------------------------------------------------------------
■Grailsプラグイン探訪: 第11回「Cassandra access プラグイン」
Grailsプラグイン探訪、今回は「Cassandra access」プラグインをご紹介しま
す。このプラグインをインストールすることにより、Cassandraにアクセスす
るためのServiceクラスを利用することができます。
プラグインの自体の話の前に、Cassandraについて説明します。Cassandraとは、
Apacheプロジェクトから提供されているオープンソースの分散データベース管
理システムです。最近NoSQLという言葉を見かけることが多くなってきたと思
いますが、そのNoSQLを実現するミドルウェアはいくつかあり、Cassandraはそ
のようなミドルウェアの一つになります。
Cassandraには、Thriftと呼ばれるライブラリやCassandraのライブラリがjar
として提供されており、JavaやGroovyからCassandraにアクセスするためには、
これらのライブラリを使用します。
Cassandra accessプラグインは、CassandraにアクセスするためのServiceクラ
スを提供しており、Serviceクラスでは上記のライブラリを使用して機能を実
現しています。GrailsのControllerやServiceクラスに"cassandraService"と
いう名前のプロパティを宣言することで、同名のBeanが実行時に注入されます。
class LookupController {
def cassandraService
あとは、
getColumnValue : キー名、カラム名などをもとに値を取得
setColumnValue : キー名、カラム名などをもとに値を設定
removeValue : キー名、カラム名などをもとに値を削除
といったcassandraServiceのメソッドを使用しCassandraにアクセスします。
いわゆる"KVS(Key Value Store)"的な使い方をします。
CassandraおよびCassandra accessプラグインは、GORMとは別に動作しますの
で、ドメインクラス、つまりRDBMSを並用することができます。ドメインクラ
スを作らずCassandraだけでアプリを組むこともできますし、RDBMSが不得意と
するところをCassandraでカバーするようなアプリを組むこともできます。
▽参考URL
http://cassandra.apache.org/
http://www.grails.org/plugin/cassandra
http://github.com/wolpert/grails-cassandra
(by 杉浦)
----------------------------------------------------------------------
// JGGUG ニュースレター Vol.11
// 発行元: 日本 Grails/Groovy ユーザーグループ (http://www.jggug.org/)
// 編集担当: 関谷
// バックナンバー: http://grails.jp/wiki/display/newsletter+archive
// Copyright 2010 JGGUG - 再利用は Creative Commons ライセンスによります:
// http://creativecommons.org/licenses/by-sa/2.1/jp/
// お問い合わせ、ご意見等は newsletter[at]jggug.org までお願いします。