pyhaya’s diary

機械学習系の記事をメインで書きます

データサイエンティストがOSSにコミットしてみた話

OSSにコミットしてみたいと考えて、見つけたデータ分析ツールにコミットすることができたのでその体験談みたいなことを書きます。

  • SPyQLというツールの紹介
  • どうやって見つけたか
  • どうやって作業を進めていったか

について書こうと思います。

イントロ

OSSへのコミットは、自分のコードを書く能力を上げることができるだけでなく、ツールを使っている他のユーザーにも喜ばれるという経験ができるので興味のあるエンジニアは多いのではないでしょうか。一方でなんとなく敷居が高く、一歩を踏み出すことができない領域だと感じている人も多いと思います。そういう自分もその一人でした。自分はデータサイエンティストとして働いているのですが、なんとなくデータサイエンティストはいわゆるソフトウェアエンジニアとは距離があるように感じていて、データサイエンティストがOSSにコミットなんて。。。などと思っていた部分もあったのだと思います。

そのようなときに、社内の勉強会でばんくしさんのスライドが紹介されていて、OSSコミットにソフトウェアエンジニアもデータサイエンティストも関係ない、むしろデータサイエンティストにしかできない貢献もあると気付かされました。
speakerdeck.com

このあたりから自分の中でOSSになんでもいいからコミットしたいという思いが芽生え、コミットできるリポジトリを探していました。そして、社内の機械学習勉強会で紹介するブログ記事を探しているときにSPyQLというツールの存在を知りました。

github.com

この記事では、SPyQLがどんなツールで、自分がこのツールのどこに貢献したのかについて書きたいと思います。

SPyQLとは

SPyQLは一言でいうとCLI上でSQLっぽい言語を使ってデータ分析ができるツールです。

github.com

spyql "SELECT * FROM csv('dammy.csv') LIMIT 1 TO json(indent=2)"

のようにCSVを分析して結果をJSONに保存するといった使い方ができます。また、matplotcliと組み合わせることによって分析結果を即座にプロットすることもできます。

何をしたか

自分が今回変更を加えたのは、パーサの最初の部分です。例えば、

SELECT
    user_id
FROM
    log
WHERE
    created_at >= '2023-01-01'

{
    "SELECT": "user_id",
    "FROM": "log",
    "WHERE": "created_at >= '2023-01-01'",
    "GROUP BY": None,
    "HAVING": None,
    "ORDER BY": None,
    # ...
}

のように変換する部分です。

自分が変更を加える前は、この部分は正規表現を使ったマッチングを使って行われており、可読性もパフォーマンスも向上の余地が大きいのでは無いかと思いました。Issueを作ってリポジトリオーナーに提案してみたところ、よさそうという返事をもらえたので早速コードを書いてPull Requestを作りました。


(英語は自分で書きつつ、怪しいところはDeepL先生に聞いて書きました)

やり取りをする中で気づいた学び

今回のPull Requestを完成させる過程では、リポジトリオーナーと様々なディスカッションがありました。例えば、コードのこの部分はこうしたほうがもっとパフォーマンスが出るんじゃない?ここまでやってしまうと可読性が落ちるよね、といったことです。このあたりは単純にコードの書き方で学びがあった他、どうやったらすれ違いなくコミュニケーションを取れるかといった点でも学びが大きかったように思っています。というのも、普段の業務でコードを書いてレビューしてもらうときには、レビュー相手は当然互いをよく知っている間柄なので暗黙的にこういうことだよね、といった感じで少し雑なコミュニケーションでも齟齬無く伝わりますが、今回のようなOSSへのコミットの場面では丁寧にコミュニケーションを取らないと、すぐに認識がずれてしまうからです。それはコミュニケーション相手があまり良く知らない人であることがほとんどであり、コミュニケーションの地盤を共有していないためです。

そのため、ディスカッションを進めるときには少し冗長になってもいいので「あなたが言っているのはこういうことか?」といった確認をするようにしていました。その結果、自分もリポジトリオーナーも納得する形でコードを完成させられたと感じています。

まとめ

  • OSSコミットは難しくない(のもある)
  • 勉強会に参加すると自分で集めるよりも効率的に情報を集められる
  • 互いをよく知らない場合のコミュニケーションでは思い込みをなるべく排除することがより大切