Slide 1

Slide 1 text

型安全性で考えること 中尾正剛 PayPayカード株式会社 https://x.com/web_shogo_nakao

Slide 2

Slide 2 text

私について 経歴 2011/04 SES(中小企業) 2015/01 (Web系)株式会社セレス 2020/10 (Web系)エキサイト株式会社 2023/11 (金融系)PayPayカード株式会社 PayPayカード株式会社 - プロダクト1本部  - プロダクト開発部 - プロダクト開発5グループ(SRE)

Slide 3

Slide 3 text

目次 はじめに 01 02 03 04 05 型安全性とは 動的型付けと静的型付けの違い 型安全性で考えること まとめ

Slide 4

Slide 4 text

型安全性とは プログラム側で型エラーを検知し、コンパイルエラーや実行時エラーを出してくれる。 変数やデータの型を明示的に指定して(型宣言)、その型通りにプログラムが動作すること

Slide 5

Slide 5 text

型安全性とは // PHPで型宣言なし $count = 0; var_dump($count); $count = "aaa"; var_dump($count); php test.php int(0) string(3) "aaa"

Slide 6

Slide 6 text

型安全性とは // PHPで型宣言あり function demonstrateTypeSafety(int $count): void { var_dump($count); } demonstrateTypeSafety(0); demonstrateTypeSafety("aaa"); TypeError: Argument 1 passed to demonstrateTypeSafety() must be of the type int, string given, called

Slide 7

Slide 7 text

型安全性とは // Javaで型宣言 int count = 0; String name = "Alice"; count = “aaa” // エラー intに文字列は入らない name = 1 // エラー 文字列に intは入らない

Slide 8

Slide 8 text

動的型付けと静的型付けの違い PHP ソースコードをインタプリタに読ませて処理が 実行されます。 要するに 実行時に型が決まる Java コードをコンパイラに読ませて中間生成物に変 換してビルドして実行可能な形式になり実行し ます。 要するに コンパイル時に型が決まる

Slide 9

Slide 9 text

型安全性で考えること っというのが最近よく見る意見の一つです。 静的型付け言語が良い!

Slide 10

Slide 10 text

型安全性で考えること まず、プログラミングに触れる上で一番最初にするのは 動いた っと達成感が必要では? プログラミングを楽しむための第一歩にはどっちでもよいのでは?

Slide 11

Slide 11 text

型安全性で考えること

Slide 12

Slide 12 text

まとめ phpはプログラミング楽しいと思える第一歩につながる

Slide 13

Slide 13 text

余談

Slide 14

Slide 14 text

余談 // Javaでの型宣言の例 int count = 0; or String count = "0件"; 開発段階で気づくことができるメリット、 実行時にエラーにならないメリット (実行者が一般ユーザーだった場合、障害が起きていることになる) 意識の共有

Slide 15

Slide 15 text

余談 // Javaでの型宣言の例 String count = “0件”; or String count = “0”; or int count = 0; エラー にはなってないけど。 。 。型宣言的にはセーフだけど。 。 。意図伝わってないよね。 コンパイルエラーにならないから もう少し型安全について深ぼってみる

Slide 16

Slide 16 text

余談 // 先ほどと違う例^ String startDate = “2025-02-29 23:59:59”; //エラーにならない LocalDateTime startDate = LocaldateTime.of(“2025-02-29 23:59:59”); // エラー Stringの場合はstartDateの有効性を確認しないといけない Stringはほぼほぼなんでも入るから、型宣言されてないと等しいと考える

Slide 17

Slide 17 text

余談 start_date varchar -> “2025-02-29 23:59:59”入る -> datetime // “2025-02-29 23:59:59”Incorrect datetime value でエラー count varchar -> “0, 1, null” -> nullは? mail_send_flg varchar -> “0:未送信 1:送信済み: nullは? -> 本番データ見ると-が合ったり category varchar -> “和食、洋食、中華、.....” -> 複数時には,区切りで文字列として入る ->取り出すときに ,区切りで出さないと行けないの? Databaseの定義にvarchar多用してない?

Slide 18

Slide 18 text

余談 ※最近では型指定できることが多い 一般的にNoSQLは型安全ではない

Slide 19

Slide 19 text

余談 言語だけで型安全に出来ません。 周りの要素も関係します。 複雑なシステムが多くなってきているので、 できるだけ意思疎通をやりやすい実装をしましょう。 言語の問題だけではないです。 型安全にできる実装をしましょう