エムスリーテックブログ

エムスリー(m3)のエンジニア・開発メンバーによる技術ブログです

Sentry の JavaScript SDK に送った Pull Request がマージされた話

この記事はエムスリー Advent Calendar 2020 の5日目の記事です。

エムスリーエンジニアリンググループの松原(@ma2ge)です。今回は現在担当しているエムスリーデジカルでも利用している Sentry の SDK に Pull Request を送った話をします。ちょっと昔話とはなるのですが、1つの Pull Request には1つの物語があるということでご覧いただければと思います。

f:id:ma2gedev:20201204094254j:plain
写真はリモートワーク時の健康のために導入した懸垂バーです。本文には特に関係ありません。

現在担当しているエムスリーデジカルでは、エラー監視の仕組みとして Sentry を利用しています。ちょうど1年ほど前に今のチームに入り、エラー監視の仕組みを改善できそうと考えエムスリーの他プロダクトでも実績のある Sentry の利用を提案、導入することになりました*1。導入が決まった後は随時課題を解消していったのですが、単純に SDK を利用するというだけでは満たせない要件がありました。

機微情報のマスク

それは個人情報等のセンシティブなデータ(機微情報)を Sentry のサーバへ送らないという点です*2。特にエムスリーデジカルは、電子カルテというプロダクトの性質上、多くの大切な情報を扱っています。

そのためこれらデータを Sentry のサーバへ送る前にマスクして、Sentry 側のサーバに機微データが残らないような対応を取る必要がありました。しかし下記の Issue にもあるように Front のエラー監視で利用しようとしていた最新の JavaScript SDK(sentry-javascript)には、古い SDK にあった Sentry サーバへの送信前にデータをマスクする機能がありませんでした。

github.com

無いものは仕方がない、かといって古い SDK の利用を続けるのも今後のことを考えると微妙ということで、一先ずこの部分についてはプロジェクト内で作ることにしました。

OSS への Contribution の機運

ただ一方で OSS 側にフィードバックができれば、今のチームとしてはプロジェクト内に追加したコードを削減できます(若干ではありますが)。また他者目線では、過去の SDK 利用者が新しい SDK への乗り換えが容易になりますし、Sentry を使う弊社内のプロジェクトや、それこそ世界中で利用している方にも便利であろうと考えました。そこで上記 Issue の進捗を訪ねる形で SDK に機能追加すると有用ではないかと率直に聞いてみました。下記はその際に開いた Issue です。

github.com

その結果 Pull Request を歓迎すると返答をいただきました。JavaScript のプロジェクトへコードを送ったことはなかったのですが、これも何かの巡り合わせと考え空き時間等で Pull Request を作ることにしました。

Pull Request を送る

sentry-javascript は主に TypeScript でコードが書かれており、自分にとっては初めての TypeScript なプロジェクトだったのですが、Contributing Guide が用意されていたこともあって開発環境構築にも戸惑わず進められました。

またその他にも Pull Request 作成時のテンプレートが用意されていて、Pull Request を送るところまで割とスムーズにできるようになっており、最初からある程度形のあるコードとして送ることができたかと思います。

github.com

Pull Request 作成後は、レビューと指摘事項の修正を数度やり取りさせていただき、無事マージしてもらうことができました!!!

突然のリバート

が、なんとですね、残念なことにこの後マージされた機能はリリースされることなくリバートされてしまいました。理由は上記 Pull Request のコメントにもあるようにちょうど新機能として開発しているプロダクトがあり、そのプロダクトがデータのマスクを含めた機能を作ろうとしているところだったようです。

そのためデータのマスク処理をこのタイミングで取り込むことはしたくないとのことでした。理由としては納得であるため、今後に期待して追加での要望はせずにこの件はクローズとしました。

ちなみにその当時開発中であったプロダクトが現在公開されている Relay という Sentry の SDK と Sentry サーバの間に入る Proxy のようです。余談ですがちらっと Relay のコードを見たところ Cargo.toml が見えるので Rust 製ですね。上記コメントでさらっとクライアントサイドでもということが触れられているのですが、今後どうなっていくのかテクニカルな面でも興味深いですね。

まとめ

リバートされてしまったことは悲しかったですが、Pull Request を送ってみようというところから、1つ TypeScript のプロジェクトについて開発し、自らの幅を広げることができたのは良い経験となりました。皆様も機会があれば OSS と触れてみることで面白い経験ができるかもしれません。よければチャレンジしてみてください。

We are Hiring!!!

エムスリーは技術が好きなエンジニアを絶賛募集中です!

ちょうど 12/14(月) 19:00~ から自分が今所属している「エムスリーデジカル」チームの採用説明会を行います!オンラインでチームの雰囲気を知ることができるチャンスなので、ぜひご参加いただければと思います!

m3-engineer.connpass.com

カジュアル面談もありますので、ご都合の良い方をお選びください。

jobs.m3.com

*1:さっと書きましたが合理的であればすんなり話が進んでいくのがエムスリーらしいところです

*2:https://docs.sentry.io/product/data-management-settings/