Scala関西サミット2018で発表したスライドです。
![Scalaでの並行・並列処理戦略/strategy-for-concurrency-and-parallel-by-scala - Speaker Deck](https://cdn-ak-scissors.b.st-hatena.com/image/square/e0a56fcf74ce32e6e9d68d148bc8c9bfeb546d89/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2F687258135b99478d86183a1498ffb3a0%2Fslide_0.jpg%3F11189512)
Scala関西サミット2018で発表したスライドです。
こんにちは、エンジニアの小紫です。 今携わっているプロジェクトで採用しているScalaでの実装テクニックを紹介します。 これはなに レイヤードアーキテクチャにおけるドメイン層の実装から、関数型プログラミングの力を使って実装の都合を取り除いてピュアなドメイン実装を目指します。 そのリファクタリングの過程を解説していきます。 キーワード的にはDDD、レイヤードアーキテクチャ、Monadあたり。 ScalaMatsuri2018の@AoiroAoinoさんの発表に多大なる影響を受けています。ありがとうございます! purely_functional_play_framework_application 解決したい問題 DDD + レイヤードアーキテクチャ(Clean Architectureとか含む)で開発しているときに普通にやってるとドメイン、例えばのRepositoryのコードは以下のように
Scala関西サミット2018に出したCfPが幸運にも採択された。 2018.scala-kansai.org Scala関西は2017に続いて2年連続参加できるので嬉しい限り。 petitviolet.hatenablog.com 発表のタイトルは「実践GraphQL on Scala」で45分枠。 しっかり準備して業務でやっているGraphQL周りの知見を全部出したい。 ちなみにGraphQLについては以前GraphQLナイトというイベントで発表している。 petitviolet.hatenablog.com が、Scalaの話はあまり出来てなかったので、Scala関西では「Scala関西」に相応しいScalaっぽい話が出来たらなと思っている。 がんばるぞ!
GraphQLなAPIを実装するにあたって、認証をどうするか。 GraphQL内部で認証する GraphQLの外で認証する 認証とスキーマ 参考: A guide to authentication in GraphQL – Apollo GraphQL Learn SangriaのAuthentication and Authorisationセクション ScalaでSangriaを使って実装を考える。 個人的な結論 認証はGraphQLの手前で実行する。 具体例としては、クライアント側は認証が必要な操作をする際にHTTP Headerに認証トークン的なものを入れて送る。 サーバ側はGraphQLの世界に入る前にHTTP Headerからトークンを取り出して認証を行い、ログイン中のアカウントを特定してCtxのプロパティに入れてGraphQL世界に渡す。 スキーマとしては、アカウントそのも
2018/06/28にGraphQLナイトというイベントに参加して「GraphQL on Scala」というタイトルでLTしてきました。 connpass.com 発表資料はこちら。 speakerdeck.com 業務でGraphQLなAPIの開發を最近やっていて色々とネタが溜まってきていてどこか勉強会で話せないかな〜って思っていたところお声がけいただいたのが経緯です。 id:yuku_t ありがとうございました! scalaでがっつりGraphQLなAPI開発してるのでどこかで喋りたいな— こむ (@petitviolet) June 12, 2018 とはいったもののイベントのテーマがGraphQだという時にScalaをネタに話すのはわりと難しく、導入事例っぽいのとフレームワークの紹介に留まってしまいましたが、Twitterでの反応を見る限り、Scalaでも結構やれそうだというのが伝
sangria-graphql/sangriaを使ってGraphQLなAPIを実装する時にinterfaceをどうやって使うか、という話。 interface自体は特に難しい話ではないが、地味に動かなくて困ったので残しておく。 まとめ interfaceの実装自体はInterfaceTypeを使うだけ Field.fieldTypeにInterfaceTypeを与えるだけだとSchemeがエラーになる 解決策として Schema.additionalTypesあるいはInterfaceType.withPossibleTypesでそのinterfaceを実装したObjectTypeを与える UnionTypeを使う interfaceの実装としてのInterfaceType GraphQLの公式ページ: Schemas and Types | GraphQL いわゆるinterface的な
There’s a couple of hot development areas in the Scala ecosystem, and the competition between the various side-effect wrappers is one of the most interesting. We have the bifunctor IO from Scalaz 8 (which is now a standalone project, ZIO), we have cats-effect and its IO, which is a simpler version of Monix’s Task, and finally we have the good old Akka actors. Some people say that the IO/Task wrapp
こんにちは、かたいなかです。 前回に引き続き、GraphQLのScalaでの実装であるSangriaについて解説していきます。 今回はページネーションを行うAPIを作成する方法について解説します。 Connection 今回はRelayのCursor Connectionという仕様に従ってページネーションを実装します。 まずは今回実装していくAPIを例にConnectionがどのようなものかを見ていきましょう。 クエリおよびレスポンスは以下のような形式です。 edgesやnode,cursorといった見慣れない名前がありますね。 順番に解説します。 クエリの引数 articlesのようなConnection型を返すフィールドはページネーションに関連した引数を取れるようにします。 前方にページを読み進めるための属性 after この引数で指定されたカーソルより後ろの要素を返す。 first
はじめに 実践ScalaでDDD で発表した中で、エンティティ間の関連を「ロールオブジェクト」として定義する ことをお話ししましたが、スライドでは要約になっています。 実際にプロダクトでやってみて有効なパターンだと感じているので、改めて突っ込んで解説したいと思います。 なお、内容的には Scala をターゲットとしていますが、他の言語にも考え方は応用できると思います。 サマリ DDDで設計していると エンティティ と エンティティ の間に関連があり、その 関連に関するドメインの振る舞い と言うものが出てきます。 例えば 「ユーザー エンティティ」 と 「タスク エンティティ」 がある場合に、その間には 「タスクの作成者」 や 「タスクの担当者」 と言う関連があったりします。 そしてそれらの関連は「タスクの作成者は、タスクを削除する」や「タスクの担当者は、タスクを完了する」のような振る舞いを
Scala用GraphQLフレームワークのsangriaでUpdateCtxを使って認証処理を実装する。 使い方に注意点がいくつかあるが、まずは普通に動かすための方法について。 UpdateCtxを使って実装する 認証処理に関するドキュメントはLearn SangriaのAuthentication and Authorisationセクションにあり、「Resolve-Based Auth」として紹介されているようにUpdateCtxを使って実装してみる。 その前に、まずはsangriaを動かすための前提となるCtxおよび共通して使用する型を定義する。 色々実装が雑なのはサンプルのためなので目を瞑る。 コード全体像はGithubにpushしてある。 // ユーザー case class User(id: Long, name: String, email: String, password
Experienced Scala Developer who enjoys learning and using many other techs. Years ago fell in love in Graph Databases now sharing this emotion with GraphQL. Motivation Scala is a very popular language nowadays and it’s often chosen to deliver efficient and scalable systems. It leverages the Java VM, known for its reliability and robustness. Support for Functional Programming, rich ecosystem and st
•Thread •join •Runnable/Callable •Lock •synchronized •Atomic variables •volatile •ThreadLocal •DynamicVariable •ConcurrentHashMap •ConcurrentLinkedQueue •ForkJoin •ThreadPool •Executor/ExecutorService •ExecutionContext •Future •Thread intereference •Memory Consistency error •Dead lock •Live lock •Starvation •InterruptedException •Scheduling
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く