エンジニア的なネタを毎週書くブログ

東京でWebサービスの開発をしています 【英語版やってみました】http://taichiw-e.hatenablog.com/

Gunma.web #30 「DDD」に参加してきました! #gunmaweb

Gunma.webさんの勉強会に参加してきました。
テーマはDDDでした。

何故参加したか → 「DDD」が良い「切り方」を教えてくれるんじゃないかと思って…

私は、正しく『切』られたコードは読みやすいコードであり、結果、修正しやすいコードである と考えています。
では、「正しく切る」とは? というのが問題なのですが、DDD=ドメイン駆動設計が、この問いに対する「先行研究」であり、ヒントを持っているのでは…と最近感じています。

このように感じるに至った大きなきっかけが、昨年、『現場で役立つシステム設計の原則』に出会ったことでした。
taichiw.hatenablog.com
今回、著者の増田さんがGunma.webさんで話されるということを聞きまして… 「高崎だったら時間かからないし、小旅行気分で行ってこよう!」と、お邪魔させてもらった次第です。

なお、「ポジペを用意してください」とあったので、自己紹介も兼ねて、何故自分がDDDに興味を持っているのかを振り返ってみました。

  • とんでもないク○コードの影響調査に怯えた日々
  • きれいに構造化されたコードの読みやすさに感動したこと
  • レイヤ構造のお手本としてエリック・エヴァンスがDDD本で低減しているレイヤ化アーキテクチャを参照したこと
  • その難解なDDD本をわかりやすく解説している本に出会ったこと

が自分の中ではきっかけになっていたようです。

何を得られたか

増田さんの基調講演より → 「やらなきゃ!」がたくさん

今日でDDDの真髄を見極めた! …となるわけはなく(当然)、「できてない!やらなくちゃ!」がたくさん見つかった場でした。

ドメインが理解できているか?は「言葉がしっくり来るか」で確認できる → やばい、チーム内でしっくりしていない言葉がある!

小さな子供が言葉を覚えていく過程のように、
 試しに単語を使って話してみる → なんか違う → また試してみる → 話が通じた!
というトライアンドエラーを繰り返すことで、ドメインの知識がついていく、という話がありました。

この話を聞いて、「ああ、開発チーム内でもうまく統一できてなかった用語がいくつかあったな… なんとかしないとな…」ということを思い出しました。

DDD本読まなきゃ…!

エヴァンスさんの本は

  • 難しい
    • 訳のせいなのか原文が複雑なのか、表現が難解でなかなか頭に入ってこない
    • 実際の設計の問題だと思って、自分の手で図でも書きながら出ないと、なかなか何を言っているのかわからない
  • 長い
    • サラッと読める分量ではない

…と、なかなか辛いのですが、やはり、DDDの根本の考え方を理解する上で大事な、そして良いことが書いてある本なんだと思います。 …多分。
今回の発表では、増田さんの私見も交えながら、各部・章の要点をご説明頂きました。
その話を聞きながら、特に3章、6章、7章あたりを読まないとやべーな… と 危機感を抱いたようで… 勉強会後に読んでみました。

結果
3章 …からリンクされていた14章
→ 今週、自分が話題にしていたような、「検索と買い物かごに乗ってる商品って同じなの?別物なの?」のヒントが書いてあった!
 (しかも1-2ヶ月前にも同じ理由で読んでいる)

6章
→ 昨日自分が話題にしていた、「どこまでが(DBにアクセスする)リポジトリの責務なんだろう…」 のヒントが書いてあった!

…やっぱり、「ちゃんと読む」と良いことたくさん書いてあるなぁ、この本。ちゃんと読むのが大変なんですが…。

質問ができた!

今日も話しに出たのですが、
開発者は開発を通して徐々にドメインナレッジがついてくるので、クラスやメソッドの切り方、設計方針を見直したくなる、見直すべき時が開発中に来る。
という話。
これに対し、以前から一つの疑問を持っていました。

「メソッドの入出力をテストするようなユニットテストを書いていると、このような、クラス設計を見直すようなリファクタリングの邪魔になるのでは?」

こちらの質問をさせてもらった所、
- 静的型付け言語の場合、メソッドごとのテストは不要だと思っている
- ユニットテストの「ユニット」≠メソッド
- 処理の単位で書く (ケント・ベックのTDD本のMoneyクラスのイメージ
とのこと。

この、メソッドに対してテストを書くのか、それとも意味のある振る舞いに対してテストを書くのか という所、
昨年チームの中でも話題になったのですよね…。

これも勉強しなきゃだなぁ。

後悔:本当に興味のある話題に持っていけなかった → LT用意していれば…

冒頭、「正しく切る」と書きましたが、特にいま興味があるのが、プロダクト全体を複数のシステムに分割した時に(所謂Microservice的な)、どこで切るのが良いのか ということについてです。
ずっとここ最近もがいている点であり、実際の日々の業務の中でも行ったり来たりしているところなので是非他の方の意見を聞いてみたい… と思っているのですが

他方、うまく人に伝えられるほど自分の中でいまいちまとまっていなく。

今回Gunma.webさんはLTを絶賛募集していたのでそこに用意できればよかったのですが、結局間に合わず。

せっかくチャンスだったのにうまく物にできず、もったいなかったな、と思います。

次のチャンスに向けて準備しておかないと…! これも「やるべきこと」。

Gunma.webさんの雰囲気

順番前後しますが、今回お邪魔させていただいたGunma.webさんについて。
cafe あすなろさんでの開催で、おっしゃれーな雰囲気!


f:id:taichiw:20180121014034j:plain

f:id:taichiw:20180121014459j:plain

しかもコーヒーまでいただけました。

f:id:taichiw:20180121014508j:plain

また、LTが中心のイベントだったのですが、LT終了後、会場その場で一時間弱の懇親会(飲食なし)というのも斬新でした。今聞いたLTを中心に語らえるの、良いですね。

本日は大変ありがとうございました。また機会がありましたらお邪魔したいです!

おまけ 本日のメモ

f:id:taichiw:20180121015138j:plain
f:id:taichiw:20180121015154j:plain