Slide 1

Slide 1 text

プレScalaMatsuri 兼 リハーサル オンラインLT大会 Chatwork株式会社 FUJII Yoshitaka ここ数ヶ月でAkkaを勉強した 方法について紹介

Slide 2

Slide 2 text

自己紹介 - FUJII Yoshitaka - @yoshiyoshifujii - Chatwork株式会社 - Scala関西勉強会スタッフ - 登壇 - ScalaMatsuri2019 - 実践 Clean Architecture - 趣味 - ⛰ ⛺ ‍♂ 庭DIY

Slide 3

Slide 3 text

今日 お話したいこと

Slide 4

Slide 4 text

Akka何から 勉強したらいい のか分からん

Slide 5

Slide 5 text

Akka HTTPは 使ったことあるけ どActorプログラ ミング分からん

Slide 6

Slide 6 text

Akka Streamは 使ったことあるけ どActorプログラ ミング分からん

Slide 7

Slide 7 text

私は こうやって勉強 しましたよー を話します

Slide 8

Slide 8 text

書籍 8 概念やパターンや雰囲気は掴めるけど…Akkaのバージョンが古い…

Slide 9

Slide 9 text

書籍 9 今回、こちらは、読んでおりません

Slide 10

Slide 10 text

Akka Documentation 10 https://doc.akka.io/docs/akka/current/index.html

Slide 11

Slide 11 text

Akkaの ドキュメント を読もう

Slide 12

Slide 12 text

Akkaの ドキュメント を模写しよう

Slide 13

Slide 13 text

結局は 一次ソース だよね

Slide 14

Slide 14 text

Lightbend Academy 14 https://academy.lightbend.com/

Slide 15

Slide 15 text

夏季限定で 無償で受講 できちゃう ※2020/08/31までかも…

Slide 16

Slide 16 text

2020年4月から5ヶ月間で勉強したこと Akka Documentation 16 - Akka Actors - Akka Cluster - Akka Persistence - Akka Streams - Akka Discovery Lightbend Academy

Slide 17

Slide 17 text

今日は、Akka Documentationを どう読んで どう模写したか 紹介

Slide 18

Slide 18 text

Lightbend Academyについては… 18 https://speakerdeck.com/crossroad0201/lightbend-aca demyonraintoreninguwoshou-ketemita https://speakerdeck.com/crossroad0201/lightbend-ac ademyderiakuteibusisutemufalseji-chu-woxue-bou-jju g-lt Yohei TSUJI @crossroad0201 さんのスライドがオススメ

Slide 19

Slide 19 text

Akka Documentation 19 https://doc.akka.io/docs/akka/current/index.html サンプルとして Getting Started Guide を取り上げます。

Slide 20

Slide 20 text

Documentを読む 20 https://doc.akka.io/docs/akka/current/typed/guide/introduction.html

Slide 21

Slide 21 text

英語つらい… DeepL や Google翻訳 使う - Akka は、プロセッサコアとネットワークにまたがるスケーラブルで回復力のある システムを設計するためのオープンソースのライブラリです。Akka を使用するこ とで、信頼性の高い動作やフォールトトレランス、高性能を実現するための低レベ ルのコードを書く代わりに、ビジネスのニーズを満たすことに集中することができ ます。 - (略) - Akkaを学び、アクターモデルをどのように使うかを学ぶことで、困難な分散/並列 システムの問題を、すべてが緊密にかつ効率的に統合された統一的なプログラミン グモデルで解決する、広大で深いツールのセットにアクセスできるようになりま す。 ※ 翻訳原文ままですが、とても意味が分かる。活用しましょう。 21

Slide 22

Slide 22 text

まずは、ローカルで実行してみる https://developer.lightbend.com/guides/akka-quickstart-scala/ 22

Slide 23

Slide 23 text

Lightbend Tech Hub から サンプルプロジェクトをDL https://developer.lightbend.com/start/?group=akka&project=akka-quickstart-scala 23

Slide 24

Slide 24 text

書いてある通りに進める (DeepLがんがん使う) 24

Slide 25

Slide 25 text

書いてある通りに進める 25

Slide 26

Slide 26 text

実行できるこ とが確認でき たら…

Slide 27

Slide 27 text

捨てる ダウンロードしたプロジェクトを

Slide 28

Slide 28 text

模写しよう 最初は写経

Slide 29

Slide 29 text

