Scala

Scala Days 2016 NewYork 2日目

ニューヨーク寒いです。今日もサイバーエージェントさんに負けずに参加したセッションを紹介したいと思います。 Introducing the Scala Center 今日はHeatherさんのキーノートから始まりました。 Scala CenterはScalaの教育コンテンツの開発とオープンソース…

Scala Days 2016 NewYork 1日目

ニューヨークへの12時間のフライトに耐えてScala Days 2016にやって来ました! 昨年のサンフランシスコはのどかな雰囲気でしたが、ニューヨークの都会感がすごいです。 初日は昨年と同じく夕方からOdersky先生のキーノートで開始しました。Scalaの今後の展望…

Scalaのコンパクトな便利ライブラリ「Hamsters」を調べてみた

最近HamstersっていうScalaライブラリを発見しました。関数型っぽいコンテナや機能を提供するものなのですが、非常にコンパクトでなおかつ関数型プログラミングに慣れていなくても簡単に使えるというものです。 github.com 使い方はREADMEを見ればだいたいわ…

サーキットブレーカー付きの非同期RESTクライアントを作ってみた

Lagomを触っていて、サーキットブレーカー付きのHTTPクライアントがあるといろんなフレームワークと組み合わせて使えて便利かも、と思ったのでScala用のものを作ってみました。 github.com RESTクライアントとしての基本的な使い方はこんな感じ。 import res…

Akka Persistenceでメッセージの到達保証をしてみる

前回はAkka Persistenceでアクターの状態を保存するということをやってみましたが、今回は「メッセージを永続化することでメッセージがアクターに到達することを保証する」ということをやってみたいと思います。 アクターはこんな感じになります。 class Sam…

Akka PersistenceでActorの状態を保存する

まずはbuild.sbtにこんな感じの依存関係を追加します。Akka Persistenceの永続化部分はプラグイン形式になっており、永続化するストレージを選択できるようになっているのですが、Akkaのサンプルに従ってLevelDBを使うことにします。 libraryDependencies ++…

quillでクエリを条件分岐してみる

先日少し試してみたquillですが、クエリを動的に変更したい場合がちょっと面倒です。マクロで処理されているためあまり自由度がなく、以下のようにfilterの条件を分岐させることはできるのですが、Slickのようにプログラムでクエリを自由に組み立てるという…

Scalaの新しいデータベースアクセスライブラリ「quill」を試してみた

Slickがモナドの世界に旅立ってしまったので、Slick3への移行を進めつつ他のデータベースアクセスライブラリの動向からも目が離せません。 同期的に実行可能なデータベースアクセスライブラリとしてはScalikeJDBCが使いやすそうなのですが、Slickのタイプセ…

TIS前出さんのインタビュー記事が公開されました

以前アットウェアさんのブログで「Scala先駆者インタビュー」という企画でインタビューをしていただいたのですが、次のゲストをリレー形式で紹介するということでTISの前出さんをご紹介させていただきました。TISさんのオフィスで行われたインタビューに同席…

第二回Reactive System Meetup in 西新宿でSlick3について話してきました

昨日西新宿のTISさんオフィスで開催された第二回Reactive System Meetup in 西新宿でSlick3について話してきました。 reactive-shinjuku.connpass.com 発表資料はこちらです。ところどころSlickディスになってしまい大変申しわけありませんでした。 Reactive…

ScalaMatsuri 2016に参加してきました

二日間のScalaMatsuriが終了しました。 http://scalamatsuri.org/scalamatsuri.org 今年は会社としてだけではなく、GitBucketでもスポンサーをさせていただきました。残念ながらCFPは落ちてしまったので一参加者として楽しませていただこうと思っていたので…

Scalaの新しいI/Oライブラリbetter-filesを使ってみる

ScalaのI/Oライブラリシリーズ第三弾です。今回試してみたのはbetter-filesという、2015年に開発が開始された比較的新しいものです。名前からもわかる通り、I/Oライブラリといってもファイル操作を重視したライブラリになっています。 github.com 特徴はjava…

sbtのIOライブラリsbt-ioを使ってみる

ScalaのIOライブラリは何を使うのがいいのかなぁ、ということで前回はscalaz-effectを試してみたのですが、今回はsbtのIOライブラリを試してみました。sbtで使用されているものですが、単体のライブラリとしても使用することができます。 sbt-ioを使用するに…

scalaz-effectのIOモナドを使ってみる

Scalaの標準ライブラリはコレクションに関してはは充実しているものの、IOに関しては貧弱そのものです。scala-ioが標準になるのではという時期もありましたが、いつの間にか動きが止まってしまったようです。もちろんJava標準のAPIやCommons IOなどを使って…

Slick3(Reactive Slick)はどのへんがReactiveなのか?

最近「Reactive」というキーワードをよく耳にするようになってきましたが、コンテキストによって指しているものが違いすぎてなかなかイメージしづらいという状況はあまり変わっていないのではないでしょうか。 そんな中、Scalaのデータベースアクセスフレー…

