多様性を当然のものとし、誰もが好きなものを好きと言える社会の実現
技術を通して世の中を豊かにし、誰もが余裕を持てるようになれれば実現可能ではないかと考えています
与えられた仕事をこなすだけでなく、技術的な知識をもって事業や顧客に対して自ら価値を提案できるようなエンジニアを目指しています
そのために今は技術をしっかりと身に着けるフェーズだと感じており、まずはWebアプリケーション開発における横断的なスキルを身に着け、視野を広げてできることやわかることを増やしていきたいです
またその中で自分が特に得意、または好きな分野を見つけて深堀りし、専門分野を獲得したいと考えています
最終的な自己実現としては、下記の3点を満足に行えるようになることを目指しています
そのためにはまずは自分自身が経済的、精神的に不安の少ない状態になることが必要と考えており、エンジニアという仕事を通してこの状態を作り出せるように自己研鑽に励んでいます
これまでのプロジェクトではDDDのアプローチが取り入れられていましたが、以下のような課題点がありました
今後もこの構成のまま進めるのはまずいと判断し、Laravelの設計について調査し、以下のような構成を提案して実装しました
これによりLaravelの機能を活かしつつ、複雑な処理はUseCase, Service層で行うという方向性を定めました
また開発を進めていくにつれ、メンバー間のUseCaseとService層への認識のズレが発生し始めたため、そのタイミングでもう一度MTGを提案してUseCaseとService層の役割を明確にし、全体の設計に関する認識の共有を行いました
これまでのプロジェクトはテストコードがほとんど書かれておらず、リファクタリングやコードの修正がスムーズに行えないような状況が続いていました。そこでこのプロジェクトの初期に自ら積極的にテストコードを書き、テストを書くのが当たり前の状態を作り出しました
またペアプロやコードレビューで自動テストの普及を行った結果、チームの中で
などの会話が生まれるようになり、全体のコード品質の向上に寄与しました
前回JSでのプロジェクトを経験し、型が欲しくなる場面が多々あったため、TypeScriptを自分主導で導入しました
TypeScriptの導入により、フロントエンドの型安全による開発体験、コード品質の向上に寄与しました
バックエンドとフロントエンド間での認識の齟齬、それによる手戻りの発生が深刻な課題となっていたため、その解決のため上記のスキーマ駆動開発を提案して導入しました
導入後に自ら積極的にスキーマを書いていくことで、バックエンドとフロントエンドで協力して作成したスキーマを共通の規約として、スキーマを中心にイテレーションを回すという流れを構築しました
これにより手戻りの削減や、PrismでのAPIのモックによるフロントエンドの開発速度向上に大きく寄与しました
上記のSwaggerによるSDD導入の際、不確実性という言葉を多用し、メンバー全員へ不確実性を事前に潰しておくことのメリットを周知しました
その結果、全員が当たり前に不確実性という言葉を使用するようになり、振り返りの際にも不確実性に対して全員が議論するようになりました
フロントエンドでCypressを利用したE2Eテストを実装しました
導入初期に公式ドキュメントを読み込み積極的にテストを書き、ノウハウを他のメンバーにも積極的に共有しました
またE2Eテストがあることでの安心感や不安定なE2Eテストの保守の大変さも経験し、E2Eテストはあくまで最後の砦扱いで、ロジックのテストはJestをメインに行うべきだと感じています
前回担当したプロジェクトでは時間が足りず決済機能を先輩方に実装していただいたということもあり、こちらのプロジェクトでは自ら手を上げて通常決済とAmazon Payによる決済を担当しました
バックエンドチームと密に連携を取り、決済で利用するAPIの仕様とスキーマは全て自分が担当しました。APIの仕様とスキーマを決定後、Prismを用いてバックエンドと並行してフロントエンドの開発を行いました
またAmazon Payは当時最新のバージョン(V2)でしたがドキュメントを読み込んで仕様を理解し、実装を進めていきました
HTTP clientとしてaxios(Nuxtのaxiosモジュール)を使用していたのですが、vueファイルからthis.$axios.get(url)
といったように直接APIを叩いており、以下のような課題がありました
この課題解決のため、RepositoryFactoryパターンを用いてAPI通信部分を一箇所にまとめて隠蔽するという手法を提案して導入しました
repositories
ディレクトリを切ってAPIのエンドポイント毎に1ファイル1クラスで作成し、Nuxtのplugin機能を使ってそれらをコンテキストにinjectするというやり方で運用しました
結果としては上記の課題を解決でき、さらにインテリセンスと型も効いて開発体験が各段に良くなりました
こちらのプロジェクトを通して状態管理、コンポーネント設計、ライフサイクルなどのモダンフロントエンドの基礎を学びました
またNuxtでSSRをすべき理由を把握するため、SSR, CSR, SPA, SSGなどのフロントエンド技術を背景も合わせてインプットしました
初めての業務でのチーム開発で、大きいPRを出さない、事前に自分でチェックする、レビューして欲しい点を明確にするなどのコードレビューを依頼する際の基本的な心得を学びました
レビュアーの時間を極力奪わないように、必要な情報は全て記載することを重視しています
Railsでのモノリシックなアプリ開発経験しかない状態で、Nuxt(SSR)でのフロントエンド開発をやり切りました
このプロジェクトでNuxt, Vueなどの使ったことのない技術を公式ドキュメントを読みながら実装を進めなければいけない状況を経験し、公式ドキュメントを読む大事さも実感できました
要件がしっかり固まっておらず、誰も詳細を把握していない機能をディレクター、バックエンドを巻き込んで要件の整理、実装を行いリリースしました
この経験からコードを書く前に要件を固め、TODOをしっかり整理しておくことの大事さを学びました
このプロジェクト詳細は公開されていません
リモートワーク制度の導入、運用
元々原則出社だったのですが、社長含む先輩方も内心「リモートできるよね…リモートしたいよね…」と思っているような状態でした。ただ今まで原則出社だったためオフラインの同期的なコミュニケーションが当たり前になり、属人性も高くなってしまっているという課題を抱えていました
リモートワークを導入するにあたり、slackを活用したテキストベースの非同期なコミュニケーションや各自の進捗の共有をもっと手軽に当たり前に行う必要があると感じ、その課題解決のためにslackの分報チャンネル(times)を導入しました
結果、導入は大成功でした
最初はみんな手探りの状態でしたが、徐々に慣れてきて雑談などもどんどんtimesに投下してくれるようになり、またtimesでの発言を起点にコミュニケーションや新しい文化が生まれたり、知見の共有も手軽に行えるようになり、かなり理想的な状態になったのではないかと思います
そしてtimesが浸透したタイミングで第一段階として週一のリモートワークを提案しました。既にtimesの浸透でリモート時の懸念点になる部分への対策はある程度できているので、週一のリモートは問題なくうまく行き、すぐに週二でのリモートが始まり、現在は週四リモート体勢となっています