Slide 1

Slide 1 text

ϞςΔίʔυͷॻ͖ํ 2022/7/30 Grow fi t TechLTձ Ώ͏͖ΌΜ

Slide 2

Slide 2 text

ࣗݾ঺հ • גࣜձࣾROLO • ΤϯδχΞྺ͸13೥ • ૊ΈࠐΈܥ͔Βឯ༨ۂં͋ͬͯWebܥʹస޲ • PHP/Laravel͕޷͖ • झຯ͸HADO

Slide 3

Slide 3 text

ϞςΔίʔυ͔ɺ ϞςΔίʔυҎ֎͔ɻ ੈͷதʹ͸2छྨͷίʔυ͕͋Δ

Slide 4

Slide 4 text

ඇϞςίʔυΛॻ͘ͱ あの⼈のコードちょっと臭う... さわりたくない... ⼀緒に仕事したくない>< 控えめに⾔ってうんコード

Slide 5

Slide 5 text

ඇϞςίʔυͱϞςίʔυ 4બ

Slide 6

Slide 6 text

ඇϞςίʔυᶃ

Slide 7

Slide 7 text

class Hoge { public function foo($arg): string { if ($arg === 'bar') { return 'bar'; } return 'piyo'; } } ඇϞςίʔυ💩

Slide 8

Slide 8 text

ݟͨ໨͕Ԛ͍🙅 • ΠϯσϯτͷཚΕ͸৺ͷཚΕ • Πϯσϯτ่͕Ε͍ͯΔͱݏΘΕΔ

Slide 9

Slide 9 text

class Hoge { public function foo($arg): string { if ($arg === 'bar') { return 'bar'; } return 'piyo'; } } Ϟςίʔυ🏄

Slide 10

Slide 10 text

1ߦ1ߦ͍ͯͶ͍ʹॻ͘🙆 • ΠϯσϯτɺۭߦɺεϖʔεΛஸೡʹ • ͢΂ͯͷߦͱจࣈʹ੹೚Λ࣋ͭ

Slide 11

Slide 11 text

ඇϞςίʔυᶄ

Slide 12

Slide 12 text

public function isActiveUser(User $user): bool { if ($user !== null) { if ($user->email_verified_at !== null) { if ($user->last_logined_at > new DateTime('-1 year')) { return true; } else { return false; } } else { return false; } } else { return false; } } ඇϞςίʔυ💩

Slide 13

Slide 13 text

৚͕݅ଟ͍உ͸Ϟςͳ͍🙅 • elseจ͕ͨ͘͞Μ͋ΔͱಡΈʹ͘͘ͳΔ • ͜Ε΋ݟͨ໨͸ྑ͘ͳ͍

Slide 14

Slide 14 text

public function isActiveUser(User $user): bool { if ($user !== null) { return false; } if ($user->email_verified_at === null) { return false; } if ($user->last_logined_at <= new DateTime('-1 year')) { return false; } return true; } Ϟςίʔυ🏄

Slide 15

Slide 15 text

ૣظϦλʔϯΛ࢖͏🙆 • Ψʔυઅͱ΋ݴ͏ • ifจ͸elseΛͳ͘͢ͱಡΈ΍͘͢ͳΔ • ωετΛݮΒͯ͠ɺ೴಺ϝϞϦΛઅ໿

Slide 16

Slide 16 text

ඇϞςίʔυᶅ

Slide 17

Slide 17 text

try { $hogeService->handle(); } catch (Exception $e) { } ඇϞςίʔυ💩

Slide 18

Slide 18 text

ΤϥʔΛӅ͢உ͸Ϟςͳ͍ • ΤϥʔΛແࢹͨ͠ΓӅṭͯ͠͸͍͚ͳ͍ • ίʔυ͕௥͍ʹ͘͘ͳΔ

Slide 19

Slide 19 text

try { $hogeService->handle(); } catch (Exception $e) { $this->logger->error($e->getMesage()); } Ϟςίʔυ🏄

Slide 20

Slide 20 text

ྫ֎͸ѲΓͭͿ͞ͳ͍🙆 • ྫ֎͕ى͖ͨΒॲཧΛதࢭ͢Δͷ͕جຊ • ॲཧΛࢭΊͨ͘ͳ͍৔߹͸ඞͣϩάΛ࢒͢ • ϩά͔Β௥͍΍͘͢͢Δ

Slide 21

Slide 21 text

ඇϞςίʔυᶆ

Slide 22

Slide 22 text

final class HogeService { public function execute() { $slackNotification = new SlackNotification(); if ($isProduction) { $slackNotification->send('Success!'); } } } ඇϞςίʔυ💩

Slide 23

Slide 23 text

ਓʹΑͬͯଶ౓Λม͑Δͷ͸ Ϟςͳ͍🙅 • ਓ(؀ڥ)ʹΑͬͯଶ౓Λม͑Δͷ͸Ϟςͳ͍

Slide 24

Slide 24 text

interface SlackNotificationInterface { public function send(string $message): void; } final class SlackNotification implemetns SlackNotificationInterface { public function send(string $message): void { // Slack通知の実装を書く } } final class MockSlackNotification implemetns SlackNotificationInterface { public function send(string $message): void { // 何もしない } } final class HogeService { public function __construct(private SlackNotificationInterface $slackNotification) { } public function execute() { $this->slackNotification->send('Success!'); } } Ϟςίʔυ🏄

Slide 25

Slide 25 text

NullΦϒδΣΫτύλʔϯ Λ࢖͏🙆 • Slack௨஌༻ͷΠϯλʔϑΣʔεΛ༻ҙ͢Δ • ςετ࣌͸Կ΋͠ͳ͍Mockʹࠩ͠ସ͑Δ

Slide 26

Slide 26 text

·ͱΊ

Slide 27

Slide 27 text

·ͱΊ • Πϯσϯτ͸େࣄ • ૣظϦλʔϯΛ࢖ͬͯifจΛγϯϓϧʹ • ྫ֎ΛѲΓͭͿ͞ͳ͍ • nullΦϒδΣΫτύλʔϯΛ࢖͏

Slide 28

Slide 28 text

େ੾ͳ͜ͱ

Slide 29

Slide 29 text

͜ͷLTΛฉ͍ͯ΋ ࣮ࡍʹϞςΔͱ͸ݶΓ·ͤ Μɻ

Slide 30

Slide 30 text

͍͞͝ʹ

Slide 31

Slide 31 text

એ఻Ͱ͢

Slide 32

Slide 32 text

એ఻1 ฐࣾ(ROLO)Ͱ͸PHP/Laravelͷ Ҋ݅Λେืूͯ͠·͢🙏

Slide 33

Slide 33 text

એ఻2 • https://github.com/ucan-lab/laravel-dacapo • LaravelͷϚΠάϨʔγϣϯੜ੒αϙʔτ • γϯϓϧͳYAMLදهͰ؅ཧͰ͖Δ • https://github.com/ucan-lab/docker-laravel • LaravelͷDocker؀ڥςϯϓϨʔτ

Slide 34

Slide 34 text

͓͠·͍👏