Movatterモバイル変換
[0]
ホーム
URL:
画像なし
夜間モード
Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Lintaro Ina
PDF, PPTX
72,668 views
はてなブックマーク in Scala
2015-08-01 Scala関西 Summit 2015 発表資料(関係モナドについて発表後に公開したコードなどへのリンクのスライドを追加)
Engineering
◦
Read more
73
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 40
2
/ 40
3
/ 40
4
/ 40
5
/ 40
6
/ 40
7
/ 40
8
/ 40
9
/ 40
10
/ 40
11
/ 40
12
/ 40
13
/ 40
14
/ 40
15
/ 40
16
/ 40
17
/ 40
18
/ 40
19
/ 40
20
/ 40
21
/ 40
22
/ 40
23
/ 40
24
/ 40
25
/ 40
26
/ 40
27
/ 40
28
/ 40
29
/ 40
30
/ 40
31
/ 40
32
/ 40
33
/ 40
34
/ 40
35
/ 40
36
/ 40
37
/ 40
38
/ 40
39
/ 40
40
/ 40
Recommended
PDF
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
by
Lintaro Ina
PDF
Thinking in Cats
by
Eugene Yokota
PDF
Scalaで型クラス入門
by
Makoto Fukuhara
PDF
あなたのScalaを爆速にする7つの方法(日本語版)
by
x1 ichi
PDF
Scala2.8への移行
by
guest5f4320
PDF
ScalaMatsuri 2016
by
Yoshitaka Fujii
KEY
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
by
Hiromi Ishii
PPTX
Tagless Final DSL
by
Hikaru Yoshimura
PDF
なぜリアクティブは重要か #ScalaMatsuri
by
Yuta Okamoto
PDF
rpscala35-scala2.9.0
by
Kenji Yoshida
PDF
Why Reactive Matters #ScalaMatsuri
by
Yuta Okamoto
PPTX
Sns suite presentation
by
Jason Namkung
PDF
C++コミュニティーの中心でC++をDISる
by
Hideyuki Tanaka
PPT
Rpscala2011 0601
by
Hajime Yanagawa
PDF
Scala の関数型プログラミングを支える技術
by
Naoki Aoyama
PDF
Phantom Type in Scala
by
Yasuyuki Maeda
PDF
これからのJavaScriptー関数型プログラミングとECMAScript6
by
TanUkkii
PDF
Frege, What a Non-strict Language
by
y_taka_23
PDF
BOF1-Scala02.pdf
by
Hiroshi Ono
PDF
JavaScript 講習会 #1
by
Susisu
PPTX
LINQ 概要 + 結構便利な LINQ to XML
by
ShinichiAoyagi
PDF
今から始める Lens/Prism
by
Naoki Aoyama
PDF
これから Haskell を書くにあたって
by
Tsuyoshi Matsudate
PDF
15分でざっくり分かるScala入門
by
SatoYu1ro
PDF
197x 20090704 Scalaで並行プログラミング
by
Net Penguin
PDF
Scalaで萌える関数型プログラミング[完全版]
by
Ra Zon
PDF
Java SE 8 lambdaで変わる プログラミングスタイル
by
なおき きしだ
PPTX
【java8 勉強会】 怖くない!ラムダ式, Stream API
by
dcomsolution
PPTX
明日から業務で使うScala
by
martin_lover_ca
PDF
Scalaでプログラムを作りました
by
Tomoharu ASAMI
More Related Content
PDF
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
by
Lintaro Ina
PDF
Thinking in Cats
by
Eugene Yokota
PDF
Scalaで型クラス入門
by
Makoto Fukuhara
PDF
あなたのScalaを爆速にする7つの方法(日本語版)
by
x1 ichi
PDF
Scala2.8への移行
by
guest5f4320
PDF
ScalaMatsuri 2016
by
Yoshitaka Fujii
KEY
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
by
Hiromi Ishii
PPTX
Tagless Final DSL
by
Hikaru Yoshimura
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
by
Lintaro Ina
Thinking in Cats
by
Eugene Yokota
Scalaで型クラス入門
by
Makoto Fukuhara
あなたのScalaを爆速にする7つの方法(日本語版)
by
x1 ichi
Scala2.8への移行
by
guest5f4320
ScalaMatsuri 2016
by
Yoshitaka Fujii
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
by
Hiromi Ishii
Tagless Final DSL
by
Hikaru Yoshimura
What's hot
PDF
なぜリアクティブは重要か #ScalaMatsuri
by
Yuta Okamoto
PDF
rpscala35-scala2.9.0
by
Kenji Yoshida
PDF
Why Reactive Matters #ScalaMatsuri
by
Yuta Okamoto
PPTX
Sns suite presentation
by
Jason Namkung
PDF
C++コミュニティーの中心でC++をDISる
by
Hideyuki Tanaka
PPT
Rpscala2011 0601
by
Hajime Yanagawa
PDF
Scala の関数型プログラミングを支える技術
by
Naoki Aoyama
PDF
Phantom Type in Scala
by
Yasuyuki Maeda
PDF
これからのJavaScriptー関数型プログラミングとECMAScript6
by
TanUkkii
PDF
Frege, What a Non-strict Language
by
y_taka_23
PDF
BOF1-Scala02.pdf
by
Hiroshi Ono
PDF
JavaScript 講習会 #1
by
Susisu
PPTX
LINQ 概要 + 結構便利な LINQ to XML
by
ShinichiAoyagi
PDF
今から始める Lens/Prism
by
Naoki Aoyama
PDF
これから Haskell を書くにあたって
by
Tsuyoshi Matsudate
PDF
15分でざっくり分かるScala入門
by
SatoYu1ro
PDF
197x 20090704 Scalaで並行プログラミング
by
Net Penguin
PDF
Scalaで萌える関数型プログラミング[完全版]
by
Ra Zon
PDF
Java SE 8 lambdaで変わる プログラミングスタイル
by
なおき きしだ
PPTX
【java8 勉強会】 怖くない!ラムダ式, Stream API
by
dcomsolution
なぜリアクティブは重要か #ScalaMatsuri
by
Yuta Okamoto
rpscala35-scala2.9.0
by
Kenji Yoshida
Why Reactive Matters #ScalaMatsuri
by
Yuta Okamoto
Sns suite presentation
by
Jason Namkung
C++コミュニティーの中心でC++をDISる
by
Hideyuki Tanaka
Rpscala2011 0601
by
Hajime Yanagawa
Scala の関数型プログラミングを支える技術
by
Naoki Aoyama
Phantom Type in Scala
by
Yasuyuki Maeda
これからのJavaScriptー関数型プログラミングとECMAScript6
by
TanUkkii
Frege, What a Non-strict Language
by
y_taka_23
BOF1-Scala02.pdf
by
Hiroshi Ono
JavaScript 講習会 #1
by
Susisu
LINQ 概要 + 結構便利な LINQ to XML
by
ShinichiAoyagi
今から始める Lens/Prism
by
Naoki Aoyama
これから Haskell を書くにあたって
by
Tsuyoshi Matsudate
15分でざっくり分かるScala入門
by
SatoYu1ro
197x 20090704 Scalaで並行プログラミング
by
Net Penguin
Scalaで萌える関数型プログラミング[完全版]
by
Ra Zon
Java SE 8 lambdaで変わる プログラミングスタイル
by
なおき きしだ
【java8 勉強会】 怖くない!ラムダ式, Stream API
by
dcomsolution
Similar to はてなブックマーク in Scala
PPTX
明日から業務で使うScala
by
martin_lover_ca
PDF
Scalaでプログラムを作りました
by
Tomoharu ASAMI
PPTX
Play2 scalaを2年やって学んだこと
by
dcubeio
PDF
Scala with DDD
by
潤一 加藤
PDF
めんどくさくない Scala #kwkni_scala
by
Kazuhiro Sera
PDF
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
by
Tomoharu ASAMI
PDF
Scalaプログラミング・マニアックス
by
Tomoharu ASAMI
PDF
Refactoring point of Kotlin application
by
Recruit Lifestyle Co., Ltd.
PDF
Trait in scala
by
Yuta Shimakawa
PDF
プログラミング言語Scala
by
TanUkkii
PDF
クラウド・アプリケーション・モデリングへのアプローチ
by
Tomoharu ASAMI
PPTX
Apache Spark チュートリアル
by
K Yamaguchi
PDF
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】
by
Tomoharu ASAMI
PDF
Scala2.8への移行
by
Takeda Hiroyuki
PPTX
Struggle against crossdomain data complexity in Recruit Group
by
DataWorks Summit/Hadoop Summit
PDF
Kotlin Meets Data-Oriented Programming: Kotlinで実践する「データ指向プログラミング」
by
Kent Ohashi
PDF
セマンテックウェブとRDFDB
by
Hirosuke Asano
PPTX
Rawlerフレームワーク(全体)
by
Takaichi Ito
PDF
scala+liftで遊ぼう
by
youku
PPTX
Reladomo in Scala #scala_ks
by
Hiroshi Ito
明日から業務で使うScala
by
martin_lover_ca
Scalaでプログラムを作りました
by
Tomoharu ASAMI
Play2 scalaを2年やって学んだこと
by
dcubeio
Scala with DDD
by
潤一 加藤
めんどくさくない Scala #kwkni_scala
by
Kazuhiro Sera
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
by
Tomoharu ASAMI
Scalaプログラミング・マニアックス
by
Tomoharu ASAMI
Refactoring point of Kotlin application
by
Recruit Lifestyle Co., Ltd.
Trait in scala
by
Yuta Shimakawa
プログラミング言語Scala
by
TanUkkii
クラウド・アプリケーション・モデリングへのアプローチ
by
Tomoharu ASAMI
Apache Spark チュートリアル
by
K Yamaguchi
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】
by
Tomoharu ASAMI
Scala2.8への移行
by
Takeda Hiroyuki
Struggle against crossdomain data complexity in Recruit Group
by
DataWorks Summit/Hadoop Summit
Kotlin Meets Data-Oriented Programming: Kotlinで実践する「データ指向プログラミング」
by
Kent Ohashi
セマンテックウェブとRDFDB
by
Hirosuke Asano
Rawlerフレームワーク(全体)
by
Takaichi Ito
scala+liftで遊ぼう
by
youku
Reladomo in Scala #scala_ks
by
Hiroshi Ito
More from Lintaro Ina
PDF
Gradual Typing for Generics
by
Lintaro Ina
PDF
Emacs上のターミナルを最強に
by
Lintaro Ina
PDF
論理と計算のしくみ 5.3 型付きλ計算 (前半)
by
Lintaro Ina
PDF
HTMLからの本文抽出
by
Lintaro Ina
PDF
『BrandSafe はてな』のアドベリフィケーションのしくみ
by
Lintaro Ina
PDF
『BrandSafe はてな』のアドベリフィケーションのしくみ
by
Lintaro Ina
Gradual Typing for Generics
by
Lintaro Ina
Emacs上のターミナルを最強に
by
Lintaro Ina
論理と計算のしくみ 5.3 型付きλ計算 (前半)
by
Lintaro Ina
HTMLからの本文抽出
by
Lintaro Ina
『BrandSafe はてな』のアドベリフィケーションのしくみ
by
Lintaro Ina
『BrandSafe はてな』のアドベリフィケーションのしくみ
by
Lintaro Ina
はてなブックマーク in Scala
1.
はてなブックマークin Scala伊奈 林太郎id:tarao
@oarat2015-08-01@ Scala 関西 Summit 2015
2.
自己紹介名前 い な伊奈
りんたろう林太郎 (id:tarao @oarat)2008-08 はてなインターン2008-10 はてなアルバイト (ブックマークチーム)2010-04 日本学術振興会 特別研究員 (DC1)2013-04 はてな正社員2013-12 ブックマークチーム◮ アルゴリズム屋さん◮ 検索技術 > 機械学習 ≫ アドテク◮ 最近は設計したり基盤寄りな部分を担当したり
3.
自己紹介名前 い な伊奈
りんたろう林太郎 (id:tarao @oarat)Scala 歴: 4ヶ月◮ slick-jdbc-extension◮ 型レベルのラムダ計算◮ Software Design 2015 年 8 月号大学時代は◮ 研究室: 型理論, プログラム意味論, 証明支援系◮ OCaml が公用語◮ gradual typing漸進的型付け の Java 系言語への応用を研究
5.
いちから作りなおし!
6.
いちから作りなおし!Scalaで!
7.
いちから作りなおし!Scalaで!ねらい◮ コードベースの肥大化・老朽化への対処◮ 根本的なアーキテクチャの再設計
8.
DISCLAIMER◮ 内容は開発中のもの◮ 実際のリリース時には変更の可能性あり◮
最終的にどうなったか公表するかどうか未定
9.
構成◮ 前後で Perl/Scala
に分割◮ コアは B!以外からも利用◮ Presso◮ B!KUMAビュー (Perl)◮ ユーザ認証◮ HTML のレンダリングコア (Scala)◮ API サーバ◮ 社内基盤的側面
10.
Why Scala?◮ 変更の少ない重要部分は堅牢にしたい◮
型安全性◮ ドメイン駆動設計◮ Mackerel チームでの使用実績◮ LL 勢にも書きやすい◮ エンジニアのチーム異動が容易になる◮ Perl との心中を避ける◮ 個人的には◮ 新言語を導入するなら関数型でないと許さん◮ 強い静的型付言語でないと許さん◮ 型推論ないと許さん
11.
Why Perl?◮ 頻繁に変更があっても開発が楽◮
デザイナも HTML テンプレートを触る◮ コンパイルしなおさなくてよい◮ ローカル開発環境での作業が容易◮ 学習コスト 0◮ 認証まわりは共通 Perl モジュールでやりたい◮ あとで捨ててまた作り直すかもしれない
12.
フレームワークフレームワークフレームワークフレームワークフレームワークフレームワークフレームワーク
13.
これまで (Perl)第 1
世代 Apache mod perl 上の簡易的なもの第 2 世代 内製の Perl 版 RoR 的な重厚なもの◮ 学習コスト高◮ 自由がきかない第 3 世代 薄いフレームワークの集合◮ よくできた小モジュールの組み合わせ◮ 自由度が高く入れ替え可能◮ ≫ YAPC::Asia 2015 talk by id:hitode909
14.
新コアサーバ (Scala)Web◮ Scalatra◮
APISchemaのScala 版 (予定)DB◮ Slick 3.0◮ slick-jdbc-extension◮ 独自のべんりに使う層テスト◮ ScalaTest
15.
WebフレームワークScalatra◮ API サーバなので簡素でよい◮
返り値が Any なの嫌なのでラップして利用APISchema◮ Perl での実績を元に Scala 版を実装予定◮ 簡単な DSL で定義◮ JSON Schema によるリソース定義◮ パスごとのリクエストとレスポンス定義◮ 同じ定義から自動生成◮ ドキュメント◮ ルーティング処理
16.
DBフレームワークSlick 3.0◮ 非同期
DB アクセスも利用したい◮ 文字列補間による生 SQL のみで利用◮ 予想外のクエリが生成されるのを防ぐ◮ インフラエンジニアでも読めるように◮ (あとでクエリビルダ導入の可能性はある)◮ 拡張モジュール slick-jdbc-extension◮ 文字列補間のリストの扱いなどを強化◮ カラム名での結果型へのマッピング◮ ≫ 『Scala で生 SQL - Slick の SQL 補間子にリストを渡す 他』
17.
DBフレームワーク独自層◮ DB インスタンス管理◮
マスター/スレーブ切り替え◮ テスト時のプロセス毎 DB 分離◮ モード管理 (トランザクション, 非同期)◮ リクエストスレッドごとの非同期接続数管理
18.
ドメイン駆動設計ドメイン駆動設計ドメイン駆動設計ドメイン駆動設計ドメイン駆動設計ドメイン駆動設計ドメイン駆動設計
19.
旧ブックマークではDDDっぽいこともやられていた◮ アプリケーションサービス◮ ドメインサービス◮
ドメインモデル◮ CQRS (コマンドクエリ責務分離)
20.
旧ブックマークでは失敗◮ ユビキタス言語がないまま進んだ◮ e.g.
お気に入り or フォロー◮ e.g. 3 つの「インタレスト」概念◮ 方針が徹底されなかった◮ アプリ層とコントローラ層が互いに侵食◮ 内製の Perl 版 Active Record 的 O/R マッパ◮ モデル, サービス, リポジトリが渾然一体◮ 近頃の他 Perl プロダクトではまともになった◮ Perl の限界◮ インタフェースが言語機能にない
21.
きちんとDDDしたい!◮ 有志の社内勉強会を実施◮ 非エンジニアメンバーとも共有・議論◮
Scala でのよいやり方を模索
22.
方針◮ リポジトリはインタフェース (依存関係逆転の原則)◮
ドメインに実装上の都合を持ち込まない
23.
悩んだ点と作戦◮ 依存性の注入どうするか◮ Cake
Pattern を積極採用◮ has-a 関係を引くときの N+1 問題◮ 関係モナドを定義◮ トランザクションどこで張るか◮ いったん極小な範囲 (インフラ層) で◮ 全体的に結果整合性
24.
悩んだ点と作戦◮ 依存性の注入どうするか◮ Cake
Pattern を積極採用◮ has-a 関係を引くときの N+1 問題◮ 関係モナドを定義◮ トランザクションどこで張るか◮ いったん極小な範囲 (インフラ層) で◮ 全体的に結果整合性
25.
Cake Patternpackage repotrait
SomeComponent {def someLoader: SomeLoader// リポジトリインタフェースtrait SomeLoader {def find(...) = ...} }package dbtrait SomeComponentextends repo.SomeComponent {def someLoader: SomeLoader =SomeLoader// 実装object SomeLoaderextends SomeLoader { ... }}package apptrait ServiceComponent {// 依存の明示self: repo.SomeComponent =>trait SomeService {...someLoader.find(...)...} }package mainobject AppRootextends db.SomeComponentwith app.ServiceComponentwith ...
26.
Cake Patternポイント◮ trait
を入れ子にしておく◮ 使う側は自分型アノテーションで依存を明示◮ AppRootには実装コンポーネントを結合◮ TestRoot等を用意して別実装に入れ替えも可◮ 単体テストでコンポーネント単位で入れ替え◮ 全体でテスト用 DB ハンドラ実装に入れ替えobject TestRootextends repo.SomeMockedComponentwith app.ServiceComponentwith ...
27.
N+1問題1 件の場合val bookmark:
Bookmark = ...val locaiton: Location = bookmark.toLocation// SELECT * FROM location WHERE ...n 件の場合: n + 1 回のクエリが必要val bookmarks: Seq[Bookmark] = ...// SELECT * FROM bookmark WHERE ...val locations: Seq[Location] = bookmarks.map(_.toLocation)// SELECT * FROM location WHERE ...// SELECT * FROM location WHERE ...//... × n本当はせいぜい 2 回で済むval locations: Seq[Location] =locationLoader.findAll(bookmarks.map(_.locationId))// SELECT * FROM location WHERE location_id IN (...)
28.
N+1問題回避策(1) JOIN解決方法◮ bookmarksと
locaitonsをいっぺんに引く◮ JOIN して引けば可能問題点◮ 一般的には JOIN したくない場合もある◮ e.g. bookmarksが入力となるサービス内◮ NG: 実装上の都合がモデルの引き方を左右する
29.
N+1問題回避策(2) 愚直に解決方法◮ ていねいに関係先を引いてくる問題点◮
元の要素と対応づけたい場合に面倒val bookmarks: Seq[Bookmark] = ...val locations: Seq[Location] =locationLoader.findAll(bookmarks.map(_.locationId))val id2loc = locations.map{ l => l.id -> l }.toMapval bookmarkAndLocationList: Seq[(Bookmark, Location)] =bookmarks.map{ b => (b, id2loc(b.locationId)) }
30.
関係モナドclass BookmarkRelation(b: Bookmark)
{def toLocation: Monad[Location, Bookmark] =HasA.Monadic(b, new HasA[Bookmark, Location] { ... }) }implicit def bookmarkRel(b: Bookmark) =new BookmarkRelation(b)val bookmark: Bookmark = ... // 1 件の場合val location: Option[Location] = bookmark.toLocationval bookmarks: Seq[Bookmark] = ... // n 件の場合val locations: Seq[Location] = bookmarks.map(_.toLocation)
31.
関係モナドclass BookmarkRelation(b: Bookmark)
{def toLocation: Monad[Location, Bookmark] =HasA.Monadic(b, new HasA[Bookmark, Location] { ... }) }implicit def bookmarkRel(b: Bookmark) =new BookmarkRelation(b)val bookmark: Bookmark = ... // 1 件の場合val location: Option[Location] = bookmark.toLocationval bookmarks: Seq[Bookmark] = ... // n 件の場合val locations: Seq[Location] = bookmarks.map(_.toLocation)◮ toLocationの返り値はモナドのインスタンス
32.
関係モナドclass BookmarkRelation(b: Bookmark)
{def toLocation: Monad[Location, Bookmark] =HasA.Monadic(b, new HasA[Bookmark, Location] { ... }) }implicit def bookmarkRel(b: Bookmark) =new BookmarkRelation(b)val bookmark: Bookmark = ... // 1 件の場合val location: Option[Location] = bookmark.toLocationval bookmarks: Seq[Bookmark] = ... // n 件の場合val locations: Seq[Location] = bookmarks.map(_.toLocation)◮ toLocationの返り値はモナドのインスタンス◮ クエリはモナドから結果への暗黙変換で発生
33.
関係モナドclass BookmarkRelation(b: Bookmark)
{def toLocation: Monad[Location, Bookmark] =HasA.Monadic(b, new HasA[Bookmark, Location] { ... }) }implicit def bookmarkRel(b: Bookmark) =new BookmarkRelation(b)val bookmark: Bookmark = ... // 1 件の場合val location: Option[Location] = bookmark.toLocationval bookmarks: Seq[Bookmark] = ... // n 件の場合val locations: Seq[Location] = bookmarks.map(_.toLocation)◮ toLocationの返り値はモナドのインスタンス◮ クエリはモナドから結果への暗黙変換で発生◮ 関係の引き方はモナド生成時に指定
34.
関係モナドモナドのパラメータ◮ 複数件の引き方のみを実装new HasA[Bookmark,
Location] {def map(bookmarks: Seq[Bookmark]): Seq[Location] =locationLoader.findAll(bookmarks.map(_.locationId)) }暗黙変換◮ Seq[] を一気に変換して N+1 問題を解決implicit def run[R, Q](ms: Seq[Monad[R, Q]]): Seq[R] = ... // HasA.map を使った処理implicit def toResultOption[R, Q](m: Monad[R, Q]): Option[R] = run(Seq(m)).headOption
35.
関係モナド元の要素と対応づける場合type JoinBookmarkLocation =Join[(Bookmark,
Location), LocationId, Bookmark, Location]def withLocation = Join.Monadic(b, new JoinBookmarkLocation {def map(bs: Seq[Bookmark]): Seq[Location] = ...def leftKey(b: Bookmark): LocationId = b.locationIddef rightKey(l: Location): LocationId = l.iddef merge(b: Bookmark, l: Location) = (b, l)})val bookmarks: Seq[Bookmark] = ...val bookmarkAndLocationList: Seq[(Bookmark, Location)] =bookmarks.map(_.withLocation)◮ ID による紐づけは変換時にやってくれる
36.
詳しくはOSS 化された実装◮ github.com/tarao/bullet-scala日本語での解説◮
bullet-scala: N+1 クエリ問題を回避する
37.
CICICICICICICI
38.
CIdocker で◮ 単一の.jar
ファイルを生成◮ テストを実行◮ 開発用ホスト環境 (予定)◮ chrootして本番環境に?生成した.jar ファイル◮ テストに使用 (本番と同一バイナリ)◮ デプロイに使用
39.
まとめ◮ はてなブックマークを作りなおし◮ Perl
と Scala のハイブリッド◮ 薄いフレームワークを採用◮ Scala での DDD 実践方法を模索◮ docker でモダンな CI
40.
WE ARE HIRING◮
Scala エンジニア 絶賛募集中◮ 東京 / 京都 どちらの勤務でも可
Download
[8]
ページ先頭
©2009-2025
Movatter.jp