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