kmizuの日記

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

【月1言語企画】文法がVBぽいだけのプログラミング言語VBLを作ってみた

3〜5月にかけて、月1プログラミング言語企画が続いていない、これは良くない!ということで、急遽お茶を濁すために作った言語です。基本的に、Klassicをベースに構文だけVBぽくした言語です。リポジトリは以下です。

github.com

次のような構文が使えます。

変数宣言

次のようにして書けます。

Dim x = 1 // x As Integerと同じ

型を書いてもいいです。

Dim x As Integer = 1

While式

元の言語が言語だけに、Whileも文ではなく式です。

Dim i = 0
Dim result = While i < 10
  PrintLine(i)
  i = i + 1
End While
PrintLine(result) 

ちゃんと、End Whileで閉じるところなどはVBを踏襲しています。

If式

やっぱりIfも文ではなく式です。

Dim i = If x < 10 Then
  1
Else
  2
End If

ちなみに、現状は都合により、Elseは省略できません。

Foreach式

VBぽいForを実装するのも難しくないのですが、パーザ以外にも手を入れなければならずめんどくさいので、代わりにForeach式があります。

Foreach i in [1, 2, 3, 4, 5]
  PrintLine(i)
End Foreach

関数定義

関数定義は Function ではじまり、 End Function で終わります。

Function Add(x, y)
  x + y
End Function

変数宣言と同様に型を書いても良いです(同じ意味です)

Function Add(x As Integer, y Integer) As Integer
  x + y
End Function
PrintLine(Add(1, 2))

サブルーチン定義

サブルーチン定義は Sub で始まり、 End Sub で終わります。

Sub Put(x)
  PrintLine(x)
End Sub
Put(1)

同じく、型を書いてもいいです。

Sub Put(x As Integer)
  PrintLine(x)
End Sub
Put(1)

その他にも、なんとなくVBぽい構文をいくつか実装していますが、とりあえず今日はこんなところで。

ちなみに、こういうEnd FunctionとかEnd Whileとか、対応するキーワードが指定されているタイプのやつは、文法の衝突をあんまり考えなくていいので、パーザ書くときにやはり楽ですね。

毎日ウォーキング(例外無し)を始めて10日経ちました

 新型コロナウイルス関係で、2月下旬頃からほぼ完全リモートが続いているのですが、運動不足がいい加減ひどいので、毎日必ずウォーキング習慣というのを始めてみました。ルールは簡単で

  • 毎日必ずウォーキングをする(例外は認めない)
  • 時間があるときは1時間、無い時でも最悪20分は確保する
  • 朝が望ましいけど、できなければ夜でも歩く

 という感じです。で、5/4(月)から、毎日4~5kmくらい、淡々と歩いていますが、結構いい点が色々あることがわかってきました。


  • 体力がついた(戻った)

 当たり前ですが、毎日歩いていれば体力がつくので、リモートワークでも疲れにくくなりました。

  • 寝つきが良くなった

 ちょっと不眠気味でしたが、だいぶ改善しました。身体動かすことで疲れが出るのと、朝日をちゃんと浴びてるのが大きいのでしょうか。

  • 肩こりが顕著に改善した

 その前は肩こりでめっちゃ悩んでましたが、昨日今日くらいは肩こりがあまり気にならないくらいに改善しました。

  • 姿勢が良くなった気がする

 歩くときに背筋伸ばすように意識しているのが大きいのかもですが、椅子でも背筋伸ばすのが普通になってきました。

  • その日の作業効率が良くなった気がする

 歩いている間に、今日どうしようかなーとか、昨日ここが良く無かったなーとか、あと、普段バックグラウンドで考えてるのが表に自然に浮かんできているせいだと思うのですが。散歩毎日している研究者の逸話を時々聞きますが、納得です。

 という感じで、今のところこれで悪くなった部分がほぼないので、台風や大雨の日以外はずっと毎日続けて、どういう風な変化があったかを時々書いてみようと思います。まあ、やっぱり人間は運動しないようには出来ていないんだなと感じますね。当然ですが、効果は個人差がありますが、私の場合はこんな感じです、という感想です。

