海外で活躍できるエンジニアになりたい
英語の情報をキャッチしたり、世界中の人と話せるようになったり、英語のドキュメントを素早く読めるようになりたかったりと英語を使ってやりたいことがたくさんあるので、英語を使えるようになりたいです。
またプログラミングは仕事としてだけなく、プログラミング自体が大好きで楽しいのでエンジニアとしても活躍できるようになります!
好奇心の赴くままにたくさん新しい技術に触って自分のできることを増やしていきたいです。
プロダクトマネージャー: 1名
フロントエンド: 3名
バックエンド: 2名
ProbWorksは転職と副業の二つの求人を掲載しているWebアプリです。
自分が所属している会社はスタートアップで人が全然いないので、仕様の確認や、デザイン、チームのタスク管理やコードレビューなどフロントに関わることは自分も関わっていました。
ProbWorksの開発で自分がこなした仕事の中で特に効果があったと考える仕事は以下の2つです。
自分がこのプロジェクトに参加した当時はフロントのコードがユーザーページと管理者ページでリポジトリが分かれており、ただ、コンポーネントは2つのリポジトリで同じコンポーネントを使用していました。
コンポーネント単位での変更があるたびに
という手順で開発をしており、2の作業がほぼコピペということもあり手間がかかる上に、2を忘れていてリポジトリによってコンポーネントに違いがでているという状況が頻発していました。
この状態を解決するために2つに別れていたリポジトリを統合しました。
具体的にはnpm workspaceを使用してadmin(管理者ページ), app(ユーザーページ), commonsという3つのプロジェクトを作成し、commonsの中にcomponentsを作ることで管理者ページでも、ユーザーページでも同じコンポーネントを使えるようにしました。
create-react-appで作られたプロジェクトだったので、webpackを結構いじる必要があり別プロジェクトのコンポーネントをimportして使えるようにしたり、管理者ページを開発している場合でもcommonsのコードが変わったらホットリオードをするようにする設定したりするなどをしました。
リポジトリを統合した結果、コンポーネントの変更があった場合でもそのコンポーネントを実装すれば管理者ページでもユーザーページでもコンポーネントが変更され、上記であげた「2. もう一つのリポジトリでも同じ実装」の作業を完全になくすことができました。
「2. もう一つのリポジトリでも同じ実装」の作業がなくなったことで、プロジェクトによってコンポーネントに違いがでるという問題も解決することができました。
このプロジェクトでは先方から仕様の修正が入ることが多く、仕様書の変更が日常茶飯事でした。
*仕様書はstoplight studioを使用して管理していました。
フロントエンドは変更のたびに自分たちで確認し、Typescriptの型や、通信部分のコードを修正していました。
手動で修正をしていたためTypescriptの型が仕様書と違っていたり、通信のエンドポイントが仕様書の変更が反映されていないという確認の漏れが多く、その漏れにもなかなか気づきにくいという問題を抱えていました。
そこで、仕様書からTypescriptの型や、通信のエンドポイントを自動で生成するためのパッケージを作成することにしました。
はじめはopenapi2aspidaを使おうとしてみたのですが、自動生成されたコードと、既に開発しているコードとの差分がかなり大きく、今から導入するのは無理だと判断しました。
そこで、プロジェクト用に独自のカスタマイズをしたパッケージを作ることにしました。
cliに関してはopenapi2aspidaのコードを参考になるべく既存のファイル、コードに近いものを自動で生成するようにしました。
パッケージはsemantic-releaseを使うことで自動化しました。
仕様書からコードを自動生成できるようになったことで、かなり多くの利点がありました。
今までは仕様が変わるたびに型を手動でやっていたため、手動で変更した箇所に関しては型エラーが出て、その型エラーを修正していたので仕様の変更と、実際のコードの変更にラグが発生していました。
しかし、自動生成にかえたことで、仕様が変更されてたらすぐに型エラーがでるようになったので、仕様とフロントエンドとのラグがなくなり、常に最新の状態であり続けることができるようになりました。
プロダクトマネージャー兼QRコードの作成・解析するエンジニア: 1名
フロントエンド: 1名
バックエンド: 1名
LogoQは普通の文字列だけでなく、LogoQアプリで読み取った場合にのみ取得できる秘匿データを持ったQRを生成、管理するためのアプリです。
LogoQはフロントエンドエンジニアとして1から携わった初めての開発でした。
ここでの自分の大きな仕事は以下の2つです。
このプロジェクトではgraphqlで開発をしており、graphql-codegenを使用していました。
開発当初はschemaが変更するたびにcodegenのコマンドを手動で実行する必要があり、codegenコマンドを実行し忘れるとschemaとフロントエンドのコードで差異が生まれてしまい、バグが発生するという問題がありました。
また、フロントエンドではschemaの変更があるたびにschemaディレクトリでbuildコマンドを実行して、フロントディレクトリでcodegenコマンドを実行するようにしており、ディレクトリを移動する必要があり手間を感じていました。
そこで、schemaが変更されたらciで自動でcodegenのコマンドが実行されるようにしました。
具体的にはhuskyとpre-commitを使用してcommitのたびにschemaファイルをbuildするようにして、
schemaのプルリクエストが立つたびにgithub actionsでcodegenのコマンドを実行し、差分のcommitまでを自動化しました。
schemaとフロントエンドのコード差異がでなくなり、スキーマの内容とフロントエンドのコードが違くなるという問題を解決することができました。
またフロントのコードがschemaと違うとcodegenコマンドが失敗するのですが、その失敗もschemaファイルのプルリクエストが立てられた時点で気づくことができるようになったので、codegenコマンドが通るように修正する作業もスムーズに取り組めるようになりました。
Coadmapはエンジニアに必要な知識を体系化し、ユーザーのなりたい像に対してロードマップ提供するプログラミングの教育支援ツールです
ここでの自分の大きな仕事は
プロダクトマネージャー: 1名
フロントエンド: 3名
バックエンド: 3名
マイクロCMSにContentfulを使用して1から作成しました。
作成するにあたって実際にやったことは
Contentfulのモデル変更が発生したときに、メディア側の本番環境とContentful側でモデル変更のタイミングが違うとクライアントサイドで通信している箇所が動かなくなるという事故が発生するため、本番リリース時に複数人で対応しリリース後も手動で確認するという状況が発生しており、手間がかかっていたので改善しました。
主な改善点は
フロントエンドチーム(自分含めて3人)のマネージメント
フロントエンドの課題として、E2Eテストのバグが多いというのがあったので、バグを少なくするための施策をしました
フロントエンドはE2Eテストをしたときにバックエンドよりも圧倒的にバグが多く、E2Eテストのたびに修正のissueが多いときで20個ほど上がっていました。
そのためバグ修正に追われて新しい機能の開発が思うように進まない状態になっていました。
私はその状況を改善するべく、