アーキテクチャと考える迷子にならない開発者テスト
by
irof
×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
考 迷 子 開発者 2025-11-15T15:30 JJUG CCC 2025 Fall @irof
Slide 2
Slide 2 text
2 # 自己 紹介 - -大ࡕ - ## - 関西Java ձ - 月 一 ## 仕事 - 個 人 事ۀ主 - 開発全般 支 ԉ
Slide 3
Slide 3 text
技術 安定指向 実践主ٛ 知識 大事 巧遅拙速 重視 3
Slide 4
Slide 4 text
話 難 難 難 同 士 難 分割 個別 考 話 逆ʁ 同時 片 足 進 ײ 4
Slide 5
Slide 5 text
前提 構造 ଊ 小 道具 進 方 気 考 方 վ善例 進 方 開発者 以外 話 5
Slide 6
Slide 6 text
前提 6
Slide 7
Slide 7 text
前提 7 難
Slide 8
Slide 8 text
一大 呼 専門Ո 存在 示 一大 質 高 専門的 不可 欠 専門Ո 領域 特Խ 研ᮎ 実践 決 片 手 間 8
Slide 9
Slide 9 text
開発者 専門Ո 受 開発者 開発者 向 合 難 知識 取 入 有効 9
Slide 10
Slide 10 text
一大 言 葉 話 分類 受 入 負ՙ 耐障性 ڍ 分 方 軸 ἧ 必要 種類 調 色 ʑ出 話 10
Slide 11
Slide 11 text
: 開発者 以降 開発者 扱 開発者 開発者 自 分 作 対 自 分 行 開発者 作 思 通 動 言 古来 言 思 通 動 作 通 動 抵抗 主 動 機能性 確認 JUnit 11
Slide 12
Slide 12 text
迷 子 開発者 得意 開発者 多 12
Slide 13
Slide 13 text
使 道具 Կ ʁ ʁ 13 迷 子
Slide 14
Slide 14 text
前提 14 難
Slide 15
Slide 15 text
一大 呼 専門Ո 存在 示 一大 質 高 専門的 不可 欠 専門Ո 領域 特Խ 研ᮎ 実践 決 片 手 間 関 認識 少 気 15
Slide 16
Slide 16 text
言 葉 ᐆດ 大 構造 呼 呼 重要性 認識 整理 浸透 構造 限 重要 決定 再定ٛ 構造 言 意味 引用元 建築文脈 構造 限 建築様式 ֓念的 指 模様 16
Slide 17
Slide 17 text
抽象的 考 難 語 多 抽象的 構造 単一 定 排他的 複数 同時 存在 関連 …… 言 話 通 程度 人 17
Slide 18
Slide 18 text
無駄 上 ײ 安売 無駄 ڑ離 置 18
Slide 19
Slide 19 text
広 知識 深 技術力 高 ײ覚 要 ٻ ୭ 知 実際 ӽ 関連 書籍 文献 難 盛 言 事実 上ڃ開発者 上 位置 扱 19
Slide 20
Slide 20 text
言 葉 指 範囲 絞 修飾 ڍ 分 方 軸 ἧ 必要 種類 調 色 ʑ出 話 20
Slide 21
Slide 21 text
: 以降 特 内 配置 扱 具体的 右図 21
Slide 22
Slide 22 text
思 不在 考 方 ك 自 分 考 Կ ʁ 22 迷 子
Slide 23
Slide 23 text
話 開発 ؚ 要素 難 難 難 Ԝ ʁ 迷 子 23 今回 状گ 前 進 考 方 話
Slide 24
Slide 24 text
構造 ଊ 24
Slide 25
Slide 25 text
構造 ଊ 25 言 語 構造 ଊ
Slide 26
Slide 26 text
Java 言 語 構造 ײ ֊層構造 認識 思 26
Slide 27
Slide 27 text
Java 言 語 構造 正直 構造 考 役 立 言 実 行 単位 合 管理単位 ၆ᛌ 役立 27
Slide 28
Slide 28 text
構造 ଊ 28 ※独 自 定ٛ
Slide 29
Slide 29 text
構造 対 最 小 粒度 呼 ؚ 複数 実 行 29
Slide 30
Slide 30 text
構造 ଊ 30 ଊ
Slide 31
Slide 31 text
Web 31
Slide 32
Slide 32 text
Web 緑 色 開発 対象 @Controller/@Service/@Repository domain logic 暗黙 期待 話 32
Slide 33
Slide 33 text
構造 ଊ 33 構造 ଊ 意味
Slide 34
Slide 34 text
広ٛ 目的 XXX性 -bility 獲得 対象 XXX性 詳 本 手 取 内部 構造 与 ʁ 活用 34
Slide 35
Slide 35 text
目的 構造 意味 言 意味 持 示 Spring 使 使 強制 力 Controller 受 取 言 役割 持 役割 Ռ 確 35
Slide 36
Slide 36 text
構造 ଊ 36 基本的 考 方
Slide 37
Slide 37 text
特定 欠 ؕ ૂ 特定 欠 ؕ 存在 通 欠 ؕ 存在 欠 ؕ 見 考 重要 難 考 粗 無駄 上 動 動 OKʂ 動 ૂ ʂ 37 動 ʁ 追 追
Slide 38
Slide 38 text
紛 少 状態 実 行 範囲 ؚ 多 多 紛 大 Կ ؚ 示 紛 関係 理由 通 通 通 可能性 紛 多 ܨ 38
Slide 39
Slide 39 text
見 欠 ؕ ۙ 見 欠 ؕ 存在 場所 欠 ؕ 存在 示 ۙ 検出 早 原因特定 遠 紛 生 39
Slide 40
Slide 40 text
構造 ଊ 40 ۙ 大
Slide 41
Slide 41 text
ۙ 場所 小 ⭕ 高 速 軽量 安Ձ ⭕ 欠 ؕ 原因特定 容қ ⭕ 作 多 ❌ 数 増 ❌ 絶対 落 作 getter 41
Slide 42
Slide 42 text
遠 場所 大 ⭕ 範囲 広 組 合 欠 ؕ 検出 ⭕ 数 減 対象 減 ❌ 遅 準備 大変 ❌紛 大 ❌ૂ 欠 ؕ 起 場合 ❌ 欠 ؕ 検出 原因特定 難 42
Slide 43
Slide 43 text
遠 場所 長 菜ṟ 米 ௫ 作ۀ 細 操作 難 ۙ 方 細 振 回 時 他 当 43
Slide 44
Slide 44 text
話ʁ 言 葉 知 文脈 話 形 必要 縦軸 数 3 決 性質 踏 見 欠 ؕ 見 単位 見 道具 見 見 考 話 44
Slide 45
Slide 45 text
小 道具 45
Slide 46
Slide 46 text
範囲 道具 考 言 欠 ؕ 見 存在 所 ۙ 見 道具 少 具体例 話 46
Slide 47
Slide 47 text
注意: Spring7/SpringBoot4間ۙ 使 道具 変更 具体的 名 使 方 今知 道具 使 合 同様 道具 維持 道具 使 時 気 配 大枠 変 47
Slide 48
Slide 48 text
小 道具 48
Slide 49
Slide 49 text
Web 入 口 受 取 扱 HTTP 送 JSON 扱 ؚ 49
Slide 50
Slide 50 text
識別 扱 扱 考 50
Slide 51
Slide 51 text
Controller 実装例 51 雰囲気 OK
Slide 52
Slide 52 text
Controller 実装 @RequestMapping, @GetMapping 引数 対 @Service 呼 出 52
Slide 53
Slide 53 text
実装 存在 欠 ؕ ૂ 実装 欠 ؕ 自 分 実装 対 存在 欠 ؕ ૂ 得 人 間 実装 AI 実装 ؚ 欠 ؕ 入 得 53
Slide 54
Slide 54 text
見 欠 ؕ例 到達 内容 扱 期待 返 不正 弾 期待 Service 呼 出 54
Slide 55
Slide 55 text
例 55 雰囲気 OK
Slide 56
Slide 56 text
使 道具 @WebMvcTest 指定 Controller 必要 動 MockMVC HTTP 代 検証 @MockitoBean Service 使用 56
Slide 57
Slide 57 text
範囲 57
Slide 58
Slide 58 text
考 検出 存在 担保 欠 ؕ Կ ʁ 対象 担 ʁ 方 ؚ Կ ʁ 包ؚ 検出 ʁ 58
Slide 59
Slide 59 text
解答例 対象 Controller 全体 入 指定 Controller 入 ڝ合 起因 不具合 検出 一部 手 前 ؚ 関 欠 ؕ 検出 Service以降 ؚ Service 副作用 永続Խ 依存 振 舞 検証 59
Slide 60
Slide 60 text
解答例 包ؚ 代替 場合 包ؚ 手 前 準 使用 必然的 動作 必要 実 行 時間 大 伸 多 厳 単純 E2E 十 分 60
Slide 61
Slide 61 text
小 道具 61
Slide 62
Slide 62 text
Service 扱 62
Slide 63
Slide 63 text
Service 実装例 63 雰囲気 OK
Slide 64
Slide 64 text
実装Օ所 範囲 64
Slide 65
Slide 65 text
道具 基本的 POJO Mockito Repository 検証 場合 作成 使用 65
Slide 66
Slide 66 text
見 欠 ؕ例 実装 欠 ؕ 仕様上 欠 ؕ 本質的複雑性 注力 偶有的複雑性 実装依存 ؚ 上 識別 66
Slide 67
Slide 67 text
設計 嫌 気配 言 使用 不٢ 設計 Repository ؚ 生 成 面倒 他 色 ʑ SpringTest ׳ 一律導入 設計 67
Slide 68
Slide 68 text
見 欠 ؕ例 @Service 付 起動時 E2E 包ؚ ؚ 検出 修正 一 行足 大 Өڹ Service AOP 欠 ؕ ԣ断 個別 68
Slide 69
Slide 69 text
小 道具 69
Slide 70
Slide 70 text
対象候補 対象候補 DDL DB制約 ڍ動 種 例外 発 生 70
Slide 71
Slide 71 text
使 道具 SpringTest 時 自 動 fl yway OCI SpringBootTest Testcontainers DockerCompose 他 方法 h2database 設計 DDL 管理 h2database 使 厳 使 非常 軽量 高 速 選択肢 入 71
Slide 72
Slide 72 text
絡 SpringTest 実 行 前後 Transactional 実 行 後 仕組 管理 行 推奨 他 Өڹ 扱 独立性 持 検索 Өڹ 行 終了 時 戻 動作 方 多 72
Slide 73
Slide 73 text
小 道具 73 外部通信
Slide 74
Slide 74 text
対象候補 通信 使 方 74
Slide 75
Slide 75 text
使 道具 SpringTest 通信 準備 通信先 二択 SpringTest MockRestServiceServer 75
Slide 76
Slide 76 text
MockRestServiceServer 場合 76
Slide 77
Slide 77 text
場合 77
Slide 78
Slide 78 text
二択 結Ռ MockRestServiceServer 高 速 HTTP 処理 差 替 範囲 漏 認識 使用 選択肢 色 ʑ OCI 立 上 同一JVM 立 上 同一JVM 方 高 速 障 少 OCI 別 流用 78
Slide 79
Slide 79 text
小 道具 79 話
Slide 80
Slide 80 text
意味 成立 話 役割 担 関係 暗黙 前提 逸脱 的外 80
Slide 81
Slide 81 text
変更 場合 追Ճ 場合 MessageListener Controller 代 MessageListener 扱 導入 際 他 関連 役割分担 考 際 追Ճ 役割 Կ Կ 考 考 方 81
Slide 82
Slide 82 text
小 道具 82 包ؚ1 全体
Slide 83
Slide 83 text
83
Slide 84
Slide 84 text
全体 対象 実施 本番 同製品 採用 E2E 類似 可能 使 道具 @SpringBootTest + @AutoCon fi gureMockMvc 文脈 @WebMvcTest 使 Repository以降 前述 同 Service domain logic Repository 遠 84
Slide 85
Slide 85 text
小 道具 85 包ؚ2 以降
Slide 86
Slide 86 text
86
Slide 87
Slide 87 text
前述 Controller 除 使 道具 @SpringBootTest Repository以降 前述 同 Controller 単独 前述 行 E2E 上位 任 一 前 包ؚ 準備 比較 複雑 正常系 正常系 作 厳 87
Slide 88
Slide 88 text
小 道具 88 包ؚ3 E2E?
Slide 89
Slide 89 text
89
Slide 90
Slide 90 text
対象 道具 90 Tips
Slide 91
Slide 91 text
文 式 役 立 言 文 式 状 گ ك 例: `LocalDate.parse("2013-02-29")` ʁ 仕事 覚 確 大事 91
Slide 92
Slide 92 text
文 式 ؆単 済 jshell 使 Java 言 語 JSL 安定 他 ؚ 新機能 不安 学習 ڍ動 変 可能性 欠 ؕ ܨ 可能性 1文 抽出 92
Slide 93
Slide 93 text
private 言 出 private 話 解決 色 ʑ Կ度 出 話題 Կ度 話 思 ק 得 変更可能 状態 損 方法 避 妥ڠ案 可視性 緩 一般的 可視 性 緩 ൚用解 93
Slide 94
Slide 94 text
private private 思 向 合 private 言 語Խ 理由 独立 言 語Խ 理由 public 経由 方 理由 理由 思 悩 必要 素直 書 private 可視性 読 上 ӽ 94
Slide 95
Slide 95 text
気 考 方 95
Slide 96
Slide 96 text
道具 選定 限 技術 積 重要 使用 道具 使 道具 知識 要ٻ 程度 知識 必要 線引 難 道具 追随 必要 96
Slide 97
Slide 97 text
小 ʁ 思 大 作 欠 ؕ 多 小 足 動 部品 組 合 基本 動 部品 起 97
Slide 98
Slide 98 text
多 ʁ 対象以外 Կ 代替 呼 ೃ染 極論実 行 時刻 本物 未来 使 Կ 使 考 使 参照 https://irof.hateblo.jp/entry/2019/07/18/140046 98
Slide 99
Slide 99 text
ʁ 万能解 大 不安定 一 欠 ؕ 複数 落 悪 兆候 即 初期 想定 合 ك 欠 ؕ 偏在 性質 適合 変 作 傾向 xUTP 参照 99
Slide 100
Slide 100 text
վ善例 100
Slide 101
Slide 101 text
NPE 大嫌 null 話 Optional 導入 10年以上経 null Java 消 null 悩 人 101
Slide 102
Slide 102 text
Java null Java 言 語上 参照型 null 全 参照型引数 null 渡 検討 必要 全 戻 値型 参照型 場合 null 可能性 考慮 必要 102
Slide 103
Slide 103 text
null 戦 null 排除 検討 実現 Service 関 null 考慮 必要 null 消 一気 減 103
Slide 104
Slide 104 text
null 世ք 目指 軽量 口 頭 実現 人 間 null 存在 Java 使用 開発者 広 受 入 一 般的 null 使 人 入 替 ੬弱 運用 仕組 導入 検討 104
Slide 105
Slide 105 text
仕組 導入 基本的 JSpecify null 明 示 以前 引数 回 JSpecify module-info 記述 便利 module使 話 package-info 書 別扱 宣 言 後 IDE 警告 標準機能 検証 対Ԡ 進 105
Slide 106
Slide 106 text
null null 存在 面倒 対象 引数 null 渡 必要 漏 規約 必要 排除 null 欠 ؕ 存在 不要 Ձ値 注力 話 null 限 有効 106
Slide 107
Slide 107 text
他 関係 107
Slide 108
Slide 108 text
他 存在 開発者 開発者 思 通 動 示 思 対 必要 開発者 後 行 108
Slide 109
Slide 109 text
他 開発者 被 操作 同 ؍点 Կ 差 ڐ容 被 健全 一方 当然 ਹ 開発者 合理的 組 合 担保 場合 突 合 考 必要 出 分 役割分担 整理 戦略 話 必要 知識 手 伸 109
Slide 110
Slide 110 text
他 ڑ離ײ 開発者 遠 場所 大 先 ڍ 色 濃 出 同 欠 ؕ 開発者 見 110
Slide 111
Slide 111 text
考 方 他 欠 ؕ 見 場合 開発者 見 理由 課題 開発者 վ善 ૂ 一 開発 設計 前 欠 ؕ 存在 得 言 考 方 111
Slide 112
Slide 112 text
話 答 ٻ 示 答 ٻ 半歩 進 馬力 一 動 思 112