【月1言語企画】まだ実装されてないけど、関数名は決まってるという意図を表現可能な静的型付き言語Funtomを作ってみた

 こんばんは。今日は、月1言語企画の一環として作成したプログラミング言語Funtomを紹介したいと思います。

github.com

 というか、ついさっきプロトタイプができたばかりなんですが。

 基本的には、ほぼ自作のプログラミング言語Klassic

github.com

 をベースにしたのですが、一つやや特徴的な機能があります。それは、まだ存在してないけど名前は決まっている関数を呼び出すことができるというものです。幽霊呼び出し(Phantom Call)という厨二ぽい名前を付けてみましたが、使い方は以下のような感じです。

def myMap(xs, f) = {
  ?implementLater(xs, f)
}
myMap([1 2 3], (x) => x * 2)

 ここでは、関数myMapを実装しているのですが、「後で実装するよ」って旨を表現したいので、それを?implementLater(xs, f)と記述しています。このプログラムを実行すると、

Exception in thread "main" com.github.funtom.runtime.PhantomCallError: Phantom implementLater([1, 2, 3], <function value>) is called: 2, 3

 て感じで、付けられた仮の関数名と実引数を伴った例外が投げられます。幽霊呼び出しの型は今の所必ず'aみたいな多相型になっていて、式が書ける場所にならどこにでも埋め込めます。ちなみに、Klassicをベースにしているので、型システムはHindley-Milnerの拡張(ぽい)ものです。

 で、なんでこれを実装したかなんですが、動的型付き言語の利点の一つとして、実装途中のプログラムでも実行できるというのが挙げられるというのが背景にあります。実行パスによって、エラーが出る場合でもとりあえず途中までは実行できるってやつですね。その利点を静的型付き言語に部分的に取り込めないかというのがこの試みです。実際、条件分岐で、絶対に実行されないパスに幽霊呼び出しを置くと、何事もなく実行ができます。

 この機能はネタというか実際問題かなり欲しいものだったりします。特に、静的型付き言語で、「後で実装する」を表現するのに undefined とか ToDo() とか ??? とか、bottom typeを返す特別な関数を組み込みで定義(あるいはユーザー定義)してる言語は最近多いと思うんですが、そのへんをもうちょいカジュアルにやりたいのと、どういう実引数と名前で呼び出されたかの情報が欲しいのです。もちろん、Dynamicとかなんか、細工してそれぽく見せる方法は最近のメタプログラミングが強力な言語だと色々あると思うんですが、そういう小細工じゃなくて言語の組み込みでほしいってのが正直な気持ちです。

 なお、幽霊呼び出しは実際に呼び出されると必ず例外を吐くわけですが、この辺は、対応する実装が定義されていたら、実行されるみたいな機能も盛り込むともっと面白いかなと思っています(機能的には、幽霊呼び出しに対して、実装が存在するかルックアップするだけなので小一時間あればできそう)。

 これが2020年2月分の言語なので、4月中にあと2言語(3月分と4月分)を作らないといけないわけですが(と自分で決めたので)、なんか適当にネタを考えてみることにします。  

書評:プログラミング言語大全

プログラミング言語大全

プログラミング言語大全

  • 作者:クジラ飛行机
  • 発売日: 2020/04/18
  • メディア: 単行本(ソフトカバー)
   技術評論社の編集さんから、「プログラミング言語に詳しい人」枠でなんだか献本いただきました。ただ、タイトルを見た時点でそこはかとなく不安があったので、記述がひどいぽかったら書評は書かないでおこうと思いましたが、ぱらぱらと読んで、よく調べて書かれた書籍だと思ったので、ご紹介したいと思います。

 この書籍は、日本語プログラミング言語「なでしこ」や「ひまわり」の作者として知られているクジラ飛行机さんが、世の中に数多あるプログラミング言語の中で、(比較的)知られているものについて、

 といった側面から紹介するといった趣です。

