Tech Sketch Bucket of Technical Chips by TIS Inc.

ScalaMatsuri2014で発表してきました

Pocket

9/6、7に開催された日本最大級のScalaカンファレンス 「ScalaMatsuri」 で発表してきました。今年で2回目の当カンファレンスは、Scalaの開発者であるMartin Odersky氏が講演されるということもあり300枚のチケットが完売するという大盛況の中開催されました。Scalaをテーマに、1日目は2会場で 計18の講演 が行われ、2日目には アンカンファレンス が開催されました。TISはScalaMatsuriのスポンサーをさせて頂き、私も1日目に 「SIerに立ちはだかるScalaの壁に進化型ジェネレータで挑む」 というタイトルで、我々が開発した ScalaのScaffold の話をさせて頂きましたので、その内容を紹介します。

本カンファレンスは海外からも講演者・参加者がいらっしゃり、海外コミュニティとの交流促進という目的もあり、スライドには英語/日本語を併記しています。

エンタープライズでScalaを最大限に活用するにはコードジェネレータが必要

ツールを開発することに至った背景と狙いをお話した後に、ツールの紹介をしました。エンタープライズ向けのシステムを開発する我々は、従来JavaでWebアプリケーションを開発し、如何に効率よく開発するかを突き詰め、フレームワークやジェネレータ、その他にも様々な効率化ツールやガイドを作成し、これらの技術をトレーニングすることによって、開発生産性を向上してきました。しかし、さらなる生産性の革新を考えた時に、これまで前提としてきたJavaでの開発において、周辺技術を整備することだけでは困難であると感じていたとき、Scalaに出会いました。

Javaで開発している我々がScalaを活用するにあたってたちはだかる壁は、エンタープライズ向けのツールの不足、安定志向の開発現場や顧客、習得や教育の難しさなど、様々です。

我々にとってScalaの魅力の1つは静的型付け言語でありながら、スクリプト感覚で書ける簡潔性です。これにより、コード量はJavaに比べ激減します。しかし、これまでJavaによる開発環境を徹底的に整備してきた我々が、Scalaを利用すると本当に実装するコード量が減るのかと考えてみると、答えはNoでした。Javaでの開発環境には自動生成ツールや独自のフレームワーク・ライブラリという武器を持っていたからです。

そこで、Scalaによりコードがシンプルに書けるという恩恵を受けるためには、これまで自動化していたような機械的な実装は自動化する必要があります。また、それによりプログラマーは本質的なビジネスロジックに注力できる環境を作る必要があると考えました。その環境が整えば、Scalaの威力を引き出し、優秀なプログラマがこれまで以上にその力を発揮でき、生産性改革が実現できると考えました。

Scaffold for Scala 「Skalholt」

前置きが長くなりましたが、ジェネレータ「Skalholt」を紹介します。Skalholtの特徴は次の4つです。

  1. TypesafeプロダクトであるPlay Framework/Slickに準拠
  2. DBスキーマからソースコードを生成
  3. アプリケーション構造をリポジトリに格納し編集可能
  4. Typesafe Activator の元で動作するため環境構築不要

1.TypesafeプロダクトであるPlay Framework/Slickに準拠

SkalholtはフレームワークにPlay Framework/Slickを採用しています。その環境下でのWebアプリケーション開発を効率化するツールです。Play FrameworkとSlickは、Scalaを開発するTypesafe社によって提供され、Webアプリケーションのデ・ファクト・スタンダードとなりつつあります。

2.DBスキーマからソースコードを生成

SkalholtはRailsのScaffoldのようにDBスキーマからScalaのソースコードを生成します。

3.アプリケーション構造をリポジトリに格納し編集可能

Slide-GenerateFlow.png

ソースコード生成の過程で、必要なアプリケーション構造の情報を一旦データベースに格納します。これを設計リポジトリと呼びます。ScaffoldはDBスキーマから得た情報でしかアプリケーションを生成できませんが、この設計リポジトリを編集することで、DBスキーマにはない情報を付加し、より実用的なアプリケーションの形に拡張させていくことができます。

slide-generated-codes.png 例えば、登録画面の入力項目がテキストフィールドなのか、チェックボックスなのかは、DBスキーマからは判断できません。そのため、初期状態では日付項目を除くすべての入力項目をテキストフィールドとして生成します。その後、設計リポジトリを編集することでチェックボックスへと作り変えることができます。
また、検索画面の検索条件はすべて完全一致として生成します。設計リポジトリを編集することで、部分一致や前方一致など様々な検索に変更することができます。生成するコードを成長させていくことができる「Scalable Generator」なのです。(Scalaの「Scalable Language」にちなんで言いました。)

4.「Typesafe Activator」のテンプレートとして提供するため環境構築不要

Skalholtは 「Typesafe Activator」のテンプレート として提供しています。「Typesafe Activator」が使える環境であれば、それ以外の環境設定は不要で、コマンド1つでSkalholtが実行できるブランクアプリを手に入れる事ができます。ScalaやPlayの初学者でも、すぐにWebアプリケーションを作ることができるよう、Skalholtの実行環境には「Typesafe Activator」を利用しました。「Typesafe Activator」についてTypesafeのEugene Yokota氏が「Out-Of-Box Experience」という言葉で説明されていましたが、Skalholtもまさに箱を開けたらすぐに使えるツールなのです。

Scala開発者の裾野を広げるため、このツールによりこれまで周辺ツールが不足していてScalaの採用に踏み出せなかった方々が一歩踏み出し、一人でも多くの開発者にScalaを使って頂けることを望んでいます。また、本ツールは生産性向上だけでなく、習得が難しいと言われるScalaやPlayを習得するためのツールとしても活用頂けると考えています。コマンド一つで環境が整い、すぐにWebアプリケーションが作成できるので、Playに戸惑う必要がありません。まずは、このツールでCRUDアプリケーションをジェネレートし、ビジネスロジックをScalaで実装することでScalaという言語の威力を存分に楽しんでください。今までになかったPlay Framework/SlickベースのScaffoldはSkalholtです。
「ScalaのScaffoldはSkalholt」

なお、本ツールはOSSとして以下のページで公開していますので、少しでも興味を持たれた方は是非ご利用ください。
http://tech-sketch.github.io/skalholt/

スポンサーLT

同じく戦略技術センターに所属している奥がスポンサーLTをさせて頂きました。

ScalaMatsuri-okusan.JPG

おわりに

最後になりましたが、ScalaMatsuriのようにScalaの開発者Martin Odersky氏や国内外のScalaのトップエンジニアの方々の講演を一度に聞ける機会は他にはないと思います。このような場で発表の機会を頂けたことを大変光栄に思います。関係者の皆様、有難うございました。

すべての講演やアンカンファレンスが興味深いものでした。中でも、アンカンファレンスでOdersky先生のコードレビューが強く印象に残っています。

エンジニア採用中!私たちと一緒に働いてみませんか?