Scala

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は難しい」と言われますが、 どこが難しいのか? なぜ難しいのか? ということを、これまで書籍や雑誌記事、ハンズオンなど入門用のコンテンツ…

第十一回 #渋谷java でScala.jsの話をしました

今回で第十一回を迎えた渋谷javaですが、枠が空いていたので久しぶりにLTをさせてもらいました。 ネタじゃないScala.js from takezoe JVM繋がりでScalaの話でもいいだろうと思ってたのですが、よく考えたらScala.jsはJavaScriptになってブラウザやnode上で…

Atlassianのaws-scalaを試してみた

ScalaでAWSといえば瀬良さんのAWScalaですが、なんとAtlassianが同様のAWS SDKラッパーを出してきました。しかもScalazベース。これは注目せざるを得ない! https://bitbucket.org/atlassian/aws-scala/overviewというわけで早速簡単なコードを書いてみまし…

Scala.jsを試してみた

Web開発とJavaScriptは切っても切り離せません。サーバサイドにどのような言語を使っていたとしてもJavaScriptとはよろしくお付き合いする必要があります。しかし世の中にはJavaScriptの代替となるAltJSなるものがあります。別の言語で記述したプログラムをJ…

ScalaのDBアクセスライブラリまとめ

Slick 3.0.0がリリースされました。 SlickはこれまでScalaで利用可能な代表的なDBアクセスライブラリの1つとして利用されてきましたが、3.0.0では別名Reactive Slickと呼ばれ、モナドを駆使したFutureベースのプログラミングを前提としたものに変貌してしま…

play-hikaricpの設定方法を修正してもらった

先日書いたように最近のバージョンのplay-hikaricpではPlayのapplication.confの設定方法が変わってしまっていました。今まではPlay標準のBoneCP用の設定をHikariCP用に読み替えてくれていたのですが、この読み替えをやめてしまったようです。確かにコネクシ…

Slick 3.0を試してみた

Slick 3.0がリリースされたので、GitBucketをSlick 3.0にアップデートするべくいろいろ試してみました。Slick 3.0は別名Reactive Slickというだけあり、これまでとはプログラミングモデルがドラスティックに変わっています。具体的に言うとDBIOActionという…

Slick 3.0.0がリリースされました

バージョンアップするたびに後方互換性を切り捨てていくことで有名なSlickですが、またもやメジャーバーションアップして3.0.0がリリースされました。 http://slick.typesafe.com/news/2015/04/29/slick-3.0.0-released.htmlリリースノートに書かれている主…

最近のplay-hikaricpが微妙にいけてない件

Play標準のBoneCPがイマイチという話は割と有名でplay-hikaricpでHikariCPを使っているというケースも多いのではないかと思います。このplay-hikaricp、以前このブログでも紹介したように、Playのapplication.confに設定を記述した場合はPlay標準のデータベ…

Scala Days 2015 SanFranciscoに参加して思った事

最後に今回初めてScala Daysに参加して感じたことをまとめておきます。 今回のScala Daysに参加して全体的な傾向として感じたのは以下の二点です。 データ解析(Sparkや機械学習、自然言語処理を含む)に関するセッションが多かった 初心者向けや触りだけの…

Scala Days 2015 SanFrancisco 3日目

Scala Days 2015 SanFrancisco 3日目、最終日です。最後にクロージングセッションとしてScala開発チームに参加者が質問できるという時間があったので通常のセッションは6枠のみでした。全体を通しての感想については別途エントリを書こうと思いますので、こ…

Scala Days 2015 SanFrancisco 2日目

Scala Days 2015 SanFrancisco 2日目、疲労MAXでやばい状態のうえ、キーノートを含めると朝一から夕方まで7枠もセッションがあるというハードスケジュールでしたが、参加したセッションで記憶に残っている内容を簡単にまとめておきます。 Essential Scala: S…

Scala Days 2015 SanFrancisco 1日目

サンフランシスコで開催されているScala Days 2015に参加しています。 会場は海辺のフォートメイソンセンターというところなのですが、サンフランシスコといっても観光地からは若干離れている上に周囲は住宅街というなかなかシュールなロケーションです。 今…

実戦での Scala 〜6つの事例から知る Scala の勘所〜で発表してきました

2月21日(土)にスマートニュースさんの新オフィスで開催された「実戦での Scala 〜6つの事例から知る Scala の勘所〜」で発表してきました。togetterでのまとめはこちら。 ビズリーチの新サービスをScalaで作ってみた 〜マイクロサービスの裏側 #ji…

Reactive Streamsとは?

Reactive Streamsというのはノンブロッキングなback pressure可能な非同期ストリーム処理の標準的な仕様を提供しようというもので、実装としてはAkka Streams、RxJava、Reactor Composable、Ratpackなどがあります。Reactive StreamsについてはAkkaのコミッ…

Play2でWebJarsのURLをCDNに変更する

昨日の続きですが、webjars-playを使ってWebJarsを使っている場合にどうやってCDNに切り替えるのがいいのかなぁと思って調べていたらJames Wardさんのブログで以下の記事を見つけました。 WebJars Now on the jsDelivr CDN | James Ward まずはこんなコント…

Play2でWebJarsを使ってみる

WebJarsはJavaベースのWebアプリケーションでJavaScriptライブラリを使えるようにするための仕組みです。JavaであればMaven、Scalaであればsbt(activator含む)といったビルドツールを使用してJavaScriptライブラリの依存関係を解決することができます。 Pl…

第二回ChatWork × BizReach合同Scala勉強会を開催しました!