オススメしない読者

 初めにこれを書くのはどうかと思ったのですが、読む必要がない人は確かにいるかなと思いましたので。

 まず、日頃から言語の公式ページとかあさって、どんなプログラミング言語があってどういう特徴があるかなどについて調べている人には、あまりオススメしません。特に、個々の言語の特徴についてもうちょっと突っ込んだ解説が欲しい!という人は不満に思う可能性があります。ぶっちゃけ言語マニアの人はあんまり読まなくてもいいです。

 あとは、型推論とか静的型とかに関してこだわりがある人は、「その型推論の紹介の仕方はどうなのよ」とか思ってしまいそうな部分があるので、ご注意ください(特に、静的型を型注釈ありきで語っている部分については、それどうなのと思う人が居そう)。Lisp系言語の扱いについても、一部もにょる人がいそうなのでご注意。

 また「容易度」「将来性」「普及度」「保守性」「中毒性」に関しては、著者の方の主観とはいえ、色々異論がある人も多いと思うので、そのへんは流して読むのが吉かなと。

オススメする読者

 普段、2〜3くらいのプログラミング言語は使えるけど、他にどんな世界があるのかをよく知らないとか、それぞれの言語の歴史や豆知識を仕入れたい人にオススメです。言語を多く知っていれば偉いというものではないですが、自分がまだ知らないけどこんなに色々なプログラミング言語があって、それぞれ違う利用シーンがあるんだ、ということを知ることができるのは意義があることだと信じています(特に、利用シーンについては、案外知っている人しか知らない事も書かれているので、参考になることも多いかと思います)。

 あとは、もっと多くのプログラミング言語を利用したことがあっても、最近どんな言語があるのかなーとかいうのが追えていない方にとっても、2010年代以降に登場した新しい言語が多数紹介されているので買う価値があるのではないかと思います。

 特に、今20台くらいの方だとあんまり知らないのではないかなという言語も数多く紹介されていましたので、色々な言語を知りたい若い人にもオススメできるかなと思います。

個人的に良かった点

 プログラミング言語を色々紹介するということで、Wikipedia日本語版みたいな中途半端な記述や、へんてこな記述がないかというのを危惧していましたが、ごく細かい部分を除いて、技術的な誤りはほとんどありませんでしたし、言語の歴史や利用シーン、特徴などについてもおおむね適切かと思います。

 コラムでは、普段、本では紹介されないような言語の側面にもスポットを当てており、参考になりました。

 また、技術的な誤りがないように、かなり細部に渡ってチェックされた形跡があります。たとえば、Javaについてクラスベースのオブジェクト指向を採用したと書かれていたり、「インタプリタは1行ずつ実行するのか」というコラムでは「インタプリタ型言語とされる言語において、プログラムと一行ずつ実行する処理系は現在メジャーではないからです」などという記述があったりという具合です。重箱の隅をつつけば突っ込めないこともないですが、概ね安心して読めました。

 トータルとして、ぱらぱらと読んで「あー、こんなプログラミング言語があるのかー」「こんな裏話があるんだ」といった感じで、読み物として楽しめるものになっているというのが率直な感想です(色々偉そうですいません)。というわけで、オススメです。

ちょっと行列作りますね言語Matlikeを作りました

注:この記事は、2020年1月にQiitaに投稿した自作言語Matlikeについての記事のリメイクです。アカウントを消して元の記事が全部消えたので、移植ではなくリメイクです。

はじめに

 私は、2019年12月から、1か月1言語計画というのを始めています。要はどんなダメダメぽい石ころみたいなアイデアみたいでも、中には原石もあるかもしれないということで、思い浮かんだアイデアをどんどん言語として実装していこうというものです。悲しいことに、2020年2月分、3月分が出来ていないままですが、その辺は今週にえいやっとなんかテキトーなものを作るつもりです。この記事は、2019年12月分の言語として作成したMatlike言語の紹介です。

