# プロジェクト概要
依頼されてから制作という形だったワークフローを、依頼前に制作するワークフローに変えるシステム
## プロジェクト背景
このシステム開発に至る前、社内での潜在的なニーズを探すため、業務現場にビデオカメラを持ち込んで業務観察をしつつ、インタビューを重ねました。
結果、現状の現場の課題として、
1. 広告クリエイティブの生産量に現状だと限界があること
2. 媒体の入稿規定は非常に厳しく、現場で認識して制作することは困難
の2点を見つけることができ、このシステム開発で解決する課題として設定しました。
## 機能概要
数十単位の画像・動画・テキストを情報解析し、ピクセルサイズやビットレートなどが入稿規定に合っているかチェックしました。
登録された画像・動画・テキストを組み合わせたものをプールしておき、必要になったときに入稿利用のためのCSVを出力しました。
## 技術概要
プロジェクト開始前後の綿密なヒアリングをもとに、DDDでコードに説得力をもたせました。
動画情報の取得のため、ffmpegとexiftoolを併用して腐敗防止層でまとめました。
Vue.js, Vuexを採用し、過度に複雑化せずシンプルに実装できるように努めました。
## 技術課題
制作・入稿部門間で同一の用語名で全く別の概念を指すものが存在し、DDDでコードに落とし込む際に苦労しました。
完全に分断されたコンテキストとして概念を分割することも可能だったのですが、複数部門が同一システムを使うために議論の場が分割できず、結果概念としての分割が難しい状態にありました。
ステークホルダーと対話を重ねその言葉がなにを意味するのか?を問い続け、一定の概念の整理をするとともに部門間を超えた協力体制を築きました。
動画の情報解析にjava標準では厳しかったので、。まずexiftoolを併用してできる限りの情報を集めましたが、後にffmpegでは音声情報が取得できることがわかったため、腐敗防止層でこれらの併用を吸収し、その後のツール入れ替えに向けた構成に変更しました
また、チームがFrontendに対する経験が浅かったため、事前にReact.js, Riot.js, Vue.jsの技術比較を行い、
1. React.jsはReduxなど必要以上に複雑になる要素があり、チームでは扱いきれない未来が見えた
2. Riot.jsはコミュニティとしての勢いがVue.jsより弱くReact.jsに比べエコシステムで負けている
と結論づけて、Vue.jsを採用しました。追ってVuexも採用しましたが、Reduxを使うよりはシンプルに済み、チームの経験値に合わせた選択ができました。
ある技術で困ったことをどう解決したかという話はよく耳にしますが、そういった技術を採用しないように選定することがエンジニアリングで求められていることだと考えています。