kmizuの日記

プログラミングや形式言語に関係のあることを書いたり書かなかったり。

QCon Tokyo 2015 Conference(4/21)でScalaの現在と今後について発表します

知人からの依頼で、QCon Tokyo 2015 Conferenceというもので、発表することになりました。ちょっと参加費が高い上に平日ですが、他にScala関係の発表あるし、自分が大学時代にバイトしてた産業技術総合技術研究所でお世話になった一杉 裕志先生の脳研究に関する興味深い講演も聴けるので、興味のある方は是非。

Scalaの最新動向に関してはここ最近はxuwei-kさんの方が詳しく、自分もすっかりロートルですが、まあ色々調査して発表します。

参加費が高いのと平日開催ってところがお勧めしきれない部分ですが(業務扱いにしてくれるところだと楽かも)。一応、早割があるので興味がある人は早めに参加登録した方が良いです。

『Functional Programming in Scala』の翻訳本が出版されました

既にid:xuweiさんが書いてらっしゃるので今更なのですが、一応自分も一通り目を通して翻訳レビューしたので宣伝(とはいっても売れても印税は入りませんが :-))。

タイトルの邦訳の『Scala関数型デザイン&プログラミング ―Scalazコントリビューターによる関数型徹底ガイド (impress top gear)』は長過ぎてちょっとどうかと思うところはありますが(Scalazという名前を入れたかった?、翻訳はおおむね質が高く、レビューで指摘しなければならない点もあまりありませんでした。

なお、id:xuweiさんも以前書いてらっしゃいましたが、この本はScalaの本ではなく、ましてやScalazの本でもありません。あくまでScalaを通じて関数型プログラミング(のかなりマニアックなところまで)やる本です。とはいえ、Scalaは2章でちょこっと説明してるだけなので、Scalaを使える人じゃないと読むのはつらいかもしれません。

Tiger Bookのようにこれの他言語版が出たらいいのになあなどと思いました。

本書の説明は実に丁寧で、最初に落とし穴のある(悪い)実装をみせて、それを少しずつ改善することを通して関数型プログラミングを学ぶスタイルになっています。関数型プログラミング素人の自分から見てもかなりわかりやすい本だと思いました(後半のフリーモナド辺りはややこしいですが)。お勧め。

ScalaMatsuri 2014チケット販売開始しました

昨年開催し、好評の内に幕を閉じたScala Conference in Japan 2013が今年はScalaMatsuriと名前を変え、帰って来ます!今年のテーマは、「Enjoy.scala」とにかくScalaの事ならなんでもこいで楽しもうという意味を込めました。

今年は目玉ゲストとしてScala作者Martin Odersky教授を招いて講演していただくことになりました。Scala作者に会うまたとない機会です。

また、今年は、2日目はアンカンファレンスという形式の、日本ではまだあまり行われていない催しも行います。

皆様、是非、ふるってご参加ください。

ScalaMatsuri 2014の概要・参加申し込みはこちらから!

Scala Days 2014 参加レポート (1) を掲載しました。

帰国後、体調不良等の事情もあって延び延びになってしまったのですが、昨日、表題の記事を dwangoエンジニアブロマガにアップロードしました。よろしければごらんください。

http://ch.nicovideo.jp/dwango-engineer/blomaga/ar553704

Scala Days 2014にドワンゴ社のエンジニアとして参加して来ます

Scala Days 2014(2014年6月16日〜2014年6月18日)に参加することは先日のエントリで書いた通りなのですが、今年は正式にドワンゴ社のエンジニアとして参加することになりました。ですので、一部の費用を除いて、必要経費のほとんどが会社から出ることになります。

今年はその分いつもより現地でのエンジニアとの議論や発表の視聴を初め、気合いを入れて行って来たいと思います。滞在記も書き溜めて、帰国後はドワンゴ社のエンジニアブログでScala Days 2014についてリポートする予定です。それなり以上の性能のカメラで写真も豊富に撮ってくる予定ですので、こうご期待!

  • ○○をOdersky教授に聞いてきてもらいたい
  • 発表者の○○さんにこんな質問をして来て欲しい

といった希望もこのコメント欄で受け付けていますので、どうぞよろしくお願いします。


ドワンゴ社は、社内のプロジェクトの新規案件ではかなり積極的にScalaを使っています。たとえば、Developers Summit 2014の発表『Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所』にあるように、社内通称ニコニコ生放送2はPlay/Scalaで書かれています。また、私の所属チームも主にScalaを使って開発を行っています。

人材はまだまだ足りていませんので、興味がありましたらどうぞご一報を。Twitter@kmizu宛か@mesoさん宛にメンションでもしていただければと思います。

ドワンゴ社は本物のScalaエンジニアを募集しています。

初学者向けの Scala Tips (7) - objectで名前空間を作る

たとえば、プログラミング言語のパーザを書いていて、プログラムの木構造を次のように表現したいとします。

sealed trait Expression
case class Addition(lhs: Expression, rhs: Expression) extends Expression
case class Subtraction(lhs: Expression, rhs: Expression) extends Expression
case class Multiplication(lhs: Expression, rhs: Expression) extends Expression
case class Division(lhs: Expression, rhs: Expression) extends Expression
case class Number(value: Int) extends Expression

これで問題はないのですが、Expressionはよく使われる単語なので、プログラムの他の部分と衝突する可能性があります。幸いScalaにはpackageがあるので、

package ast
sealed trait Expression extends Expression
case class Addition(lhs: Expression, rhs: Expression) extends Expression
case class Subtraction(lhs: Expression, rhs: Expression) extends Expression
case class Multiplication(lhs: Expression, rhs: Expression) extends Expression
case class Division(lhs: Expression, rhs: Expression) extends Expression
case class Number(value: Int) extends Expression

とすることは可能ですが、もっとわかりやすい方法として、objectで包むという方法が考えられます。上の定義をobjectを使って書き換えると、

object Ast {
  sealed trait Expression
  case class Addition(lhs: Expression, rhs: Expression) extends Expression
  case class Subtraction(lhs: Expression, rhs: Expression) extends Expression
  case class Multiplication(lhs: Expression, rhs: Expression) extends Expression
  case class Division(lhs: Expression, rhs: Expression) extends Expression
  case class Number(value: Int) extends Expression
}

のようになります。参照するときは、Ast.ExpressionAst.SubtractionのようにすればOKです。

ではでは。

初学者向けの Scala Tips (6) - 文字列リテラル中のインデントを整える

これは、気の利いたIDEであれば自動でやってくれるのであえて覚える必要はないのですが、一応。

Scalaでは、複数行に渡る文字列リテラルを次のようにして書く事ができます*1

val foo = """
class Foo {
  def foo(): Unit = {
    println("foo")
  }
}
"""

ここで、見やすさのためにdefの部分をもう一段インデントして、かつ、出力される文字列は変更したくないときがあります。そのようなときは、

val foo = """
  |class Foo {
  |  def foo(): Unit = {
  |    println("foo")
  |  }
  |}""".stripMargin

とすると良いです。これで、|の部分が除去されて、その次のカラムが行頭になるような複数行文字列が生成されます。これはScalaで複数行文字列を意図通りに出力するときのイディオムとして覚えておくと良いでしょう(IntelliJ IDEAなどではこれを自動で出力してくれるますが)。

*1:何故かここではGithub Flavored Markdownがうまく効いていないようです…