Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
大規模プロジェクトに学ぶ、新卒エンジニアの教訓
Search
なおと
April 28, 2023
0
27
大規模プロジェクトに学ぶ、新卒エンジニアの教訓
【YouTube】
https://www.youtube.com/watch?v=KbF71z4xpKA
なおと
April 28, 2023
Tweet
Share
More Decks by なおと
See All by なおと
プロジェクトマネジメントとは? 経験から学ぶ視野と視座
naotocoding
0
820
テーブル分割で実現するdeviseの責務の分離と柔軟な削除機構
naotocoding
1
1k
Stripeノーコード挑戦記決済画面構築の山あり谷あり
naotocoding
0
17
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
GitHub's CSS Performance
jonrohan
1030
460k
Embracing the Ebb and Flow
colly
84
4.5k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
42
9.2k
Art, The Web, and Tiny UX
lynnandtonic
297
20k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
109
49k
Become a Pro
speakerdeck
PRO
25
5k
Code Review Best Practice
trishagee
64
17k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
329
21k
Practical Orchestrator
shlominoach
186
10k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.1k
RailsConf 2023
tenderlove
29
900
Transcript
⼤規模プロジェクトに学ぶ、新卒エンジニアの教訓 ⼭路 直⼈ Fusic Tech Live Vol.13 Rubyistの集いVol.2
⾃⼰紹介 • Fusic CO.LTD • 技術開発第⼆部⾨ エンジニア • 学部卒新卒2年⽬ •
Ruby ⼭路 直⼈ ( やまじ なおと ) @naoyama_ruby @NaotoCoding
3 構成 1. プロジェクトの状況 2. 困ったこと 3. 僕なりの解決⽅法 4. 今後やりたいこと・まとめ
1研修後、プロジェクトに参加
研修後にプロジェクトに参加 • 稼働開始から10年弱経つ⼤規模アプリケーション • 8ヶ⽉間に及ぶ⼤規模改修 • メイン開発者︓開始から2ヶ⽉間は1名(僕)、以後1名ジョイン • 技術相談役兼レビュワーとしてシニアエンジニア2名 状況
2 困ったこと
困ったこと⼀覧 • 仕様が分からない • コーディング能⼒不⾜ • チーム開発が経験したい • (いわゆる)レガシーコード、技術スタック
困ったこと1 • 現⾏の仕様 • 追加機能の仕様 仕様が分からない
困ったこと1 - 仕様が分からない • 参加時の説明で細部まで網羅することは難しい • ましてや今回は稼働10年弱のアプリケーション ◦ 僕、中学⽣だなぁ、⾃分の事も全部覚えてない… 現⾏の仕様
困ったこと1 - 仕様が分からない • フワッとした仕様決定の状態でプロジェクトが開始する場合もある • 知らないアプリケーション上に追加機能の仕様よしなに実装は難しい 追加機能の仕様 え、、、そんな仕様だったの、、、︖
困ったこと2 • 仕様は分かるけど、、、 ◦ 現⾏コードを読んでも理解できない ◦ 追加機能を仕様通りに実装できない コーディング能⼒不⾜
困ったこと3 • 研修からチーム開発の経験がない ◦ 別のプロジェクトでも今後確実に経験するもの ◦ チーム開発に早めに慣れたかった チーム開発がしたい
困ったこと4 • あれ、このコード、良くないよね、、、︖ ◦ 研修ではタブーとされた記法の存在 ◦ 現⾏コードの記法に従うべきなのか、、、 レガシーコード、技術スタック
困ったことの解決が僕の目標!
このプロジェクトにおける僕の⽬標 • 仕様を深く理解 • コーディング能⼒向上 • チーム開発の経験 • レガシーコード改善
3 僕なりの解決策
解決策⼀覧 • ⾊々聞きまくってコードを読め、書け︕ • ペアプロをやろう︕ • 研修で学んだことを活かせ︕
解決策1 色々聞きまくってコードを読め、書け!
解決策1 ⾊々聞きまくってコードを読め、書け︕ 効⼒ 仕様の理解 コーディング能⼒向上 チーム開発の経験 レガシーコード改善
解決策1 • きっかけ ◦ プロジェクト開始時、コードを読めば仕様が分かるのではと 粘った結果、何も分からずに時間浪費 ◦ このままじゃ駄⽬だ︕先輩を頼ろう︕ ⾊々聞きまくってコードを読め、書け︕
解決策1 • やったこと ◦ コード、仕様が15分かけて理解できなかったら聞いた︕ ◦ ⼤規模だからこそ⾊んなコードをどんどん読んだ︕ ▪ そしてその後どんどん聞いた︕ ⾊々聞きまくってコードを読め、書け︕
解決策1 • 結果 ◦ 時間の浪費が激減︕ ◦ 様々な実装⽅法を学習 ▪ メタプログラミング ▪
ビット演算 ⾊々聞きまくってコードを読め、書け︕
解決策2 ペアプロをやろう!
解決策2 ペアプロをやろう︕ 効⼒ 仕様の理解 チーム開発の経験 レガシーコード改善 コーディング能⼒向上
解決策2 • きっかけ ◦ チーム開発をしたいとPMに相談 ▪ 開発初期はメイン実装者が僕⼀⼈ ペアプロをやろう︕
解決策2 • やったこと(やってもらったこと) ◦ 週⼀⽇⼆時間ほどプロジェクトマネージャー(PM)とペアプロ ◦ ドライバー︓新卒 ◦ ナビゲーター︓PM ペアプロをやろう︕
解決策2 • 結果1 ◦ これまでにないレベルでコードに集中する経験 ▪ ⾃分ってこんなスピードでコード書けるんだ、、、 ペアプロをやろう︕
解決策2 • 結果 2 ◦ リアルタイムのアドバイスがとにかく嬉しい ▪ 実装の記憶が残る︕ ▪ いつでも相談できる環境
▪ 難しい実装に⽴ち向かいやすい ペアプロをやろう︕ 転けてもすぐに⽴ち上がれる
解決策2 • 結果 3 ◦ 上司との距離感が近くなる ▪ 今後質問がしやすくなる︕ ペアプロをやろう︕ 流⽯にこの距離感ではないよ︕
解決策2 • 注意点 ◦ ナビゲータが意⾒するのはドライバーの実装が⼀段落ついた時 • 理由 ◦ 新卒にとっては全てのコーディングが学び ◦
不合格のコードでもそれを書くために⾊々調べて学ぶこともある ペアプロをやろう︕
解決策3 研修で学んだことを活かせ!
解決策3 研修で学んだことを活かせ︕ 効⼒ 仕様の理解 チーム開発の経験 レガシーコード改善 コーディング能⼒向上
解決策3 • きっかけ ◦ 既存コードの修正、、、怖い、、、 ◦ 研修で学んだことが活かせるのでは︖︖ ▪ テスト ▪
コードのリンター ▪ リーダブルコード 研修で学んだことを活かせ︕
解決策3 • やったこと ◦ 積極的なテスト(RSpec)の導⼊ ▪ 既存コードの修正時にはテストコード記述 ◦ 既存コードの転⽤時にはリーダブルコードに修正 ◦
新規ファイルに対してコードのリンター(RuboCop)を適⽤ 研修で学んだことを活かせ︕
解決策3 • 結果1 ◦ 積極的なテスト導⼊の結果 ▪ 変更しやすいアプリケーション ▪ 仕様の理解が深まる ▪
テストコード作成能⼒の向上 研修で学んだことを活かせ︕
解決策3 • 結果2 ◦ RuboCop、リーダブルコードを適⽤した結果 ▪ 理解しやすいコードが増えた ▪ 今後も理解しやすいコードが増えていく可能性⼤ 研修で学んだことを活かせ︕
4 今後やりたいこと・まとめ
今後やりたいこと • RuboCop ◦ 新規ファイルにのみ⾃動で適⽤できるように設定 ◦ 可能な限りコード不正検出を減らしたい 保守しやすいアプリにしたい
今後やりたいこと • ドキュメント ◦ 本来なら開発中に作るべきであった ◦ 同アプリを触る⼈のためにもドキュメントを整備したい 保守しやすいアプリにしたい
まとめ • ⾊々聞きまくってコードを読め、書け︕ • ペアプロをやろう︕ • 研修で学んだことを活かせ︕
ご清聴ありがとうございました。