Matlikeを作った動機

 Matlikeのキーワードは「行列」です。皆さんが普段から使ってるJavaやらPythonやらJavaScriptやら、大半の言語には何らかの形で行列を扱うライブラリがついています。行列計算を必要とする分野とは案外多いものなので、シェアの多い言語は自然とそういうライブラリを備えるようになるのでしょう。そこからさらに一歩進んで、行列を扱う言語機能を持った言語もあります。たとえばMatlabやそのOSS実装(ぽいもの)であるGNU Octaveとか、あるいはJuliaもそういう言語に含めてもいいかもしれません。

 さて、既存の大抵のプログラミング言語では行列を扱えるわけですが、既存の言語の行列の扱いには少し不満がありました。

  • 誤った行列同士の演算を静的に検出できない

 たとえば、行列積としては、

[1 2 3]  *  [4
                 5
                 6]

 というのはOKでも、

[1 2 3] * [4 5 6]

 というのは未定義なのではじいて欲しいのですが、こういうのを静的に検出できる言語が案外ないのです。実のところ、研究レベルではそういう話はままあるでしょうし、C++のテンプレートを使って依存型モドキを使えばそういう機能を実現できるでしょう。しかし、フルスペックの依存型を使うのはいかにも大げさです。なんかいい感じに行列のを型パラメタとして持つちょうどいい感じの言語が作れないかな、というのが一つです。

 皆さん、数学で習う行列って

[1 2 3
 4 5 6]

 て書きますよね(?)いや、もっと専門の分野では違うのかもしれませんが、まあ少なくとも行列を書き下したいときは、こんな風に二次元上に行列の要素を書きたいことは多いはずです。しかし、残念ながら、既存の言語で、こういう感じのレイアウトを良い感じで解釈して(上の例なら 3 * 3 行列として扱って欲しい)くれる言語はあまりありません。Juliaはそのような数少ない言語の一つですが、静的型付き言語ではないので、たとえば、

[1 2 3
 4 5]

 みたいな、型検査の段階ではじいて欲しいリテラルをはじけないのでダメということにします。

 これはやや無理くりなんですが、たとえば、以下のような行列リテラルMatrix<Int, 2, 2> て感じで型がついて欲しいなと私は思うのです。

[1 2
 3 4]

 しかし、そういう都合のいい言語は知る限りでは、ほとんどありません。

 という感じで、多少無理やりですが、理由をこじつけて、以上の要件を満たすプログラミング言語Matlikeを作ってみました。

Matlikeの機能

 というわけで、機能紹介です。

 実は、行列リテラルのパーザをいい感じに書いてみたいというのが一番大きな理由でしたので、これについてはかなり凝っています。

 たとえば、以下のように行列リテラルを書くと、 Matrix<Int, 2, 3> という型が付きます。

 [
 1 2 3
 4 5 6
] // Matrix<Int, 2, 3>

 ちなみに、これを見ればわかる通り、空白が要素間のセパレータになれる上に、改行が行セパレータになれるという仕様です。おかげで結構パーザを作るのに苦労したのですが、後述する型推論との兼ね合いで、たとえば、

val m = [
 1 2 3
 4 5 
]

 のような、行列としてなんかおかしいリテラル型推論の段階で、 2 != 3 みたいなメッセージが出て、はじかれます。

 さて、Matlikeでは行列をファーストクラスとして扱っています。ここでいうファーストクラスとは、行列を引数として渡したり、返したり、無名の行列が作れる程度の意味です。それに加えて、Matlikeの行列を表すMatrixMatrix<E, Row, Col>という形を取ります。RowColが整数であるというのがポイントで、そのおかげで依存型モドキぽいものが実現できています。

 たとえば、Matlikeで行列同士の積を表す演算子_*_ ですが、これを使って、以下のような関数を定義することができます。

def mult(x, y) = x _*_ y

 文法がなんだかScala風味ですが気にしないでください。このmult関数の型は以下のように推論されます。