前回は5月に開催させていただいたのですが、あれから数ヶ月、弊社でもScalaのプロジェクトが本格的に立ち上がり、ChatWorkさんにもかとじゅんさんが入社されたということもあり、第二回を開催させていただきました。 今回はお互いの現状共有のセッションに加…

ScalaMatsuriに参加してきました

2014年9月5日、6日に渋谷マークシティのサイバーエージェントさんで開催されたScalaMatsuriに参加してきました。ScalaMatsuriは日本最大のScalaカンファレンスで、昨年はScala Conferenceとして開催されていたものです。今年は海外からのゲストとしてなんとM…

ScalaMatsuriに参加します

2014年9月6日〜7日にかけて六本木のグリーさんでアジア最大級のScalaカンファレンスが開催されます。 http://scalamatsuri.org/去年はWeb関連のフレームワークやAkkaに関するセッションが多かったですが、今年はSparkやStorm/SummingBirdなど最近注目のオン…

Play2でのファイルダウンロード処理

Webアプリケーションで巨大なファイルのダウンロードを行う場合はダウンロードするコンテンツをすべてメモリ上に読み込むのではなく、少しずつ読み込みながら逐次レスポンスを書き出していく必要があります。Play2ではこのような場合、Enumeratorを使ってレ…

チャットワークさんとの合同勉強会のスライド

先週金曜日(5月30日)に弊社ビズリーチとチャットワークさん合同でScala勉強会を行ったのですが、そのときに僕がお話しさせていただいたセッションのスライドをアップしました。勉強会の様子については以下のエントリをご覧ください。 http://codebreak.com…

BizReach/ChatWork合同Scala勉強会を行いました

先週5月30日(金)、渋谷の弊社オフィスにてChatWorkさんと合同でのScala勉強会を行いました! ChatWorkさんといえば開発合宿で次期開発言語をScalaにすることを決めたというブログエントリが話題になりましたが、弊社も新規事業を中心にScalaを採用したプロジ…

play-hikaricpの設定周りについて調べてみた

Play2に標準でついてるBoneCPがいつまで経ってもバグっているので、Play標準のdbpluginを無効化しplay-hikaricpを使っているのですが、設定周りで若干謎な部分があったので調べてみました。対象はplay-hikaricp 1.2.0、HikariCP 1.3.8です。前提として、Hika…

Play Framework2 Meetupに行ってきた

最近は業務でも再びPlayを使うようになったのでPlayの世の中の状況をリサーチするべくドワンゴさんで開催されたPlay Framework2 Meetupに行ってきました。個人的に参考になったセッションの内容をメモっておきます。 Play のこれまでとこれから @tototoshiさ…

Play2でソーシャルログイン

Play2で開発しているシステムで「認証周りはどうしよう?」という話をしていたところ、SecureSocialというプラグインを教えてもらいました。 デフォルトでTwitter、Facebook、Google、LinkedIn、GitHubなど主なSNSとID/パスワード認証をサポートしておりユー…

commons-daemon 1.0.15でPlay 2.2アプリをデーモン化する

以下で紹介されている方法ですが、Play 2.2およびcommons-daemonの最新版である1.0.15だと少し変わっていたのでメモ。 http://d.hatena.ne.jp/j5ik2o/20120322/1332397494 https://gist.github.com/j5ik2o/2156447 build.sbtに以下の依存関係を追加。 "commo…

AkkaのActorをスケジュール実行する

Typesafeで開発されているAkkaの拡張機能の1つにakka-quartz-schedulerというものがあります。 https://github.com/typesafehub/akka-quartz-schedulerこれはQuartzを使って指定したタイミングでActorを起動することができるというものです。Playなどに組み…

Play2で日本語パスのルーティングを記述する

Play2で日本語を含むパスをコントローラにマッピングする場合、routesにはURLエンコード済みのパスを記述しておく必要があるのですが、数が増えると後から見たときにわけわかめな感じになってしまいます。 GET /%E3%83%8F%E3%83%AD%E3%83%BC controllers.App…

Scala用のシンプルなWebフレームワーク「Scalatra」

ScalaのWebフレームワークといえばPlay Frameworkが有名です(弊社でもScalaでの開発にはPlayを使っています)が、Playはサーブレットコンテナ上では動作しません。Scalaでサーブレットコンテナ上で動作するWebアプリケーションを作るのであればScalatraとい…

ScalaとRubyは似ているかもしれない

僕は仕事では主にJava、Scalaを書いていますが、Perlをがっつり使っていた時期もありますし、趣味でもいろんな言語を触ってきました。RubyもRailsが登場する遙か前にCGIを書くのに使っていたことがあります(そういえばtDiaryは当時から存在しました)。 Jav…

Play Framework 2 Meetupでパネルディスカッションをします

Play 2.0のリリース直後に実システムをplay2-war-pluginを使ってTomcat上で動かすという荒業に挑戦して大変な目にあってから早2年、5月24日(土)にドワンゴさんでPlay Framework 2 Meetupという勉強会が開催されるとのことで、Play2の現状を調査すべくコッソ…

ScalatraのScala 2.11対応

幽霊部員なので、こういう単純作業くらいは貢献しなくては…ということでフォークしたリポジトリで粛々と作業をしています。 https://github.com/scalatra/scalatra/issues/384 https://github.com/takezoe/scalatra/tree/2.3.x_2.11 Scalatraはフレームワー…

Scalaはエンタープライズで威力を発揮する?

ここ2年ほどはScalaを使って業務アプリケーションの開発をしているのですが、 「システム開発にScalaを使うとどのようなメリットがあるのか?」 「どのようなシステムにScalaは向いているのか?」 ということを時折聞かれることがあります。これに対して世の…