![見出し画像](https://assets.st-note.com/production/uploads/images/167519450/rectangle_large_type_2_e7425a8151629c5425651cfa7fd57bd0.png?width=1200)
とあるエンジニアの苦悩の1年間
![](https://assets.st-note.com/img/1735355400-t9TQWE6ZdPKDSVi0aoGOx8q3.png)
2024年2月
転職
以前居た受託の会社は案件がなくなり、元々全従業員で7名しかいなかったのにもかかわらず、直属の上司が3人やめて会社が崩壊したため、退職。
生成AI系のR&Dを行っている受託開発メインの会社に転職
ここは周りに優秀な人しか居なかった
最初にプロジェクトに2つアサインされた
稼働時間は月80/80
この記事ではプロジェクトの内容に関することは一切書かないが、使用技術に関しては言及していく
プロジェクトA
プロジェクトAはVue2を使っていて、全てのコードがJavaScriptで書かれていた
そしてページ数だけで200ページ近くあり、フロント側のコードだけで20万行くらいあった
キャッチアップのための時間は少なく、そもそもドキュメントが全くと言っていいほど無かった
jsdocもなければ単体テストもほぼ存在していない。
更に過去様々な開発者が携わっては変わったようで、PMやお客様自身ですら把握していない仕様も沢山あった
そのため、コードから仕様を読み解く必要があった
自分がもっとコミュニケーションを円滑に取れる人間であれば良かったのだが、プロジェクトに入りたての時はかなり質問を遠慮してしまっていた
リモートワークということもあり、質問するにはテキストもしくはハドルになる
テキストだとどこまで詳細に背景を伝えるべきかに悩み、ハドルはみんな複数プロジェクトを行っているので、タイミングを伺いすぎて「ハドルしませんか?」の一言がなかなか言えなかった
「ほとんど同じ機能だけど、ちょっと違う」みたいな機能が8つくらいあり、それら全てが共通化されていなかった。
そのため、頻繁に修正漏れをしてしまった
当然リファクタリングしたいと伝えたが、入っていきなりのやつがバリューも出さずにお客様から最優先と伝えられているタスクをやる時間を割いてリファクタリングするということは良いとされない
受託なので工数は決まっており、作業者がどんなタスクを行うかは1時間単位でガントチャートを作ってお客様との合意を取らなければならない
これは自分にとってかなり苦しかった。
プロジェクトの3ヶ月目にかなり仕様が複雑な機能追加の依頼が来た
この機能はほかのメンバーやPM含め、バグのトリアージに相当苦労した
みんな凄く大変そうだった
正直かなり残業していたと思う。
みんなの負担を減らしたい、楽しく開発したいとずっと思っていたのでようやくここで動き出す。
jsdocの追加
eslintルールの追加
spell checkerの導入
タイポの修正
単体テストの追加
などのPRを自分が残業しまくって大量にあげた
自分が残業するのは別に良いけど、周りのメンバーが苦しんでるのは嫌なのでその負担を何とか減らしたいという思いからだった
しかし、その結果PRはレビューされなかった
理由は
レビューするのにも工数がかかる
動作を保証できない
デグレが怖いから
ということだった
そこからは反省し勝手に改善PRを作ったり、絶対にmergeされるように機能追加のissueに対してリファクタリングしまくるみたいなのは辞めた
リファクタリング、jsdoc、単体テストを行うのはそのissueの範囲内のみにした
どうしてもやりたいものは自分でissue起票して、その週のやるべきタスクが全部終わってたら着手しても良いということになった。
自分的にはめちゃくちゃ嬉しかったので、その週のタスク(4チケット)を月曜日に終わらせた
そして、改善issueをひたすら上げてPRを出した
まだまだ課題はあるが、プロジェクトに入った時と比べたらかなり保守性の高いコードになってきている
最近は技術選定やコードレビュー、お客様とのやり取りや工数見積もり、設計なども任されるようになり自分の出来る幅が増えてきて仕事がかなり楽しくなった
コミユニケーションの取りやすさは労働生産性をかなり左右するなと実感した
このプロジェクトのメンバーはみんな良い人で、最初の頃は私が勝手にビビりまくってしまっていたが、今は積極的なコミユニケーションが取れている
ハマった時に何時間、何日も溶かしてしまうより、有識者に聞いた方が早いことはちゃんと聞こう
プロジェクトB
プロジェクトBに関しては新規開発で、画面は8割ほど自分が作った
React,antdを使って開発した。
初めてantdを使ったが、hooksが付いてることに感動した
ただPickerを使う際にデフォルトがdayjsであり、これをdate-fnsを使うように変更しないといけなかったのは少しめんどくさかった
また、1部機能はantdのコンポーネントと少し異なる見た目にする必要があり、この際はstyled-componentを使用したが、antdのクラスがどの要素に当たっているかネストされまくったhtmlから調べて上書きするみたいなことには少々苦労した
このプロジェクトではBFFとしてtrpcを使っていた
初めてtrpcを使って感動した
API callをほぼ全て補完が効いて書けるのは素晴らしい
このプロジェクトは仕様はかなり複雑だったが、メンバーのレベルが高いこともあり、高いコード品質で策定したスケジュール通りに納品できた。素晴らしい体験だった。
型を厳密に定義したり、zodやprismaから型を抽出して使用したり、seedデータを用意してインテグレーションテストを書いてapi側は正しく動いていることを保証したうえで開発を行うことができたり、dev containerでメンバーにおける差異のない開発環境が立ち上げることができたりとものすごく学びのある業務を行うことができた。
ここから本音
今だから言う
プロジェクト入りたての頃は毎日本当に辛かった
ひりつく焦燥感
襲い来る無能感
分からないものに対する恐怖
漠然とした未来に対する不安
これら全てが一気に自分に降りかかり、毎日朝9時〜夜23時まで開発してもまだもう1つのプロジェクトの進捗が出てないからと焦燥感に駆られて眠れない日々を過ごした
寝てる時以外の全ての時間がプロジェクトの課題の解決を考える時間になっていたと思う
当然平日だけでは終わらないので土日も普通に開発してPR出してたら流石に会社に怒られたのでそれはやめた
ただここで勘違いして欲しくないのは、私は会社批判がしたい訳でも残業自慢がしたい訳でもないということ。
単純に自分が劣等感や無能感を感じたことによって自主的に自己研鑽を頑張りましたという自分の心のメモである。
今となってはこの1年間で本当に頑張ったからこそ、かなり成長した部分は大きいと感じる
今まではVueなんて未経験の時に簡単なポートフォリオを作った時の知識しか無かったし、Reactも対して詳しくなかった。
node.jsに対しての知識も足りなかったが、この1年でかなり勉強出来た。
人間関係の難しさを学んだ
SIerとしての業務を学んだ
マネジメントの奥深さを知った
成長出来たことは嬉しい半面、もちろん辛いと思った時も多々あった
音楽を聴いていたら急に涙が溢れて止まらなくなった
休日に突然ベッドから起き上がれなくなった
足が霜焼けになった(これは単純に家が寒いことが悪い)
不眠症になった
なので、しんどい働き方は絶対におすすめはしないが、そういう経験を持っていて、乗り越えた実績がある人はやはり強いんだなと実感した
自分も最近はようやくプロジェクトに対する知見が相当貯まってきて、コードのかなりの部分を自分がリファクタリングしたということもあり、タスクが即終わるので毎日定時上がりをしており、ピアノやゲーム、個人開発などの趣味を楽しめている。
また、今所属している会社は給与レンジは割と高いので、日々の生活でそんなにものを買うことに対しての我慢をすることがないということは大きいなと最近感じた
CoCo壱で値段を気にせずトッピング出来るのは最高だ
今は私は4プロジェクトに携わっている
プロジェクトA
これからVue2→Reactという大規模なリプレイスを行う
プロジェクトB
新規開発から携わり、納品。リリースしているため保守作業や機能修正を行っている。
プロジェクトC
リリース済み。機能追加を繰り返している。これからversion 3の本開発が始まる
プロジェクトD
保守運用、追加開発案件。PM,開発含めすべて自分に一任されている。
4プロジェクトにアサインされてこれを並行してアウトプットを出す日々は正直かなり大変だが、今は楽しく働いている。
これから
来年がどんな1年になるか分からないが、この1年無事に納品したり、特にトラブルなく契約継続されていたりと行ってきたことに自信を持っている。
この自信が来年完全に打ち砕かれる可能性もあるが、辛いときにはMOROHAを聴いて、自分が最悪だったときを思い出して踏ん張っていこうかな。