「Yahoo!マップ」や「Yahoo!カーナビ」などで使われる地域情報の検索システムにかかわっています。たとえばユーザーが「Yahoo! JAPAN」アプリやWebサイトでお店を探す際「東京駅 ラーメン」のキーワードで検索したら、その条件に合致した拠点の結果を返却するような機能です。私はそれらのシステムプラットフォーム開発に携わっています。最近は、拠点から得られる情報をより最適なカテゴリーに分類するために、その検索ロジックのチューニングにも携わっています。
2019年に新卒入社して以来、部署の異動を経験していないため社内の業務でかかわる範囲がそれほど広くなく、もっと若い世代の声を聞く機会が欲しいと思っていました。
そんななかインターンシップについて上長に声をかけてもらい、学生のフレッシュな意見に触れられると考え、メンターを引き受けました。インターンシップのコース内容も実務体験に近く、普段の仕事の一環として取り組めたので負荷も少なく、楽しくメンターを務められました。
私たちのチームが受け入れた学生は2名で、そのうち1名を私が担当しました。大学院の研究室で、信号機に代わる新しい交通制御システムの研究をしている方で、地域情報検索とも無縁ではありません。プログラミングスキルも高く、システムを開発することが大好きという点も私たちのチームにマッチしていました。また、私たちのチームが用意した課題や目標に対しても当初の想定よりかなり早い段階で達成され、その内容も優れたものでした。リモートワークで使うコミュニケーションツールも使いこなし、問題なく作業を進められていましたね。
「拠点検索に関する検索パフォーマンスチューニング」を課題に設定しました。第1フェーズとして、検索プラットフォームの概要を学生に理解してもらうことから始めました。検索プラットフォーム開発の仕事は事業全体に大きな影響力を持つもので、技術的にもシステムを構成するコンポーネントが数多くあります。まず全体の仕組みをわかりやすく解説する必要があったので、インプットにかなり時間をかけました。
このフェーズは、インターンシップ受入期間の前半で終えて、後半からは検索パフォーマンスの向上という具体的な課題に入りました。技術的にどうアプローチして検証すれば良いかを学生と一緒に議論して、いくつかのアプローチを試すことが第2フェーズですね。
第3フェーズでは、自分なりの答えを見つけてもらうために、学生にチューニングを任せました。毎日1on1ミーティングでコードのレビューをしたり、学生からの相談に乗ったり、私の方からアドバイスをしたりなど、実際に業務を一緒に進めるようなイメージで行いました。
また、実際に社内の開発環境での構築を体験してもらうために、パソコンの貸与も含め、環境構築に関する資料を提供して開発を進めてもらいました。
ABYSSというヤフーの検索エンジンライブラリをベースにした検索サービス構築プラットフォームがあるのですが、それに対する設定ファイルの書き方一つでもパフォーマンスは変化します。データベースへの、クエリのパラメーターを調整するだけでもレイテンシに差が生じることがある。学生にはレイテンシを何秒上げるかなどの数字目標は与えませんでしたが、レイテンシを向上させるためには「どの設定をどのようにいじれば良いのか」の深い理解が必要なので、そのための調査を体験してもらいました。
また、これらのデータベースや設定ファイルは、実際の業務で使われているものと同じものです。もちろん本稼働とは別のテスト環境のためどんなにいじったり、その結果壊れたりしても問題ないものを用意しています。このように本番と同じ条件のテスト環境でシステムの改善を行えることがおもしろさだと思います。
検索パフォーマンスチューニングは私たちが日々取り組んでいるテーマでもあり、インターンシップ生は普段の業務の一部をそのまま体験できていたように思います。私たちが日々の業務のなかで、パフォーマンスを上げるために「こうしたら良いのでは?」と感じていた部分を、インターンシップの期間中で調査から実際のチューニングまで行ってもらいました。それをスケジュール通りに進めていただいたうえに、実際のパフォーマンス向上にもつながった。最終的な成果発表会のレポートも期待以上のものでしたね。
学生に聞いたところ、大学での研究などにおいてデータベースをチューニングした経験はなかったようで、ご自身の基礎的な技術力がしっかりしていたということです。設定ファイルはPythonスクリプトで書いていたのですが、Pythonを含む基本的な知識があり、効率良く課題に取り組むことで、目標を達成できたのだと思います。
1on1ミーティングでは課題解決のためのすり合わせを常に行っていました。具体的には、技術力以前に目標の方向性やベクトルについて、私と学生の間で認識などをそろえる必要があるのでそのためのコミュニケーションの時間にもしました。
たとえばパフォーマンスチューニングに限らず、システム開発において正解は必ずしも一つではありません。システムを改善したことでメリットがあるユーザーもいれば、そうでないユーザーもいます。より多数のユーザーにとって有益となる方向性を選ぶために、その開発コストや運用コストについても考える必要がある。そうした、なかなか答えの見つからない議論をしっかり重ねられたことも、学生が成果を上げられた理由の一つになっていると思います。
業務や技術に関すること以外だと、積極的に雑談もしていました。インターンシップ中に出社する機会もあったので、そのときは一緒に食事にも行き、学生のチャーミングな一面も発見できてうれしかったです。長期のインターンシップは、学生とより親密になれると思いましたね。
まず前提として、学生に実際の検索ログを見てもらいましたが、なかには拠点情報を求めるクエリに、意図不明な情報がそのまま紛れ込んでしまうものがありました。もしかすると、システムが間違えて送ってきたものかもしれない。そして、そういった特殊なクエリパターンによってはパフォーマンスが下がってしまう可能性がありました。
それらの課題への対応策はあるのですが、そのためのロジックを加えると、やはりシステムが肥大化してしまう。つまり、運用コストが余計にかかってしまうのです。そのあたりをどうするか、そうした異常なクエリについての詳細をまずは調べてもらいました。そのうえで、処理にかかわるメリットとデメリットを比較し、実際のアーキテクチャ設計、システム構成を踏まえて検討いただきました。
もちろん具体策は私たちと一緒に考えますが、学生に開発コストについてもイメージしてもらうために、現場での検証業務にかなり近い内容を経験してもらうことは必要な作業だったと思います。1on1ミーティングは平均すると1日30分程度でしたが、場合によっては1時間、2時間となった日もあります。私だけでなく、ほかの社員を交えて話をすることもありました。
インターンシップはメンターだけでなく、チーム全体で対応するものだと思います。パフォーマンスチューニングでは、私の担当外のコンポーネントについても知っておく必要がありますし、技術情報についてはチームとして対応しました。
インターンシップをより有意義なものにするには、このようにきちんと学生をサポートしていくことが重要です。そうした認識がチーム全体にあったと思います。
やはり長期でないと実現できない内容があります。検索パフォーマンスチューニングという抽象的な課題であり調査も必要でしたし、各コンポーネントについて理解することはとても大変。もしこの課題を5日間でやろうとしたら、説明だけで終わってしまいそうな気がします(笑)。長期のインターンシップでは、学生とメンター双方のモチベーション維持も重要なポイントになります。当然ながら学生が企業のインターンシップで学びたいことと、企業が学生に提供したいことのマッチングが重要です。そこが互いに明確になっていて、ズレがなければお互いのモチベーションは長期でも維持できると思います。
もちろんさきも触れたように、1on1ミーティングで雑談する機会も大切ですし、何より学生の考えや意見を引き出すことが重要です。学生の質問やアウトプットに対してこちらも真摯に応える。その関係がモチベーション維持にもつながるのではないでしょうか。
また、私が担当した学生は、ご自身の目線で問題解決の方向性を示すことができる方でした。私自身、学生の新鮮な意見を聞いて気づいたこともあります。インターンシップのメンターを担当させてもらったことで、自分自身にとっても得るものが大きかったです。
インターンシップ終了後のアンケートでは学生から、「社内でも重要な技術の一部に触れられた経験は、自分にとって大きな糧になる」「難易度は高かったけれど、チャレンジングな課題に取り組めて良かった」とコメントをもらいました。とてもありがたいことにインターンシップを通して、大学院修了後の本選考も受験し、入社したい意向を持ってくれたそうです。私もメンターをやったかいがありました。
ぜひ、やりたいですね。2022年のインターンシップでは、学生に与えた課題がやや抽象的だった反省もあります。また、コロナ禍の影響でオフィス見学にあまり時間を取ることができませんでした。学生の皆さんからも「オフィスをもっと見てみたい!」という要望があると思うので、今後もインターンシップにかかわるなら、その点にさらに応えたいと考えています。