def mult<A, B, C, D>(x: Matrix<A, B, C>, y: Matrix<A, C, D>): Matrix<A, B, D> = x _*_ y

 ここで、xyの内、要素型がAで一致していて、xの列数とyの行数も一致しているのがポイントです。Matlikeの型推論器はHindley-Milner型推論をテキトーに拡張したものなのえで、型注釈が一切なくても、こんな感じでいい感じで型を推論してくれます。型推論万歳(いや、現実問題、これでいいのかは微妙ですが)。

  • 誤った行列同士の演算を静的に検査できる

 これは機能というより、そういう型システムを作ったことによる恩恵なわけですが、上の方で例に出た

[1 2 3] * [4 5 6]

 なんて例は、1 != 3 て感じのメッセージが出て、型検査を通りません(現在の実装だと、unificationに失敗しただの何だのといったメッセージが出ますが、それはおいておきます)。

まとめ

 Qiitaに書いた記事の方はもうちょっと色々書いた気がするのですが、こんな感じで行列をなんかうまいこと取り扱えるプログラミング言語を作ってみたのでした。Qiitaの記事にも書いたのですが、これからは、こんな感じで(いや、私のはいい加減ですが)、ドメイン特化型の型システムをがんがん作っていくと色々恩恵が大きいのではないかと思う今日この頃です。

 ではでは。

Scalaを学ぶと何が嬉しいかを考えてみる

まえがき

Scalaを学んで何が嬉しいか」ていうのは、人によって様々な答えがあると思いますが、最近ようやく自分なりの答えが出た気がするので書いてみます。

Scala採用企業で働くのに手っ取り早い

 多くの人の言語を学ぶ動機は、就職や転職に役立つというものだと思います。この点においては、当然、JavaRubyPythonPHPといったメジャーな言語には劣るものの、こと東京であればScalaを採用している会社は少なくなく、むしろScala人材が不足している状況です。もちろん、そういう案件では、ただ、Scala言語でプログラムが書けるだけでは駄目で、JVMについての知識なども必要になりますが、特に都内ならそういう企業に就職するためにScalaを学ぶというのもありかと思います。

 ちなみに、Scala採用企業マップ(これで全部ではないです)をshinharadさんが作成されていますので、参考までに。

www.google.com

 特に、ふつーの人でも知っていそうな企業でいうと

 あたりでしょうか。念のため書いておきますと、これらの企業で全面的にScalaを採用しているとは限らない(一部チームで利用の事例もある)ので、詳細については個別に聞いてみるのが無難だと思いま)。

プログラミング言語に強くなる

 この観点は最近見出したものなのですが、Scalaはアカデミック発(当初は、スイル連邦工科大学ローザンヌ校のMartin Odersky教授の研究室で開発。現在はLightbend社がメインで開発)ということもあってか、日々いろいろな実験がされています。特に、マクロを使ったライブラリが多いのがScala界隈で特徴的なところかと思いますが、マクロというのはとどのつまり、プログラムからプログラムへの変換を行うプログラムなので、Scala界隈で色々触っていると、自然とScalaに限らず「プログラミング言語一般」に思いを馳せるようになる……のではないか、と思っています。Lispを学ぶといいよ論と似ているかもしれません

強力な型システムを使ったプログラミング体験ができる

 私見ですが、現在実用で利用されているプログラミング言語の中では、Scalaの型システムによって実現できる制約はかなり強いので、それを生かした設計も(場合によっては)学ぶことができると思います。特に、DDD界隈で一部Scala推しがあるのは、このあたりなんではと思っていたりします。

DSLを作りやすい

 これは、最近の言語だと多かれ少なかれ意識している点かと思いますが、特にScalaはマクロを利用したDSL的ライブラリが豊富なように思います。そのあたりのテクニックは、他の言語にも輸出可能なものがあるだろうと思うので、どういうDSLがあるのかという観点でScalaを学んでみるのも良いことだと感じます。

Kotlinもすぐ習得できる

 最近は、AndroidアプリではKotlnを使った開発が一般的になって来ましたし、サーバーサイドKotlinの事例もちらほら見かけるようになってきました。KotlinはScalaの文法をかなり継承しているので(キーワードとか除けば、文法はかなり近い)、Scalaを学んでおけばKotlinは割と簡単に学べるというのもある意味メリットかもしれません。

