情報畑でつかまえてロゴ
本サイトは NTTテクノクロスが旬の IT をキーワードに
IT 部門が今知っておきたい最新テクノロジーに関する情報をお届けするサイトです

Grails推進室と活動の紹介

今回は初回ということで、「Groovy」「Grails」についてごくごく簡単に紹介した後、私が所属する「Grails推進室」について紹介します。

Grails推進室と活動の紹介

はじめに

こんにちは。NTTソフトウェアの中野 靖治です。私は「Grails推進室」という国内でもちょっと珍しいGrails/Groovy専任組織に所属しています。日々、社内外にGrailsやGradleなどのGroovy関連技術を推進したり、社内向けに技術支援をしたり、コミュニティやOSS界隈で活動をしたりしています。

本ブログでは、主にGroovyとその関連プロダクト(Grails, Gradle, etc.)についての技術的なトピックを紹介していきたいと思います。が、今回は初回ということで、「Groovy」「Grails」についてごくごく簡単に紹介した後、私が所属する「Grails推進室」について紹介します。

Groovyとは

Groovyとは、簡単に言うと「Java VM上で動作する動的なスクリプト言語」です。他のスクリプト言語と比較して、Javaとの親和性が高いのが大きな特長です。Groovyの構文はJavaと互換性が高く、JavaのAPIもそのまま普通に使えるので、Javaでの開発経験やスキルがそのまま生かせます。Javaの置き換えを目指す新しくてすごい言語、というよりはどちらかというと、Javaと併用することでJavaの欠点を補いつつ最大の効果をもたらしてくれる言語、というイメージです。

プログラム言語学習の一歩目としてよく使われる Hello World をGroovyスクリプトとして書くとこうなります。

// hello.groovy
println "Hello, Groovy!"

Hello, Groovy! という文字列を出力(println)する、という日本語の説明とそのまま一対一で対応する簡潔なプログラムですね。

Groovyをスクリプトとして実行するには、通常 groovy コマンドを使います。

$ groovy hello.groovy
Hello, Groovy!

Groovyでは、Javaの標準APIがすべてそのまま使えますが、その上に更に「Groovy JDK (GDK)」と呼ばれる便利なAPIがたくさん追加されています。たとえば、GroovyがJavaの java.net.URL クラスに追加している getText() メソッドを使うと、簡単にURLの先にGETアクセスしてHTML文字列を取得できます。

println new URL("https://www.ntts.co.jp").getText()

Grailsとは

Grailsは、Groovyの言語が持つパワーを最大限に活用したWebアプリケーションフレームワークです。必要な機能・便利な機能が一通り取り揃えられていて、即座に開発を開始できます。Ruby on Railsに大きな影響を受けていて、多くの共通する概念や機能を持っています。Grailsの裏側は、Spring Framework/Spring MVC/HibernateなどのデファクトスタンダードなOSSで構成されています。

