この記事は Nikkei Advent Calendar 2021 8日目の記事です。
はじめまして。情報サービスユニットの又吉です。私は、2021年4月に日本経済新聞社に入社した新卒1年目です。今回は、配属された2021年5月から2021年11月までに行った業務内容について紹介したいと思います。なお、エンジニアに興味がある学生にも読んでもらえるように用語の解説や注釈を多めに記述しています。
情報サービスユニットとは
日本経済新聞社には多くのエンジニアが在籍しています。ほとんどのエンジニアは日経電子版を始めとするBtoCプロダクトのデジタル編成ユニットか日経テレコンなどのBtoBプロダクトの情報サービスユニットに所属しています。 私はBtoBの情報サービスユニットに配属し、その中でも、⽇経リスク&コンプライアンス、NIKKEI The KNOWLEDGE、日経テレコンのオープン化 などの開発を担当するグループでエンジニアをしています。
私の所属するグループで開発している上記3つのプロダクトは、日本経済新聞社の中では比較的新しいサービスです。まず配属されて行った業務は、⽇経リスク&コンプライアンスと日経テレコンのフロントエンド開発を担当しました。
フロントエンド寄りの業務
アクセスログ分析ツールの導入
アクセスログ収集サービスとしては、Google Analyticsなどが有名ですが、日本経済新聞社では自社開発したリアルタイムアクセスログ分析基盤のAtlasを一般的なアクセスログ収集サービスと同じく横断的に様々なプロダクトに導入しています。サイト閲覧時だけではなく、ボタンを押したりシステムがエラーになった時などにも送信するように組み込む必要があります。 最初に行った業務は、⽇経リスク&コンプライアンスで新規作成したページにAtlasを導入することでした。ボタンが出る条件やタイミング、送信に必要な変数の情報などがReactコンポーネントのどこにあり、どのようにReactイベントが呼ばれるのかを正確に把握し、送信漏れや二重送信しないようにコードを書く必要がありました。
この業務によって1つのコンポーネント内でReactのイベントがどのタイミングで呼ばれるかなどの挙動を正確に把握しました。
React クラスコンポーネント を 関数コンポーネントにリファクタリング
Reactには関数コンポーネントとクラスコンポーネントの2つの書き方があります。⽇経リスク&コンプライアンスではサービス初期に記述された部分はクラスコンポーネントが用いられ、新しく追加された部分には関数コンポーネントが使われています。さらに、クラスコンポーネント内での変数の受け渡しで用いていたライブラリ recompose の更新が終了しており、関数コンポーネントとhookの実装にリファクタリングする必要がありました。
大学時代、クラスコンポーネントを主に用いてプログラミングを行っていた私にとって、挙動を変えずに関数コンポーネントへ書き換えるのは大変な作業でした。クラスコンポーネントからhookとして切り出す処理の単位や影響、再利用、メモ化などを丁寧に押さえながら行いました。またユニットテストも、モックの仕方の変更や引き継げるテスト項目や引き継げないテスト項目など切り分けを行いました。
最初に行ったアクセスログ分析ツールの導入では、1つのコンポーネントとその周辺を見れば良かったのですが、ここでは、全体的にコードを理解する必要があり、プロダクトについて網羅的に深く学ぶことができました。
Cypressテスト導入
私の所属するグループ内では、利用者による画面操作(Web ブラウザの操作)により、想定通りの動作となっていることを確認する総合テストにCypressを導入して自動化しています。日経テレコンのオープン化での最初の業務はそのテストケースを作成することでした。 プログラムのテストを書くこと自体が初めてだったので、既に書かれているページのテストと最低限のテスト項目を参考にしながら、テスト対象のReactを読みとき、「変数の中にデータがあるとき」、「データがないとき」、「クリックしたとき」、「スクロールしたとき」など、細かい条件を考えながら記述しました。
日経テレコンのトップページとニュース検索の作成

