この記事は?
今週の土曜日に開催されます、PHPカンファレンス沖縄で登壇する時の内容のプロトタイプです。
これはまた更新されていく可能性があります。
ネタバレが嫌な人はブラウザバック!
そして、『これはこうしたほうがいいんじゃない?』って思うのがあれば、お気軽にお声がけください!
話したいこと
アンチパターンを通じて、
○○だから、これで動く から、 ○○だから、こう書く
に感覚を変えていきましょう。
アンチパターン
CSS編
marginは空白を作ってくれる。だから2つ使えば両方の空白を足した値になるよね!
→使っているものの意味を正しく理解していないパターン
marginが重なるとページの幅が予想外の値になる。
なんでこうなってる?
この時こう動くから、きっとこうなんだろうっていう思考。
どう向き合う?
この時こう動くのは、こういう『目的』だから、きっとこうなんだろう
扱っているものの『目的』を知覚しよう
JS編
apiを投げたら、ユーザーのステータスが変わる。すると表示内容を変更する必要がある。
なら、apiを投げた時に、内容を変更すればいいよね!
→発生するタイミングを正しく理解していないパターン
他の事象で、ユーザーのステータスが変わる機能が実装されると、正しく動かないor多重管理が始まる
なんでこうなってる?
起こった事象の細分化が足りてない or ユーザー視点でしか見れてない
どう向き合う?
apiを投げたら、表示内容を変更する必要がある。
ここまでしか分析が出来てない場合は、『なぜ』を繰り返す癖をつけてみる。
apiを投げたから、画面の変更をする必要がある。なぜか。ユーザーのステータスが変わるから。 ユーザーのステータスが変わると画面の変更をする必要がある。なぜか。見る権限が変わるから。
こうなると、権限が変わることをトリガーにするのも良いのかもしれないと考られます。
apiを投げたら、ユーザーのステータスが変わる。すると表示内容を変更する必要がある。
ここまで分析していたら、『Aすると、Bが起こる。だから○○する』 の一番最後に発生する部分に着目することを意識する。
PHP編
情報が足りてない場合もある。
1.『ボタンをクリックしたら、このページのclassがspecial_itemsのパーツの色を変えてほしい』 2.『それはこの画面の上から4番目のパーツだ』
こう言われたとき、あなたはどんなプログラムを書きますか?
これ、実はこの時点では答えがありません。
なぜか。『依頼者の目的』が明らかになっていないからです。
『なぜ』の問い掛けをしてみましょう。みなさんは、この問い掛けはどんな意図で投げられたと思いますか?
依頼者の目的
では、ヒアリングしてみました。
どうやら、特集をやりたいらしい。
特集対象の時には、対象にspecial_itemsをつける。 special_itemsを目立たせるために、色を目立つ色に変える
違う可能性って?
今回はわかりやすく4番目にしましたが、これが1番目で色が金色を指定していたら・・・?
もしかしたら、1位である、1番目であるということに意味があったら・・・?
もし間違えると?
この実装は2種類考えられます。
.ranking:first-child { background-color: yellow; } .special_items { background-color: yellow; }
前者であれば、一番最初であることが重要なので、中身がどんなに変更されようが、
必ず一番上は黄色になります。
後者であれば、順番がどんなに変わろうが、対象のクラスは黄色になります。
1位を黄色にするのが目的のときに、後者を実装すると、
special_itemsの場所が変わったり、special_itemsが他の場所で使われたりすると、バグが発生します。
特集を対象とする時に、前者を実装すると、
special_itemsをつけたものが1位じゃなくなった時に、バグが発生します。
なぜ?の問い掛けは、自己完結するとは限らない。 実装に着目するのではなく、目的に着目する。 そのためには、依頼者に確認するというのも可能ならしよう