Scalazの<|メソッドがちょっと便利

Scalazには様々な型クラスやモナドがありますが、ちょっとした便利メソッドみたいなものもあります。それらの中でも個人的に便利だなと思ったのが<|です。 このメソッドは左辺の値に対して右辺の関数を適用し、左辺の値を返します。言葉だけだと何に使うのか…

IntelliJのScaladocのインデントの設定

最近のバージョンのScalaプラグインではScaladocを入力しようとすると、 /** * */ ではなく、 /** * */ というようにインデントされるようになったみたいです。 今までずっと上のスタイルでScaladocを書いていたのでちょっと違和感あるなーと思い、元の挙動…

アットウェアさんのScala先駆者インタビュー

アットウェアさんはScalaで受託開発をされているそうなのですが、最近ブログでScala先駆者インタビューという企画をやられており、第一回はヌーラボの吉澤さん、第二回はエムスリーの瀬良さん、そして第三回ということで瀬良さんからのご紹介でインタビュー…

AtomでのScala開発環境

最近Atomが面白くなってきて、いろんなパッケージを試したり作ったりしているのですが、普段は主にScalaでプログラミングをしているので今日はAtomでのEnsimeを使ったScala開発環境を紹介したいと思います。 EnsimeというのはEmacsで有名なScala開発環境です…

ScalaのWebフレームワーク事情 2015年版

ScalaのWebフレームワークについて、昨年某所で書いた記事をアップデートしてみました。マイクロサービスが流行ってきたり、Playは2.4になっていろいろ変わったり、ScalaのライブラリやフレームワークもFutureやモナドを活用したものが増えてきたり等々、こ…

quicklensでネストしたケースクラスを簡単にコピーする

Scalaのケースクラスはイミュータブルなため、値を変更する場合はcopy()メソッドで一部のプロパティを書き換えた新しいインスタンスを生成する必要があります。 しかし、ネストしたケースクラスの場合、copy()メソッドの呼び出しもネストさせる必要があり、…

LiquibaseのSQL生成部分をScalaから使う

背景 GitBucketのマルチDB対応(とりあえずH2の代わりにMySQLを使えるようにすることを目指しています)にあたり、バージョンアップ時のマイグレーションシステムも複数のDBに対応する必要があります。現在のGitBucketではFlywayに似た独自のSQLベースのマイ…

Scala用のRedisクライアントについて調べてみた

仕事でRedisを使いそうなのでScala用のRedisクライアントについて調べてみました。 READMEに書いてある内容とソースコードを流し読みして書いてますので実際に動かしての感想ではありません。使用例もREADMEに書いてあるものからの抜粋です。 Sedis Jedis(J…

IPython NotebookでScalaを使う

PythonにはIPython NotebookというWebブラウザで利用可能なインタラクティブシェルがあります。これは編集内容を保存できたり、過去に実行した内容を繰り返し実行できたりなど、ちょっとしたコードを試したり学習用途には最適なものです。 IPythonは言語非依…

Play2ハンズオンをPlay 2.4 + Slick 3.0にアップデートしました

GitHubで公開しているPlay2ハンズオンですが、これまでPlay 2.3 + Slick 2.1向けのものでしたが、新たに最新バージョンであるPlay 2.4 + Slick 3.0向けのものを作成しました。 https://github.com/bizreach/play2-hands-on/tree/master/play2.4-slick3.0/mar…

Play 2.4のDependency Injectionを試してみた

Play 2.4にはGuiceを使ったJSR 330ベースのDI機能が導入されており、コントローラに対してコンポーネントを注入することができるようになっています。Playの標準機能もDI前提のAPIに移行しており、Play 2.4を使用する上では必須っぽい感じになっています。と…

Scala.jsでAceを使うためのライブラリを作った

例によってscala-js-ts-importerで生成したScalaコードを修正してコンパイルを通しただけのものですw https://github.com/takezoe/scalajs-ace 使うにはbuild.sbtに以下の依存関係を追加します。 resolvers += "amateras-repo" at "http://amateras.sourcefo…

Scala.jsでCreateJSを使うためのライブラリを作った

JavaScriptでインタラクティブなコンテンツを作成するためのオープンソースライブラリとしてCreateJSというものがあります。このライブラリを使用するとスプライトやトゥイーンアニメーション、サウンドなどを手軽に扱うことができます。*1 このライブラリを…

Scala.jsでJavaScriptのマッピングコードを簡単に作成する

Scala.jsからJavaScriptライブラリを使うには以下のようなマッピング用のコードが必要になります。 trait Window extends js.Object { val document: HTMLDocument = js.native var location: String = js.native def innerWidth: Int = js.native def inner…

Scalaはなぜ難しいと言われるのか?

Scalaをどうやって学ぶのがいいのか?ということはScalaを使い始めた数年前からずっと考えています。よく「Scalaは難しい」と言われますが、 どこが難しいのか? なぜ難しいのか? ということを、これまで書籍や雑誌記事、ハンズオンなど入門用のコンテンツ…