# プロジェクト概要
シード期の企業でVtuber向けのプラットフォームサービスの開発
# 開発メンバー
CTO、自分、副業エンジニア4人
# 使用技術
Nuxt.js、TypeScript、Graphql、urql
# 業務内容
フロントエンド設計、開発
# 詳細
・GraphQLのフラグメントコロケーションを用いた実装方法を提案・導入。この変更により、コンポーネントとクエリおよびミューテーションの依存関係が明確になったことで、デバッグのしやすさ、保守性の向上につながった。
ページファイルごとにロジック用のファイルを作成し、そこでqueryやmutationを行っていたり、様々な箇所に似たロジックを書いてしまっていたことからデバッグが大変であった。
そのため、データ取得ロジックを各コンポーネントの近くに配置し、
コードの可読性と再利用性を高め開発効率向上に繋げようと考えたため。
・デザイナーとコミュニケーションをとり、新レイアウトを作成。AtomicDesignのtemplate層の原則に従って新レイアウトを実装し、10種類のレイアウトを使い分けていたところを2種類だけに統一した。
ナビゲーションのメニューがなく、アプリケーションの導線がわかりづらい状況になっていた。
さらに、AtomicDesignのtemplates層をうまく使えておらず複数のtemplateが乱立していた。
ナビゲーションを含めたtemplateを作成し、必要なものだけに簡潔にまとめてレイアウトを一新することで一貫性のある実装ができるように整えた。
・Nuxt.jsのpluginsの機能を使ってカメラ、マイクデバイスの状態管理をアプリケーション全体で一律管理するように修正した上でWebRTCを利用したビデオ通話機能の開発を行った。
デバイスの状態を集中管理することでコンポーネント間の状態の整合性を保つため。また、さまざまな箇所で使われるデバイス状態のコードの重複を防ぐため。
・ApplePay,クレジットカード決済を含む支払い機能のリファクタリングを実施。複数の箇所に散乱していたコアとなる計算部分のロジックをhooks化させ、保守性の高いコードに修正した。
特にバグが起きてはいけない支払いロジックの部分であり、ロジックの一元管理をして保守性を高めたかったため。
・アプリケーションのインタラクション向上のため、Vue.jsのトランジション機能を基に複数のアニメーション用の共通コンポーネントを作成し、リッチなUIの構築を主導した。
ホバー時やモーダル表示時のアニメーションがなく、アプリケーションが安っぽく見えてしまっていた。
variablesで共通cssとして定義、vueコンポーネントとしてアニメーション用のテンプレートを作成することで一貫して開発者が共通のアニメーションを付与できるようにしUXを改善したかったため。