#336 デザインパターンを業務で使えるようになるには?

2025/3/9 ·

  • この番組はエンジニアの成長は楽しい学びからをモットーにエンジニアリングに関する学びをワイワイお届けするラジオでございますワイワイでございますワイということで始まりましたはいひまじんプログラマーの週末エンジニアリングレッスン丁寧ですねパーソナリティは私のりとかいちでお送りしておりますはいということでなんだこれ



  • なんなんだこれ初めてやったわはいちょっとラジオっぽくしたくてはいじゃあ今日はですねラジオってこんなんでしたっけわかんないあんま賢まってないかもしれないけど結構フリースタイルですよねラジオってまあそのイメージですねうんうんということでですね今日はお便りが来ておりますねメルヒ



  • リスナーから来ておりますのでそれを解決することによってまた日本の中級エンジニア力を上げていこうかなという素晴らしい感じでございますお願いしますはいということで本日のお便りはこれ読み方なんだろうなジョジョンさんですジョジョンさんジョジョンさんからのお便りですはい



  • はいまずは最初の感想からはい 自分も4月ネスペ受けます頑張りましょうということで私へのエールが来ております素晴らしい 一緒に頑張りましょういやの収録3月1日ですけどはい1ヶ月ちょっとですね 僕はの事前に言っておきますと今年はの落ちると思いますすごい心意気ですねはい めっちゃ後ろ向きめっちゃ後ろ向きですはいちょっとね



  • 心が折れましたいや嘘です時間がないかな時間はないかもしれないはいということで一応会場にはいく予定なんですけどもしかしたら午後にいないかもしれないかいるなじゃあお伏せお伏せそうか支払いは完了してるから途中退席したら途中退席したらお伏せじゃないのか



  • 行く時点では向こうの労力かかってるはずだからまあそうねでも去年の貯金があるんではいうまく問題が当たればギリギリいける可能性もあるんで一応チャレンジはしますよ全然知らないんですけど試験免除とかはないんですね午前免除あるよ午前1、2ありますよね1だけ免除じゃあ応用と一緒ですね去年受けたからとかじゃなくて単純に応用の残効力はいはいはいはいはい



  • じゃあ午前試験はそっか変わらずなんですね変わらずですね午前試験は多分大丈夫だと思うんですよ午後を重点的にやろうかなって思ってるんですけどちょっとね時間があんま取れそうになくてやや絶望してます今締め切りある系だとそうですね僕AWSずるずる伸ばしてますけど結局時間ないあらららまあなので



  • もし得意な問題にぶち当たっていけば奇跡的に受かる可能性も10%ぐらいあると思ってるんでゼロじゃないですねなのでちょっとそれにはかけていこうかなって感じですね基礎力が上がってるはずですから上がってるかなネットワークの基礎力は上がってないんじゃないかなネットワークはそうかなねということで一緒に頑張っていきましょう頑張ってくださいジョジョンさんも頑張っていきましょう受かった報告去年僕が失敗した時の体験談もポッドキャストにあるんで



  • ぜひ遡って聞いてみてくださいありましたねまず時計をちゃんと買うっていうのが一番のポイントなんで面白まんだね心を整えるみたいなことしか言ってなかった気がするんですけどぜひ聞いたことなかったらね面白いので聞いてみてくださいあとは午後試験の対策を重点的にやっていきましょうはいはいはい



  • ってことで本題ポッドキャストで話してほしいことなんですけどいつもポッドキャストを楽しく拝聴させていただいておりますファニーリードを志すものですポッドキャスト内で数ある書籍紹介が非常に助かっておりそこから書籍をよく読むようになりました



  • 最近良いコード悪いコードやテスト駆動開発を読みデザインパターンについて触れられていることから理解を深めようとヘッドファーストデザインパターンを購入しましたおあの豆腐本激推し本です僕の届いた時書籍の厚さに驚きましたですよね



  • そこで質問なのですがこのデザインパターンはこういうものだよというのはわかるのですが使いどころなど業務で役立てるように学習するにはどうしたら良いでしょうかよろしくお願いしますということでめっちゃわかるデザインパターン悩みめっちゃわかるはいということでねこの悩みを解決していくべくはいまずファニーリードの目指し方からそっちそっち



  • そっち行っちゃうんですねこれは多分人前に立って立つ機会を増やすってこととその中で



  • どれだけ小ボケを挟むかだよね多分まあそうですね確かに小ボケは大事ですね手数が全てだと思うんで頑張ってくださいデザインパターンのやり方は言わないですねやっぱりやり方はそれぞれがあるでしょボケのスタンスとかもあると思うのでそういうのやっぱあるんですねまあいいんですよこの話はデザインパターンの業務での生かし方というところを今日はちょっとメインテーマで



  • 話していこうかなって感じなんですけどちなみにカイチくん現場のコードってなんか結構そういう要所要所でデザインパターン使われてたりみたいなのあります?ゼロではないゼロではないはいがそんななんでしょうね示し合わせとか明示的にはやってりゃしない統一とかもあんまりないかなそれってどういう瞬間に生まれてるんですかちなみにもう本当になんでしょうね



  • ファクトリーメソッド使ってテスト用のデータちゃんと作りやすくしとこうねみたいなそういう



  • 小技的な小技的なというかそういう感じですねなるほどもうなんか結構あれですか社内でこう共通言語的に使われてるんですかじゃあいやないですねそれは共通言語と伝わるんですけどもちろん伝わるんですけどあのなんていうのね設計段階とかレビュー段階でここはこういう風なデザインパターンでいきましょうみたいな会話はあんまりない



  • まあそうだよね多分僕のところも同じで誰かが実装した時にそのパターンが使えそうだったら盛り込んでいったことによって要所要所に散らばってるみたいなのが結構あるあるだと思ってて今の会社もそうですしSESの時の現場もそんな感じになってたなっていう記憶がありますねちょっと言ってることが違かったら言ってほしいんですけどデザインパターン



  • よりもエキサゴナルアーキテクチャでいこうみたいなそういうもう少し大きい範囲のアーキテクチャに関して会話はあることはあるんですけどそれよりも細かいと思ってデザインパターンってそうだね確かにさらにちょっと細かいデザインパターンぐらいの話は



  • まああんまりないゼロではないんですけど結構実装者レベルに閉じる流動になりますよね実装者レベルに閉じる流動になるんでアーキテクチャだと作るときにみんなが常に意識してないといけないけどデザインパターンって機能単体で完結することが多いから実装者で閉じることが多いですかねそうですねそうそうそう



  • そうそうまさしくそれゆえ機能によって複雑さも違うし作りも違うからしょうがない部分もあるんですけどちょっと機能ごとに書かれ方がちょっと変わったりはしますねさすがにそうなりますよねなので結構コードの要所要所に現れることが多い系かなと思ってますこれデザインパターンの説明しとかなくて大丈夫かなしてください僕が聞くべきでしたすいません



  • ここまでデザインパターンとは何ぞやみたいなところを話さずに来たのでもしかしたらこのエピソードから聞いている方もいるかもしれないので簡単に説明しておくとソフトウェア開発において繰り返し現れる問題に対しての解決策に名前を付けたものだから例えば人間で言うとしょっちゅう切り傷できるからロンTを着ようみたいな



  • ロングTシャツパターンですよねなんでシャツ伸ばしたんですか英語だから繰り返し現れるっていうのは一現場だけじゃなくて世の中いっぱいなところで出てきてますよとあらゆる家庭の子供は腕に擦り傷作ってますよとだからロンT着て防ぎましょうねみたいな



  • 着てたかなロンティ子供ロンティ嫌いだからねうん嫌い半袖ですよとにかくあとロンティはマジで大人も着るタイミングむずいと思う季節がないないですねロンティを着るすぐ寒くなりますからねそうすぐ寒くなるからすぐ暑くなるそうですねってことでそういう繰り返し現れる問題に対してこういうパターンで解決できるじゃんみたいなもともとは確かこれあれですよね建築から来てるんですよね



  • そうなんですね知らなかった建築で建築の本なのにも関わらずコアなエンジニアが読んでる本何それ雑学として出したいそんなのあるのクリストファーアレグザンダーのアレグザンダーなのアレグザンダーであるよそれはね俺も思ってるでもwikipediaにそう書いてるからアレグザンダーさんの



  • この人のパターンランゲージっていう考え方はいですっていう本え考え方これはね本だね本だわはいはいなんか何個かねなぜかエンジニアに読まれる本出してるんですよこの人



  • 謎ですね本人も本位ではないかもしれないですけど不思議ですよねでもなんか結構さウォーターホールとかも元々建築から来た概念じゃないですかそうですねだから何か作るって意味で建築を参考にして発達していった工学なんでしょうねってちょっと思うんですけどそうですねこういうのをデザインパターンと言いますよとで有名なものだと



  • ゴフと呼ばれるあのギャングオブフォーかっこいい もうね四天王みたいな人たちがいるんですけどその人たちが1990年ぐらいに出した本ですかね オブジェクト思考における再利用のためのデザインパターンという本がございましてこの中でカタログ的に23個のパターンが紹介されてるんですね それが多分一番有名うんうん



  • もしかしたら聞いたことあるかもなってやつだったらさっき出てきたファクトリーパターンとかもそうですよねファクトリーメソッドパターンかとか名前の有名度で言ったらシングルトンパターンとかがよく出てくるのかなてかまあやってるんですもんねなんかやってるのも何個かありますよねある意識せずあると思う普通に書いたらこうなるみたいなあると思うそれはでそれが一番有名なデザインパターンなんですけどそれ以外にも実は世の中にはありますねうん



  • 結構僕現場でよく見るのはリポジトリパターンとにかく置いとくやつそれぐらいの市民権やってますよねあれとかはゴフではないけどデザインパターンとしてよく使われてますよねゴフじゃないんですねないと思うそうなんだあとこれはフレームワークによく取り入れられてるんですけどアクティブレコードとかもパターンと言っていいんじゃないかな



  • どんなんでしたっけルビーオンレールズとかララベルとかその思想にのっとったモデルが作られてるんですけどテーブルと1対1でそのテーブルに対しての責務をそれぞれ負ったオブジェクト1個ずつ作ってるみたいなあのパターンですねあれアクティブレコードとか言ったりするしあとはDDDとかの文脈で出てくるバリューオブジェクト値オブジェクトとかもパターンと言っていいんじゃないですかね



  • っていうので5分以外にもいろいろあったりするんですけどそういういろんなこうやって作るといいよみたいなパターンがデザインパターンでございますこれによって効率的にまず問題を解決できるよねとかあと結構考え抜かれて作られているので保守性が高くなるよねとかっていうメリットあったりとかあとは会話の時にですね



  • このパターンって言っただけでどんな課題があってこういう風な解決をするよっていうのがお互いそのパターンを知っていればそこがこのコンテキストになるというかバックグラウンドとして共通のものを持っている状態になれるのでハイコンテキストな情報密度の高いコミュニケーションを取ることができるようになるよと



  • よく本では言われてますねメリットで言うとコードを読みやすくなりそうですよね知っていればこれで書かれてるんだって言ってそうね多分大体そのパターンを関する名前がクラス名に付けられるイメージあるのでそれを見ただけでそれを意図して作ってるのかみたいなところとかも伝わるようになるともちろんお互いが知ってるっていう必要あるんですけどねっていうのがざっくりデザインパターンですよとこれ業務での活かし方ってねうん



  • じゃあ俺が活かせてるのかって話もあるんですけど一旦ちょっと僕の思うことだけお話しさせていただくと結構あるあるだと思うのがパターンを学びましたとこれをどっかで使えないかどっかで使えないかって目をデザインパターンにして探して見つかった瞬間にそれを当てはめるみたいなのは



  • あんまり良くないんじゃないかなと思ってますこれって目的がデザインパターンを使うことになっちゃってるみたいなっていうのはあんまり良くないかなと思っててどっちかっていうとこの課題どうにかして解決できないのか



  • こんなパターンがあるいけそうだっていう順番が一番いいんじゃないのってまず思います課題ありきそうじゃないとまず人間って何でも新しい道具を見たら使いたくなるんですよ子供の頃とか思い出してみてくださいよなんすか



  • ドラゴンの絵柄が描いた裁縫セットはいあのありますね僕は使ってましただよね俺ねでもね水色のなんかよく分かんないのにしたなあそうなんだダメだこの話を繋げられなかったわ失敗したえ何に使ったかなと思ったけどあんま使ってないわあーそういうことね失敗したわいや



  • でもまあウキウキでしたよ家庭科の時間家庭科の時間ウキウキだよねでもなんかこう違うものに使ったなってことがあんまなかったわまあまあ裁縫はそうかもね彫刻刀とかは分かんないけどねあー



  • あんなんわかんない僕はやってないですけど学習机削るやついましたよいたねいたわそうだよねあれさ赤貝の時とかさ超ボコボコ机とか大外れ机あるここにペン引っかかるんだよみたいな大罪ですよねそれは確かに



  • デザインパターンの間違った使い方なのかどうかはさておき間違った使い方しちゃってるよね彫刻刀を使うことが目的になってしまっているダメですよと人間はでもそういう性質あるなって思うのでちょっとそこは気をつけた方がいいかなと思うのでそうですねって考えたら多分パターンのこういう風に書くよってことを知るというよりはそのパターンで何を解決したかったのっていうのを知る方が大事だと思うんですよねそしてそれを知るのに



  • 良いのがヘッドファーストデザインパターンなんですね素晴らしい振りもうすでに購入されてるということなんですけどそうですねあの本ってパターン出てくるの結構後だと思うんですよそうだっけなんか一章ごとにいろんなパターンあるじゃないですか最初に課題あって困ったってなってなんか神みたいな人が出てきてで、出しよって言って



  • なんかパターンを授けていくみたいななんかそういうフォーマットだったと思うんですよね あのフォーマットだったからかそうどういう課題あるのみたいなのがすごいわかりやすいなって僕は思ってて なのでまずはあの本を読んでしっかりどういう課題を解決するためのパターンなのかっていうのを知った方がいいと思いますね パターンの書き方なんでそんな都度調べれば出てくるんでそこは別に覚える必要もないような気がする なるほどなるほど



  • っていうのがまず何でしょう業務で使う第一歩かなと思ってます一気に全パターンとか覚えなくていいなと思ってて多分順番に一個ずつそういうのって身につけていくもんだと思うんですよってなった時に本当にあのヘッドファストデザインパターンに引きずられまくってて申し訳ないんですけどまずはストラテジーパターンとか使えるようにしてみたらって思いますねなんか



  • デザインパターンって23個あるけど全部同列で同じぐらい使われるわけじゃないじゃないですかそうですね多分頻度の差があって適用できる汎用性みたいな違いがあると思うんですけどストラテジーパターン使えるケース結構多いんじゃないのって思うちなみにどんなパターンなんですかストラテジーパターンはですねまずどういう時に使えるかというと



  • なんかソースコードの中に同じような条件分岐がいっぱい散らばってるときはチャンスだなって気がしますねチャンスなんですねチャンスだなってまず思うなんかここのif文なんかさっきも同じようなの見たよなみたいなのがいろんなとこにあるパターンうん



  • この時は結構ストラテジーチャンスと呼ばれててストラテジーが活躍するチャンスだと思うんですよストラテジーパターンは一個の共通インターフェースを作ってその状況に応じて具体的な実装を切り替えるようにするみたいなパターンです現実世界のいい例えを検索中ですわかりました待ちます微妙だけど微妙な例えが今出てきましたリモコンですリモコン



  • リモコンってオンオフにするインターフェースがありますと超シンプルリモコンです



  • オンオフだけこれが要はインターフェース部分ですよね人間は使い方としてはこのオンオフボタンを押したら電源が入って電源が消えるってことが分かると同じインターフェースにエアコンの電気をつけたり消したりしたいときは中にエアコン用の基板を入れとくとそうすれば使ってる側は何も意識せずにオンオフを押すだけでエアコンを切ったりつけたりできる



  • 中にテレビ用の基板を入れれば同じ操作でテレビのオンオフができるとこんな感じです質問いいですかはい



  • 具体的なコードで言うとインターフェースがあってそれを継承したやつらがいるっていうことですかそうそう継承っていうかインプルメントかなあれは実装だからそうかそうっすね継承じゃないですね親子じゃないですもんね親子じゃなくてインターフェースがあってそれを実装している具体的なクラスが何個かあって場合に応じてそれを切り替えるようにするよっていう感じですね



  • イフ文あれかもし例えばエアコンだったらこのメソッドやるとかもしテレビだったらこのメソッドやるみたいなイフ文ないしケース文みたいなのがあったときにストラテジージャンスってことでそれはインターフェース



  • 具体で実装したエアコンリモコンクラスとかテレビリモコンクラスみたいなのをインスタンス化して同じメソッドオン実行すればよりスッキリして管理しやすいよねってことですねこれを使うとなんでさっきのif文がいっぱいあったらチャンスなのかっていうのにちょっとまだひも付いてない気がしててこれができると何があるか



  • 要は違反がいっぱい散らかってる状態って複数の作業で同じ分岐が発生してるわけじゃないですか具体的なクラスの中に何個かメソッドがあると思うんですけど



  • インターフェースは共通してますとつまり持ってるメソッドは全部同じですよと全部同じはちょっと言い過ぎた共通のやつは持ってるよとインターフェースに書かれてるものに関してはってなった時に実は各それぞれのメソッドで今までは分岐が発生してたんですねそれがこうやってインターフェース作って具体的なクラスに分けていくとまず分けたからもちろん分岐はなくなりますよねそれぞれの分岐は実は最初のポイントだけでよくなるんですよ



  • 要はインスタンス作るときにエアコン用だったらエアコンをインスタンス化しておけばもうあとは何も考えずにそれまでのメソッドを呼べばOKになると一方インターフェースなくて今まで分岐してたときっていうのは要はその4つの実装がなんて言うんでしょうねパラレルにマージされている状態というかエアコンテレビ



  • ああそう扇風機エアコンテレビ扇風機みたいなブロックがポンポンポンって縦に並んでるみたいなオンメソッドならもしエアコンならこうやるもしテレビならこうやるもし扇風機ならこうやるみたいなそういう分岐が入ってたのがクラスごとにまず分かれてるじゃないですかうんうん



  • っていうことですねつまり分岐が1回で済むんでめっちゃシンプルになるというのがストラテジーパターンこれ言葉だけで伝わるのかないけるか全力神砕きしてました今全力神砕きしたとりあえずそういうことですストラテジーパターンは



  • 分からなかった人はググってくださいいい記事はいっぱいあります具体的なコードを見た方が分かりやすいって人もいると思うんで具体的なコードを見ないと分からないですよねもちろんそうだわなのでその辺はちょっと手元でコードを見ながらさっきのことを意識してもらえれば



  • もしかしたら理解できるかもって感じなんですけどなんかこれ他のパターンよりよく見る気がするんですよね使えそうな箇所まあまあまあ確かになのでまずはそこからちょっとマスターしてそれがもうなんか使えるぜってなったら次のステップに行くみたいな次のパターンに行くみたいなことをしていくといいんじゃないかなと思ってますちょっと質問いいですかはいえっとストレテジーパターンの話のもう一個前に戻っちゃうかもしれないですけどはい



  • 課題先行で解決策としてデザインパターンを使うのがいいみたいな話だったじゃないですかその課題を築くのもコツあるなと思っててどうやっていけばいいんですかねそれはいわゆるコードスメルを感じるか感じないか確かにねですよねだからどう思いますって一旦言ってみます



  • そうですねコードスメルって言ってるのはですねこのコードいけてなくねって思うみたいなぶっちゃけこれはあれだよねデザインパターンだけ勉強してれば気づける問題ではないよね確かにその課題部分ってそうだと思いますまずは実務で触ってるコードがあったらそこに対してなんかモヤっとするなみたいな感情がスタートなんじゃないかなと



  • 思っていてその行動のなんかモヤっと感じた後に勉強するのがまずいいと思うんですよその勉強する内容を



  • 多分どっちかっていうと本当にクラスみたいなところの結構ちっちゃいところの設計とか詳細部分の設計みたいなのを学んでいくとこうすると良いのにうちのコードはこうなってるからこうなのかみたいなのに紐づく気がするからそのモヤモヤを抱えた状態で良いコード悪いコードで学ぶ設計入門読むのがいいんじゃないですかねもう一深掘りしたいんですけど



  • 僕きれいにコード書く前それこそ入社直後って何見ても多分モヤっとしなかったんですよ多分ねなぜならきれいに書かれたコードも読みづらいし僕からすると汚いコードも読みづらいしだからモヤっとしないと僕なんでそれモヤっとしないモヤっとするようになったかっていうと現場のコードでモヤっとしたからっていうよりはまず一旦なんか



  • 綺麗なコードってコードやねんみたいなのをある程度学んだからこそなんかもやっと感じるようになった気がしていてニヤトリ卵なのかもしれないですけど感性だなそうだな感性多分字見たことない人って字綺麗とか汚いとか分かんないと思うんですよねあー確かに絵とかも多分上手い下手分かんない気がしててこれが上手い絵なんだっていうのを漠然と何個も見てて



  • 本当に機械学習の学習みたいなもんですよねなんとなくこういう要素があると綺麗なんだなみたいなのを感じ取ってその上で多分綺麗なんだななぜならこれだと理解しやすいからかとか変更する時に余裕だからかみたいなのを学んだからそういう違和感を感じれるようになったと思ってるんですけどのりさんってどういう過程でそういう風な違和感とかモヤモヤを感じるようになったんですか



  • 俺ね幼稚園卒園した時くらいから感じてたななんそれ全部嘘じゃんそれは全部嘘まあ嘘なんですけど知ってました?残念ながらなんだろうねでも僕結構最初からなんかモヤモヤを感じていたかもしれないそれフィリピン行ってる時からですか?



  • ノリさんは入職前 転職前かフィリピン行ってましたけどそれで言うと俺綺麗なコードを書くみたいなところにずっと興味があったかもしれない 最初からそれはコードに限らずでしたちなみに作文とかもそうでした作文は全然なんでコードはそう思ったんですかロマンを感じたからなるほどちょっと国落ちたかもしれないなんか憧れじゃないけどロマンなんだなんか崇高なるものであるべきみたいなわかんないけどうん



  • そういう感覚なのかあるかもしれないそれはあるかもしれない確かに別にネガキャンじゃないんですけどマジで大学の時の授業のコードって前も言ったかもしれないですけど変数の命名適当だったんでそれはお手本のコード含め



  • Aイコールみたいな変数に入ってたんでだからこそなんかそれを刻み込まれてたからあんまり気にしてなかっただけかもしれないそういうことか確かにその入り入りするとそうなるかもしれないなそう



  • って言っててちょっと僕の同級生がちげーよって言ってたらすんごい申し訳ないんですけど僕はそういう記憶なんですよねなんかお手本のコードはマジで変数名に意味のあるワードが入ってなかった気がするその体験はもうカイチのものだからちげーよ俺の教科書だけ違かった可能性もあるよねマジでカイチのだけ変数名直されてたかもしれないやばいね難読化されてる



  • いやでもそうかそう考えると最初から興味あったんだよな多分ない人いると思うんですよだからそういう人どうしたらいいんだろうなっていうのを今のりさんの話聞いてて思って質問した次第でした欲求がなかったら結構むずいよなそれ



  • 欲求はあると思うんですよね人によりますよね確かにお便り送ってくれてる人は欲求あると思うのでもちろんいいこと悪いことにも書かれてたんですけどそういう良くない設計って認識するのがめっちゃむずいっていうのは確かに言っててっていうのも



  • ピヨピヨエンジニアが入ってきた時に最初から悪い設計だった場合それが悪いかいいかって判断つかないから結局そのまま学んじゃってそれがいいものなのか悪いものなのかっていうのを気づくチャンスがなく成長していってしまうみたいなそうそうそうそうそうのが書かれててまさにそれかって思いながら聞いてましたそれですまさにそれですめっちゃ現場に依存しますよねめっちゃ依存する



  • 現場というか周りの人 まずは世の中に同じく動くものがあったとしても保守性が高いものとそうじゃないものがあるよっていうところを認識するところから始めないといけないってことですよねじゃあやっぱりなんか1,2年とかでわかるものではなくて 複数プロジェクト経験してなおかつレベル差のある複数プロジェクト経験して初めてわかることかもしれないですね うんうんうんうんうん



  • 確かにあとSESだったっていう性質上もあるのかもしれないなんかさすがにコードの中身とかの話までしないですけどうちの現場こうだよみたいなそれぞれの違いみたいなのを共有することももちろんあるんでっていう意味でもなんかいろんなものがあるっていうところの感度が高くなったのかもしれないなるほどなるほどな確かにな



  • そうかもな僕総合職で入ってたんでみんなエンジニアじゃないんですよ同期200何人いましたけど多分エンジニアやってるの4,50人くらいだったのかな正確な数字わかんないですけどなんで同期で集まってもコードの話しないんでその差はあるかもしれないもちろんね駆け出しの会話なんでどんなライブラリ使ってるとか



  • どんなフレームワークなのみたいなそのレイヤーの話ですけどまあまあまあ確かにどんなアーキテクチャなのみたいな話しないですよね全然できないよそんな話確かにしないわなそりゃっていうバックグラウンドがあったかもしれないなるほどありがとうございますっていうのでちょっと聞いてる方で違和感どうやって感じれるようになるんだろうみたいなそういうの思う人がいたら今の何かからヒントを得てくださいそうですねいい行動悪い行動で学ぶを読むのがいいと思いますあれめっちゃいいですねうん



  • あれ良かったグッドコードバッドコードも面白かったですねあっちの方がちょっと難しいよねあっちの方が難しいですいいコード悪いコードの本読んでまず基礎力つけてからいくといいよねと思いますちなみに僕デザインパターンを学習するのって使うため以外にもメリットあると思ってるんですよ気になる



  • っていうのもですねこのデザインパターンってよくあるのだと本当にもう何十年も前に作られたやつじゃないですかなのでそもそも言語とかライブラリーにその概念が組み込まれているみたいなことってあるじゃないですかうんうんうんうんなんでもうデザインパターンって意識せずにライブラリーだけ使ってるみたいな感覚の時さっき言うアクティブレコードの話みたいなアクティブレコードもそうですねとかゴフのパターンだとイテレーターとか多分わざわざ自分で実装しないんじゃないかな



  • どうなんでしたっけ繰り返しの処理をするために特化したオブジェクトみたいなやつを作るパターンですねでちょっと他の言語だとライブラリ名わかんないんですけど何かしら多分そういう配列をラッパーするような繰り返し用のオブジェクトあるんじゃないかなって気がするんだよねっていう意味で



  • まずそれってそれを使うじゃないですかでも使うときにその背景を知ってるのと知らないのだとこれってこういう使い方できるのかなみたいな発想の幅が変わってくるじゃないですか多分はいはいでプラスそれが全てそれが全てそれが全て知ってて使うと知らないで使うの差が出ると思うなんか結局



  • エンジニア周りの勉強全部の勉強そうかもしれないんですけど文字列からイメージをどう作るかだと思っててでそのイメージの解像度上がりますよねなんか情報の立体感が出るというかでそういうのがいっぱい出ると脳っていろんな情報とインデックス紐付けて記憶できるんで覚えられるようになるというかそうねまあちょっとこれ過去にも出したような気がするし絶対誰にも伝わんないんであんまり言いたくないんですけどトップロックと同じなんですよねははは



  • 絶対誰にも分かんないブリークダンスの立ち技ですね誰にもではないですねオリンピックで取り上げられたのでもしかしたらダンスやってない人でも伝わってる可能性あるんですけど



  • あれってステップに意味があるじゃないですかありますね例えばトップロックの2ステップとかだとフロアを自分のスペース確保するみたいなそうですねブレイクダンスでぐるぐる回るダンスなんで混雑してるクラブだと回れないとだからトップロックっていう2ステップっていう動きをやることで両手を広げながら人を避けながら



  • 自分の回れるスペースを空けるみたいなそうでそれを知ってるのと知らないのだと知ってたらじゃあそういうのをなんか意識した動きになるんですけど知らないと形だけ真似した感じになってなんか薄っぺらい感じになっちゃうみたいなそうですねそういう差が出そうな気がしてる確かに確かになるほどねそれはまあ真理なんでしょうねっていう意味で使わなくても勉強する意味はあるんじゃないかなと思っているうん



  • 難しいのがそういうのって給料に直結してる感じはしないじゃないですかしないねだから人によってモチベーション難しい気がするんですけどただこういうの知ってると仕事が楽しいですよっていうのは言っときたいですねクラフトマンシップだよねと言いますとなんか職人魂みたいな同じこと言ったね今日本語で言いましたね見事にそう



  • 武士道みたいなまあまあまあこだわりいや本当に楽しくなるんでやるとね解像度上がるとなんかよくわかんない何かからこれってこうなんだとかなんか作り手の意思とかいや本当に多分



  • 僕これは想像なんですけど達人プログラマーぐらいになるとコード見るだけで書いた人の性格わかるんじゃないかっていうねいけるそこまであるじゃないですか声から顔を想像するAIとかあるんですけどコードから書いた人の姿形を想像するAIとかもあるかもしれないいやむずいでしょ姿形性格とか身長とか身長までいけるよね



  • 性格と身長って相関あんのかなとかね人が見えるというかねコードの内容とコミットメッセージからどんなやつなのかみたいなのができそうな気がするめっちゃわかるわこいつは結構積極的にやるタイプなのかなみたいな一緒に仕事したいかしたくないかぐらいは完全にわかりそうですね



  • あるかもねこの人マメなタイプだなそうそうそうそう出るよね見られてるよっていうのはありますね行動とコミットメッセージ見られてますよあとなんかちょっとデザインパターンの枠から超えてるんですけどパブサブってあるじゃないですかパブリッシュサブスクライブモデルみたいなえー



  • Googleクラウドだと本当にPubSubっていうサービスだったりとかAWSだとなんだSNSとかみたいなサービスでPubSubってモデルが実装されてるケースとかあると思うんですけどあれとかってめっちゃオブザーバーパターンだなみたいなのを思ったりするんですよねあれってまずなんか通知を発生させるやつがいるじゃないですか通知を発生させる



  • その通知を受け取りたい奴らがいるじゃないですか受け取りたい奴らがその通知をサブスクライブするじゃないですかその結果何かイベントがあった時にサブスクライブしてる人たち全員にメッセージ送るよみたいなことをすると思うんですけどコード上で同じことやってません?オブザーバーパターンってどうなんでしたっけ?今やったことをやってるやつですねそうですねそのイベントに応じて必要な処理を実行するみたいなことを裏でやるんですけどなんか



  • どっちが先か問題はあるんですけどパターンを知ったことによってパブサブなんかすごい理解しやすくなったなとかあったりしたんできっとコード内に閉じないとこでも似たような概念の応用されてるケースあるんじゃないかなって気がするんでそういう意味でも学んだことは無駄にならないんじゃないかなと思っておりますパブリッククラウド以外でもねありますしシステムのアーキテクチャ考える上でもあり得るんだねそうねパブサブ使わなきゃなとかはうんうんうん



  • というのでデザインパターンを勉強する意味使わなくてもあるんじゃないか 説そしてもう一つはい僕はこのなんかデザインパターンを学ぶことによってインターフェースのありがたみがわかったんですよね それそれまでインターフェースマジでなんかレベル高い人が使っていてめんどくさい



  • 余計に書かなきゃいけない最初見たとき遠回りじゃないですかなんでこのインターフェースに空っぽのメソッドを定義してしかもクラス実装するときそれをメソッドやってないとエラー出るじゃんめんどくさいじゃんかっこつけてるなみたいなかっこつけるために遠回りするための道具だと思ってたんですよ



  • なんですけどそんなことはなくてですねなんかそこのメリットって多分インターフェースを共通化させることによって実装部分とその使い勝手の部分みたいなところをうまく分離させて素結合にするみたいな目的があるんですけどそれのなんかありがたみをやっとそのデザインパターンの裏側にあるなんか理由を知ることによって学べたなってのがあったんで学習教材としてすごいいいと思うんですよねっていう



  • だからまず必ずしも業務で使わなきゃいけないわけじゃないなと思っていますよっていうのもありますそうですねデザインパターン話したいこと全部話したんですけどまとめに入りますとまず業務で活かすなら課題先行で使っていこうぜ無理やり当てはめて無理やり使おうとして事故ってるところを見たことはあるのであるんだあるよあるんですねある



  • なんでここで使ったのみたいなあるでしょうねパターンとあと使う場所は適切だったけどもその意図を多分周りが何も理解してなくてよくわかんなくなっちゃったパターンみたいなあると思います周りができないことをやりやがってが一番多い気がするあるとしたら



  • なんかふとすっごい昔の行動を思い出したんですけどストラテジーパターンによっていろんなストラテジーに分かれてたんですよそのストラテジーの中で言う文書かれてて今考えるとあれは何が起きたんだろうって思っているいやまあまあまあまあまあ乗っ取ったんでしょうねなんとなく既存にまず動けっていう願いを今そこから読み取った僕はそれも当時分からなかったんで



  • ここ分岐させればいいのかつって分岐増やした記憶あるんですよねそうなんだよなー既存のコードから糸を読み取るのはマジで知識が要りますねいるねー事故るケースもあるのでまず無理やり使うっていうよりは課題を見つけてから使っていく方がいいんじゃないかなというのが一つもう一個はそもそも使わなくても勉強する価値はあるよねうん



  • 例えば学習の助けになったりとかあれを学ぶことによって理解深まる分野があったりするのでそういう目的で学んでいくっていうのも全然ありなんじゃないかなっていうちょっと別の聞き口なんですけどっていう2点が本日の言いたかったことのまとめでございますありがとうございますちょっと設計とかデザインパターンなど学び続けたいので僕も



  • またお便りください学んだら学んだで別に何か出るかもしれないですね現場出てみてまた別に何かあるかもしれないんでそうですねこういう話はすごい採用率高いんでね多分確かにちょっとお便り申し訳ないですけども読めないやつは読めないってなっちゃってるんでそうなんですよなぜなら分かんないから分かんないからねちゃんと読んでますけどエピソードになるかはちょっと話題によるんでそうですねすいませんが



  • いつか頑張って回収したいなと思ってるんですけどちょっと数年後になる可能性ありますよねそうですねお便りありがとうございましたありがとうございましたはいハッシュタグひまじんプログラマーでSNSネックスフィードバックスを募集してますので本日の話の感想とかいただけましたらお願いしますよろしくお願いしますまたポッドキャストの説明欄からGoogleフォームで番組のお便り要望感想質問何でもお待ちしてますので感想だけでもいいのでそれが励みになるのでぜひお願いしますどしどしじゃんじゃんじゃんじゃん



  • あとは各種ポッドキャストプラットフォームでのフォロー、高評価、ボイシーもやってますのでお願いいたしますはい、ではまた次回バイバイ初めて触ったMacBook思い出がいっぱいのチーム開発再起動したら治った謎のバグ僕たち私たちは卒業します駆け出しエンジニアを卒業したいあなたへ



  • ひまじんプログラマーの週末エンジニアリングレッスン各種ポッドキャストで配信中

0:00 41:47

#336 デザインパターンを業務で使えるようになるには?