PHPカンファレンス2020 レポート

PHPカンファレンス2020 レポート[後編]

この記事を読むのに必要な時間:およそ 5 分

パネルディスカッション「ひさてるさんに聞け」

このセッションでは,プログラムの設計手法についての疑問を,初心者にも分かりやすい内容で議論しました。登壇したのは,司会の小山哲志さん,ゲストの田中ひさてるさんと,イアン・ブライソンさんの計3名です。田中さんは, 大阪でWebサービスの開発・保守に携わる傍ら,Software Design誌で「ちょうぜつエンジニアめもりーちゃん」を連載。イアン・ブライソンさんはBASEに勤務する社会人3年目エンジニアで, 設計の分野に関心があるとのことです。

画像

多くのソフトウェア開発者が突き当たる疑問を事前にTwitter等で集め,その疑問について取り上げました。

このセッションで取り上げられた疑問の一つに, 次のものがありました。

詳細設計のレビュー時に,メンテナンス性/拡張性の考慮不足について指摘を受けてしまう。設計手法やおすすめの本があれば教えてほしい(エンジニアに転職して2年目の方より)

この質問に関して,田中さんがご自身の経験を基に話をするところから議論が始まりました。

田中「私は,最近コードを書くよりレビューする機会が多いのですが(笑)

まず,質問者の方はレビューで指摘されたくない,合格点をもらいたいと考えて完璧を目指しているのではないでしょうか。もし,そうであればそんなことを考える必要はないです。

こちらとしては,コードを書いてもらえるだけでありがたいと考えており,ざっくりでもいいので,ぐいぐい進めてもらえると嬉しいです。その中で,コードを眺めて……ここは!というところを指摘しています。

イメージとしては,⁠時間差のあるペアプログラミング』をしているイメージを持ってもらえればと思います。⁠採点される!』ではなく『一緒にコードを書いている』というイメージを持って気楽にしてみてください。もし上司に指摘されるのを恐れているのであれば,自信を持ってください!」

(中略)

イアン「指摘されてやだな〜ではなくて,見つけてもらえてラッキー!という感じですか?」

小山「そうですね!」

イアン「指摘されると実力不足を痛感しますが,数ヶ月立って指摘されなくなると成長を感じますね」

この議論の中で,正解をもらおうと思う人と,自分で相手の問題を解いてあげようという気持ちの人では,後者のタイプが成長しやすいことも語られました。小山氏は,ソフトウェア開発が正解のない作業であり,常に考えながら改善する姿勢を求められる点に触れ,⁠常に1つの正解を求めると何重の意味でも失敗を重ねてしまう可能性がある」と述べていました。

KISSの法則を意識する

田中さんはソフトウェア設計を考える取り掛かりについて「KISSの法則というものを意識するといい」と話しました。

田中「⁠⁠Keep it short and simple』の略で,シンプルにしておきなさいという格言です。デザインの世界でもそうですが,シンプルなものは洗練されていることが多いです。⁠Less is more」⁠訳:少ないほうが豊かである)という言葉もあるように」

小山「単機能なものは単機能に納めておいて,複雑なものは入れない。バグが入り込む余地がなくなりますからね。ソフトウェア設計では増やすより減らすことが難しいですから」

イアン「最初のほうはやりがちでした(笑⁠⁠ ここに追加すればいいじゃん,としてみたら後からごちゃごちゃになって」

YAGNIを意識する

次に,ソフトウェアの複雑さをなくしつつ一般化を意識する考え方として「YAGNI」について話しました。

田中「要は必要になるまで作るなということですね。変な値がくる可能性とかいろんなことを考え始めると,行数がめちゃめちゃ膨れ上がっていきます。コードが硬直していく原因になっていきます」

イアン「設計といえばいろんなことを考慮するってことと思ってましたが,そうではないんですね?」

小山「こんなこともあろうか,ということは8割くらいこないですね(笑⁠⁠」

田中「考えること自体が無駄ということですね。最近はリファクタリングの考え方が進んだり,CIの導入が進んできたので,壊しては作ることが簡単になりました。考える時間がもったいない。必要になってから作ればよいのです」

TDDは100%お勧めできる開発手法

最後に,⁠どう動くかではなく,どうあるべきか」を設計する具体的な方法として「TDD」について話しました。

田中「どう動くかではなく,どうあるべきかが設計のスタートラインです。テストを作ってどうあるべきかを定義して,テストにパスする実装を作りましょうという考えです。テストって,まずクラス名を決めるじゃないですか? この時点でどうあるべきクラスか,何のクラスであるかが決まるのですごくいいと思っています」

おすすめの本

エンジニア1年目,2年目におすすめの本として,次の本を紹介しました。

  • 『プリンシプルオブプログラミング⁠⁠:学習内容に迷っている際,次の学習内容を決める指針になるとのことでした。
  • 『クリーンコード⁠⁠:ミクロなレベルでコードの書き方を解説しているとのことです。
  • 『Clean Architecture⁠⁠:田中さんはPackage原則の章を勧めていました。イアンさんも章ごとが短く読みやすいと勧めていました。

他にも,某ロボットアニメでオブジェクト指向プログラミングの説明があったり,Active RecordとO/R Mapperの違いについての話に触れた後,議論は終了となりました。

著者プロフィール

西祐太郎(にしゆうたろう)

株式会社アドベンチャーでエンジニアとして勤務。WordPressでPHPを触り始め,その後Laravel,独自フレームワークと複数のPHPプロジェクトを経験。最近は開発の傍ら,プロジェクトリーダーやエンジニア採用などにも携わる。レガシーコードのモダン化とマイクロサービスアーキテクチャにご執心。

Facebook:https://www.facebook.com/profile.php?id=100028405416669
GitHub:https://github.com/yuta-ron

バックナンバー

PHPカンファレンス2020 レポート