# 社内wikiアプリケーション開発プロジェクト (2021/5 ~ 現在)
## プロジェクト概要
組織内の暗黙知をなくすことをコンセプトとした社内wikiアプリケーションにおいてフロントエンド開発に携わり、エディター機能の開発や、記載されたワードから別ページの情報と紐づけ情報間の行き来や整理を自動化する機能等の開発に要件が出揃い始めた時期に参画し、各機能の仕様の策定、フロントエンドの
設計から開発、QAに携わりました。
## チーム情報
会社全体: 6名(業務委託含む)
フロントエンド: 2名(業務委託含む)
バックエンド: 2名(業務委託含む)
## 開発・実装内容
### 【概要】
アプリケーションの設計・実装
### 【どのような機能の開発・実装か】
プロダクトが立ち上がって間もなく、フロントエンドエンジニアが私1人という状態で将来的な機能の変更を念頭に置いて、保守性の高い設計を考え、実装しました。
### 【課題・問題点】
- プロダクトが今後機能の修正や新機能の追加が行われる可能性を考慮し、オブジェクト指向について学習し、単一責任の原則やオープン・クローズドの原則を取り入れ、コードの保守性を高めることと共に、新しいエンジニアが参画してきた時に読みやすく書き換えやすいコードを心がけ、書くことができました。
- 開発初期はステート管理にreduxを用いてコンポーネントを跨ぐ全てのステートをstoreに持たせてしまっていた為、管理が煩雑になり負債となってしまったので、同一ページ内のstateをuseContextを用いて管理するようリファクタリングを提案、実施しました。
- テスト設計を学び、テストを書く事で安全にコードを修正できる事を学び保守性を上げるのに重要だと思い、テストにどれ程コストを割けるかを相談した結果、コンポーネントのテスト、E2Eテストはせずに、jestでのユニットテストの書き方を学習し、関数を作るときはテストを書く事くようにしました。
### 【使用した技術】
Next.js, React, TypeScript, rect-hooks, tailwindcss, Slate.js, Redux, jest
---
### 【概要】
WYSIWYGエディター画面の開発
### 【どのような機能の開発・実装か】
ユーザーがドキュメントを書き込むエディターにWYSIWYGエディターという方式が採用されていました。notion等で使われている、ディスプレイに現れるものと処理内容が一致するように表現する方式で、文字への装飾やコードブロックやリスト形式という様々な表現をできるという要件の中、文字装飾の仕様の策定から開発、QAに携わりました。
### 【課題・問題点】
- 入力した文字の装飾やコードブロックやリスト形式への変換を、ショートカットコマンドとUI操作から各機能が使える必要があった為、オブジェクト指向単一責任の原則を取り入れる事で、各機能とReactコンポーネントを疎結合にすることで、どこからでも機能を使えるように設計しました。また、ビューとロジックを分離して書く事で、修正しても壊れにくいコードを書くことができました。
- Slate.jsを使っていて機能的に足りないところやサービスの仕様に合わせる必要が生じた際に、Slate.jsの機能だけで解決できないところは、どのようにレンダリングされるかを解析し、JavaScriptの構文を用いて仕様に合わせた処理を行う関数を自作して解決しました。
### 【使用した技術】
React, TypeScript, rect-hooks, Slate.js
WYSIWYGエディターの開発にSlate.jsというライブラリをReact及びTypeScriptとの相性の良さから採用し、0からキャッチアップを行い中心になって開発に携わりました。