#429 ひま風呂!インターフェースと型ヒントの大事さを学べるたった一つの銭湯
2026/1/18 ·
-
この番組はエンジニアの成長は楽しい学びからをもとに日々インプットした話題をワイワイお届けするラジオになっていますはい今日も成長したいですねということでお便りですはいはいいつも楽しい学びをありがとうございます狭い話になりますがパイソンに型ヒントのプロトコルというものがあると思いますエンジニアの方がどんな時に使うのか使いどころを教えてほしいです
-
モジュール間の依存を断ち切る感じに使うのかもと昨日思いついたんですが本当にそうなのかなと気になりますということでお便りいただきましたありがとうございますめちゃくちゃ高突に入りましたね今日はPythonの型ヒントのプロトコルPythonに限らずかもしれないですけど型って何のためにあるのとかあとはプロトコルというものが他の言語にもあるのかなちょっと他にも似たようなPython僕
-
普段の業務とかだと abc アブストラクションベースクラスか アブストラクトベースクラスか抽象規定クラス的なやつはいっていう方のライブラリを使うことが多いのであまりこのプロと使わないんですけど 今のライブラリ名だったのはいそうですはい abc というライブラリがあるんですけどで
-
なのでさっきのりさんとお勉強したのでその内容をワイワイアウトプットしつつわかりやすくなるように例えを生み出していこうというのが今回の話になりますそうですねこのプロトコルっていうのがPythonのライブラリーなんですよねそうですね別途インストールするタイプのものではないんですけどPythonにもともと入っているライブラリーになりますね何これあれなのイントロ
-
PIPインストールいらないんじゃないかな言語にもともとついてる系のライブラリってこと?多分タイピングは多分使えるんじゃないかなでそもそもまずこのプロトコルって何ぞやとなんかネットワークのやつかなって一瞬思っちゃうんですけど関係なくてですねどうやらダックタイピング
-
ダックタイピング実現できるようなものになってるとダックタイピングねダックタイピングって何ですかねラバーダックプログラミングとは何が違うんですかっていうラバーダックプログラミングとはだいぶ違いますねまずラバーダックプログラミング何でしたっけラバーダックプログラミングがですねお風呂にいるですね黄色いアヒルちゃんいるじゃないですかまずプログラマーの机には絶対あいつがいますと
-
であのアヒルちゃんに向けて今僕こういう風なことをやろうと思ってるんだけどなんでできないのかなっていうのを相談しながら進めることによってそのラバーダックに話しかけない場合に比べ平均○○%仕事の精度が上がるというものになってます
-
まずね俺あれ風呂でも見たことないけどねあんまりないかーよくてさゆずぐらいしか浮いてると見たことない俺そうですねうぐいす谷にある萩の湯でたまに浮いてなかったから浮いてねーかーうぐいす谷の萩の湯ねでかいけど安い銭湯だ安い銭湯はいはい
-
あのちょっとラバーダック思い出なんですけどブラックハットという世界最大のセキュリティカンファレンスに仕事で出張で行った時にですねブラックダック社っていうセキュリティの会社があったんですけどそのブラックダック社のノビリティが黒いアヒルのラバーダックでしたうわ黒はい
-
ちょっと嫌だなでもラバーダックくれたのって当時は黒いアヒルだからかっていう程度の解釈だったんですけどこれでちゃんとラバーダックプログラミングしようぜっていうのも含めでラバーダック配ってたんだって思うとなんか結構面白いいいノベルティだなっていうのが僕の中のラバーダックの思い出でダックタイピングとは全く関係ないです全く関係ないですねはいダックタイピングって何かダックタイピングね
-
なんて説明したらいいんですかねこれダックタイピング自体も例えで言った方がいいと思うんですよねほうはいはいはいいいですいいですダックタイピング例えでじゃあその例えながら説明していく感じにしますかはい決してちょっとこれねあのガーガーって言いながらタイピングをすることではないですうんそうねでちなみにこのなんかダックタイピングまず例える前に一旦どういうものかっていうのをあの正式に説明した後に例えていきますかはいそうしましょうかうん
-
まずこのダックタイピングとかは個人的にはGoのインターフェースの機能がすごいわかりやすいなって思ってるんですけどどっちが一般的なんだろうって感じだけど一般的な言語って多分このメソッド絶対つけてねっていう時に
-
インターフェースとかもしくは中小クラスみたいな機能がついててそれを継承なりインプルメントなりして置くことによってこのメソッドを実装しないとエラーが出るよみたいな状態にすることでそのメソッドを無理やり実装させるっていう仕組みになってると思うんですよ
-
まあいわゆるジャバとかオブジェクト思考ど真ん中ジャバだと思ってるんでジャバがそうなってるからそっちが一般的ということにしてもいいのではないか怒られるかもしれないけどまあまあPHPもそうですからなのでそういう風にして明示的にこういう型をつけるように作るんだぜこいつはみたいなのを指定してあげないといけないとうん
-
明記するんですよちゃんとねそうそうそうそう一方Goのインターフェースってそういうなんか今回のこのクラスはこのインターフェースを実装しますみたいな宣言がそもそもいらないというかそのクラスそれ通りの型を持っていればそのインターフェースとして認めてやるよみたいなそういうもう少し具体的なことを頑張って言おうとするんですけどECサイトの
-
インターフェースか何があるかなゲームに例えよういつものスマブラそっちの流動そっちの抽象度で指定されたスマブラだとファイターっていうインターフェースがあって弱攻撃強攻撃みたいなメソッドがありますとでジャバだとピカチュウはファイ
-
インターフェースじゃねえんだよなファイターは親クラスなんだよないやまあまあまあでも
-
ファイタブルファイタブルファイタブルということにしてファイタブルをピカチュウは継承してそれで弱攻撃強攻撃って書くのがジャバ的な書き方でダックタイピングだと継承してなんて書かないでピカチュウが弱攻撃と強攻撃持ってるからファイタブルだよねって後から決まるみたいないいっすねそれでいいじゃんたとえてるしすでに
-
結構具体的な話になっちゃってますけどね実際にプログラミングか今のはだからこれ先頭で例えれるなと思っててほうかかってきなさいよ先頭で最初に入るじゃないですかでバンドーさんバントーさんバンドーさんどっちだろうバンダイさんだわバンダイさんだわ
-
お金払ってで俺は男なんで男より入るじゃないですかそうですねこれは俺ダックタイピングだと思ってるんですよなぜなら俺らは男みたいなインターフェースしてるからこいつは男だからこの男より入れていいぞってなっているインターフェースというよりは実装がね実装が男になってるから俺らは男より入れていいとそれ結構今非常にセンシティブな話題なんでコメント控えたいんですけどだからあの
-
俺も思ったよそれ言う前に非常にセンシティブな話題でもちろんね今ありますよね元男性の女性アスリートがどっかの大会で無双しちゃってうんぬんかんぬんみたいなあんのそんなのありますよありますよそうなんだ辞任だっけ政治人みたいなあそうそうそうそう一旦生物学的戦闘にしようそれは実装の話になっちゃうんだよやっぱりだからそう
-
ポコチンがついてれば男に入るそういう戦闘ってことですねそういう戦闘結構ストロングスタイルなストロングスタイル20年前10年前ぐらいのこれがダックタイピングですよなるほどインターフェース必要な場合何が必要かっていうと多分男証明書みたいなやつをあらかじめ取ってきてそれを提示しないと男に入れないみたいな世界
-
これが通常の継承とか愚症中症の実装のパターンだと思うんですよねはいはいどうですか何点ですかいやーちょっとなちょっとその先頭が若干ファンタジーなのが少し限定ファンタジーダメなんだ実装やっぱちょっと実装
-
実装に即してほしかったですね実装にかなり分かりやすかったと思います85点で85点ありがとうございますこれがまず最大限です今のりさんが出していただいたインターフェースの方の話出してましたけど冒頭に言ったんですけどPythonに似てるのでABCというライブラリがあってって話したんですけどそっちはいわゆる継承とかをして
-
インターフェースを実装していくようなものになっていてそっちの違いとかもやっぱりあるんでそこの辺を分かりやすく先頭にしてたのはありがたいなと思いながらこっちのターンでいいですか分かりました例えられてるかもすごい自信ないんですけど生物生物が僕ダックタイピングかインターフェースでダックタイピングじゃないことはなんていうんですかね
-
ノンダックタイピングノンダックタイピングかなと思ってます例えば人分かりづらいな犬犬って食肉目犬か犬族らしいんですけど食肉目犬か犬族はい食肉族食肉目っていうらしいですね肉食じゃないんだ食肉なんだこいつはそうらしいですね犬ってそんなに肉食わないですけどね
-
分かんないよそれ野生だったら食うのかもしれないしまあこんな感じで生き物ってすごい親クラスから子クラスとかインターフェースがあったりとかして結構明示的に分類されてるんですよねはいはいこれあのいわゆる中小規定クラスを使ったPythonのABCを使ったまあアーキテクチャになってると言えると思うんですよはいはいはい
-
事前にちょっとのりさんと話してた内容なんですけどJavaとかはこれでやってきてるわけなんでじゃあそれでええやんっていう世界もありつつプロトコルというものが出てきたっていう背景はこれは完全にのりさんが調べたことなんですがそれってPythonっぽくなくねっていうなるほどPythonっぽさとはPythonっぽさとはですねなんだっけなんか一回調べましたねいわゆる柔軟で誰でも使えるぜみたいなところを
-
書きやすくてパッと動くぜみたいなところだった気がするんですけどじゃあなんかあのルビーとかにも近しい感じのやつしそう怖いからググろうかなコードを読みやすいっていうところすごい重きを置いてそうだなそうなんだ人によってインデントが崩れないところとかそれも一つですね確かになので読みやすさっていうところで言うとねやっぱあの継承してうんぬんとかって言うとね記述量増えちゃうんで
-
パッと見わからないよねとかあとは動的片付け言語なのにねそんなガチガチに肩やってそれってパイソンらしいのかみたいなところとか言うてもプロトコル肩ヒントなんですけどねそういうところもあるんですけどそういうプロトコルが生まれてきたのがバージョン3.8なんで多分プロトコルの方が後発なんじゃないかなっていうのがあったりするんですけどこの生物かなり窮屈なんですよだから
-
なるほどね書くのめんどくさいと書くのめんどくさいしあとはなんかちょっとこうやってガチガチに定義したせいでややこしいことになってるやつがたまにいるんですよ動物でゴリラゴリラゴリラはシンプルなのにゴリラゴリラゴリラはシンプルなんですけどまあわかりやすいので言うとねタラバガニタラバガニはいこれ有名な話なんですけどはいタラバガニ別にカニじゃないんですよねカニじゃないのあれこいつカニじゃないんですよエビ?宿狩りです宿狩り?はい宿狩りってカニじゃねえの?
-
宿狩りはカニじゃないです足の本数とか違うんですよねマジでタラバガニ足ないんですよ少ないんですよ確か太すぎて気にならなかったわ大きいしねタラバガニねあとカモシカカモシカ?知ってますカモシカって鹿みたいなやつでしょ鹿みたいなやつこいつカモでも鹿でもないんですよ
-
カモっぽくはないけどね もともと鹿ではない鹿ではない鹿じゃないんだはい馬?牛なんですよ牛なんだはいまあ牛って言われたらまあ牛も確かに角生えてるしなって感じにはなるけどうんがでもなんかそれちょっとわかりづらいじゃないですかうんよくないタラバ狩りとか狩りではいもうなんかあのうん
-
ちょっとすみません生物からそれちゃうんですけどトマトとかもあれ果物なのか野菜なのかみたいな議論あるんですよ野菜的果実だっけそうそうそう野菜果実的野菜ですね果実的野菜なの確かそうなはいでアメリカではね野菜と果物で全立変わるから結構メタみたいなとかありますけどあったね昔の話でしょそれ昔の話うん
-
でそれをガチガチに決めてるとなんか不都合が生じたりするんで振る舞いでもその分類しちゃえば良くないっていうのがダックタイピングですねおーそういうことかはいそこに持ってきたのにわざわざカモシカとか言ってましたなるほどねタルバガニはちゃんと茹でて食われるからカニだろと
-
タルバガニは茹でて食われるし美味しいし茹でたら赤くなるし名前にカニってついちゃってるんでカニだろとカニだろといいなそれわかんないですこの例えいいなでもダックタイピングの由来そのまんまなんだよなまあそのまんまだねもともとはアヒルのように歩くならそれはアヒルでいいだろうみたいなそうですそうですそれが刺さりました僕にははい
-
なんでこのダックタイピングのタイピングはキーボードのタイピングじゃなくて片付けっていう意味のタイピングですね片付けは型をつけるの方の片付けですねそうそうそうタイディアップじゃないですタイディアップじゃなくてタイプヒンティングのそうそうそうタイプヒンティングのやつですねはいはいはい
-
はいっていうのでなんかざっくりプロトコルと中小規定クラス的なところの片付けとは何かみたいなところを頑張って伝えてみたんですけどじゃあこれをですねどんな時に使うかお話ししたのか使いどころ使いどころそうだねだからこの使いどころで言うと多分説明しなきゃいけないのは2つあって片ヒント
-
自体が何なのかというかどういうメリットがあるのかっていうところとそれに対して今回プロトコルと他にもいろんなツールがあるけどプロトコルはどういうところが違いだったのっていうところが多分分かると良いんじゃないかなってところで今話したのがそのプロトコルの部分だったんだよねそうですね順番ミスったかなこれいやまあいいんじゃないですか普通に型ヒントのまず基礎的なところの話をした方が良かったかもしれないって今うっすら思ったけど
-
取り返していきましょう取り返していこうはいこれたとえミスったなでも型ヒントがなぜ大事か戦闘に持っていきましょう戦闘ではい戦闘でそうだよねだからこれ引きずるんだそっかだから生物学的戦闘の話ですよね生物学的戦闘の話はいで生物学的戦闘では多分メソッド2つあるんですよほう
-
男言うと女言うメソッドだったメソッド2つあるんですよここのメソッドに渡せる引数たちには型が決まってますとメソッドかなクラスじゃないですか男言うと女言うはちゃんとプログラミングしようってなったらそうなると思うよでも一旦メソッドにしていくんですここはメソッドだと思う男言うと女言うはメソッドです
-
通常名詞をメソッドにするのはあんまり良くないと言われてますありがとうございますお世話になってます引数引数って要はその関数の中に値を渡すことじゃないですかそうですね引数を通して線と風呂の中に入れるわけですよお湯の中に男お湯女それぞれの中にそれに当たって型ヒントっていうのがあると
-
型をチェックできるとっていうのがまず型ヒントの機能ですよねこれがもしなかったらどうなるか大変なことになります型がないと型ヒントあると違う型を渡したときエラーになりますよねなりますねだから男湯は男しか入れない男インターフェースを備えた人間しか入れないと男湯にはうん
-
だから男湯の中を男専用に作っていいんですよこんな男男湯って大丈夫かな最後にめっちゃ謝れば許してもらいます最後にめっちゃ謝れば大丈夫か最後にめっちゃ謝れば大丈夫です男湯は男以外むしろ入れないことが担保されてるとだから男湯の中を男専用で作っていいんですよでももしここに片ヒントがなかった場合何が起きるかっていうと
-
男以外のものが入ってくる可能性が出てきますと風呂の中にあーもうそこのフィルターが全く効かない状態だから仕組みとしてそうなんですそうするとどうなるかっていうとその時用のマニュアル作んなきゃいけないんですよほう例えばじゃあ女が来たとうん
-
そしたら丁寧に注意して女用の方に渡さなきゃいけないっていう分岐が発生するかもしれないしはたまた男用の中に男用に入ってしまった女用を女用を作る必要があるかもしれないですね
-
エラーハンドリングみたいなよくわからん実装になってきますねそうすると何が起きるかっていうと男の中にそのいろんな何が来るかわからない条件に備えたマニュアルとか謎の施設とかがいっぱい出来上がっていくわけですね
-
多分あれなんでしょうね最初はシンプルに男の優としてできてたんですけど多分なんか商用というか営業してたら商用運用してたら女の人が入ってきてそれでアラートが鳴ってどうにかなおさなきゃって言って片ヒントではないアプローチを取った場合に後から女に誘導する
-
実装が入ったり男風呂男湯に入ってしまった女用女風呂そうそうそうっていうなんかねめっちゃネストされたものが生まれてしまうっていう流れになるんでしょうねそうでしかもこれって別にそれだけじゃないじゃないですか犬が来るかもしれないし確かにタラバガニが来るかもしれないじゃないですか
-
合流したタラバカにねお風呂入る前はねちゃんと黒黒としてるというかねグレーみたいな色なんですけどね先頭の熱湯が入るとね真っ赤になって出てくるんでねおじさんと一緒ですねたまたま水風呂入った時だけは黒黒としたまんま戻って戻るの戻らないってあれ不可逆だってわかんないけどまあそうだよねまあという意味で男の中が大変なことになったじゃないですか今
-
今すごい想像してる上では大宴会じゃないですか 千と千尋の戦闘ぐらいの感じになってますねなってるよね 地味猛漁みたいな今大変なことになってるよ多分 男湯の中に男湯に入ってしまった女湯があってさらに犬用の小屋があって さらに湯であげられたタラバガニがいる状態になってますねそうですね
-
っていう無限の可能性が広がってしまうと大変だなだからこそ型を指定してあげるとそこで男優がブロックできるんで男優が作れるとなるほどっていうのがこの型ヒントの本質かなと思っていてさっき言った複雑な状況っていうのはコードで言うと条件分岐なんですよね要はうんうん
-
いろんな方を渡せるようにしたらその方に対応したような処理をどんどんどんどん書いていかないといけないそれを書いていくとどんどんスパゲティコードになってしまうとそのスパゲティコードっていう状態がさっき言ったカオスな男の状態ですねすごいあの型ヒントがあることによってえっと何でしょうね本当はそのタラバガニがいぜ上がる場所とかって男と分けるべきなんですよただ
-
型ヒントがないことによってその男湯の中にタラバガニを茹でる場所が作られ得る状況になってしまっていると型ヒントがあるおかげでこのメソッドの外に出さなきゃいけないんだなっていうのを急に入ってきた人でも理解できるとそれゆえあのー
-
コードを育てていくというか機能追加をしていく上でもこの型ヒントがあるとシンプルなメソッドとかコードベースにし続けることができるよっていうのがすごい
-
例えとして詰まってましたね今そうなんですで僕これ型を理解するにめっちゃ時間かかったんですよエンジニアになったばかりの時僕もそう僕もそう何が大事なのってそうそうそうそうてかじゃあこれでエラー出るなら型消せばいいやんって思っちゃってたわかるわかる動かないんだもんだって型をでも型消したらさっきの状態になっちゃうじゃないですか
-
じゃあ僕がどうすればいいのっていう時は別のメソッド作っちゃうんですよねだから同じ作ったんですよっていうことですよね多分うんうんうんじゃあ暇スーパーセント暇プロ違うななんかいいねいいね欲しいんですけどえーとあれですね暇プロの王様とかにしておきます?もうちょいいけそうだ暇フローだな
-
暇風呂?いいですね暇風呂いいですね暇風呂にしようか今のところ暇風呂には男湯と女湯と犬用のお湯とタラバガンに茹でる場所があるっていう施設になってますちょっとね変な施設すぎるけどねでもこれ型の大事さはどうですかめちゃくちゃすごい分かりやすくなりましたあの
-
なんだメソッドシンプルに保ち続けようというのがいい行動メソッドというかクラスとかメソッドシンプルに保ち続けるというところが片ヒントで実現できるよねというところがすごい分かりやすかったですね男優のカオス具合がうまく表現されてましたよかった男と女だけだったらそういうことあるかもなそこに犬とかタラバガニが入ってきた瞬間急にぐちゃぐちゃ感がすごいよく表現されてて
-
90点超えたと思いますよかった90点超えただいぶ満足度高いわ結構僕は大満足してますよく持ってったなここまでっていうお風呂ここまで考えてなかったからね最初すごいっていうのが片ヒントの使いどころみたいなところになりますかねつまり全部ですか全てにおいてやれよみたいな話なんですかぶっちゃけガチガチにやっても大変なところはあるかなって思うけどね
-
使いどころはどこなんですかやっぱりやったほうがいいなやったほうがいいわ基本やったほうがいい基本やったほうがいいですと思います僕も基本やってくださいと型ヒントがあることによってねモジュール感が素結合になるんでちゃんと素結合言い過ぎ?素結合なのかなこれ
-
疎結語は違いますね依存度はあんま変わんない気がするな読み出せる引数の数とか変わんないしねそうねモジュール間の依存を断ち切る感じで使うとはちょっと違うかもねそうですね依存の向きをコントロールするなのかな結局依存の向きもインターフェース的な使い方ができてればそうなのかもしれない
-
何も考えずに使うとモジュール間の依存はあんまり変わらない状態になっちゃうでも俺インターフェースで言うと最初に言おうとしてた用意してたちゃんとした方の例えなんですけど言ってないですねスイカとか交通系ICはい
-
依存度めっちゃ低いな低い事例だなと思ってて改札通る時ってさパスモでもスイカでもイコカでもキタカでもいけるじゃないですかあれって要は交通系ICっていうインターフェースがあってそれに対して実装はどれでもいいみたいなところだと思うんですよ要はその改札を例えばパスモと
-
スイカとイコカとキタカに依存させるっていう作り方したら良くないけど交通系ICっていうインターフェースに依存させれば依存1個で済むよねっていう意味でモジュール間の依存を減るんじゃないかなっていううんうんうんそれはそうですねなんで
-
ちょっと型ヒントとは違いますねやっぱりねそのモジュール間の依存を断ち切る形に使うのかもっていうのはどっちかというとインターフェースの話っていう感じですかねそうですねそれでもやっぱり断ち切り切れはしない薄くなるぐらいみたいな断ち切ってたらね無関係なんじゃないかな多分多分無関係ですよねできるだけ
-
依存しないようにするというのがインターフェースとかの動き動きというか役割で型ヒントとはちょっと違います型ヒントはさっき言ったように
-
高度の堅牢性を高めるっていうのかなシンプルに保つためのちょっとあれだよおばあちゃんの知恵だよねそうですねという感じで理解するで一旦どうでしょうというところで今日はじゃあ暇フローというのができましたので暇フローの次回作にこうご期待という感じですねここからどう作り込まれていくのかね久しぶりにこういう例えしたねそうですねありがとうございますいいストレッチでしたよかった
-
というので締めますハッシュタグひまじんプログラマーでSNSのXでフィードバック募集してますので本日のエピソードの感想とかありましたらお気軽にお願いいたしますはい皆様のオリジナルたとえ募集してますそうですねスラックコミュニティだと
-
こういうのを公開すると後で言ってくれる人がいてすごく楽しいのでぜひ興味ある方いたらポッドキャストのチャンネル説明欄からひまプロ談話室の申し込みフォームがありますのでそちらお気軽に申し込みくださいお願いしますあとはポッドキャストの説明欄にGoogleフォームで番組の要望・感想・質問お待ちしています楽しかっただけでもいいのでぜひ気軽にお願いしますぜひお願いします
-
最後にポッドキャストプラットフォームのフォロー、高評価お願いします励みになりますのでぜひよろしくお願いしますそれではまた次回バイバイ初めて触ったMacBook思い出がいっぱいのチーム開発再起動したら治った謎のバグ僕たち私たちは卒業します
-
駆け出しエンジニアを卒業したいあなたへひまじんプログラマーの週末エンジニアリングレッスン各種ポッドキャストで配信中
#429 ひま風呂!インターフェースと型ヒントの大事さを学べるたった一つの銭湯