You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
Scalaのバージョンアップはなぜ大変なのか? GitBucketはもうかれこれ5年近く開発を継続しており、Scalaのメジャーバージョンアップも何度か経験してきました。ScalaのバージョンアップはJavaと比べるとかなり苦労することが多いのですが、それはScalaのバージョンアップに伴うアプリケーションコードの修正よりも、むしろ以下の2点による部分が大きいのではないかと思います。 フレームワークやライブラリの仕様がアグレッシブに変わる Scalaのメジャーバージョン間でバイナリ互換性が保証されていない まず前者についてですが、これまでPlay FrameworkやSlickなど標準的なフレームワークやライブラリもかなり活発に仕様変更が行われてきました。フレームワークの開発が活発に行われているという状況はメリットも多い反面、後方互換性のない変更が多いとバージョンアップがつらいというデメリ
sbt-coursier.md あなたの sbt update を爆速にする sbt-coursier の紹介 この記事は Scala Advent Calendar 2016(Adventar) 10日目の記事です。 今は 12/10 の 625時です。年明けなんて無かった。いいね? さてさて、sbt の依存jarのダウンロードが遅い、というのは割とよく言われる事であります。 で、この原因の一旦に、sbtが Apache Ivy を使っている、という点があります。 現状 Ivy は依存jarをダウンロードする際、全て直列でダウンロードします。依存グラフ的に関係のないライブラリがあっても、一つが終わらない限り別のjarをダウンロードしようとはしません。 ファイルIOもネットワーク通信も多重化できるこの時代にこれはいけません。 そこで Coursier の紹介です。 Coursier は S
Scalaを書くにはIntelliJを使うのが良さそうだったのだけど、使ってみたらいつもの感覚で使うのがけっこう難しかった。そこでEmacsでの環境構築を行ってみた。今回はscala-mode2とensimeを利用した。特にensimeに関してけっこうはまってしまったので、そのあたりを多めに書く。 scala-mode2 最近はscalaをemacsで書くならscala-mode2を使うみたい。セットアップは簡単でM-x package-list-packagesしてscala-mode2をインストールした後、以下をどこかに書いておけば良いだけ。 ;;; scala mode (require 'scala-mode2) これでひとまずハイライトなどを行うことが出来た。 ensime(セットアップ編) 続いてensimeのセットアップを行う。ensimeを利用することで、型を利用した補完、
class: center, middle # Property Based Testing で<br />ドメインロジックを<br />テストする Scala関西Summit 2017/09/09 --- class: left, middle ## 自己紹介 * 中村 学(Nakamura Manabu) * [@gakuzzzz](https://twitter.com/gakuzzzz) * Tech to Value 代表取締役 * Opt Technologies 技術顧問 <img src="./images/opt_logo_1.jpg" alt="Opt Technologies" width="450" style="margin-left: 0px" /> * f-code チーフアーキテクト <img src="./images/f-code_logo.png" a
本記事はFringe81 アドベントカレンダー2017の2日目です。 書く内容は表題の通りなのですが、やってみていろいろとしんどい思いもし、もしかしたら似たようなことでハマっている人の役に立つかもしれない、ということで、備忘も兼ねて淡々と記していきたいと思います。 どれくらい一気にupdateしたのか? sbtに記述されているアーティファクト数で言うと、test用のも含めると40〜50個くらいのライブラリについて、2年間ほとんどupdateしてなかったのを、ほぼすべて一気に最新まで上げました。 どうしてこんなになるまで(ry ライブラリをupdateするための調査・検証、修正、テストに割けるリソースがなかった 今現在、とりあえず動いている/使えている/困っていないがゆえの「優先度=低」扱い 最新バージョンまで上げた結果、未知のバグを踏むかもしれないという恐怖 苦労してupdateしてでも使
"1234".matches("""\d{4}""") //> res0: Boolean = true new scala.util.matching.Regex("""\d{4}""").findFirstIn("1234").nonEmpty //> res1: Boolean = true """\d{4}""".r.findFirstIn("1234").nonEmpty //> res2: Boolean = true val dateP1 = """(\d\d\d\d)-(\d\d)-(\d\d)""".r //> dateP1 : scala.util.matching.Regex = (\d\d\d\d)-(\d\d)-(\d\d) "2011-07-15" match { case dateP1(year, month, day) => true case _ => f
sbtではsbt new playframework/play-scala-seed.g8などのようにしてgiter8テンプレートを指定してプロジェクトを作成することができます。 しかし、プロジェクトを作るたびにテンプレートのリポジトリ名を調べるのも面倒です。そこで、giter8のWikiにまとめられているgiter8テンプレートのリストからpecoでインクリメンタルサーチしてプロジェクトを作成できるようにしてみました。 function peco-sbt-new() { local TEMPLATE=`curl https://github.com/foundweekends/giter8/wiki/giter8-templates -s | grep "\.g8<" | sed -e "s/</ /g" -e "s/>/ /g" | awk '{print $3}' | peco |
scala.connpass.com Scala福岡で登壇機会をいただき、お話してきました。 ぼくたちが運用・開発しているMackerel というプロダクトで、2度実施したPlay Frameworkのバージョンアップで得た知見を元に、アプリケーションフレームワークの更新をどうすれば安全にやれるだろうか、という観点でのお話でした。 あえて技術的な側面にはあまりフォーカスせずに、プロジェクトマネジメントの視座からお話することで、ScalaやPlayにかぎらず参考になるような発表になればいいな、ということを意識しました。他の言語の世界をあまり詳しく知らないので、意図通りの発表になったかどうかはわかりませんが…。 Twitterを見たところ、おおむね好評なようでよかったです。 サービスに機能追加しながら運用しつつ、フレームワークやライブラリのバージョンアップについて行くのまじで大変なので、このセ
scalaではFutureなどの裏側ではExecutionContextが動いています。ということはExecutionContextの使い方がいまいちだとFuture周りで問題が起きることになります。 よく起きる問題の1つとして、標準のExecutionContextがいまいちだった、というのがあると思います。 標準のExecutionContextはダメというか、適さないパターンがあるのですが、あまりよく考慮されずに使われてしまう印象があります。 まあ悪いのはコンパイラの親切すぎるエラーメッセージでしょう。 scala> import scala.concurrent.Future import scala.concurrent.Future scala> Future { 1 + 1 } <console>:9: error: Cannot find an implicit Execu
これはScala Advent Calendar 2014 6日目の記事です。 Scala はコンパイルが遅いことで有名ですが、コンパイルの嬉しいところは、実行前に沢山のプログラムミスやミスっぽいものをキャッチできることです。 C を書くときは -Wall -Wextra -Wpedantic あたりをつけるとたくさん警告だしてくれてありがたいですね。Scala の場合もたくさん警告出して欲しい。scalac 2.11.4 にある警告関連のオプションを見てみましょう。 オプションの区分 とその前に、scalac オプションの区分についておさらいです。オプションは -X や -Y 以外から始まる普通のオプション -X から始まる advanced オプション -Y から始まる private オプション に分類されています。それぞれ scalac -help, scalac -X, scal
前提や問題点 "-Ywarn-unused" と "-Ywarn-unused-import" は、Scala2.11以降の機能 REPLでこれが有効になるとうざいだけなので、REPLのときのみ無効にしたい 大体の答え↓ http://stackoverflow.com/a/27858944/605582 filterしないといけないの自分もわかりずらいと思ったけど、まぁ考えてもしょうがない(?)ので、こういうものだと覚えよう・・・。 Scala2.10ともcross buildする際に対応させた、かつ、自分用にデフォルトでよく設定するscalacOptionを合わせたやつ、を忘備録として書いておく val unusedWarnings = ( "-Ywarn-unused" :: "-Ywarn-unused-import" :: Nil ) scalacOptions ++= ( "-
Understanding Scala - connpass 昨日、表題の技術イベントを自分主催で行いました。なんでこんなイベントをやろうと思ったかというと「皆、Scalaを難しくめんどくさい方法で学んでるのでは?」という疑問が自分の中であって、その原因として、サンプルプログラムの集合を通して、ボトムアップになんとなくイメージで 全体像を作りあげてるのではという思いがありました。 そのようなアプローチに対して懐疑的な自分としては、このイベントでは(厳密にはやってませんが)どちらかというとトップダウン的アプローチでプログラミング言語について理解してもらおうと思い(もちろん、例は大切なので必要に応じて詳細に下りるのは忘れませんでしたが)、5つの発表の全てを全部自分でやりました。さすがに、5時間程度しゃべりっぱなしというのは疲れましたが、おかげさまで(?)、色々な疑問が解決したとか、メソッドと関
はじめに 某記事で、 implicitsなんて呼ばないで、各機能ごとに適切な名称で呼ぼう。あと、重要なのは型クラスだからそれだけ注意すればOK、という趣旨のことを書きましたが、どうやって使えばいいかは投げっぱなしだったのでその導入編だけでも書こうかと思います。この記事での目的は簡単で、 Scalaのコレクションのsumメソッド(とproductメソッド)を自作の有理数クラスに適用できるようにしよう ということになります。実際のところ、sumメソッドを整数リストに対して呼び出す、たとえば でも、型クラスを「使って」はいるのですが、実際に型クラスに新しいインスタンスを追加していないので、使った実感がわかないと思います。そこで、有理数クラスです。実装が比較的簡単である上に、四則演算への対応が容易という点でこれを選ぶことにしました。 まずは、有理数クラス(Rational)の実装です。ここは、本題
Scalaユーザの皆様は、普段からコレクションライブラリの高階関数を使われていることと思います。特に、mapやflatMapは必須の高階関数といっても良いでしょう。 さて、話は少し変わりますが、Scala 2.8以降のコレクションライブラリでは、map,flatMapなどに対して、implicitな引数 bf: CanBuildFrom がくっついています。たとえば、List[+A]#mapのシグニチャは def map[B, That] (f: (A) ⇒ B)(implicit bf: CanBuildFrom[List[A], B, That]): That となっています。ここで、通常のケースではimplicit paramater bfの存在を意識しなくても意図通りに動作するようにmapメソッド(正確には、意図通りにmap メソッドが動作するように、bfに対して適切なCanBui
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く