株式会社SENRIのCTOの杉山です!
2024年も暮れなので、開発周りの数字を振り返っていきたいと思います!
ちなみにSENRIは2015年創業なので、今プロダクトとしては10年目で、結構長くもでかくもなってきたな、と思いますが、まだ開発に終わりが見えません😢(プロダクト開発には終わりなどない、という話ですが)
テクノロジー寄りの記事なのでSENRIのこと知らなくても面白いと思いますが、もし気になったらまた上に戻ってきて下の記事をみてもらえるとなんとなく何かがわかるかもしれません笑
https://www.wantedly.com/companies/senriltd/post_articles/399317
https://www.wantedly.com/companies/senriltd/post_articles/402595
目次
言語とアプリケーション🔢
rails stats📝
Github issues
その他の大きな機能開発👏
カスタムインボイス
集計モジュールの改修
最後に
言語とアプリケーション🔢
SENRIはRuby on Railsで実装されています。
2024年1月1日
$ ruby -v
ruby 2.7.8p225
$ rails -v
Rails 5.2.8.1
2024年12月24日
$ ruby -v
ruby 3.2.2
$ rails -v
Rails 7.0.8.6
今年は、結構頑張りました!以前までは、機能開発のissueの波に押されまくってなかなか言語やフレームワークのバージョンをあげられなかったんですが、今年はしっかり時間をとってあげることができました。
順番的には
1月 => Rails 5.2 on ruby2.7.8
3月 => Rails 6系 on ruby2.7.8
6月 => Rails 6系 on ruby3.0.x
10月 => Rails 6系 on ruby3.2.2
12月 => Rails 7系 on ruby3.2.2
という感じであげていきました。最近、テストカバレッジが少し落ちてきてはいるんですが、テストでカバーされてる分色々安心してアップグレードできてます。
最新からは少しビハインドしてますが、それも引き続き、来年も追いかけていきたいと思います!YJITとか楽しみ😀
rails stats📝
$ rails stats > current_stats.txt
$ rails stats > past_stats.txt
2024年の年初と比較したくて、以上のように出力したものをChatGPT先生に整理してもらいました。
上のやつは、12/24時点でのrails statsです。
2024年現在と2023年末のコードベースの比較結果
総行数
現在:372,125行
過去:296,878行
→ 約75,000行の増加
LOC(実際のコード行数)
現在:312,433行
過去:247,761行
→ 約65,000行の増加
クラス数
現在:1,332個
過去:1,142個
→ 190個増加
メソッド数
現在:12,817個
過去:10,908個
→ 約1,900個増加
コードLOC(テストを除いたコード部分)
現在:149,138行
過去:109,405行
→ 約40,000行の増加
テストLOC(テストコード部分)
現在:163,295行
過去:138,356行
→ 約25,000行の増加
ChatGPT先生に比較してもらったらこんな感じ。
特筆するところは、モデルの数が317個から374個に増えてるところと、Jobのクラスが35個増えたところですね。
SENRIは、日々の売り上げや外回りする営業さんの訪問を記録する機能が中央にあって、その集積されたデータを集計したり分析したりしています。インドネシアやナイジェリアで多くの営業さんを抱える方々に使ってもらえるようになった結果、SENRI内で提供するシンプルなレポートだけでなく、カスタマイズされたその企業にとって大事なKPIなどをうちのデータをベースとして出すために、長い期間の集計データをCSVで出力する、SENRI外のデータレイクにデータを送っていく、など非同期処理が増えたのでJobとそのCSV出力用のClassがしっかり増えてる、という感じですね。
また、SENRIだけを使うんじゃなくて、会計ソフトなどのERPと繋ぎたい、という要望も結構ありました。多様なERPと繋ぐために、SENRI本体はERP向けにAPIを提供していて、ERP(例えばSAPとかSAGEとか)とSENRIの間にもう一つインテグレーターというのをかまして、双方のAPIを利用してデータを行き来させるようにしています。昔は、受注した情報だけで良かったのが、SENRI側で管理している在庫情報やERP側で柔軟に変わる各商品の価格情報などたくさん行き来させるために、日々APIも充実させていっています。
Github issues
弊社は、Githubのissuesでイシュー管理をしています。基本的には1 issue - 1 PR になっており、でかい機能開発は、大元のissueから細かくissueを分けていって、1 issue - 1 PRから大きく外れないようになっています。ので、だいたいissue番号を見ると➗2すると、こなしたissue数になります。
遡ってみると
という1/1に近いものを発見しました👮
で、この記事を書いてる2024年12月24日の最新の issue は #16141 なので、だいたい年間で2200・・・2200・・・🤔 dependabot による、gemの更新のPRも含まれてました笑
が、まぁそこらへんを差し引いても800ぐらいのissueはこなしてるんじゃないでしょうか。Railsのエンジニアが正社員2人 + 業務委託3人で、全体で4人月ないぐらいなので結構頑張ってるんじゃないかな・・・😢
その他の大きな機能開発👏
カスタムインボイス
今年の前半には、カスタムインボイス、という機能が追加されました。今までは、おおよそ決まった形のレシートの出力しかできなかったんですが、出したいフィールド、出さないフィールド、順番などなど必要な形でインボイスを出力できるようになりました👏 めっちゃ、メタなことやってんな・・・みたいな気持ちもありました笑
「担当」「顧客」「受注された商品」「数量」の情報載っている1枚と考えると、インボイスではなく倉庫&配達担当の方に在庫確認&配達リストとして利用してもらえたり、必要な情報を載せたインボイスを発行できたり、さまざまな利用用途があるようです(みなさんの使い方を全部知ってるわけではないんですが、他にも面白い使い方ありそう)。
集計モジュールの改修
SENRIでは、外回りの営業さんがお客さんを訪問した、という情報をさまざまな軸で集計したりできます。例えば、30 users で 10 visits / day という会社があって、これを1ヶ月分の集計をする、となると、ざっくりと、30 users x 30 days で900マス分の集計結果があって、ぼーっとしてると900回SQLを叩くことになるんですが、さすがにそれは2年目で脱却したんですが、訪問データを入れてたデータテーブルが他のものも入っており、クエリ自体が重くて、1ヶ月分の集計が30秒じゃ終わらなくてTimeoutしてしまう・・・みたいなことが発生していました(その時は、データを外出しして、近似リアルタイムレポートを見てもらったりしています)。
さすがに、これは改善しないといけなかったんですが、やっと今年の10月に時間が取れて、集計のベースにしていたデータのソース自体変えてしまって、大改修した結果、30秒ぐらいかかってたのが3.5秒ぐらいまでに下げることができました👏かなり高速化できたんですが、そうは言ってもまだ改善の余地があったり、UX含めてどうにかできるんじゃないかと思いながらアイデアがないので、どなたか相談させてください・・・🙇
最後に
普段はなんとなく見ても流してしまってるものを、きちんと数字に出して振り返ってみました。上に書いてた通り、チームとしてはまだ小さいけど、環境もアップデートできており、機能開発もそこそこ進んで頑張れたんじゃないかな、と思います。が、インドネシアやナイジェリア、ジンバブエやケニアと多様な国の多様な業種の方が使ってくれてるだけあって、共通してめっちゃ刺さりそうな機能、初めて聞く要望だけど大事そうなもの、要望は来てないけど絶対にこれはあった方がみんなのためになるよ!みたいなものまで色々やりたいことはあって、人手が足りてないから手を出せてないもの、試せてないものもたくさんありますので、もしSENRIの事業環境や、開発環境、プロダクトなどに興味をお持ちの方がいればぜひお声掛けください🙌あと、上に書いてるやつ、おれならもっとうまくできるぜ!みたいな方は是非アドバイスをくださいませ🙇
お読みいただきありがとうございました!
Webエンジニアの募集はこちら -> https://www.wantedly.com/projects/1924341