akkaのハンズオントレーニングを用意しました。全5モジュールあり、アクター、イベント・ソーシング、CQRS、クラスタリングを手を動かしながら学べます。
- 第1回: リレーショナル・データベースのトランザクションによる排他制御
- 第2回: アクターによる非同期処理
- 第3回: アクターとデータベースのシステム(イベント・ソーシング)
- 第4回: アクターとデータベースのシステム(CQRS)
- 第5回: クラスタリング
このトレーニングのサンプルコードはJavaで書かれており、Scalaのサンプルコードは用意していません。Scala版も用意したかったのですが、Java版のコードしか書く時間がありませんでした…もしScalaのサンプルコードをご自身で書いてみたい方は、私リチャードが喜んで手伝います。TwitterのDMで連絡をください。私のDMは全てのツイッターユーザーに開放しています。
トレーニングは手を動かすものなので、聞いたことがある程度にはakkaを知っている人が対象です。その前にakka自体を知らない、という方はCodeZineで私が連載している記事があるのでごらんください。
トレーニングを準備した背景
このトレーニングを用意した意図は、長くakkaを触り続けている私自身が、akkaの公式ドキュメントを独力で読み解いて、akkaを用いたアプリケーションを走らせるのはハードルが高いと、いつも感じていたからです。akkaの非同期処理、クラスタリングによる水平スケール、CQRSパターンの採用など技術的な面白さやメリットは理解してもらいやすいと思いますが、いざ自分で動かそうとしても、akkaに関してはその一歩を踏み出すハードルが高くないか?という懸念をいつも持っていました。akka公式ドキュメントは情報量が豊富で、ほとんどの機能についてもれなく、詳しく書かれているものの、初心者が一番最初に読んでわかりやすい文章ではなさそうだと私は感じています。(ただし、公式ドキュメントのIntroduction to the Exampleの部分は初心者にもわかりやすいと思います。)
そこで、このハンズオントレーニングは、仮にakkaを本番環境で導入出来る技術レベルが10だとすれば、あなたをレベル1や2に素早く連れていくために用意しました。そこまで到達できれば、あとはakkaの技術レベルを独力で上げていくことは容易になるでしょう。
トレーニングの内容
トレーニングではアクターの新APIであるakka-actor-typedを使ってサンプルコードを実装しています。akkaを触ったことがあるという方でも、akka-actor-typedを試した人はまだ珍しいでしょう。akkaは2019年12月にバージョン2.6がリリースされ、ついにakka-actor-typedがデフォルトのアクターAPIとなりました。
こちらの動画で解説されているようにakka-actor-typedの新APIは下記2つのアンチパターンを、そもそも利用不可能にして陥ることがないようにしてくれます。これらのアンチパターンはバージョン2.5以前のakkaでは初心者ほど陥りやすく、またある程度の経験者でも避けるためには相当な注意深さが必要でした。akka-actor-typedを利用することで、初心者でも確実にアンチパターンを避けられます。
- メッセージがアクター間の「闇」に消える(deadLetters)
- アクター内での危険な非同期処理
Akka Anti-Patterns, Goodbye: Six Features of Akka 2.6 - Lightbend Blog
(動画では残り4つのアンチパターンも合わせて解説されていますが、それらはakka-actor-typed以外の機能で塞がれた穴です。)
一方、多くのプログラマにとってakka-actor-typedのAPIは、旧APIに比べわかりづらいと感じてしまうのではないでしょうか?アクター間で送るメッセージに明示的な型の指定が必要になり、さらにBehaviorという見慣れない概念が出現するため、とっつきにくい印象を持たれがちだと思います。とくに旧アクターのAPIに慣れていればいるほど、この新APIを難しいと感じるでしょう。
しかし、私はこの新APIが実際には難しいものではなく、シーケンス図や状態遷移図を先に描いて「ソースコードを書く前に設計を行う」ことで、容易に設計したものをソースコードに落とし込めると気づきました。言い換えれば、いきなりソースコードを書き始めづらいAPIになっていて、「前倒しでしっかり設計をする」「設計した情報を型で表現する」という手順を踏むことを推奨しているAPIと考えられます。ここは私の個人的な感覚になってしまいますが、これを読んでいる方にも、手順に従えばakka-actor-typedは扱いやすいと感じてもらうため シーケンス図や状態遷移図など、図で設計情報を提示する ソースコードのサンプルは最小限にすることで、設計とソースコードの対応を理解しやすくする という2点に注意してトレーニングの内容を作成しています。
全5モジュールの中でアクターを中心に、イベント・ソーシング、CQRS、クラスタリングといった機能についてのトレーニングなので、ストリームやHTTPはトレーニングの範疇外です。(HTTPはサンプルコード内で利用していますが、解説はしていません。)
さいごに
実はこのトレーニングは去年の年末ごろから構想していて、今年の1月から本格的に準備を始めたのですが、途中コロナウイルス拡大防止の流れをうけ、「リモートでも学びやすい、つまり独力でも学びやすい形式」として大幅に作り変えたものです。ただし、独力でも学びやすいと言ってもトレーナーが居るほうがより効果的に学ぶことができますので、私リチャードに声をかけていただければ、解説のためのビデオ会議セッションを設けます。ツイッターのDMでご連絡ください。またこのトレーニングを見た、あるいは取り組んでみた感想を #akka #handsonといったハッシュタグと共にツイートしていただければ喜んで見に行きます!
各モジュールはコマンドを走らせて動作確認するだけなら、1モジュールあたり30分かからずに終えることも可能なほどシンプルで最小限の内容です。先ほど紹介したように「レベル1や2に素早く到達して、あとは独力でakkaの面白さを探求できる」状態に達していただければと思います。このトレーニングを利用して、そしてぜひ私をビデオ会議で呼び出して、akkaを動かす楽しさを味わっていただければと思います。
それでは、Happy hakking!