「Scala、DDD、Akkaで立ち向かう 〜広告配信システムに課せられた100msの制約〜」 2019/10/05 【マイクロアド】〜ネット広告を支える技術を知る〜 #microad_CAMPHOR https://camphor.connpass.com/event/146724/Read less
![Scala、DDD、Akkaで立ち向かう 〜広告配信システムに課せられた100msの制約〜](https://cdn-ak-scissors.b.st-hatena.com/image/square/eed60189a1cb9a21e56959431733609197bbd47b/height=288;version=1;width=512/https%3A%2F%2Fcdn.slidesharecdn.com%2Fss_thumbnails%2Fcamphor-scala-ddd-akka-191006101158-thumbnail.jpg%3Fwidth%3D640%26height%3D640%26fit%3Dbounds)
「2017/9/9 Scala関西Summit 2017」、「2017/10/21 関ジャバ'17 10月度」 、「2018/3/18 Scala Matsuri 2018」でお話した、実践ScalaでDDD の発表資料です。 (English version -> https://speakerdeck.com/crossroad0201/practice-ddd-with-scala-en ) サンプルコードもあわせて参照してください。 https://github.com/crossroad0201/ddd-on-scala 目次 1.DDDとは - DDD - DDDのコンポーネント 2.ScalaとDDD 3.Scala実装スタイル 4.アーキテクチャ - レイヤ構成 - エラー処理 5.コンポーネントの実装 - アプリケーションサービス - エンティティ - バリューオブジェク
10年モノのサービスをアーキテクチャから再設計─はてなブックマークがScalaとDDDを使う理由 10年以上運用されているサービスには、さまざまな技術的な負債が発生しています。今後の継続的な改善のため、いったん新規開発を止めて4年かけて全面的なリニューアルを実施した「はてなブックマーク」の開発者に、プロジェクトの課題や解決する手法などを聞きました。 改善1つに数カ月かかるなら全てを書き換えられないか 2000年代にトレンドだった開発手法の負債 過去の開発意図を探る考古学的手法 データセンター移行も見据えて刷新しよう ドメインモデル設計とScalaとマイクロサービス化 コアロジックにはScalaを採用 きちんとしたドメインモデルによる設計と実装を継続したい 段階的なリリースとデータの移行という2つの大きな課題 求められる機能に沿ったデータベーススキーマに再構築 新旧の2システムを維持しながら
開発が佳境のアルプですが、Scalaを使っている企業としてのプレゼンスを上げるべくイベントへの参加も積極的に行っています。 結果的にはScala界隈マップにのったり二次会で話題になるくらいですが、多くの方から認知をしていただけたと思います。 ScalaMatsuriへの参加を決めたのは、率先してスタッフとして活動していた取締役の竹尾の影響もあります。開発者フレンドリーな精神を経営メンバーがもっているのはアルプの強みです。せっかく参加するのであれば、いち参加者としてではなく当事者意識を持ってエンジョイ(登壇)してみようとCFPへ応募していました。 僕のバックグラウンドはKotlinでのモバイルアプリ開発なので、なんとなく全く別なコミュニティへの参加の怖さがありました。ですが、 AndroidとiOSの垣根を超えたコラボレーションは増えていますし、こにふぁーさんの前例もあるので、言語を跨いだ開
Scalaの入門書がないない言われ続け早n年. この度「Scalaをはじめよう―マルチパラダイム言語への招待―」というScalaの入門向けの本を書きました. 2/16に発刊となりました. 最初は「Scala Tour」という同人誌として執筆し, α版をC92, 正式版を技術書典3にて頒布していたのですが, 技術書典3で頒布していた際にインプレスR&Dさんからお声がけいただき, 商業誌として世に出すことになりました. 同人版ではまだまだ粗が多かったため, 商業化にあたって大幅なリファクタリングを行いました. 章立ては以下のようになっており, 同人誌の時代の薄さを受け継ぎ たった86ページ となっています. 分厚い入門書はやってられない…という人でも取り組みやすいかと思います. ページ数は少ないものの, Scalaのほとんどの基本的な構文, 躓きやすい/勘違いしやすいポイントを読みにくくならな
Understanding Scala - connpass 昨日、表題の技術イベントを自分主催で行いました。なんでこんなイベントをやろうと思ったかというと「皆、Scalaを難しくめんどくさい方法で学んでるのでは?」という疑問が自分の中であって、その原因として、サンプルプログラムの集合を通して、ボトムアップになんとなくイメージで 全体像を作りあげてるのではという思いがありました。 そのようなアプローチに対して懐疑的な自分としては、このイベントでは(厳密にはやってませんが)どちらかというとトップダウン的アプローチでプログラミング言語について理解してもらおうと思い(もちろん、例は大切なので必要に応じて詳細に下りるのは忘れませんでしたが)、5つの発表の全てを全部自分でやりました。さすがに、5時間程度しゃべりっぱなしというのは疲れましたが、おかげさまで(?)、色々な疑問が解決したとか、メソッドと関
Scalaの勉強もかねてPlay FrameworkでDBを利用したREST APIサーバーを作ってみました。 自分がつまずいたポイントを記述しておきます。 ソースコード システム環境 ローカル開発環境: MacOSX + MySQL5.5 本番環境: CenOS6 + MariaDB5.5 Play Framework 2.3 JDK8 (Scala 2.11ではJDK8はテストサポート扱いらしい 標準サポートは JDK6 <= JDK7 ) Scala 2.11 IDE: IntelliJ IDEA 14 Ultimate + Scalaプラグイン (Ultimateは有償だがお薦め) データベースで管理するもの 2014〜2015年で放送されているアニメ作品を管理しているデータベース インストール&プロジェクト作成 最新のPlay Frameworkではactivator経由でインス
特に Scala 初心者だったとき、Scala を始めようとして「なかなか jar ファイルが落ちてこなくてコードが書き始められない」という問題に遭遇したことがある方も多いのではないかと思います。Advent Calendar の穴埋めのネタとして、それについて少し説明してみようと思います。 参考:下り 60Mbps での結果 http://qiita.com/seratch@github/items/0df29e637a9f9b3d7dec sbt (Scala Build Tool) まず前提として Scala のビルドツールは Gradle や Maven も利用可能ですが、Typesafe 社が開発している sbt というビルドツールが主流です。 この記事時点での最新バージョンは 0.13.9 です。 https://github.com/sbt/sbt/releases このとこ
増井さんが「今、気になる人」に直撃する連載。前編では、PHPの独自フレームワークで開発したチャットワークをScalaで刷新すると宣言したChatWorkの山本正喜CTOに、プロジェクトの進捗と、このプロジェクトがもたらした影響について聞きました。 後編では、チャットワークの未来像や、技術的負債を抱えないための方法論などについて、話を進めていきます。 苦労して育て上げたPHPを捨てるメリットとは? 増井:現行のシステムはまだPHPで動いてるんですよね? 山本:そうです。 増井:10万4000社が使っている大規模サービスなのに、特に大きな問題はないんですか? 山本:今は安定していますから問題はありません。でも3年ぐらい前までは、大きな障害を起こすことが度々あったので、正直、大丈夫とは言い切れない部分がありました。増井さんならよくご存じでしょうが、大規模なシステムでPHPを使う時には、気をつける
僕はこれまでまともに学習したプログラミング言語がPerlとJavaScriptしかなくて、静的言語的パラダイムや関数型パラダイムは概念は知っているものの、それがどう役に立つのか、逆にどういう面で課題がありどのように対処されているのか、などといったことを知らなかった。知らなくてもまあ仕事はPerlとJSでやっているので問題ない。しかしすでにこれらの言語から得られる概念的な知識の吸収の速度が鈍化してきていて、このままではエンジニアとしてまずいのではないかという危惧感があった。 そこで静的言語であり、関数型言語であり、また社内でも使われ始めているためサンプルコードがあるScalaの学習をすることにした。 学習するにあたって困ったことは、どういうドキュメントを読み、どのように実践するとScalaの概観をつかめるか分からないということだった。そこで今回は自分の経験を踏まえて、このように入門していくと
DIを使わない状態ではUserRepositoryというインターフェースが定義されているのにもかかわらず、UserServiceはUserRepositoryImplの参照も持っていました。 これではせっかくインターフェースを分離した意味がありません。 UserServiceがUserRepositoryインターフェースだけを参照(依存)するようにすれば、具体的な実装であるUserRepositoryImplの変更に影響されることはありません。 この問題を解決するのがDIの目的です。 それではDIのインジェクタを加えて、上記のクラス図を修正しましょう。 謎のインジェクタの登場によりUserServiceからUserRepositoryImplへの参照がなくなりました。 おそらくインジェクタは何らかの手段でサービスであるUserRepositoryImpl(Dependency)をクライアン
Scala関西 Summit 2015での発表で触れていたN+1クエリ問題をなんとかするためのライブラリを公開した. 発表は以下のもので, ここでは「関係モナド」という名前で紹介していたけれど, これは口頭でも説明したように便宜上てきとーにつけた名前であって, とくにそういう名前のよく知られたモナドがあるというわけでもなければ, そもそもモナドであるかどうかはあまり本質的ではない. この発表のあとに, Rails (Active Record)でのbulletのようにN+1問題の検出をScalaでやる方法はないだろうか, と言っている人がいたので, そういうものを探していて辿りつけるとよかろうということで, bullet-scalaという名前にした. もちろんN+1問題の検出のためのライブラリというわけではないし, 動的に検出するのではなく原理的に問題が発生しないようにするものなので, 思
Scala School の抄訳と原文で説明があまりない点を少し補足しています。 http://twitter.github.com/scala_school/index.html Scala School 意訳(Basics) Scala School 意訳(Basics continued) Scala School 意訳(Collections) Scala School 意訳(Pattern matching & functional composition) Scala School 意訳(Type & polymorphism basics) Scala School 意訳(Advanced types) Scala School 意訳(More collections) Scala School 意訳(Testing with specs) Scala School 意訳(C
These are an adaptation of the Ninety-Nine Prolog Problems written by Werner Hett at the Berne University of Applied Sciences in Berne, Switzerland. I (Phil! Gold) have altered them to be more amenable to programming in Scala. Feedback is appreciated, particularly on anything marked TODO. The problems have different levels of difficulty. Those marked with a single asterisk (*) are easy. If you
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く