LayerX エンジニアブログ

LayerX の エンジニアブログです。

スプシを活用してアセットマネジメントの情報開示業務を効率化した話

こんにちは!LayerXから三井物産デジタル・アセットマネジメント(以下、MDM)に出向中の阿部と申します。 本日はGoogleスプレッドシートを活用したアセットマネジメント(以下、アセマネ)の情報開示業務の効率化について書きたいと思います。

経緯

tech.layerx.co.jp

上記は当社丸野による過去の記事ですが、こちらに記載されているとおり、アセットマネジメントの情報開示業務の現況は超非効率なプロセスが存在し、それにより人件費等コストが高くなっています。
非効率なプロセスを効率化することによるコスト削減が実現できれば、その結果投資家へ返せるリターンが増え、魅了的な投資商品になりうると考えております。

データ管理のAs-Is

MDMにおいては、扱う不動産や証券のデータを社内で管理するために、ExcelやGoogleスプレッドシートを使うケースもあれば、社内用の内製Webアプリケーションを使うこともあり、この間を橋渡しする必要がありました。
すぐさま全てを内製やSaaS化する前に、まずは業務を回し少しずつ効率化しながら理想形を見定めていくことが重要であり、その過程ではGoogleスプレッドシートでのマスタ管理は現実的に有用な手段となります。
一つのデータを複数人で共有しやすく、既存のデータ管理業務を変更せずに、Google Apps Scriptを利用して社内の内製Webアプリケーションにデータを取り込む仕組みを導入しやすいためです。
既存のデータ管理業務と社内用の内製Webアプリケーションの橋渡しとして、csvを用いてデータ入稿を行っています。

具体的なデータ入稿業務

証券 × 四半期ごとの分配(配当)額の入稿業務を例に、実際どのように入稿するのかを書いていきたいと思います。
シートの単位はリレーショナルデータベースでいうところのテーブル単位で分けることが多いです。

f:id:es335ab:20210426185321p:plain
スプレッドシート の入力例

ある証券(id:test)の2021/01/01〜2021/03/31における分配額は、このような形式でGoogleスプレッドシートに入力します。
入力したら【csvおじさん】というボタンを押下すると、指定しているGoogle Driveのフォルダにcsvファイルが吐き出されます。

f:id:es335ab:20210426184231p:plain
csvが吐き出されたGoogle Driveのフォルダ

f:id:es335ab:20210426184304p:plain
csvの中身

このボタンを押下した時にGoogle Apps Scriptで書かれた下記のような簡易なスクリプトが動いております。
シートの入力内容を元にcsvを生成し、特定のGoogle Driveのフォルダに保存する、という感じです。

function createCsv() {
  const csv = loadSheetData()
  putToDrive(csv)
}

function loadSheetData() {
  // 現在開いているシートを取得
  const ss = SpreadsheetApp.getActiveSheet()
  // A列の値を全て取得
  const rows = ss.getRange('A:A').getValues()
  // A列の長さを計測
  const rowLength = rows.filter(String).length
  // 4行目の値(吐き出すcsvデータのヘッダー)を取得
  const columns = ss.getRange("4:4").getValues()[0]
  // 4行目の長さを計測
  const colLength = columns.filter(String).length
  // 書き出すデータを取得
  const data = ss.getRange(4, 1, rowLength - 2, colLength).getValues() 
  let csv = ''

  // Webアプリに取り込める形式にコンバート
  data.forEach((item, index) => {
    if(data[index][0] == "") {
      return
    }

    csv += data[index].map((v) => {
      if (v instanceof Date) {
        // 日付の場合goで解釈できるフォーマットに変換
        // 外部ライブラリであるdayjsを使用
        return dayjs.dayjs(v).format('YYYY-MM-DD hh:mm:ss')
      }

      // 数値区切りのカンマが入っていたらカンマを消す
      if (typeof(v) === 'string') {
        return v.replace(/\n|\r|,/g, '')
      }

      return v
    })
    csv += '\r\n'
  })
  return csv
}

function putToDrive(csv) {
  const sheetName = SpreadsheetApp.getActiveSheet().getName()
  const csvFileName = `${sheetName}.csv`
  const drive = DriveApp.getFolderById('folder_id')
  const contentType = 'text/csv'
  const charset = 'utf-8'
  const files = drive.getFilesByName(csvFileName)

  if (files.hasNext()) {
    const csvFile = files.next()
    csvFile.setContent(csv)
  } else {
    const blob = Utilities.newBlob('', contentType, csvFileName).setDataFromString(csv, charset)
    drive.createFile(blob)
  }
}

あとは生成したcsvファイルをMDMの社内で使用するWebアプリケーションにアップロードし、関係者で適切に内容を審査、承認してから投資家に公開、周知していくことになります。
このへんの話は今後の記事でお話できればと考えております。

今回の例では1レコードのみの入稿でしたが、この仕組みを使うことで複数レコードを一気に入稿することも可能です。

この方法による効率化の効果

アセットマネジメントの情報開示業務では入稿、申請、審査、承認が必要なデータ類が多く存在します。
この仕組みを利用することで、社内で使用するWebアプリケーションにはデータの種類ごとに入力フォームを実装することなく、達成したい業務の実現が可能となります。
また、アセットマネジメントの情報開示業務は非常に複雑であるため、まずはこのような簡易な方法で業務運営を行いながらボトルネックとなるプロセスの見極め、改善することでさらなる効率化を目指していければと考えております。

まとめ

今回の記事では、アセマネ会社が非効率なプロセスを効率化することの重要性、Googleスプレッドシートを利用したデータ入稿によるその一例をご紹介させていただきました。
最後まで読んでいただきありがとうございます。

MDMを含むLayerXでは、引き続き業務の効率化を行う仲間を募集しています。
少しでもご興味を持っていただけましたら、ぜひカジュアルにお話しましょう!

herp.careers