たくさんある機能の内、代表としてGORM(Grails' Object Relational Mapping)と呼ばれるO/Rマッピング機構を簡単に紹介します。GORMを使うと、ドメインクラス(エンティティ)を定義するだけで、起動時にデータベース上のテーブルを自動生成したり、各プロパティに対するバリデーションが実現できたり、テーブルへの入出力メソッドが生成されたりします。

たとえば、書籍についてのドメインクラスを次のように書きます。

// 書籍ドメインクラス
class Book {
String title   // 書籍名
String author  // 著者名
// 制約 static constraints = { title blank:false, maxSize: 100 // 空文字禁止、最大100文字 author blank:false, maxSize: 100 } }

これだけで、アプリケーションを起動すると、対応する book テーブルが自動生成されます。また、テーブルへのアクセスのための便利なメソッドやバリデーションも使えるようになります。

def book = new Book(title: "プログラミングGROOVY", author: "中野 靖治、他")
book.save() // データベースへの保存
assert Book.count() == 1 // レコード数の取得 def books = Book.where { title == "プログラミングGROOVY" }.list() // データベースからの取得 assert books == [book]
def book3 = new Book(title: "", author: "") book3.save() // 自動的にバリデーションが実行される assert book3.hasErrors() // 空文字禁止制約のためエラーが検出される

2015年3月31日にリリースされたバージョン3.0.0では、Spring BootとGradleをベースとして下回りが書き直されました。これによって、Grailsは、Spring Bootが持つ実行可能JAR/WARファイルの生成などのモダンな各種機能と、Gradleが持つビルドまわりの強力な機能や柔軟性とを手に入れました。現状では、2.x系と3.x系の2系統がアクティブにメンテナンスされていますが、今後は徐々に3.x系が主流になっていくでしょう。

Grails推進室とは

私が所属する「Grails推進室 (Grails/Groovy Advocate Office; GGAO; ガオ)」は、社内にGrailsとGroovyを推進していくための技術集団として2012年1月に組織されました。

所属メンバの日常的な業務としてはこのような感じです。

  • Grails適用プロジェクトを増やすための推進活動
  • Grails適用プロジェクトに対する技術支援
  • 社内研修講師 (Grails、Gradle、Spock、Gitなど)
  • Grailsに対する有償保守サポートの提供
  • OSS活動 (独自プロダクト開発、バグ報告、パッチ提供など)
  • コミュニティ活動 (JGGUG運営、社外発表など)

OSS活動の一環で開発したプロダクトとしては、groovy コマンドの起動時間を短縮するためのGroovyServというツールを公開しています。

また、Grailsなどにバグ報告やパッチを送ったり、社内で有志を募ってGrailsのユーザガイドの日本語翻訳作業に貢献したりもしています。

主なコミュニティとしてJGGUG(日本Grails/Groovyユーザグループ; ジェイガグ)の活動に関わっていて、勉強会の会場も提供しています。JGGUGでは、だいたい月に一度のペースでワークショップを開催していますので、ご興味のある方は是非参加をご検討ください。

また、社外発表活動としては、他のメンバも含めて、色々な勉強会やカンファレンスでGroovy関連のお話をさせていただいています。
私個人としてのここ数年の主な登壇歴はこんな感じです。

  • JavaOne Tokyo 2012: 「JVM言語BOF」というセッションでGroovyコーディング大会要員として登壇しました
  • Gr8conf 2013 EU Copenhagen: 海外のGroovy/Grails系の技術カンファレンスに登壇してGroovyServなどについて紹介しました
  • JJUG CCC 2013 Fall: JVM言語パネルディスカッションにGroovy代表として登壇しました
  • JJUG CCC 2015 Spring: Java開発プロジェクトでGroovyを活用する方法について紹介しました

Grails推進室の英名の由来

余談になりますが、「Grails推進室」の英名である「Grails/Groovy Advocate Office」の命名には、実はGroovyのプロジェクトリードであるGuillaume Laforge氏が関わっています。

「/Groovy」はいったいどこから来たのだ、という突っ込みはひとまず置いておいて、「Advocate」の部分に注目してください。

新組織の立ち上げにあたっては組織名が必要です。和名はそれまでの先例に合わせて「Grails推進室」とすんなり決まりました。

問題は英名です。当時あった既存の「XXX推進室」では「XXX Promotion Office」というパターンで英名が決定されていました。しかし、個人的には当時技術者界隈でよく見かけるようになった「技術支援」=「Advocate」という単語をどうしても採用したいという野望を持っていました。そこでダメ元で提案してみたところ、「あまり聞いたことがないけど、英語に詳しい人かネイティブスピーカに確認してみて妥当であれば採用してもよい」ということになりました。

伝手を色々あたってみた結果、最終的に「GroovyのヘッドたるGuillaume氏に確認すれば間違いない」ということで、早速「『Grails/Groovy Advocate Office』と『Grails/Groovy Promotion Office』のどちらが自然ですか?」というメールを送ってみたところ、すぐに「Advocateの方が自然に聞こえますね」という返信がいただけて、それを根拠として無事に「Advocate」案の採用に至ったのでした。

Thanks, Guillaume!

おわりに

今回は、GroovyとGrailsについてのごくごく簡単な説明と、私の普段の活動などをご紹介しました。次回以降は、GroovyやGrails/GradleなどのGroovy関連プロダクトについてのもう少しテクニカルな内容でお送りしたいと思います。お楽しみに。

参考URL

連載シリーズ
中野靖治のGroovy活用術
著者プロフィール
中野 靖治
中野 靖治
JVM上で動作する動的型付け言語であるGroovyと、Groovyで記述するWebアプリケーションフレームワークのGrailsを社内外へ推進するために日々奮闘している。 Groovyスクリプトの起動時間を短縮するGroovyServや、GroovyスクリプトでのExcel操作を劇的に楽にするGExcelAPIなどのOSSを業務/プライベートで開発、 一般に公開。Groovy/Grails/GradleなどのOSSへのバグフィックスや機能パッチの提供などにも積極的に貢献している。 また、国内外(JJUG CCC、Java Day Tokyo, Gr8conf EUなど)での講演や書籍執筆などでも活動中。 著書に『プログラミングGroovy』(技術評論社/共著)がある。自他共に認めるビール党。