Scala祭で「統計をとって高速化するScala開発」の発表をしました
こんにちは! CyberZの新卒エンジニアの小笠原(@yamitzky)です。
先週9月6日にScala祭というカンファレンスがあり、CyberZはプラチナスポンサーとして支援させていただきました。弊社では7月からScala開発を開始していて、すでにリリースした製品もあります。今後もどんどんScala推し!で行きますので、その一環となります。
そして、スポンサーLT枠で「統計をとって高速化するScala開発」というタイトルで発表してきましたので、そちらの解説・補足をしたいと思います。発表の中身については、下記のスライド、またはニコ生(3:44~)の方をご参照下さい。
概要としては、IntelliJのLive 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の合同勉強会などもどんどん開催していきたいので、何かございましたらご連絡頂けますと幸いです!