会員登録が必要な日経テレコンに収録されている情報の一部を公開し、オープン化する取り組みが進められています。私はデザイン案をもとに、日経テレコンのオープン化のトップページを作成しました。
すでに実装されているReactコンポーネントを読みながら、再利用できるように変更を行ったり、指定されたデザインに沿うよう新しくコンポーネントを作ったりしました。また、ページ右側「企業情報」に表示される企業をランダムに表示する実装や企業の記事をAPIからカテゴリーごとに取得して、表示する部分も担当しました。
記事を取得するためには日本経済新聞社が保有する大量の記事がどのように格納されていて、どう検索クエリを書けばAPIから取得できるのかを把握することからでした。膨大な記事の検索には、Elasticsearchが使われており、記事検索APIとして社内向けに稼働しています。Elasticsearchのクエリの勉強を行った上で、検索機能の実装に落とし込み、再利用できるクエリ部分を分離するなどの実装も行いました。
新しく身につけることが格段に増えた業務でしたが、トップページが実際に公開されたときは嬉しかったです。1つ、大きなことを成し遂げられてこれからの励みになりました。
バックエンド寄りの業務
Amazon DynamoDBからElasticsearchを構築
日経テレコンでも利用している記事検索APIはNIKKEI The KNOWLEDGEなど他の多くのサービスでも利用しています。 記事検索APIが検索対象とする記事は200社以上の会社から提供してもらっており、常時収録が行われています。記事の収録漏れは必ず避けなければならず、もし速報性の高い記事の公開が遅くなると、記事の価値を損ねてしまいます。そのため記事の収録漏れを検知できるよう、Elasticsearchで検索できるようになるまでに通過する処理が完了した時刻をAmazon DynamoDBにトレース情報として構築しています。
私の仕事は、このトレース情報をAPIとして整備し、収録確認を行っているチームに使ってもらうことでした。そのために、収録確認を行っているチームに自動化の提案やどういう検索絞り込みができると使いやすいAPIになるのか調査を行い、インターフェースを確定させました。調査の結果、Amazon DynamoDBに不足している情報が見つかったので、付与するために複数の処理(多くはPythonで記述されている)を修正したりしました。
当初の計画ではAmazon DynamoDBを直接操作するようなAPIを開発しようとしていましたが、トレース情報をより柔軟に検索可能にする必要があったため、Amazon DynamoDBから、AWS Lambdaを経由してElasticsearchに投入する処理が必要になりました。さらに、そのElasticsearchのクエリをバリデーションするためのAPIについても追加で実装しました。これらは社内で広く使われているGo言語で実装しました。この業務でGo言語を初めて書きました。
1つのAPIができるまでの過程を仕様策定から開発、リリースまで体験することで、横断的なつながりが重要になることや仕様が固まるまでの大変さ、技術選定の見通しの大切さを学びました。
バインダー基盤システムのキャッシュ有無のテストを追加
NIKKEI The KNOWLEDGEでは、記事をテーマごとにまとめてリスト状に表示できる機能を提供しています。この記事をまとめる部分は日経テレコンの「ビシネステーマ」など他サービスでも参照されており、バインダー基盤システムと呼ばれています。
このバインダー基盤システムでは、記事の情報は記事検索APIから取得しているため、キャッシュを効かせて再利用、ユーザの操作に関連する情報はキャッシュが無効になるように実装されています。キャッシュの無効化を行わないと、他人の操作履歴などを返却してしまうため、これを避けなければなりません。私の業務は、キャッシュを意識したテストを記述することでした。Go言語で書かれたテスト対象の関数を読み解き、データ構造を理解し、テストケースを作っていきました。
テストを記述するとどのように構成されているのか、自分が行った変更がどう影響を与えるのかを理解する必要があるので、プロジェクトとGo言語の理解が深まりました。
仕事の進め方について
フロントエンド寄りの業務を5月から8月、バックエンド寄りの業務を9月から12月に行いました。また、1週間を水曜日で週の前半と後半に分けて、週の前半は⽇経リスク&コンプライアンスの業務、週の後半は日経テレコンの業務というよう進めました。金曜日の午後には各プロジェクトのメンター2名と私とで1週間の業務の振り返りと来週の業務の見通しを共有することで、業務量のバランスを取るようにしていました。
終わりに
フロントエンドとバックエンドの両方を半分ずつ行った、新卒1年目の業務内容について紹介しました。私はフロントエンドとバックエンドのどちらにも興味があったので、両方の業務を体験させてもらいました。(来年、正式なアサイン先が決まります。)この4月から12月までの間で多くの言語やツール、関係者と接しました。初めは分からない事だらけでしたが、一つ一つ調べたり、教えてもらったりすることで、それぞれのチームが抱えてた課題の解決と成果物に貢献できたと思います。
この記事を通して、エンジニア志望の学生が少しでも日本経済新聞社のデジタル事業に興味を持ってくれたら嬉しいです。