Skip to content

1メソッドの限界 ― 13個の処理を1つに書いたら

📖この章のキーワード
用語意味なぜ重要か
結合度(Coupling)異なるコード間の依存の強さ結合度が高いと変更の影響が広がる
責務の分離1つのクラス/メソッドは1つの役割に集中する原則テスタビリティと保守性の向上
ヘルパーメソッドメインロジックから分離された補助的なメソッド各処理を個別にテストできる

Phase 1: 観察

trade-off メソッド分離はされているが、1クラスの責務が大きい設計です。

LINE でユーザーが友だち追加したとき、LIBOT は以下を全て実行します。

php
// FollowEvent.php(構造の概要)
// Label: trade-off

class FollowEvent
{
    public function process(): void
    {
        // 1. 重複メッセージ検出
        if ($this->isDuplicateMessage()) return;

        // 2. 友だち情報の取得または作成
        $friend = $this->findOrCreateFriend();

        // 3. ステータス更新(ブロック解除の場合も含む)
        $this->updateFriendStatus($friend);

        // 4. 流入経路の記録
        $this->logFriendAdditionRoute($friend);

        // 5. 紹介フォローの処理
        if ($this->isReferralFollow()) {
            $this->processReferralFollow($friend);
        }

        // 6. 流入経路フォローの処理
        if ($this->isInflowFollow()) {
            $this->processInflowFollow($friend);
        }

        // 7. ウェルカムメッセージの種類決定
        $welcomeType = $this->determineWelcomeType($friend);

        // 8. ウェルカムメッセージ送信
        $this->sendWelcomeMessage($friend, $welcomeType);

        // 9. ポイント付与
        $this->issueFollowPoints($friend);

        // 10. リッチメニュー設定
        $this->assignRichMenu($friend);

        // 11. シナリオトリガー
        $this->scheduleTriggers($friend);

        // 12. イベントファクト記録
        $this->recordFriendFollowedFact($friend);

        // 13. イベント発火(リアルタイム通知用)
        event(new FriendAdded($friend));
    }
}

13 個の処理。全て process() から呼ばれています。


Phase 2: 判断

AI禁止ゾーン
  • もしこの 13 個の処理が 全て process() の中にベタ書き だったら、何が起きますか?
  • 現在の ヘルパーメソッド分離 のメリットとデメリットは?
  • 14 番目の処理 を追加するとき、どこを変更しますか?

AIに聞く前に、自分の頭で考えてみましょう。

テキストを入力すると有効になります