株式会社永産システム開発 / backendエンジニア
投資家向けファンダメンタル分析サポートツールの開発
# プロジェクト概要 ## 目的・背景 本プロジェクトは投資家向けファンダメンタル分析のサポートツールの既存機能のアップデートを行うというもの。 アプリケーション自体は別会社により作成されていたものを引き継ぎ、追加機能開発を行った。 ## 規模感、チーム構成、担当した役割 このプロジェクトは必要な追加機能開発をスポットで行ったため、数名のbackend実装者で小規模に開発を行った。 私が担当した業務は、TDnetが公開する適時開示情報を定期ポーリングし、XBRLファイルを取得し、複数ファイルから必要な指標値を取得・集計するという処理を実装することであった。 ※ XBRLファイル: 企業の業績データを作成・流通・利用できるように標準化されたXMLベースのファイル ## 使用技術 言語: Ruby、 JavaScript フレームワーク: Ruby on Rails DB: PostgreSQL インフラ: Docker、AWS その他: XBRL # 開発・実装内容 ## 1. 外部サービスに対する定期ポーリング ### 概要 本アプリケーションでは、企業の業績データを公開しているTDnetに対して定期的にポーリングをかけ、前回のポーリング時から差分があればXBRLファイルをダウンロードする処理を実装する必要があった。 ### 打ち手・使用した技術 これを実現するために以下の技術要素を使用した。 * cronを使用した定期実行 * faraday gemを使用したコードベースのHTTP通信 * sidekiqを使用した非同期処理 これらを組み合わせ、非同期でポーリングを行い、更新分のファイルをダウンロードするような実装を行った。 ### 成果 上記gemを複数組み合わせた構成により、コードベースの安定的なポーリングを実現できた。 ## 2. XBRLファイルからの指標値の抽出 ### 概要 上述のポーリングで取得したXBRLファイルは、様々な指標値が含まれている。 しかし、アプリケーションで実際に使用したい指標値は、その中の一部である。 よって、ファイル内の特定の指標値を抽出してアプリケーションのDBに永続化する必要があった。 ### 課題・問題点 XBRLファイルは「日本会計基準」、「米国会計基準」、「国際会計基準」の3種の会計基準が存在し、それぞれによって、ファイルの数や種類、内部構造が異なる。 また、これら会計基準は企業によって選択の自由があり、途中で変更されることもある。 それ故、3種の会計基準に対し、動的なロジック割り当てや、柔軟性の高いクラス設計にすることが求められる。 ### 打ち手・使用した技術 XBRLファイルから特定の指標値を抽出するために、nokogiri gemを用いたスクレイピングを導入した。 また、3種の会計基準に動的に対応するために、GoFのデザインパターンにおける、Strategyパターンを採用した。 ### 成果 約4000社のXBRLファイルを自動で解析し、必要な情報を抽出するフローを実装できた。 また、Strategyパターンを採用したクラス設計の導入により、今後の拡張性も高めた状態にできた。 # 本プロジェクトを通して学んだこと * cronを用いた定期実行処理 * sidekiq gemを用いた非同期処理 * faraday gemを用いたコードベースのHTTP通信 * nokogiri gemを用いたスクレイピング * Strategyパターンを用いた柔軟性の高いクラス設計