【Laravel/PHP】新卒2年目のSEが実装で意識していること

本投稿は TECOTEC Advent Calendar 2024 の10日目の記事です。

はじめに

こんにちは。決済認証システム開発事業部の植竹です。
普段はエンジニアとしてPHP(Laravel)でWebアプリケーションのシステムの開発を行なっています。2023年の4月に文系未経験でSEとして入社し、1年半ほど経ちました。
今回は、私が普段の業務(特に実装時)で意識していることをいくつか紹介させていただきます!
あくまで個人的な考えです!

実装時に意識していること

報連相

当たり前ですが、一番意識していることです。 「期限に間に合いそうにない」「技術的に詰まっている」「仕様で疑問がある」など... 早めに報告連絡相談する様にしています!


コーディングはコメントから書く

新機能追加のコーディングは、コメントから書くことが多いです。フロー図があればフロー図を元にコメントを追加します。
例えばオンラインでの商品購入処理の場合、先ずは以下の様なコメントを書いてからコーディングを始めます。
※例なので細かい処理や考慮が抜けていると思います。
※コメント記法についても自己流です

        // 別途キャンセル(API)失敗の処理も考慮
        // トランザクション開始
        try {
            /** 在庫確認、所持数確認 */
            /** 在庫なし */
            // 決済中止
            // ステータス更新(キャンセル)
            // コミット
            // 購入キャンセルメール送信

            /** 在庫あり */
            // 決済実行(API)→PaymentException
            // 決済情報登録
            // 予約情報登録
            // ステータスを更新(成功)
            // コミット
            // 購入完了メール送信  

        } catch (PaymentException $e) {
            /** 決済失敗(例外) */
            // 決済キャンセル(API)
            // ステータスを更新(決済失敗)
            // 購入エラーメール送信

        } catch (\Throwable $e) {
            /** DB処理失敗など(例外) */
            // ロールバック
            // 決済キャンセル(API)
            // ステータスを更新(処理エラー)
            // 購入エラーメール送信  
            // 購入エラー時の画面遷移を行う処理
        }

繰り返し処理の中にクエリ発行の処理を書かない(なるべく)

例えばこの様な処理を

        // $animalsには6種類の動物の情報が格納されている
        DB::enableQueryLog();
        foreach ($animals as $key => $animal) {
            $animals[$key]['habitat'] = $this->habitatsRepository->findById($animal->habitat_id);
        }
        dd(DB::getQueryLog());

↓このように修正すると

        DB::enableQueryLog();
        $habitatIdArray = $animals->pluck('habitat_id')->toArray();
        $habitatList = $this->ticketsRepo->getHabitatList($habitatIdArray)->keyBy('id'); // ←getHabitatList()ではwhereIn()を使う
        foreach ($animals as  $key => $animal) {
            $animals[$key]['habitat'] = $habitatList[$animal->habitat_id];
        }
        dd(DB::getQueryLog());

クエリの発行数が6回から1回になりました!

クエリ発行の数を減らすには他にもいくつか方法があるようです。
参考: zenn.dev


型を意識する

phpは動的型付け言語で、変数や関数に入る型を定義せずに実行できる言語です。
型を意識せずにコーディングできる点は利点でもありますが、メンテナンスや修正の際に思わぬつまずきが発生することもあります。
そのため、PHPDocや手動で静的型付けの様なことをしています。以下に例のコードを記載します。

// 何も記載がない関数
    public function example($today)
    {
        $today = $today->format('Y-m-d');
        // 続く...
    }

この関数は$todayをCarbon型で受け入れる前提で作成されています。
しかしこの状態だと、string型が渡された場合にエラーとなってしまいます。 加えてこの関数が何をreturnするのかも、実際のコードを見ないとわかりません。
そこで少し記述を加えてみます。

    public function example(Carbon $today): array
    {
        $today = $today->format('Y-m-d');
        // 続く...
    }

この様に記述することによって、引数にCarbon以外の値が渡されるとエラーを出してくれるようになります。
また、配列以外をreturnしようとするとエラーとなります。
より分かりやすくPHPDocも記載すると、より分かりやすくなります!

/**
     * 関数の説明
     *
     * @param Carbon $today
     * @return array
     */
    public function example(Carbon $today): array
    {
        $today = $today->format('Y-m-d');
        // 続く...
    }

共通の処理はなるべくまとめる

同じような処理が複数で使用されている際は、別の関数に切り出してなるべく共通化する様にしています。
しかし何でも共通化すれば良いわけではないので、その時その時で熟考しています。


コードを読み返す

自分が書いたコードも、他のエンジニアが書いたコードも読み返しています。
自分が書いたコードを読み返すと改善点が見つかることもあり、より可読性や保守性の高いコードにできます!
他のエンジニアが書いたコードを読むと、新しい発見があったりします。こんな方法があるのかと、頭の片隅に置いておくだけでも今後に活かせることが多いです。


最後に

未熟な記事でしたが、最後まで読んでいただきありがとうございます! まだまだ勉強中なので温かい目で見守ってください~。

テコテックの採用活動について

テコテックでは新卒採用、中途採用共に積極的に募集をしています。
採用サイトにて会社の雰囲気や福利厚生、募集内容をご確認いただけます。
ご興味を持っていただけましたら是非ご覧ください。 tecotec.co.jp