WEBフロントエンドにおけるソフトウェア設計の考察 / Consideration of software design in WEB front end

B8403d102456248570005ee7fb2ba0f7?s=47 philomagi
February 16, 2020

WEBフロントエンドにおけるソフトウェア設計の考察 / Consideration of software design in WEB front end

概要
・現代Webフロントエンドにおける難しさは何によってもたらされるのか
・Webフロントエンドと「ドメイン」の関係について
・Webフロントエンドを「設計」することについて
・Webフロントエンドにおけるアーキテクチャ考察

参考資料(スライドにも記載)
・エリック・エヴァンスのドメイン駆動設計
 ・Eric Evans(著)今関 剛(監訳)和智 右桂、牧野祐子(訳)
・Clean Architecture 達人に学ぶソフトウェアの構造と設計
 ・Robert C. Martin(著)角 征典、高木 正弘(訳)
・未来を作った人々 - ゼロックス・パロアルト研究所とコンピュータエイジの黎明
 ・Michael Hiltzik(著)エ・ビスコム・テック・ラボ(監訳)鴨沢眞夫(訳)
・オブジェクト指向のハードコア
 ・https://www.zerobase.jp/salon/2019/05/25/hardcore-oo.html
 ・(2) 哲学
 ・(3) Smalltalk by @sumim
 ・(8) GUI by 上野学(@manabuueno)
・クライアントアプリの「中心」とは何か
 ・by @takasek
 ・https://speakerdeck.com/takasek/20200121-the-center-of-the-client-number-ios-ca
・複雑なJavaScriptアプリケーションに立ち向かうためのアーキテクチャ
 ・by しんぺい(@shinpei0213)
 ・https://speakerdeck.com/shinpeim/fu-za-najavascriptapurikesiyonnili-tixiang-kautamefalseakitekutiya
 ・http://techblog.reraku.co.jp/entry/2017/08/08/184313
・Almin.js | JavaScriptアーキテクチャ
 ・by azu(@azu_re)
 ・https://azu.github.io/slide/2016/child_process_sushi/almin-javascript-architecture.html
・CQRS+ES(再)入門
 ・by かとじゅん(@j5ik2o)
 ・https://speakerdeck.com/j5ik2o/cqrs-plus-es-zai-ru-men
・Facebook の決断:MVCはスケールしない。ならば Flux だ。
 ・https://www.infoq.com/jp/news/2014/05/facebook-mvc-flux/
・Vue.js + デザインパターンによるコンポーネント実装
 ・by @philomagi
 ・https://speakerdeck.com/tooppoo/vue-dot-js-dezainpatan-niyorukonponentoshi-zhuang-v2
 ・https://github.com/tooppoo/sample-for-vue-with-design-patterns
・モデルとは何であって、何でないのか
 ・by 末並 晃(@a_suenami)
 ・https://speakerdeck.com/a_suenami/moderutohahe-deatute-he-denaifalseka-number-kichijojipm
 ・https://a-suenami.hatenablog.com/entry/2019/08/05/084814
・atomic design
 ・by brad frost
 ・https://bradfrost.com/blog/post/atomic-web-design/
・Atomic Design 〜 堅牢で使いやすいUIを効率よく設計する
 ・五藤 佑典
・MVCとはなにか
 ・by 天重 誠二(@tenjuu99)
 ・https://speakerdeck.com/tenjuu99/what-mvc-is
 ・https://note.com/tenjuu99/n/n0232ccd1089d
 ・https://note.com/tenjuu99/n/nbbb4b273676d
・The Model-View-Controller (MVC)Its Past and Present
 ・Trygve Reenskaug
 ・http://folk.uio.no/trygver/2003/javazone-jaoo/MVC_pattern.pdf

B8403d102456248570005ee7fb2ba0f7?s=128

philomagi

February 16, 2020
Tweet