書かないとよー分からん - ダウンロードしてきたプロジェクトを動かしてコードを読んでもよー分からん - ドキュメント読んでるだけやとよー分からん - だんだん眠くなってくる - コード書きたい - とにかく書く - なんかやってる気分も盛り上がる - 勉強してる気になる - 何度も書くことで手になじむ - ノリを掴む 29

Slide 30

Slide 30 text

IntelliJ IDEAで空のScalaプロジェクトを作る 30

Slide 31

Slide 31 text

scalafmt を適用する - コードを模写していく際に、フォーマットとかあまり気にしたくないので - さくっとscalafmt入れておいて、さくさく模写模写しながらフォーマットしていく 31 version = 2.6.4 style = defaultWithAlign danglingParentheses = true indentOperator = spray includeCurlyBraceInSelectChains = true maxColumn = 120 rewrite.rules = [RedundantParens, SortImports, PreferCurlyFors] spaces.inImportCurlyBraces = true binPack.literalArgumentLists = false unindentTopLevelOperators = true optIn.breaksInsideChains = true newlines.alwaysBeforeTopLevelStatements = true addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.4.2") .scalafmt.conf project/scalafmt.sbt

Slide 32

Slide 32 text

build.sbt を良い感じにする 32 name := "akka-quickstart-scala" version := "0.1" scalaVersion := "2.13.3" 変更前 lazy val akkaVersion = "2.6.8" lazy val root = (project in file(".")) .settings( name := "akka-quickstart-scala", version := "0.1", scalaVersion := "2.13.3", // サンプルコードは、 2.13.1だけど最新にしよう libraryDependencies ++= Seq( "com.typesafe.akka" %% "akka-actor-typed" % akkaVersion, "com.typesafe.akka" %% "akka-slf4j" % akkaVersion, "ch.qos.logback" % "logback-classic" % "1.2.3" excludeAll ExclusionRule(organization = "org.slf4j"), "com.typesafe.akka" %% "akka-actor-testkit-typed" % akkaVersion % Test, "org.scalatest" %% "scalatest" % "3.1.0" % Test ) ) 変更後

Slide 33

Slide 33 text

GitHubに追加しちゃおう - 草も生えますし - .gitignoreを追加 - git init - git add . - git commit -am “first commit” - hub create - git push origin master - hub browse - https://github.com/yoshiyoshifujii/akka-quickstart-scala/commit/dc7e3964 63640ef0ce4ce4e6533df4740b8f6d51 33

Slide 34

Slide 34 text

ドキュメントを読みながら、まずは写経 34 https://developer.lightbend.com/guides/akka-quickstart-scala/define-actors.html

Slide 35

Slide 35 text

写経の様子をデモ DEMO 35

Slide 36

Slide 36 text

つづきを読みながら写経 36 https://developer.lightbend.com/guides/akka-quickstart-scala/define-actors.html

Slide 37

Slide 37 text

がんがん写経 37 https://developer.lightbend.com/guides/akka-quickstart-scala/define-actors.html

Slide 38

Slide 38 text

写経したコードを読みながら説明を読む - 写経するときは、意味とか理解しながら書いていない - 書いた内容について、Documentを読んで理解していく - 説明を読みつつ、自分で書いたコードを読む - 分からない説明のところは、コードを変更して試す - 補完の他の候補とか見る - 自分の実装とLibraryの境目を見つける - Libraryの実装内容を読む 38

Slide 39

Slide 39 text

Testを書く 39

Slide 40

Slide 40 text

Testを自ら書くのオススメ - Documentに書いてあるコードを正常に動かすTestを書くのオススメ - Testを書くことに慣れる - どうするとこのコードが動くのか分かる - Mainを書く場合、Guardian Actorを作るのが面倒 - Testだと、ActorTestKitがそのあたりさくっと解決してくれる - ActorsのTestingの章を先に読んでおくのも良いかも - https://doc.akka.io/docs/akka/current/typed/testing.html 40

Slide 41

Slide 41 text

まとめ - 1次ソースにあたった - DeepLを使えば英語Documentに時間をとられず進められた - 書くことで理解を深めた - Testを書くと、理解が深まった 41

Slide 42

Slide 42 text

求ム Chatwork株式会社ではScalaエンジニアを募集中です! 42 https://hrmos.co/pages/chatwork/jobs/1020001

Slide 43

Slide 43 text

働くをもっと楽しく、創造的に