2023年も残すところあと僅か、毎度おなじみ大晦日に1年の活動報告を書いているツナかふぇです。
フリーランスエンジニアとして活動を始めて、早くも4年の歳月が流れてしまいました。今年もエンジニアとして少しは成長できたのか? 毎年恒例となった1月~12月の振り返りをしていこうと思います。
今年も有難いことに年中フル稼働しており、まったくフリーランスにある「自由」なイメージを謳歌することはありませんでした。
昨年の12月にPMから言われていた通り、別プロジェクトへの移行が決定。前年度に苦渋を飲まされた設計担当者とは晴れておさらばです。既に立ち上がっていたプロジェクトへの途中参画という事で、最初はシステムの概要説明を受け、開発環境構築+最初のタスクであるJavaを用いてのバッチ作成で1月は終了。今年の幕開けとして緩やかに開発が進み始めます。
参画したプロジェクトはアジャイル型の開発体制を敷いており、要件に対する仕様を自身で提案し・実装 -> フィードバックをもらう の繰り返しで進行でした。前回のプロジェクトでは設計書に記載された仕様通りに作ることを徹底する節があったため、より良い解決策を提示しても、その段階の仕様変更を受け付けられないケースが非常に多く、かなりストレスが溜まっていました。
その点、設計の段階から色々と意見を出して、メンバー全員で仕様を確定するこの開発体制は非常に有難かったです。
設計書に細かくかみ砕かれた仕様をコーディングするだけでは、エンジニアとは言えません。顧客が持つ問題を解決する手法を示してこそエンジニアです。
移籍先のプロジェクトでの作業も上々の滑り出しの中、フリーランスにとって重要な単価交渉の時期がやってきます。
前プロジェクトでは詳細設計~実装フェーズでかなりの成果を上げた事もあり、今年は自分にとってかなり強気な金額を提示しました。
が、意外にもあっさりと受け入れられ、2か月後から大幅な単価UPを実現。PMとも上手く関係を築いていたのが功を奏した形となりました。
フリーランスはそのチームの上長の信頼を得るのが最も重要です。開発体制も単価UPも、全ては人間関係に左右されます。たとえ技術力が高くても、相手を激しく非難したり、勤怠態度が悪ければ、相手の信用を失います。そうなれば重要な仕事は任せてもらえませんし、単価UPも実現しません。エンジニアは技術力だけで飯を食っているわけではないのです。その点を勘違いして三行半を突き付けられたエンジニアを何人も見てきています。
1月から始めたバッチ郡の実装~テストが完了し、手持無沙汰になりつつある中、今年の重要な節目となる『React』絡みのプロジェクトがやってきます。
現在はテンプレートエンジンを用いてサーバーからhtmlを返却している画面仕様を、フロントフレームワークであるReactに徐々に移行すること考えており、その先駆けとして、React周りの調査を行って欲しいとの依頼でした。
昨今のWEB画面はフレームワークを用いた開発が主流になっており、バックエンド側だけではなくフロント側の知識も身に着けたいと思っていた私には、まさに渡りに船の提案であり。二つ返事で快諾しました。フリーランスの私に新しい技術の仕事を任せてくれるのは、本当に嬉しく、内心小躍りをしていたのをよく覚えています。
とは言え、調査するからには、しっかりその調査結果をチームにフィードバックしなければなりません。フロントのフレームワークに触れるのは初めてであり、しかも今回はjavascriptではなくtypescriptを導入しての調査となる事が決定。毎日トライアンドエラーの繰り返しで、かなりの苦戦を強いられました。Reactのhookの扱い/ページルーティング作法/認証認可/直近で導入されたSuspenseによるPromise譲渡/Typescriptを組み合わせた型パズル 等、本当に色々と学習しました。
この調査は2か月続けた後、調査結果発表として開発メンバーを集めて勉強会を開きました。Mockを用いての動作確認、実現可能な挙動をメンバーに周知し、一旦この調査フェーズは幕を終えます。調査~結果報告を一人で行ったのはかなり自信に繋がり、今でもgithubのリポジトリを見ては「よく勉強したなぁ」と思いふける事があります。
調査フェーズから元のプロジェクトに戻った私は、今度はそのプロジェクトから派生した別システムのアジャイル開発を担当する事になります。
いつも通りの業務系システム開発になるかと思いきや、今度はバックエンドにドメイン駆動開発の概念を持ち込むことが確定し、これまた勉強の日々が始まりました。
このプロジェクトでは「性能とシステム保守性はトレードオフの関係にあり、お互いに妥協点を探らなければならない」ということ。ドメイン駆動の考え方だと集約に応じたオブジェクト単位でDBからの取得結果を保持する事になり、それには”ある機能では使わないデータも含まれる”事になります。
私は性能重視で”機能では、その機能における必要最小限なデータのみを扱う”事を是としてトランザクションスクリプトを許容する傾向にあったため、この思想はかなり衝撃的なものでした。「別にこの機能でこんなデータ取る必要ないのになぁ」と今でも考えることがあります。確かに仕様をオブジェクトに隠蔽する事で保守性は上がりましたが、その結果レスポンスに遅延が発生する事は許容できるのか? これは負荷試験フェーズで答えが出るはずですが、内心恐恐としています。
前プロジェクトに片足を突っ込みながら、半年前のReact調査結果を元に、いよいよ念願のReactプロジェクトがスタートします。
最初のReactプロジェクトという事で、比較的簡単なエコシステムを作る事になりましたが、同時にそれはこれから後に続くプロジェクトがこのプロジェクトの実装を参考にするということ。そう思うと全く気が抜けません。機能の実装は難しいものではありませんが、それをいかにコンパクトに、分かりやすく実装できるか? という事が求められています。エンジニアとして”如何に後続が楽できるか”の仕組みと作るという、まさにエンジニア冥利に尽きる仕事です。
来年以降もこのプロジェクトは続くことが確定しており、まだまだ今の現場でフリーランスとして活躍できることは非常に有難い話です。
恐らく、フリーランスになってから一番勉強した年になったと思います。OpenAIのChatGPTが我々を脅かす存在になりつつある事を考えると、来年以降も学習の手を止める暇はないようです。反面、来年はどんな刺激的な技術革新が来るのかとワクワクもしています。
来年も皆さんに、よき技術の場が与えられますように。