昨今、マークダウン記法は開発者にとても馴染みの深い記法となっています。
私にとってもそれは同じで普段からメモをする際にはマークダウン記法を使うほどになっています。
‘#’を重ねて階層を表現したり文書構造が捉えやすくなるんですよね。あとパースしやすい。
みんな大好き(きっと)マークダウン記法なのですが、今日ほど憎らしいと思ったことはありませんでした。
というわけで行ってきました PHPerKaigi 二日目。
これで前夜祭から最終日までフルで参加した形になります。
ちなみに朝は六時起きです。
トークンハンターの朝は早い。
「身体が求めてしまうんですよね」
そう言ってふくらはぎのマッサージをはじめる。
「私の場合は足が武器ですから。筋肉痛との戦いです」
ハンターは1日平均2万歩は歩く、と言って笑った。— nrs (@nrslib) 2019年3月30日
一番の敵は筋肉痛です。
IRT (Interactive Round Table)
光栄なことに昨日運営の方から打診頂きまして、IRT を行いました。
実は打診されるまで IRT という言葉を知らなかったので、今回が初めてです。
でも大丈夫です。昨日、先人の IRT に参加して予習をしましたから!
何の IRT にしようかな、と考えてすっと出てきたのが次の二つです。
- DDD
- クリーンアーキテクチャ
ですのでこれらの相談会を二連続で行うことにいたしました
DDD 相談会
ドメイン駆動設計の相談会なんていう重い話を朝の 10:20 からやろうとしているのは正気の沙汰でないです。
きっと集まりも悪いだろうなぁ、と考えていたのですがふたを開けてみると次のツイートのとおりでした。
IRT、DDD相談会、大人気です! #phperkaigi pic.twitter.com/XmWri44jEJ
— PHPerKaigi 2019 @3/29-31 (@phperkaigi) 2019年3月31日
大人気は言い過ぎですが、11名も集まっていただけてうれしい限りです。
今回、IRT ということでざっくばらんに皆さんとお話しました。
話題としては「実際どのように実践していくか」というお話が多かったように思います。
個人でやる分には好きなだけ実践できるのですが、特に問題となるのがチームで実践したいときです。
どうやって浸透させていくか、というのはやはり興味があるようです。
残念ながら相手は人ですので一定のやり方では通用しないのが辛いところですね。
それでも自身の経験から「こんなやり方だとうまくいったよ」というお話はできたと思います。
具体的に概要をここに記述してみましょう。
そもそもドメイン駆動設計に限らず、プログラミングにおいてモデリングというのは重要な要素です。
常々思うのが、ドメイン駆動設計という言葉を知らなくてもそれらしきことを皆さんしているはずなのです。
ですので、最初はドメイン駆動設計という言葉については一切触れません。
リポジトリなどのメリットが分かりやすいものから導入し、コードの違いとメリットを体感してもらいます。
バグの数など分かりやすい指標があるとよいでしょう。
それを続けて、ある程度受け入れられた段階で、「ドメイン駆動設計って知ってる?」というお話をするのです。
そしてまずはマインドでなく簡単なパターンを解説します。
今は便利な記事があるもので、こちらを使うとよいでしょう。
ボトムアップドメイン駆動設計: https://nrslib.com/bottomup-ddd/
ボトムアップドメイン駆動設計後編: https://nrslib.com/bottomup-ddd-2/
そしてサンプルコードを示し、だんだんと使っていってもらうようにするのがよいかと考えています。
百聞は一見に如かず。メリットを体感していただくのが近道です。
もちろん、チームの全員が「ドメイン駆動設計をやろう」という意識をはじめから持てるならそれが最善です。
人は迷うことはあれど自身が進みたい方向に最終的に行き着くものです。
そのほかにもいろいろお話しましたけど、語りきるのは難しいですね。
実体験のお話やマインド関連のお話をした記憶があります。
DDD相談会、めっちゃいい話してる。マインドの部分自分も好きだな。 #phperkaigi #c pic.twitter.com/u0oFcYKK4i
— 青ごへいもち (@blue_goheimochi) 2019年3月31日
実は私は書籍「エリック・エヴァンスのドメイン駆動設計」ではマインド部分の方が好きなんですよね。
今回参加した方々はボトムアップドメイン駆動設計の内容をすでにご覧になった方が多く、マインド周りの話をメインにいたしました。
この話がしたいからこそボトムアップドメイン駆動設計の記事を書いたので、やっとここまでこれたな、なんて思ったりもしました。
クリーンアーキテクチャ相談会
さて、DDD 相談会が終わり、次の IRT です。
せっかく少し前に Laravel でクリーンアーキテクチャという記事を書きましたのでクリーンアーキテクチャについての IRT です。
QiitaLink: https://qiita.com/nrslib/items/eaf39be65b2ebe5ccf08#comment-b7e30febf3a63a5b2c4e
メンバーはなんと DDD 相談会に参加いただいた方たちのほとんどが続投で、更に数名立ち見でいらっしゃっていただけました。
DDD 相談会のときとは打って変わってこちらは実装の仕方について多くお話をしました。
そもそもクリーンアーキテクチャがどんなものかご存じない方もいらっしゃいましたので、まずは説明をすることに。
つまり「5分で説明!クリーンアーキテクチャ!」の開始です。
解説に使った図がこちら。
DDD相談会&クリーンアーキテクチャ相談会(@nrslib さん)めちゃめちゃ大盛況でまだまだ話が尽きないまま終了!同じような形のイベントやって欲しい…(やりたい)#phperkaigi #c pic.twitter.com/JwAveFzCKT
— 青ごへいもち (@blue_goheimochi) 2019年3月31日
喋りながら図を書いていくので説明を受けてる側は分かるのですが、後から見るとなにがなにやらですね。
そして具体的に実装のお話。
ツールを作って負担を軽減。
InputData / OutputData そしてそれ以外に View 用の DTO もあるため、プロパティの定義も多くなるので、ツールで一気に作れたりする手段を提供する。
トランザクションは UseCase の外側、具体的にはデコレータなどで AOT のようにして開始する。
UseCase から UseCase を呼び出すことは許可する。
などなどのお話をした記憶があります。
あとは MVC フレームワークと Presenter のインピーダンスミスマッチについてもお話しました。
ファミコンのコントローラはまさしくクリーンアーキテクチャの Controller です。
そう考えると Controller がレスポンスを返すのはおかしくないですか。
ユーザとしては画面 = Presenter がレスポンスを返してほしいはずです。
という内容ですね。
そんな感じでお話しているとあっという間に30分経ちお開きとなりました。
名残惜しいところではありますが、やらなくてはいけないことがあるのでお開きです。
五月辺りにクリーンアーキテクチャの考え方を実践したプロダクトのお話をする予定があるので、もしよければチェックしておいてください。
近いうちに告知をすると思います。
PHPerチャレンジ
さて、今回 PHPerKaigi でこのイベントに参加しました。
どういうイベントかについては前日の日記を確認いただけると分かると思います。
Link: PHPerKaigi2019でひたすらトークンを集めてました
今回、まかり間違って最初に一位を取ってしまい、そのままノリで頑張っていたら引くに引けないという気持ちになってしまい、結果として今日もずっとがんばっていました。
ウロウロ、ウロウロと会場を歩き回り、トークンを探すおじさん。
とてもお見苦しいところをお見せしたと思います。申し訳ありませんでした。
結果はどうだったかというと、トークン入力締め切られる直前のタイミングでこうなっていました。
最後の最後で追い抜かれてしまったんですよねぇ。
必死に PHPerKaigi のセッションスライドを見て回って入力をしたのですが、トークンとして登録されていないものばかりでどうしても追い抜けず。
悪あがきをしてみましたが当然ヤマカンがあたるはずもなく。
ずっとウロウロしてこのありさまは大分アレなんですが、これはもう結果を受け止めて、2位としての面白コメントを考えるフェーズに入っていました。
こんなトークン入れてみたり。
そんなわけでおとなしく悪あがきしながら結果発表を待っておりました。
クロージングが進んでいき、PHPerチャレンジのお話の段になり、スクリーンには仕込まれたトークン一覧が流れます。
なるほど見つけれなかったなぁ、というトークンが多く悔しい思いをしていました。
さぁ、いよいよ結果発表です。
座して2位発表を待ちます。
あー、楽しかったなぁ。頑張ったけど悔しいなぁ。
……。
……。
……え?
あれ?
え? え?
なぜか優勝になっていました。
どうやら何かがあったに違いない、とりあえず前に飛び出ていったのは記憶があります。
コメントもしたのですが2位としてのコメントしか考えてなかったので、アドリブを求められることになりました。
結果のコメントが次の三つです。
「マークダウンが憎く見える」
「アスタリスクを # と見間違いしてずっと入力してた」
「イベントにフルコミットすると皆に声かけられて友達たくさんできるよ!」
最後の一言はともかく前の二つはなんだこれ。
完全に頭がおかしくなっています。
で、なぜ優勝したかというとどうやら集計ロジックが意図通りに動いていなかったとのこと。
今回のイベントは 50 Pt 刻みになりうるのですが、ポイントがなんと二位の方と同点でした。
なるほど、それで二位と表示されていたんですね。
最後にスライドを漁りまくってひたすら # 始まりを入力してみたり、ヤマカン戦法で悪あがきしてみたり、とても恥ずかしいです。
そして極めつけは「#私の負けです」トークンです。
まったく予想ができませんでした。
二位の方は順位の変動の挙動に気づいて「バグがあるのでは?」と勘づいていたようです。すごい。もうこの方が一位でいいんじゃないかな。
というわけでウロウロウロウロお見苦しいところをお見せして、最後に悪あがきをした結果が晒されるというみっともない形になってしまいました。
それでもとても楽しかったです。
こんなにイベントにフルコミットしたのは初めてでした。
PHPerKaigi 来年も参加したいと強く思うイベントでした。
スタッフの皆さん、参加者の皆さん、本当にお疲れ様でした。
二連覇しちゃうと申し訳ないから来年はトークンは探しません!