新卒1年目、初案件の反省と得られた教訓
こんにちは。 4月で新卒2年目になりました。ishiyamaです。
昨年の6月に新卒研修を終え、7月から初めてプロジェクトに参画し、半年強かけてリリースまで行いました。
ここで一度、学んだことを振り返り、経験から得られた反省と教訓をお話ししたいと思います。
本案件での失敗
私はこの案件でいくつかの失敗をしました。
所々失敗したなと思うところはありますが、主に次の2つが大きかったです。
- 改修対象の一部に漏れがあった。
- そこそこ大きい実装のミスがあった。
改修対象の見落とし
こちらは、自分が作成したテスト項目書に漏れがあったために起こりました。
テスト項目について、特筆すべき点は実装時に先に記入しておく等の対策を行うべきでした。
何事もコツコツやった方がいいですね。
実装のミス
だいぶ大きなやらかしでした(あるフォームが二重に送信可能になっていました......。)
単純に自分の知識の浅さというか、常識の無さが出てしまったように思います。
実装ミスの内容
多重送信の防止のために、コントローラー内では以下の処理を行なっていました。
// 確認画面→登録処理から一部抜粋
......
$request->session()->regenerateToken();
......
$is_success = $this->hogeService->registerHoge($input);
......
return view('hoge');
セッション周りの処理の流れを確認しても、問題がないように見えました。
しかし、送信ボタンを連打した場合は多重送信が可能になっています。一体どういうこと?
原因
Illuminate\Session\Middleware\StartSession.php
の至る所にログ出力を仕込み、送信ボタンを連打してみると、あることがわかりました。
それは、初回リクエストのセッションのストアへの書き込みが終わる前に次のリクエストが開始されていた ということです。
regenerateToken()は、ストアへの書き込みが完了してから実行されます。
つまり、初回リクエストと2回目のリクエストとで、同一のトークンが使用されていたということです。
トークンチェックを通過してしまったのも納得です。
そのためサーバ側だけで対応するには、コントローラー以前でトークン再生成を行う等の処理が必要になりそうです。
対処
ここまでサーバ側の原因を探ってきましたが、今回行なった対処としては「JSで送信ボタンを押下後に非活性化する」というものです。
送信ボタンを一度しか押下できないようにすれば、そもそも連打が難しくなります。
最初の実装時にここまで気を回せていなかった自分が悔しいです。
KPTを通じて得た反省
KPTの意義
KPT(Keep, Problem, Try)はプロジェクトを振り返り、学びを得るための有効なフレームワークです。
- Keep(続けるべきこと)
- Problem(問題点)
- Try(次に試すべきこと)
をそれぞれの視点から整理し、共有します。
私たちはプロジェクトの終了時に、ディレクターやエンジニア全員でKPTを行いました。
この中で最も大きな問題点として挙がったのは、「チケットワークが適切にできていなかった」という点でした。
チケットワークの反省
私たちはプロジェクト管理に Backlog というサービスを利用しています。
こちらでタスクごとにチケット(課題)を作成して、それぞれの進捗状況を確認しています。
今回、自分はチケットワークで避けるべき事をとことんやってしまったので、自戒も込めて共有します。
- 一つのチケットで複数の議題を取り扱ってしまったこと
- なんとなく関連がないとも言えない議題について、チケット内のコメントで長々とやりとりしていた
- クライアント都合で遅れているチケットについて、期限日を曖昧にしてしまったこと
- 「まぁ向こうのアクション待ちだしな......」と甘えてしまった
これらは全てスケジュールの遅れや、先述した見落とし等を引き起こす原因となるため、
日頃から意識していきたいです。
まとめ
本プロジェクトは、先輩方の補助もあり無事に終えることはできましたが、反省点も多いものとなりました。
ここで考えるべきことは、どんな小さな失敗でも、それがより大きな悪い結果を招き得るという事です。
今回の私のミスは、クライアントに対する信頼を損なう可能性がありました。
こうしたミスを積み重ねていくと、ある程度の信頼を築いた関係であっても、
「まぁたまにはミスもあるか......」
「あそこはいつも何かやらかすからなぁ......」
と徐々に信頼を失っていき、クライアントから案件を頂くことが難しくなっていきます。
初めて一緒に仕事をするクライアントの場合は、その一件で離れてしまうこともあります。
改めて、自身の日頃の行動次第でこうした結果も招き得る、自分や会社に返ってくる、という自覚を持って業務に励んでいきたいです。
最後まで読んでいただき、ありがとうございました。
Webサイト・システムの
お悩みがある方は
お気軽にご相談ください
出張またはWeb会議にて、貴社Webサイトの改善すべき点や
ご相談事項に無料で回答いたします。