楽しい

 これに関しては個人の主観なのですが、Scalaは、一見した印象と反対に、できるだけ直交した比較的少数の機能を組み合わせることで色々なことが実現できるので、創意工夫の余地はかなりあると思います。そのことが、書き方が分裂して、コードの品質を統一しづらいという意見につながるのかもしれませんが、ともあれ試してみて損はないと思います。

 というわけで、主観ばりばりですが、いくつか思いつく点を書いてみました。いくつかの点については、Haskellを学ぶのでもいいという話はありそうですが、特にJavaな人にとってはHaskellよりハードル低いんではないかなあと思っています。

Scalaを手っ取り早く学ぶのに適したリソースを紹介する(2020年版)

はじめに

 こんにちは。水島です。例のQiita炎上の件で、「ああ、これはもう自分向きのサービスじゃないな」と思ってサックリとアカウント消して退会したわけですが、ちょっとこれくらいはレスキューしておけば良かったな…と思った記事があったので、リライトしてみました。

 昨今、Scalaは色々なところで使われている一方で、特に日本語でScalaを学習したい人には、どこから手をつけていいやらさっぱり、という状況があります。特に、古い書籍だと現状のScalaのエコシステムを反映していませんし、Webサイトでも、古い情報のままということがあります。というわけで、今、日本語でScalaを学習したい人にとって適切なリソースをご紹介したいと思います。

オンライン講座

N予備校 プログラミングコース Scala基礎

www.nnn.ed.nico

 オンライン学習サイトの一つである、N予備校にはプログラミングコースというのがあって、その中でScala基礎という講座があります。実は、制作の初期段階で私がちょびっと関わっていたのですが、それはおいといても、Scalaを学ぶためのサイトとしては非常に品質が高いです。良いところを挙げると

  • Scalaのバージョンアップにキャッチアップしている
  • Scalaの基礎的な部分を丁寧に説明している
  • ある程度実践的なWebアプリ(ニコ動ぽいもの)を作る演習がある
  • 演習問題の解答をGitHub経由で提出して、講師がコメントをくれるシステムがある
    • これは、今もあるかは未確認

 といったところでしょうか。N予備校は月額1000円のサービスですが、今は無料で公開されているので、Scalaの実践的な知識を身に付けたい人にお勧めです。

書籍

実践Scala入門

実践Scala入門

実践Scala入門

 私を含む、5名による共著のScala書籍です。この本のコンセプトは、「コンパクトなコップ本」というものでして、コップ本の重厚長大さを軽減しつつ、実践に必要な知識を身に付けられるようになっています。

  • Scala 2.12対応(現状、主に現場で使われているバージョン)
  • Scalaを使う上で必須なsbtの解説がある
  • 同様に必須な、コレクションフレームワークの解説がある
  • テスティングフレームワークの解説がある

 といった点で、お勧めできます。なお、Scala作者のMartin Odersky教授らが執筆した、Programming in Scalaの邦訳である

Scalaスケーラブルプログラミング第3版

Scalaスケーラブルプログラミング第3版

 (いわゆるコップ本)は、その重厚長大さもあって、初学者には勧めづらいなと思うに至りました。ただ、言語仕様書以外でScalaについて網羅的に解説している書籍はこれがほぼ唯一のものですし、Scalaの設計思想についても語られているので、リファレンスとして持っておいて損はありません。

