# 直近の小規模プロジェクト
## ポイント
- 1ヶ月限定のミニプロジェクト
- Clojure で Clean Architecture を体現した、マイクロサービスバックエンドAPI
- XBRL 内の非定形データから企業情報を抽出
## 解決したい課題
企業の有価証券報告書提出からそのコンテンツをプロダクトに反映するまでの期間の短縮とその工数、外注費用の削減
## 背景
データ生成チーム経由で PDF から企業情報を抽出する作業を外注しており、
さらにその成果物をプロダクトに反映するまでに半年を要していました。
データの鮮度はプロダクトの価値に直結します。
データ生成チームが上記のようなペインをいくつか開発チームに共有しており、
その中から選択しました。
チーム開発が基本ですが、「ひとりプロジェクト」と呼ばれる取り組みがあり、これに自ら手を挙げて行いました。
ユーザーはデータ生成チームです。
## 取り組んだこと
### 開発をどう進めたか
まずはスパイクとして、ひとつの企業の XBRL を tsv に変換するコマンドをつくり、
数十社をサンプルとしてユーザーに示し、運用をイメージしてもらいながら、仕様とそれらの優先順位をざっくりと決め
ました。
上記コマンドにそのフィードバックを反映した後、数百社をサンプルとしてユーザーに渡し、外注も含めたデータ品質
チェック作業を依頼しました。
それを行ってもらってる間、コマンドを REST API 化しました。
コマンドは書捨てのつもりでモノリシック、テストも必要性を都度判断して書きましたが、
REST API は Clean Architecture、 TDD かつアウトサイドインで実装を行い、可変性、可読性を意識しました。
### 非定形データをどう扱ったか
取得したいコンテンツが含まれるエリアまでは XBRL で定義されたタグでたどり着けるのですが、そのコンテンツは一般
的な HTML タグで表現されています。
その構成は個社毎に異なるものです。
なので、Instaparse のようなパーサコンビネータ−を用いてかっちりやることは出来ないと判断し、以下のように「泥臭い
が徐々に正解に近づいていける」やり方にしました。
まず、 tr を全て企業レコード候補とみなします。
それらを、ドメイン層で spec を用いて定義した企業属性群の値のプールへの適合具合を見て判定するようにしました。
spec とそれを構成する述語を調整することで、徐々に精度を高めてゆきました。
また、上記のサンプル企業データを e2e の expected としていたので、積極的に調整することができました。
### コミュニケーション
フルリモートの為、Discord の特定の部屋に常駐し、気軽に話しかけてもらえるようにしていました。
ミニプロジェクトなので、カンバンは作らず、
Trello を用いて画面共有しながらユーザーとストーリーの優先順位づけ、スコープの決定を行いました。
また、特に Clojure の知見を持っているエンジニア中心に、
ライブラリの選定やアーキテクチャの妥当性についてフィードバックを得て反映していきました。
### 成果
上記品質チェックは OK となり、外注の成果物と遜色無いものになり、ユーザーに感謝されました。
# その他、過去のプロジェクト
まとめて書きます。
前々職では、金融系、事業会社の経営企画をターゲットユーザーとした B2B SaaS の開発を行っていました。( 5 年 )
当初はバッチ処理、後にマイクロサービス化が進んできた後では、名寄せ API はじめ各種バックエンド API、フロント
(Web, BFF)などを開発していました。
チームは 4-5 人で、常にペア・プログラミングを行っていました。
前々職では、SIer で航空会社のデータ解析基盤などをつくっていました。( 3年 )
AWS Redshift、S3 などをデータストア、Tableau BI をフロントとした基盤で導入からサポートを行いました。