petitviolet blog

    scala (33 posts)

    icon
    Written by petitviolet

    GraphQL on Scala3 with Sangria

    2021-10-25ScalaGraphQLSangria
    Use sangria-graphql to build GraphQL HTTP server on top of Akka-HTTP in Scala3
    Almost two and a half years ago, I posted a post about how to build a GraphQL HTTP server using sangria-graphql library in Scala2. https://blog.petitviolet.net/post/2018-01-26/scala-sangriaを使ってgraphql-apiを実装する I've spent some time to refresh my knowledge and learn Scala3 features like contextural

    ScalaをGraalVMで動かす&ネイティブイメージ化する

    2018-12-01QiitaJavaScalagraalvm
    Scalaプログラマの観点からGraalVMを紹介、使ってみる。GraalVM?
    Scala プログラマの観点から[GraalVM](https://www.graalvm.org)を紹介、使ってみる。 GraalVM? [GraalVM](https://www.graalvm.org)は、思い切り雑に紹介すると Scala(Java)プログラムを高速化することが出来る(ことがある)らしい。 このあたりを読むともう少し詳しく書いてある。 https://www.graalvm.org/docs/why-graal/for-java-programs 簡単にまとめておくと、特徴としては 1. Java を高速化 JIT コンパイルになにかしら改良が

    GraphQLの認証をどこでやるか

    2018-07-16QiitaScalaGraphQLsangria
    GraphQLなAPIを実装するにあたって、認証をどうするか。-GraphQL内
    GraphQL な API を実装するにあたって、認証をどうするか。 - GraphQL 内部で認証する - GraphQL の外で認証する - 認証とスキーマ 参考: - [A guide to authentication in GraphQL – Apollo GraphQL](https://dev-blog.apollodata.com/a-guide-to-authentication-in-graphql-e002a4039d1) - [Learn Sangria](https://sangria-graphql.org/learn/)の[Authentication a

    SangriaでGraphQLのinterfaceを扱うには

    2018-07-01QiitaScalaGraphQLsangria
    sangria-graphql/sangriaを使ってGraphQLなAPIを実
    [sangria-graphql/sangria](https://github.com/sangria-graphql/sangria/)を使って GraphQL な API を実装する時に interface をどうやって使うか、という話。 interface 自体は特に難しい話ではないが、地味に動かなくて困ったので残しておく。 まとめ - interface の実装自体はInterfaceTypeを使うだけ - Field.fieldTypeにInterfaceTypeを与えるだけだと Scheme がエラーになる - 解決策として - Schema.a

    Scala - SangriaでUpdateCtxを使ってGraphQLの認証を実装する

    2018-04-27QiitaScalaGraphQLsangria
    Scala用GraphQLフレームワークのsangriaでUpdateCtxを使
    Scala 用 GraphQL フレームワークの[sangria](https://github.com/sangria-graphql/sangria/)でUpdateCtxを使って認証処理を実装する。 使い方に注意点がいくつかあるが、まずは普通に動かすための方法について。 UpdateCtx を使って実装する 認証処理に関するドキュメントは[Learn Sangria](http://sangria-graphql.org/learn)の[Authentication and Authorisation](http://sangria-graphql.org/learn/

    gRPCのサーバ/クライアントをScalaで実装する

    2018-02-28QiitaScalasbtgRPC
    この記事はなに?ScalaでgRPCなアプリケーションを作るためのやりかた。具体
    この記事はなに? Scala で gRPC なアプリケーションを作るためのやりかた。 具体的には 4 つの通信方式、 - unary - server straming - client streaming - bidirectional streaming それぞれについてサーバ/クライアントを Scala で実装する。 **参考** - [gRPC | Scala での Protocol Buffer](http://xuwei-k.github.io/scala-protobuf-docs/grpc.html) - [scala で gRPC する - Qiita](

    Scalaで作ったWebアプリをDockerizeして動かす

    2018-02-09QiitaScalasbtDocker
    この記事はなにタイトル通り。主にsbt-native-packagerのとりあえ
    この記事はなに タイトル通り。 主に sbt-native-packager のとりあえずの使い方紹介。 Akka-HTTP で Web アプリを実装し、sbt-native-packager を使って Docker イメージを作成、localhost で稼働させて HTTP リクエストを受け付けられるようにするまで。 環境 - Scala 2.12.4 - sbt 1.0.4 - [Akka-HTTP](https://doc.akka.io/docs/akka-http/current/) 10.0.10 - [sbt-native-packager](http:/

    SangriaでGraphQL APIを実装するのに知っておきたいこと

    2018-01-30QiitaScalaGraphQLsangria
    この記事はなにSangriaでGraphQLなAPIを実装するにあたって、公式の
    この記事はなに [Sangria](http://sangria-graphql.org)で GraphQL な API を実装するにあたって、公式のサンプルだけだと少し足りないためそれの補足というか tips 的な記事。 Sangria の導入にはこちらをどうぞ。 [[Scala]Sangria を使って GraphQL API を実装する - Qiita](https://qiita.com/petitviolet/items/e3e87c3f3e740b3c57ba) 複数のモデルにアクセスしたい [Ctx と Val についての補足](https://qiit

    Scala - Sangriaを使ってGraphQL APIを実装する

    2018-01-26QiitaScalaGraphQLsangria
    この記事はなに?ScalaでGraphQLサーバを実装するためのsangria/
    この記事はなに? Scala で GraphQL サーバを実装するための[sangria/sangria](https://github.com/sangria-graphql/sangria)の導入。 [公式ドキュメント](http://sangria-graphql.org)および[Larning Sangria](http://sangria-graphql.org/learn/)を読むのが一番速い。 さらに公式がサンプルも用意しているので、そちらを参照するのが良い。 [sangria-graphql/sangria-akka-http-example](https://

    GAE SE for Java8でStackdriver Loggingのログがずれる問題

    2017-12-17QiitaJavaScalaGAEgcpStackdriverLogging
    GoogleAppEngineStandardEnvironmentforJav
    Google AppEngine Standard Environment for Java8 に乗せたアプリケーションで非同期処理しつつログ出力すると、 ログがリクエストに正しく紐付かずに別のリクエストのログとして出力されてしまう、という細かすぎて伝わらない問題と戦った話です。 なお言語は Scala で、[Skinny Micro](http://skinny-framework.org/documentation/micro.html)を使用。 まとめ まず結論。 GAE では独自のスレッドではなくThreadManager.createThreadForCurrentR

    テストコードを楽に書きたい

    2017-12-04QiitaScalaunittestScalaCheckproperty-based-testing
    この記事はなにPropertyBasedTestingは何となく難しくて普通のア
    この記事はなに Property Based Testing は何となく難しくて普通のアプリケーション開発におけるテストコードには使用しないイメージかも知れないが、単にテストデータ自動生成器くらいに捉えてカジュアルに使ってみてはいかがでしょうか?という紹介です。 言語には Scala を用いますが、他言語でも探せばライブラリやフレームワークは見つかると思います。 UnitTest って面倒くさいですよね JUnit とか ScalaTest で書いているテストは Example Based Testing と呼ばれるもので、いわゆる UnitTest が指しているもののはず

    Scala - ScalazのTaskを使う上で知っておきたいこと

    2017-11-17QiitaScalascalaz
    この記事は何?scalazのTaskを使う上で知っておきたいtipsとか注意点と
    この記事は何? scalaz の Task を使う上で知っておきたい tips とか注意点とか。 以前、こういう記事を書いた。 [[Scala]scalaz の Task は何が嬉しいのか - Qiita](https://qiita.com/petitviolet/items/18b1108ab904172baf61) > Scala の Future と同じようなこと出来る + 便利な API が生えているというイメージ。 と書いたが、実際に使っていく上ではもう少し知っておくべきことがあるのでまとめておく。 Task は遅延評価される 改めて、Task は遅延評

    Scala - scalazのTaskは何が嬉しいのか

    2017-09-30QiitaScalascalaz
    Task?scalaz/scalazにあるクラス。[scalaz/Task.sc
    Task? [scalaz/scalaz](https://github.com/scalaz/scalaz)にあるクラス。 [scalaz/Task.scala](https://github.com/scalaz/scalaz/blob/473c99f0fe07bf51a36cf5a08fa334659422f7b3/concurrent/src/main/scala/scalaz/concurrent/Task.scala) これは[scalaz/Future.scala](https://github.com/scalaz/scalaz/blob/473c99f0fe0

    Scala - case classのコンストラクタを隠蔽する

    2017-09-26QiitaScala
    この記事はなに?caseclassを使いながらコンストラクタを隠蔽してファクトリ
    この記事はなに? case class を使いながらコンストラクタを隠蔽してファクトリー経由で生成するように強制したい。 ここでいう"コンストラクタ"はnewで生成する通常コンストラクタに加えて case class で自動生成されるapplyも対象としている。 まとめ - sealed abstract case classを使う - [こちらのコメント](https://qiita.com/petitviolet/items/b6af2877f64ebe8fe312comment-08e2ffe396177bf5a252)をご参照下さい(@aoiroa

    メタプログラミングScala

    2017-04-18QiitaScalametaprogramming
    社内勉強会の資料をちょっと改変したやつ。メタプロ&scala.metaの入門編。
    社内勉強会の資料をちょっと改変したやつ。 メタプロ & scala.meta の入門編。 メタプログラミングとは > プログラミング技法の一種で、ロジックを直接コーディングするのではなく、あるパターンをもったロジックを生成する高位ロジックによってプログラミングを行う方法、またその高位ロジックを定義する方法のこと。 [メタプログラミング - wikipedia ](https://ja.wikipedia.org/wiki/メタプログラミング) つまり プログラムを引数としてプログラムを出力とする関数、みたいなもの。 リフレクションも一種のメタプログラミングで、文字列から

    scalametaに入門する

    2017-02-19QiitaScalametaprogrammingmeta
    scalametaはinlinemacroと呼ばれるmacroannotatio
    scalameta は inline macro と呼ばれる macro annotation のためのツールキット。 型安全に macro 出来る。 公式とチュートリアルは以下。 - [scala.meta](http://scalameta.org/) - [A Whirlwind Tour of scala.meta](http://scalameta.org/tutorial/Part4-Macroannotations) setup まずは使えるようにするために build.sbt に追記。 sbt libraryDependencies += "org.sc

    scalametaでの型パラメータとコンストラクタ

    2017-02-19QiitaScalametaprogrammingmeta
    tl;dr直接、annotationclassの型パラメータやコンストラクタには
    tl;dr 直接、annotation class の型パラメータやコンストラクタにはアクセス出来ない。 その代わりに、thisを用いてパターンマッチで取得することが出来る。 題材 mix-in injection とか minimal cake pattern と呼ばれる、DI 対象となる class を mix-in する macro annotation を実装した。 - Uses[MyService]とするとval myService: MyServiceがフィールドに追加される - MixIn[MyService](new MyServiceImpl)

    Akka-PersistenceのserializerとしてKryoを使う

    2017-01-23QiitaScalaAkkaactor
    とりあえず使えるようにするAkka-PersistenceでKryoをとりあえず
    とりあえず使えるようにする Akka-Persistence で Kryo をとりあえず使えるようにする設定については以前書いた。 [Akka-Persistence コトハジメserializer として kryo を使う](http://qiita.com/petitviolet/items/92826357bd10aace14f5serializer%E3%81%A8%E3%81%97%E3%81%A6kryo%E3%82%92%E4%BD%BF%E3%81%86) serializer 選択について Akka-Persistence のPersistentActo

    ActorでCircuitBreakerを実装してみた話

    2016-12-05QiitaScalaAkkaactor
    実装してみる理由ReactiveSystemやMicroservices等の文脈
    実装してみる理由 ReactiveSystem や Microservices 等の文脈で登場する CircuitBreaker について以前調べた。 - [[Akka]CircuitBreaker はどう動くのか - Qiita](http://qiita.com/petitviolet/items/777be810e3c5756a393d) - [Akka の CircuitBreaker と Netflix の Hystrix の違い - Qiita](http://qiita.com/petitviolet/items/f1975fba06655a95e3b0) Circu

    AkkaのCircuitBreakerとNetflixのHystrixの違い

    2016-12-03QiitaJavaScalaAkka
    この記事はなに?マイクロサービス等の文脈で登場するCircuitBreaker。
    この記事はなに? マイクロサービス等の文脈で登場する[CircuitBreaker](http://martinfowler.com/bliki/CircuitBreaker.html)。 Scala で使えるものの代表(要出典)として以下の 2 つを比較する。 - [Circuit Breaker - Akka Documentation](http://doc.akka.io/docs/akka/current/common/circuitbreaker.html) - シンプルだが単機能 - [Netflix/Hystrix](https://github.com/Netf

    Akka - CircuitBreakerはどう動くのか

    2016-11-28QiitaScalaAkka
    CircuitBreakerとは原典にあたるのは[MartinFowler氏のp
    CircuitBreaker とは 原典にあたるのは[Martin Fowler 氏の post](http://martinfowler.com/bliki/CircuitBreaker.html)になるはず。 リモートへのリクエストが失敗した時にうまいこと障害が伝搬しないようにするためのデザイン。 昨今の Microservice アーキテクチャな文脈だと考えやすい。 特定のサービスがダウンしてしまった時に、 それに依存するサービスが引きずられてダウンしてしまわないようにするもの。 Reactive なシステムを作る上で欠かせない存在になりそう。 CircuitBreak

    Akka-StreamのRunnableGraphの構築パターン

    2016-10-22QiitaScalaAkkaactorAkka-Stream
    Akka-Streamでアプリケーションを実装する場合、SourceとFlowと
    [Akka-Stream](http://doc.akka.io/docs/akka/current/scala/stream/)でアプリケーションを実装する場合、 Source と Flow と Sink を組み合わせてRunnableGraphを構築し、runして実行する。 本記事では Akka-Stream の部品のメインとなる Source, Flow, Sink を、 [Akka-Actor](http://doc.akka.io/docs/akka/current/scala/actors.html)および[ActorPublisher](https://github.

    akka.actor.FSMを永続化出来るPersistentFSM

    2016-08-30QiitaScalaAkkaactor
    状態の保持/状態遷移に長けたFSMと、その状態/状態遷移を永続化する[Akka-
    状態の保持/状態遷移に長けた[FSM](http://doc.akka.io/docs/akka/current/scala/fsm.html)と、その状態/状態遷移を永続化する[Akka-Persistent](http://doc.akka.io/docs/akka/current/scala/persistence.html)の組み合わせとして[PersistentFSM](http://doc.akka.io/docs/akka/current/scala/persistence.htmlPersistent_FSM)がある。 状態を持つ Actor でイベントを永続化したいケー

    Akka-Persistenceコトハジメ

    2016-08-28QiitaScalaAkkaactor
    Akka-Persistenceはstatefulなactorの内部状態
    [Akka-Persistence](http://doc.akka.io/docs/akka/current/scala/persistence.html)は stateful な actor の内部状態を永続化することによって、生成時、再開時、migration 時などに状態を復旧することを可能とするもの。 内部状態に至るまでのイベント(メッセージ)を永続化しておくことで、そのイベントを再生すれば全く同じ状態を再現させることが出来るため、CQRS/ES の文脈で最近はよく出てきている(気がする)。 build.sbt まずは build.sbt に依存を追加する。 バージョンは

    Actorで作る有限オートマトン

    2016-08-24QiitaScalaAkkaactor
    有限オートマトン?FiniteStateMachine(FSM)ざっくり言うとイ
    有限オートマトン? Finite State Machine(FSM) ざっくり言うとイベントを受け取って状態遷移するステートマシン。 詳しくは[Wikipedia](https://ja.wikipedia.org/wiki/有限オートマトン)参照 FSM を Actor で実装する まさにそのためのakka.actor.FSMがあるので、これを使って実装する。 FSM に必要な型を定義する 必要となるのは以下の 3 つの型 - State - FSM の状態 - Data - FSM が内部的に持つ情報 - Event - FSM の

    Akka-HTTP - spray-jsonの使い方とAkka-HTTP

    2016-06-02QiitaScalaAkka-HTTP
    Akka-HTTPで公式にサポートされているJSONライブラリのspray-js
    Akka-HTTP で公式にサポートされている JSON ライブラリの[spray-json](https://github.com/spray/spray-json)の使い方。 [JSON Support — Akka Documentation](http://doc.akka.io/docs/akka/2.4.4/scala/http/common/json-support.html) Akka-HTTP と一緒に使いたいので、Marshaller/Unmarshaller として使用法も載せる。 tl;dr - クラスのフィールドに独自の型を使わない場合 or 独自の型に対応

    Akka-HTTP - DSLにおける暗黙の型変換

    2016-05-28QiitaScalaAkkaAkka-HTTP
    akka.http.scaladslパッケージをimportすることで使えるよう
    akka.http.scaladslパッケージを import することで使えるようになる DSL が、 裏側でどのように実装されているか気になったので調べた。 題材 akka-http において、単純なルーティングについて考えてみる。 scala val route = path("ping") { get { complete("pong") } } localhost:8080/pingに GET リクエストを送ると期待通りにpongと返ってくる。 $ curl localhost:8080/ping pong

    Akka-HTTPを型で縛る

    2016-05-27QiitaScalaAkkaAkka-HTTP
    httpリクエスト/レスポンスでやり取りするStringな値をアプリケーションが
    http リクエスト/レスポンスでやり取りする String な値をアプリケーションが期待する Scala の型に変換する方法について。 リクエストを型で縛る ユーザーからのリクエストをなるべくStringとして触らないようにする。 URL パラメータ 以下のルーティングを考える。 GET /message?id=&body=' URL パラメータのidとbodyをなるべくString以外で扱う。 まず、型を用意する。 scala sealed trait Content { val id: Long

    Akka-HTTP - カスタムヘッダーの取り扱い方

    2016-05-19QiitaScalaAkkaAkka-HTTP
    標準で用意されていない独自のヘッダーを定義して使いたいケース。大雑把に、文字列と
    標準で用意されていない独自のヘッダーを定義して使いたいケース。 大雑把に、文字列として扱う場合と型で扱う場合に分ける 文字列で扱う headerValueByNameで良い。 引数にSymbolかStringを渡せば、それにマッチするヘッダーの値が取り出せる。 scala val route = path("header" / "ping") { get { headerValueByName('Message) { msg: String => complete(s"pong: $msg") } }

    Akka-HTTP - ルーティングDSLの基本となるPathMatcherのまとめ

    2016-05-17QiitaScalaAkkaAkka-HTTP
    Pathを構築するためのDSLであるDirectiveとPathMathcerに
    Path を構築するための DSL であるDirectiveとPathMathcerについて。 ドキュメントは以下。 [The PathMatcher DSL — Akka Documentation](http://doc.akka.io/docs/akka/2.4.4/scala/http/routing-dsl/path-matchers.html) tl;dr 大体ここに書いてある。 [The PathMatcher DSL — Akka Documentation](http://doc.akka.io/docs/akka/2.4.4/scala/http/rout

    MonadicでReactiveなSlick3.xを使う

    2016-03-30QiitaScala
    MonadicでReactiveだと言われているSlick3.xを使ってみる。本
    Monadic で Reactive だと言われている Slick3.x を使ってみる。 本記事時点での最新はは 3.1.1 となっている。 公式のサンプルだと h2 を使っていたが、今回はローカルに立てた MySQL を使用する。 [Getting Started — Slick 3.1.1 documentation](http://slick.typesafe.com/doc/3.1.1/gettingstarted.htmlquick-introduction) 準備 事前にuserテーブルを作っておく sql Create Table: CREATE TAB

    静的ダックタイピングのパフォーマンスとその仕組み

    2015-12-22QiitaScala
    ここでの静的ダックタイピングはScalaの構造的部分型(StructuralTy
    ここでの静的ダックタイピングは Scala の構造的部分型(Structural Typing)を用いて実現されるものを指しています。 構造的部分型については以下が参考になるかと思います。 - [構造的部分型について - Qiita](http://qiita.com/tacke_jp/items/657626a08a02b5ecd0a62-1) - [Scala School - Advanced types](https://twitter.github.io/scala_school/advanced-types.htmlstructural) - [Structural typ

    Scala - パターンマッチにおけるアットマーク(@)

    2014-05-23QiitaScala
    参照http://stackoverflow.com/questions/451
    参照 http://stackoverflow.com/questions/4513380/scala-match-help 問題 こんなコードがある scala def flatMapSublists[A,B](ls: List[A])(f: (List[A]) => List[B]): List[B] = ls match { case Nil => Nil case sublist@(_ :: tail) => f(sublist) ::: flatMapSublists(tail)(f) } ん?sublist