Scalaをはじめよう! ─マルチパラダイム言語への招待─ (技術の泉シリーズ(NextPublishing)

 インプレスR&Dから出版されたScala本です。

  • Kindle Unlimitedに入っていれば無料で読める
  • お値段も安い
  • コンパクト
  • Scala 2.12対応
  • Scalaの基本構文だけでなく、周辺のエコシステムにもある程度追従している

 といった特徴があります。特に、お値段やコンパクトさ(実践Scala入門と比べても)という点から、お手軽にScalaを始めたい方にお勧めできます。

ゼロから学ぶScala

ゼロから学ぶScala

ゼロから学ぶScala

 この本は、主にScala言語自体の習得に重きが置かれていますが、演習問題などがちゃんとあることや、内容についても誤りは少ないことから、とりあえずScalaの概観をつかむのには適しています。ただし、情報についてはやや古い部分も見受けられるので、その点については注意してください。また、この書籍ではsbtなどのエコシステムについての記述はほとんどないので、あくまでScala言語を学ぶためのものだと割り切るのが良いです。

Webページ

Scala研修テキスト

scala-text.github.io

 私が前職の時に、当時の同僚とともに書き上げた、新卒向けScala研修テキストです。

blog.scalamatsuri.org

 という経緯があって、今はJapan Scala Association(JSA)に寄贈されています。現在は、xuwei-kさんが主にメンテナンスをしており、特に、xuwei-kさんの尽力によって、最新バージョンへの追従などが継続して行われています。このテキストは、実際にドワンゴ社でのScala研修に使われたものであり、正確さにも最大限注意を払っているので、広くお勧めできます。ただし、現状はJava言語の利用経験がある人向けの説明になっているので、その点は注意が必要です(今後、Java言語の経験を前提としない、より初学者向けのテキスト改良を考えています)。

 CC BY-NC-SA 3.0で公開されていますが、企業内での研修用途では自由に利用可能という例外条項が入っていますので、企業の研修でも自由にご利用いただくことができます。なお、営利目的で利用する場合も、JSA側で個別に許諾を与えることは可能ですので、研修以外の営利目的で利用されたい場合はご相談いただければと思います。

 このテキストは、実際にScalaを使った開発をしている企業様複数に利用されていますから、どしどし利用していって、改良のためのフィードバックをいただければと思います。

Scalaメモ(Hishidama's Scala Memo)

www.ne.jp

 ひしだまさんによる、Scalaメモです。メモとはいうものの、インストールの仕方から、サンプルコード、ひしだまさんが使う上でハマった落とし穴など、実際の経験に基づいて書かれています。特に、Scalaの落とし穴にはまった人が参照するとよいのではないかと思います。ただし、更新された年月が全般的に古いので(Scala 2.10~Scala 2.11くらいのものが多い?)、その点は注意が必要です。 

その他

 その他にも、色々なScala書籍が出ているのですが、全般的に出版された年代が古いことが多く(特に、Scala 2.9以前やScala 2.10時代に書かれたものが多い)、2020年現在、お勧めできるものがあまりありません。ただ、その中でも読んでおくと面白いかもしれない本をいくつか挙げておきます。

Scala関数型デザイン&プログラミング―Scalazコントリビューターによる関数型徹底ガイド

Scalazのコントリビュータ(当時)の人たちによって書かれた、Scala徹底して関数型プログラミングを行うための本です。注意して欲しいのは、この書籍で解説されている技法は、Scalaの現場では一般的ではないので、あくまで、純粋関数型プログラミングに近いやり方をScalaで学ぶための本だと割り切ってください(重要)。

Akka実践バイブル アクターモデルによる並行・分散システムの実現

 Scala界隈で非常に一般的につかわれている、並列・分散ミドルウェアであるAkkaの解説書です。ScalaのWebアプリケーションフレームワークであるPlayでもAkkaが内部的につかわれており、Akkaを活用するためにはこの本を読んでおいて損はありません。

Scalaパズル 36の罠から学ぶベストプラクティス

Java界隈で有名な(?) Java Puzzleに影響を受けたと思われる本です。Scalaの落とし穴や罠など、言語仕様について探求してみたい人には面白いかもしれません(あくまで読み物として楽しむくらいが良いです)

というわけで、Scalaを学ぶのに良い書籍やサイトを紹介してみました。Qiitaで書いたときにもちょろっと言及した、竹添直樹さんによる『Scala逆引きレシピ』は良書なのですが、出版年代が古く、sbtやScalaのバージョンが上がって、Scalaのエコシステムが色々変わった現在はそのまま使えない点があるのでお勧めしづらい感じです。

 リライトするときに抜け落ちてしまった情報があるかもしれないのですが、だいたい復元できただろう、と思います。