Scala祭で「統計をとって高速化するScala開発」の発表をしました

こんにちは! CyberZの新卒エンジニアの小笠原(@yamitzky)です。

先週9月6日にScala祭というカンファレンスがあり、CyberZはプラチナスポンサーとして支援させていただきました。弊社では7月からScala開発を開始していて、すでにリリースした製品もあります。今後もどんどんScala推し!で行きますので、その一環となります。

そして、スポンサーLT枠で「統計をとって高速化するScala開発」というタイトルで発表してきましたので、そちらの解説・補足をしたいと思います。発表の中身については、下記のスライド、またはニコ生(3:44~)の方をご参照下さい。

概要としては、IntelliJLive Templateという機能についての話です。その前にワードカウントを集計し(実はRubyで集計しました(笑))、各単語(メソッドや記号など)がどれくらい入力されたかを導き、よく入力された単語のスニペットを登録しています。また、Live TemplateではgroovyScriptを使うことができるので、その機能も簡単に紹介しました。

Live TemplateのGroovy Scriptについて

IntelliJのLive TemplateにはgroovyScriptという関数があり、こちらの機能を使っています。GroovyScriptを使うための手順は、以下の通りです。

まずは、GroovyScriptの評価内容を当て込むための変数を定義してあげて、

Edit Variableから変数の中身を定義します。groovyScriptメソッドの最初の引数に、スクリプト本体またはファイルパスを書きます。

2つめ以降の引数に、Live Templateの機能を呼び出してあげます。例えば、他のmethodName()であればそのコードを含むメソッド名です。これらは、Groovy側からは_1、_2という様に使えます。

groovyScript("return _1;", methodName()) // メソッド名を表示

IntelliJ側でのソース

また、_editorでエディターを示すインスタンスを呼び出すことができます。こちらの詳細は公式APIドキュメントがありますが、例えば「エディターが開いているドキュメントの本文」であれば次のようになります。

_editor.getDocument().getText();

※ groovyのソース

そしてgroovyScript関数が呼び出すのは本当にGroovyなので、クリップボードなどに入れてあげることも出来ます。

import java.awt.Toolkit
import java.awt.datatransfer.StringSelection
def clipboard = Toolkit.getDefaultToolkit().getSystemClipboard()
clipboard.setContents(new StringSelection(_editor.getDocument().getText()), null)

※groovyのソース

何でもありですね!

Scalazのワードカウント

本番発表では削りましたが、Scalazのワードカウントも計算していました。結果は次のようになっています。型パラータが大量にあって、implicitも多いのが特徴的です。ちなみに、上位に限るとジップの法則が成り立ちません。

ソースコードこちらで公開していますので、他のOSSなどでもぜひ遊んでみてください!

まとめ

  • groovyScriptを使って、IntelliJで「何でもあり」なLive templateを作る方法
  • Scalazのワードカウント結果

をご紹介いたしました。

最後になりますが、Scalaの合同勉強会などもどんどん開催していきたいので、何かございましたらご連絡頂けますと幸いです!