## プロジェクト詳細について
クリエイターさんの商品を管理する業務システム・取引先の管理システムを主に開発しておりました。
商品管理システムでは、今まで商品を管理する方法がなく、スプレで代用されていたのでシステム化しようという流れになり2019年の12月頃から要件定義のためのMTGなどを積み重ねてきました。
11月〜1,2ヶ月程度要件定義があり2020年の3月にリリースを行いそこから少しずつ改善して運用を続けています。
取引先管理システムは途中から運用をさせていただいていて、画面の改修やフローの見直しなどを随時おこなっています。
ユーザー管理システムは、従業員とアルバイト・派遣・それ以外の方を管理するシステムで、
備品管理などを行うために作成しました。
## チーム構成・規模
PM: 1名
バックエンド: 4名
[Herokuka](https://www.wantedly.com/companies/uuum/post_articles/319492)というシステムの中にある
商品管理システム・取引先管理システム・ユーザー管理システムに携わっています。
## 業務内容
・機能設計
・DB設計
・機能実装
・コードレビュー
## 主な追加機能
・全体的な画面の作成
・SKU一括追加機能の作成
・商品画像を登録・削除(s3へのアップロード・削除)
・商品を登録・編集機能
・その他色々修正
## チーム内での自身の役割
商品やSKUなどをグッズ担当の方が登録していただく中で不具合や直して欲しいところの依頼などを受けて
様々な開発を行ってきました。
また、使いづらい箇所や統一がされていない画面に関しては積極的に画面を直しています。
開発内容をいくつかピックアップします。
## 開発について
### リリース前の画面
画面について最初にマークアップをする必要があったので、当時のほぼ全ての画面 (10画面程度)を1.2週間程度で作成しました。
Slimを使って画面作成をしたのが初めてで、そもそもHTMLもそこまで勉強したことがなかったのでこれを機会にとHTMLの勉強と同時に行い、基本文法を見比べながら作業をしました。
### Vue.js・Nuxt.js
最初はVue.jsは使われていなかったのですが途中から導入されました。
取引先やクリエイターさんのサジェスト、料金の税込価格の自動出力など色々な場面で使用していて、
SlimをVueに置き換える作業も随時おこなっています。
最近はVueをNuxtに移行していて、新規画面などは全てNuxtで実装しています。
### 定期的なメンテナンス
Railsの6.0->6.1のバージョンアップ行いました。
影響範囲が広いのでテストを追加でテストを書きカバレッジ90%までなっていたおかげで
特に大きな問題なくリリースできました。現在は7.0に向けて話を進めています。
また、dependabotを使用して定期的にgemの更新も行っています。
### 速度改善
画面によって1秒以上待ちが発生してしまうことがあったので、detadogを使って余計なクエリが発生しているところの確認を行い、indexをはったり、テーブルを見直すなどの作業をおこないました。
また、N+1が起きている箇所を特定するために、sentryの設定を見直しSlackでN+1やSlowQueryが発生したときに通知がくるようにし、通知が来たらすぐに対応するようにしました。
### miniTestからRspecへ
最初miniTestでテストを書いていましたが、Rspecでテスト書いた方がやれることが多いので、Rspecへ移行しました。今はminiTestで書いていた商品チームのテストをRspecへ移行している最中で、主にモデルや権限周りのテストを担当しています。
Rspecへの移行しテストが充実してきたため、バグの発生率が以前より減りました。
### 物理削除から論理削除へ
SKUや商品、その他諸々の削除をすると全て物理削除するようになっていました。
そのため最初discardやparanoiaを使うか対象モデルにdeleted_atカラムを追加して少しずつ全体を改修していくか
考えましたが、gem追加でも結局修正する必要がでてくるのと、default_scopeを使うとunscopedしにくかったり、新しく入ってきた人への
説明が増えるなど色々影響がでると判断してdeleted_atカラムの追加で落ち着きました。
その後は2名でタスクを分担し、影響範囲の調査しつつ作業を進めていきました。
論理削除にしたことによって消してはいけなかった商品やSKUを消してしまっても
戻せるようになり、連携しているプロジェクトの商品との差分が減りました。
### SKU一括追加機能の作成
最初の要件にはなかったのですが、商品に対していくつもSKUが紐づいていると
SKUを一つ一つ登録する手間が発生し、せっかく効率化のためにシステムを開発したのに余計に時間がかかってしまう
ということになっていたので、SKUの情報をスプレに入力してもらい、スプレから情報を受け取り
SKUを自動で作成するという機能を作成しました。
こちらの機能のおかげで一つのSKUを登録するのに1分半かかるところを、
スプレへの情報入力で済むので登録したいSKUが多ければ多いほど時間を削減することができました。
また、SKUの登録はほぼ毎日行われているのと、一斉に登録することが多かったので
今でもとても使われている機能になります。