Transcript

  1. WEBフロントエンドにおける ソフトウェア設計の考察 1 @Philomagi 2020/02/16@Object-Oriented Conference #ooc_2020 #ooc_c

  2. 発表者 @Philomagi • 主にフロントエンド主体のWEB系エンジニア • ScalaとTypescriptとRubyが好き ◦ Rubyは最近、公私共に若干疎遠 • PHPは中々縁が切れない悪友

    ◦ 最近は、「然程悪いやつでもないな」と思い始めてる 2
  3. 注 以降、特に断りが無い場合は 「フロントエンド = Webフロントエンド」 の意味で使います 3

  4. 注 • 今の主な関心事がWebフロントエンド • 他のフロントアプリ事情に詳しくない ◦ iOS/Android/デスクトップとか という理由です 4

  5. 目次 1. 現代フロントエンドの難しさ 2. フロントエンドと「ドメイン」 3. フロントエンドを「設計」する 4. フロントエンドアーキテクチャ考察 5

  6. 主張したいこと • 現代のフロントエンドは単に「画面表示」と言えるほ ど単純ではない • 「ロジック」も「ドメイン」も、フロントエンドには存在す る • 「画面設計」だけでなく「ソフトウェア設計」も、フロン トエンドには必要

    6
  7. 含まれる批判 ❌ フロントエンドは表示して終わり ❌ 表示だけなので、「ドメイン」も「ロジック」も存在しな い ❌ フロントエンドの「設計」と言えば「画面設計」(で終 わる議論) 7

  8. 1. 現代フロントエンドの難しさ 8

  9. フロントエンドといえば 9

  10. 開発環境の多様化・複雑化 10

  11. 開発環境の多様化・複雑化 11 本質的な問題ではない

  12. 開発環境の多様化・複雑化 12 道具選びが大変なのは事実

  13. 開発環境の多様化・複雑化 13 しかし フロントエンドの難しさ = 道具選び ではない

  14. フロントエンドを 複雑にするもの 14

  15. ユーザー操作の複雑化 • よりリッチ/インタラクティブなUI • 操作のバリエーション増加 • 入力バリデーションの組み合わせ 画面に対する操作が複雑になっている 15

  16. 画面状態の複雑化 16 • 状態毎に複雑に切り替わる表示内容 • 複数状態の組み合わせによる表示変化 • 操作に応じて動的に切り替わる画面表示 画面の表示状態が複雑になっている

  17. 現代フロントエンドの複雑さ 17 • 複雑なユーザー操作 • 複雑な画面状態

  18. 現代フロントエンドの難しさ 18 • 複雑なユーザー操作 • 複雑な画面状態 この2点を如何に捉え管理するか

  19. 2. フロントエンドと「ドメイン」 19

  20. 「ドメイン」とは何か 20 すべてのソフトウェアプログラムは、それを使用する ユーザの何らかの活動や関心と関係がある。ユーザ がプログラムを適用するこの対象領域が、ソフトウェア のドメインである。 -「エリック・エヴァンスのドメイン駆動設計」p.2

  21. 「ドメイン」の例 例えばECサイトなら • 商品を購入すること • (ユーザーは)欲しい商品に到達すること • (運営は)売りたい商品に到達させること あたりが、ドメインの一部として考えられそう 21

  22. 「フロントエンドにドメインは無い」か? 22

  23. 「フロントエンドにドメインは無い」か? • フロントエンドの責務 = 画面の表示 • いわゆる「業務ロジック」「ビジネスロジック」は、 バックエンドで処理されるのが一般 → 「フロントは結局表示しかしないのだから、「ドメイ

    ン」は無い」という言説 23
  24. 再掲)「ドメイン」の例 例えばECサイトなら • 商品を購入すること • (ユーザーは)欲しい商品に到達すること • (運営は)売りたい商品に到達させること あたりが、ドメインの一部として考えられそう 24

  25. 再掲)「ドメイン」の例 例えばECサイトなら • 商品を購入すること • (ユーザーは)欲しい商品に到達すること • (運営は)売りたい商品に到達させること あたりが、ドメインの一部として考えられそう 25

    決済したり在庫を減らしたりとか の計算、結局バックエンドで全部 やるよね
  26. 再掲)「ドメイン」の例 例えばECサイトなら • 商品を購入すること • (ユーザーは)欲しい商品に到達すること • (運営は)売りたい商品に到達させること あたりが、ドメインの一部として考えられそう 26

    商品管理とかおすすめ商品の選 出とかも、結局データを出すのは バックエンドだよね
  27. 「フロントエンドにドメインは無い」 • 「フロントエンドって、詰まるところはサーバーが計算してくれた内容 を綺麗に表示するだけだよね」 • 「業務ロジックとかビジネスロジックとか、そういうロジックは全部バッ クエンドに集められて、フロントエンドには残らないよね」 • 「じゃあ、フロントエンドにドメインなんてものは無いよね」 •

    「じゃあ、フロントエンドって、結局表示して終わりだよね」 27
  28. 「フロントエンドにドメインは無い」 • 「フロントエンドって、詰まるところはサーバーが計算してくれた内容 を綺麗に表示するだけだよね」 • 「業務ロジックとかビジネスロジックとか、そういうロジックは全部バッ クエンドに集められて、フロントエンドには残らないよね」 • 「じゃあ、フロントエンドにドメインなんてものは無いよね」 •

    「じゃあ、フロントエンドって、結局表示して終わりだよね」 28
  29. フロントエンドとドメインの 関係を考える 29

  30. 再掲)「ドメイン」とは何か 30 すべてのソフトウェアプログラムは、それを使用する ユーザの何らかの活動や関心と関係がある。ユーザ がプログラムを適用するこの対象領域が、ソフトウェア のドメインである。 -「エリック・エヴァンスのドメイン駆動設計」p.2

  31. 再掲)「ドメイン」とは何か 31 すべてのソフトウェアプログラムは、それを使用する ユーザの何らかの活動や関心と関係がある。ユーザ がプログラムを適用するこの対象領域が、ソフトウェア のドメインである。 -「エリック・エヴァンスのドメイン駆動設計」p.2

  32. ソフトウェアと「ドメイン」 • 「ドメイン」=「ユーザの何らかの活動や関心」 • フロントエンドもまたソフトウェアである以上、「何らか の活動や関心」に関わるはず ◦ 「ドメインが無い = それらに一切関わらない」なら、それは総

    容量0KB、何一つ処理をしないソフトウェアのはず 32
  33. 再掲)「ドメイン」の例 例えばECサイトなら • 商品を購入すること • (ユーザーは)欲しい商品に到達すること • (運営は)売りたい商品に到達させること あたりが、ドメインの一部として考えられそう 33

  34. 再掲)「ドメイン」の例 例えばECサイトなら • 商品を購入すること • (ユーザーは)欲しい商品に到達すること • (運営は)売りたい商品に到達させること あたりが、ドメインの一部として考えられそう 34

    購入する商品の選択や、実際に 「購入する」という操作は、誰が提 供するのか?
  35. 例えばECサイトなら • 商品を購入すること • (ユーザーは)欲しい商品に到達すること • (運営は)売りたい商品に到達させること あたりが、ドメインの一部として考えられそう 再掲)「ドメイン」の例 35

    ユーザーが欲しい商品を見つける、 目の当たりにする方法を、誰が提供 するのか?
  36. 「ドメイン」を誰が解決するのか ドメインの解決は 1つ以上のソフトウェア によって達成される 36

  37. 「ドメイン」を誰が解決するのか • バックエンドは計算とデータの整合性を 達成する • フロントエンドはユーザへの表示と、 ユーザ操作による状態遷移を達成する 37

  38. フロントエンドと「ドメイン」の関係 38 フロントエンドは 表示・操作・状態の観点から ドメインを解決する

  39. バックエンドとフロントエンドの違い 39 • バックエンドは整合性という観点からドメイン の解決に取り組む • フロントエンドは表示/操作という観点からド メインの解決に取り組む

  40. バックエンドとフロントの違い 40 両者の違いはドメインそのものというより ドメインの解決にどう取り組むか どの観点からどんな関心を持つか

  41. 41 いつものカット・アンド・ペーストをやったとき、(中略)ピー ター・ドイッチュが立ち上がってスクリーンを指さしていた。 「今やったのは、やったんじゃないかと俺が思ってること か?」 「未来をつくった人々」 - Chapter15, p.323 注:「ポップアップメニュー」の先駆けが初めてデモされた時のエピソード。

    BitBltという技術の開発 により、オーバーラッピングウィンドウが実用化されたことに依る。
  42. フロントエンドの関心事 42 ユーザーが「した」と思ったことを 画面に表すこと

  43. フロントエンドの関心事 43 操作(「した」) 表示(画面に表す)

  44. 3. フロントエンドを「設計」する 44

  45. フロントエンドの何を「設計」するのか 45 2種類の「設計」対象が存在する • 画面 ◦ ex. UIデザイン、UIパーツ設計 • ソフトウェア

    ◦ ex. モジュール設計, 依存設計
  46. フロントエンド「設計」への問題提起 46 画面の「設計」ばかりが語られていないか? • 画面の「設計」は重要 • しかしそれだけで完結はしない(はず) • 画面の奥にあるソフトウェアをいかに組み立 てるかの議論が不足していないか?

  47. Atomic Design 47

  48. 48

  49. 49 Atomic Design Atomic Designは、どんな単位でUIをコンポーネント化すればよいかを示してくれると てもシンプルなフレームワークです。 (中略) Brad Frost氏は、従来の画面ごとにUIデザインを作っていくという考え方ではなく、コ ンポーネントのしくみを設計することがWebをデザイン(設計)することだと考えていま

    す。 「Atomic Design 堅牢で使いやすいUIを効率良く設計する」 3-1. Atomic Designとは 注:Brad FrostはAtomic Designの考案者
  50. 50 Atomic Design Atomic Designは、どんな単位でUIをコンポーネント化すればよいかを示してくれると てもシンプルなフレームワークです。 (中略) Brad Frost氏は、従来の画面ごとにUIデザインを作っていくという考え方ではなく、コ ンポーネントのしくみを設計することがWebをデザイン(設計)することだと考えていま

    す。 「Atomic Design 堅牢で使いやすいUIを効率良く設計する」 3-1. Atomic Designとは 注:Brad FrostはAtomic Designの考案者
  51. Atomic Designと「設計」 51 • Atomic Design はUIパーツの設計方法論 ◦ Atomic Design

    のスコープは「UIパーツをど う組み立てるか」まで ◦ ソフトウェアの設計までカバーするものでは ない ◦ Atomic Design で「設計」は完結しない
  52. 今回の発表が扱う「設計」 52 「画面設計」ではなく、 「ソフトウェア設計」に焦点をあてる

  53. どうやって設計するのか? 53 フロントエンドソフトウェアを、どうやって設計するか?

  54. どうやって設計するのか? 54 フロントエンドソフトウェアを、どうやって設計するか? Atomic Design のような、 フロントエンドソフトウェア設計の 新たな方法が必要だ!

  55. どうやって設計するのか? 55 フロントエンドソフトウェアを、どうやって設計するか? Atomic Design のような、 フロントエンドソフトウェア設計の 新たな方法が必要だ!

  56. どうやって設計するのか? 56 フロントエンドソフトウェアを、どうやって設計するか? Atomic Design のような、 フロントエンドソフトウェア設計の 新たな方法が必要だ! (そうした方法を考えても良いけれど) 有力な方法論が

    既に存在している
  57. オブジェクト指向 57

  58. 再掲)フロントエンドの関心事 58 操作(「した」) 表示(画面に表す)

  59. オブジェクト指向をどのように用いるか? フロントエンドの関心事である 操作・表示に注目する 59

  60. オブジェクト指向をどのように用いるか? フロントエンドの関心事である 操作・表示に注目する 60 ↓ 操作・表示に関わる要素を オブジェクトとして抽出する

  61. サンプル 61

  62. 62 https://github.com/tooppoo/sample-for-vue-with-design-patterns http://localhost:8080/strategy-pattern

  63. 63 表示

  64. 64 操作

  65. 65 (操作される)状態

  66. オブジェクト指向をどのように用いるか? • 基本は他のソフトウェアと変わらない ◦ 必要なオブジェクトを分析し ◦ オブジェクト間の関連を組み立てて ◦ オブジェクトの振る舞いを実装する •

    一般に用いられる設計手法も活用する 66
  67. 要するに 「ちゃんと設計しよう」 って言ってるだけじゃない? 67

  68. YES 68

  69. YES(?) 69

  70. 「ちゃんと」って? 「設計」って? 70

  71. 再掲)フロントエンド「設計」への問題提起 71 画面の「設計」ばかりが語られていないか? • 画面の「設計」は重要だが、それだけで完結 はしない(はず) • 画面の奥にあるソフトウェアをいかに組み立 てるかの議論が不足していないか?

  72. ここでの「ちゃんと設計」すること 72 • 画面だけでなく、画面の奥のソフトウェアに対し ても設計を行う • 必要なら、画面と設計、それぞれに適切な方法 論を用いる ◦ 例)

    画面ではAtomic Designを、ソフトウェアではオブ ジェクト指向を用いる
  73. 注意点 • 関心の中心が表示と操作であること • バックエンドだと「UI層の話」として、あまり気にしな い部分が中心 • バックエンドの感覚のままで考えると、オブジェクト や関連を見落としやすいと思う 73

  74. 74 補足)フロントエンドと「ロジック」 • ここで言う「ロジック」とは何か? • 「ロジック」=ビジネスルール・業務ルールとは限らない ◦ 「ロジック」といえばビジネスルール・業務ルールというのは、主にバックエンドというコンテクスト における表現 ◦

    この意味での「ロジック」ならば、フロントエンドには無い(むしろ、有ってはいけない) • フロントエンドにおける「ロジック」は、表示と操作のルール ◦ そもそもフロントエンドとバックエンドでコンテクストが異なるのだから、「ロジック」が同じ意味で あるという保証は無い ◦ むしろ、それぞれコンテクストが違うのだから、扱う「ロジック」は異なって当然 ◦ フロントエンドでは、この意味でのロジックを対象に抽象化を行う
  75. 4. フロントエンドアーキテクチャ考察 75

  76. フロントエンドアーキテクチャの候補 76 • フロントエンドソフトウェアの設計 ◦ オブジェクト指向が有力そう • フロントエンドソフトウェアのアーキテクチャ ◦ ???

  77. Fluxアーキテクチャ 77 https://www.infoq.com/jp/news/2014/05/facebook-mvc-flux/

  78. Fluxアーキテクチャ 78 https://www.infoq.com/jp/news/2014/05/facebook-mvc-flux/

  79. Fluxアーキテクチャへの見解 • Fluxは強力だが、Fluxだけでアーキテクチャを完結させるのは厳しい • 単方向データフローは有用だが、データフローを動作させるモジュールの 構造については何も提供しない ◦ 巨大な泥団子、単なる巨大グローバル変数になりがち • 何か他のアーキテクチャ論と組み合わせて使うことになると思う

    • フロントエンドにおけるCQRS(+ES)という見方は有力かも ◦ cf. Almin.js | JavaScriptアーキテクチャ ◦ 今回は深堀りしない(あまり知見を持っていないため) 79
  80. Fluxアーキテクチャへの見解 • Fluxは強力だが、Fluxだけでアーキテクチャを完結させるのは厳しい • 単方向データフローは有用だが、データフローを動作させるモジュールの 構造については何も提供しない ◦ 巨大な泥団子、単なる巨大グローバル変数になりがち • 何か他のアーキテクチャ論と組み合わせて使うことになると思う

    • フロントエンドにおけるCQRS(+ES)という見方は有力かも ◦ cf. Almin.js | JavaScriptアーキテクチャ ◦ CQRS(+ES)の知見が薄いので、今回は深堀りしない 80
  81. 有力だと考えているのが 81

  82. 82 Clean Architecture (Kindle位置No.3141)

  83. フロントエンドで クリーンアーキテクチャ(CA)? 83

  84. 84 Clean Architecture (Kindle位置No.3141)

  85. こんな薄い層でできるの? 外周でやって意味有るの? 85

  86. 86 フロントにおけるCAの意義 クリーンアーキテクチャの四重円は単なる例。 図22-1の円は、概要を示したものである。したがって、この4つ以外に も必要なものはあるだろう。この4つ以外は認めないというルールは ない。ただし、依存性のルールは常に適用される。ソースコードの依 存性は常に内側に向けるべきだ。 Clean Architecture (Kindle

    位置No.3188)
  87. 87 フロントにおけるCAの意義 クリーンアーキテクチャの四重円は単なる例。 図22-1の円は、概要を示したものである。したがって、この4つ以外に も必要なものはあるだろう。この4つ以外は認めないというルールは ない。ただし、依存性のルールは常に適用される。ソースコードの依 存性は常に内側に向けるべきだ。 Clean Architecture (Kindle

    位置No.3188)
  88. 88 フロントにおけるCAの意義 重要なのは同心円ではなく 依存性のルール

  89. 89 フロントにおけるCAの意義 重要なのは同心円ではなく 依存性のルール ↓ この「4重の同心円」という 形を守る必要は無い

  90. それならば 90

  91. 注: ここからオレオレな クリーンアーキテクチャ論 91

  92. 92 UI層 View Controller State State Action

  93. 93 UI層 View Controller State State Action UI層の中で、さらに依存 関係の階層を作る

  94. 94 UI層 View Controller State State Action UI層の同心円内で依存 性のルールを守り

  95. 95 UI層 View Controller State State Action UI層とその内部の層で も依存性のルールを守 る

  96. 96 そんなのアリ?

  97. 97 Clean Architecture (Kindle位置No.3141)

  98. 98 Clean Architecture (Kindle位置No.3141) この同心円の図も、システムの ほんの一面的な表現でしかない

  99. Clean Architecture (Kindle位置No.3141) 99

  100. Clean Architecture (Kindle位置No.3141) 100 デバイス・DB・ウェブ・UIが外周に在るのは、 それらに積極的に関心を持たない立場から システムを見ているから ↓ 「外周のものは重視せず、中央のものを重視する」とい う表明に過ぎない。

    内外の関係は、この一通りではない。
  101. Clean Architecture (Kindle位置No.3141) 101 DBの内部にはDBから見た デバイスの内部にはデバイスから見た UIの内部にはUIから見た 内側(コア)と外側(周辺)が それぞれ有ると考えたほうが自然

  102. こんな薄い層でできるの? 外周でやって意味有るの? 102

  103. こんな薄い層でできるの? 外周でやって意味有るの? 103 薄い層なのは単なる図の問題 同心円の図は、システムの一部を切り出し たモデルでしかない

  104. こんな薄い層でできるの? 外周でやって意味有るの? 104 UIが外周にあるのは、UI以外のものに焦点 を当てたから 内-外のどこに位置するかは所与ではない UIに焦点を当てれば、UIが内になる

  105. 105

  106. 106 同心円は入れ子状の構造になる

  107. 107 クリーンアーキテクチャの フラクタル構造

  108. 108 サンプルに当てはめると?

  109. 109

  110. 110 UI層 View Controller State State Action

  111. 111 View

  112. 112 View Controller Controller

  113. 113 View Controller Controller Model State

  114. 114 サンプルで試した感触 • フロントエンドでも、クリーンアーキテクチャによる階層の整 理は有用そうだった ◦ 中心の関心事(状態・操作)と周辺の関心事(html/css、DIやバインディング)を分け て思考・実装できる ◦ サンプルはVue.jsで実装したが、React、あるいはjQueryにも(バインディングを頑張っ

    て書けば)移植できそう!?→フレームワーク非依存 • 「中心の関心事と周辺の関心事を分けて思考・実装できる」 ことが大きい
  115. 115 参考)iOSアプリのクリーンアーキテクチャ @takasekさんによる発表資料 • クリーンアーキテクチャの同心円を、山に例 えて説明。最終的に山は 連峰へ • WebフロントエンドとiOSアプリの違いは有る が、主張の内容としては近い?

    • 「単純化された創界山に引きずられず、思考 停止せずに丁寧に設計していきましょう」 - p.41
  116. まとめ 116

  117. 現代フロントエンドの難しさ 117 • 現代のUIはよりリッチ/インタラクティブな動作が求 められている • それに伴い「操作」と「表示」が複雑化している • 現代フロントエンドの難しさは、この2点をいかに管 理するか

  118. フロントエンドとドメイン 118 • UIを提供するシステムのドメインが、フロントエンド のドメイン • フロントエンドは、「操作」と「状態」を主な関心事とし てドメインの課題を解決する • ユーザーが「した」と思ったことを現実にする

  119. フロントエンドと「設計」 119 • フロントエンドには「画面」と「ソフトウェア」、2つの 「設計」対象が有る • どちらか一方では不十分だが、画面の「設計」に議 論が偏っていないか • フロントエンドでも、やはりオブジェクト指向の方法

    論は有力
  120. フロントエンドとアーキテクチャ 120 • Fluxは有力だが、単体ではソフトウェア全体の構造 を規定できない • フロントエンドでも、クリーンアーキテクチャの方法 論は有力 • フロントエンドは、UI層の中で新たな同心円を形作

    ることになる
  121. 展望あるいは予想 121

  122. 展望あるいは予想 122 • 「ユーザーイリュージョン」への接続 ◦ フロントの関心 =「ユーザーが『した』と思ったことを現実にする」という整理は、「ユーザーイ リュージョン」という視点へつながりそう?( cf. 「MVCとは何か」)。

    ◦ 実装パターンではなく、パタン・ランゲージとしての MVCとの接続?(cf. The Model-View-Controller (MVC)Its Past and Present) ▪ 「ユーザーが『した』と思ったことを現実にする」は「ユーザーのメンタルモデルを実装す る」につながるか? ▪ 操作と表示を改めて Viewから隔離することで、 Viewの「民主化」は成るか? • オブジェクト指向ユーザーインターフェース(OOUI)との関連 ◦ 「フロントエンドソフトウェアの設計」と相性が良いように感じた。 ◦ むしろ、今回の議論の行き着くところは OOUIなのかもしれない。
  123. 展望あるいは予想 123 • フロントエンドDDDの検証 ◦ フロントエンドはサーバーとは別の形でドメインと関わる。 ◦ それならば、フロントエンドでの DDDも理論上可能なはず。 ▪

    一方で、フロントエンドのドメインとの関連の仕方はことなる以上、フロントエンドにおける 「ドメインモデル」の対象も変わってきそう ▪ フロントエンドにとってのドメインモデルは「ユーザーのメンタルモデル」? ◦ フロントエンドDDDにおける特殊性・一般性・要件を言語化する。 • CQRS(+ES)としてのFluxアーキテクチャ再分析 ◦ フロントエンドCQRS(+ES)という視点は有力に感じた。 ◦ 具体的な活用方法や活用箇所を言語化する。
  124. 最後に 124

  125. 最後に • 「表示」と「操作」こそが舞台 ◦ サーバーとフロントは、関心事が違うだけ ◦ それぞれの重要度は所与ではない(システムによる) • 胸を張って 「フロントエンド」に挑もう

    ◦ 「JSON色付け係」のような卑下は要らない 125
  126. • ドメインは避けられない ◦ ドメインを分析し理解することは、バックエンドだけの仕事ではない ◦ ドメインの分析・理解は、システム開発全体にとって重要 • 「設計」も避けられない ◦ 「表示するだけ」では最早済まない。画面の奥に潜むロジックを飼い

    慣らす術を身につけよう 最後に 126
  127. 誇りを持って フロントエンドに立ち向かう 最後に 127

  128. 参考資料(敬称略) 128 • エリック・エヴァンスのドメイン駆動設計 ◦ Eric Evans(著)今関 剛(監訳)和智 右桂、牧野祐子(訳) •

    Clean Architecture 達人に学ぶソフトウェアの構造と設計 ◦ Robert C. Martin(著)角 征典、高木 正弘(訳) • 未来を作った人々 - ゼロックス・パロアルト研究所とコンピュータエイジの黎明 ◦ Michael Hiltzik(著)エ・ビスコム・テック・ラボ(監訳)鴨沢眞夫(訳) • オブジェクト指向のハードコア ◦ https://www.zerobase.jp/salon/2019/05/25/hardcore-oo.html ◦ (2) 哲学 ◦ (3) Smalltalk by @sumim ◦ (8) GUI by 上野学(@manabuueno) • クライアントアプリの「中心」とは何か ◦ by @takasek ◦ https://speakerdeck.com/takasek/20200121-the-center-of-the-client-number-ios-ca
  129. 参考資料(敬称略) 129 • 複雑なJavaScriptアプリケーションに立ち向かうためのアーキテクチャ ◦ by しんぺい(@shinpei0213) ◦ https://speakerdeck.com/shinpeim/fu-za-najavascriptapurikesiyonnili-tixiang-kautamefalseakit ekutiya

    ◦ http://techblog.reraku.co.jp/entry/2017/08/08/184313 • Almin.js | JavaScriptアーキテクチャ ◦ by azu(@azu_re) ◦ https://azu.github.io/slide/2016/child_process_sushi/almin-javascript-architecture.html • CQRS+ES(再)入門 ◦ by かとじゅん(@j5ik2o) ◦ https://speakerdeck.com/j5ik2o/cqrs-plus-es-zai-ru-men • Facebook の決断:MVCはスケールしない。ならば Flux だ。 ◦ https://www.infoq.com/jp/news/2014/05/facebook-mvc-flux/ • Vue.js + デザインパターンによるコンポーネント実装 ◦ by @philomagi ◦ https://speakerdeck.com/tooppoo/vue-dot-js-dezainpatan-niyorukonponentoshi-zhuang-v2 ◦ https://github.com/tooppoo/sample-for-vue-with-design-patterns
  130. 参考資料(敬称略) 130 • モデルとは何であって、何でないのか ◦ by 末並 晃(@a_suenami) ◦ https://speakerdeck.com/a_suenami/moderutohahe-deatute-he-denaifalseka-number-kichijojipm

    ◦ https://a-suenami.hatenablog.com/entry/2019/08/05/084814 • atomic design ◦ by brad frost ◦ https://bradfrost.com/blog/post/atomic-web-design/ • Atomic Design 〜 堅牢で使いやすいUIを効率よく設計する ◦ 五藤 佑典 • MVCとはなにか ◦ by 天重 誠二(@tenjuu99) ◦ https://speakerdeck.com/tenjuu99/what-mvc-is ◦ https://note.com/tenjuu99/n/n0232ccd1089d ◦ https://note.com/tenjuu99/n/nbbb4b273676d • The Model-View-Controller (MVC)Its Past and Present ◦ Trygve Reenskaug ◦ http://folk.uio.no/trygver/2003/javazone-jaoo/MVC_pattern.pdf
  131. ご清聴ありがとうございました 131