【振り返り②】検索エンジニアとしてのバックエンド開発

Profile Icon
2024年10月16日
Junichi Sato
【振り返り②】検索エンジニアとしてのバックエンド開発

前回の記事


新卒で入社したヤフーには大きなデータサイエンスの部門があり、 僕は入社時の面接時にはその手の話しかしていなかったので、てっきりデータサイエンス系の部署に配属されるものだと思っていたのだけど、 気づいたらヤフーショッピングというサービス部門の検索チームに配属されていた。 希望の配属先ではなかったのだけれど、振り返ってみるとここでサービス開発に関われたのは良かったと思う。

当時は、検索APIの機能追加や検索エンジン自体の運用が主な業務だった。 コードベースが大きくて歴史もあったため、まずはそのコードを読み、理解することから始めた。

それまでソフトウェアの設計本などで語られる内容について、イマイチピンときてない部分も多かったのだけど、 実際に大きなシステムを見ることで、なるほどこういう複雑なシステムに対処する話だったんだな、というのがわかった。

また、社内で使われていた技術の多くは、外部のOSSよりも性能が高くて驚いたことも覚えている。 たとえば、今はOSSになっている全文検索エンジンのVespaや NoSQLのmdbmなどは、非常に高性能だった。 OSSで人気のものが性能面でベストだと思っていたけれど、実際は社内のツールの方が優れていたことに驚かされた。 また、こういう高性能なソフトウェアを作るにはLinuxカーネルの知識やアルゴリズムの知識が必要なのだなということがわかった。

あとは、チーム単位でAPI、サブシステムを管理していて、システムを連携して全体として一つのサービスを作っているため、 機能開発にはチーム同士の連携が必要だった。 最近は多くても2~3人のチームで、自分が全てのコードに関わる開発が多いので、 調整などの仕事はほとんど発生しないのだけど、 当時は、新機能開発時やAPIのクローズ時に他のチームお願いしに行くことがよくあった。 こうした組織的な開発は、プログラマとしての社会人経験として結構大事かもしれない。

• • •

当時、開発だけでなく運用も担当していたことは、自分にとって重要な出発点だったと思う。

バックエンドシステムでは、運用者は一面としてはそのシステムのユーザーで、 自分でシステムを運用することで、自分自身がユーザーとなってシステムの使いやすさを体感したり、運用上のニーズを知るきっかけになる。

開発と運用が分離していると、それぞれの都合の押し付け合いみたいになってしまうし、 バランスを取るにはどちらも担当するのがベストだと思うようになった。

仕事で思い出に残ってるのは、年に1度のセールの日で、 その日はサービスへのリクエストが集中するため、サービスがダウンしないように、事前にいろいろな対策を行う。 予測が外れると大きな問題になるため、 リクエスト数の予測、サーバー台数の調整、負荷試験の実施など、準備を進めていく。 こういう経験は、大規模なサービスならではだったなと思う。

最近は小規模なサービス開発が多いので、こういうことはあまりやってないけれど、 サービスが成長した暁には、この経験が役に立つかもしれない。

• • •

会社に入ってからはJetBrainsのIntelliJ IDEAを使うようになった。 大学時代はEmacsを使っていたが、大学の後半ではVimをメインで使っていた。 しかし、実務で対応すべき言語が増えるにつれ、状況が変わった。

業務では、PHP、Perl、Java、Go、Pythonなど、多くの言語をカバーする必要があった。 各言語に対して毎回エディタを設定する余裕がなくなり、セットアップが不要で幅広い言語に対応できるIDEを好むようになった。

業務外の時間では、ハイパフォーマンスなシステムに興味があり、C++や効率的なプログラミングに関する技術を学んでいた。 特に、将来的にC++を使うようなプロジェクトに関わりたいという思いがあったので、 当時は業務とは別に自作プログラミング言語やインタプリタを作ってみたりして、知識を深めていた。

大学時代と変わらず、特に対外的な発信もせず、ビジネスへの興味も薄かったため、実用的でないプログラムを黙々と書いて学んでいた。 振り返ってみると、当時から技術ブログで文章でも書いていれば、いろいろ蓄積したかもしれない。

結局ヤフーでの業務でC++を使うことはなかったのだけれど、最近ではファームウェアの開発でC++を使う機会が増え、この学びが意外にも役に立っている。


次の記事