1日4000本の配信記事はどこへ行く?~Yahoo!ニュースの「記事プラットフォーム」の仕組みを紹介します
写真/アフロ
こんにちは、「Yahoo!ニュース」のプラットフォーム部分の管理・運営を担当している沼田です。
Yahoo!ニュースでは、ニュース提供社から1日約4000本もの新規記事を配信していただいています。今回は、配信していただいた記事データがどのようにYahoo! JAPANの中で処理されていくのかについて、技術的な観点からご説明したいと思います。
Yahoo! JAPANには様々なシステムがありますが、その中でも基盤部分を担うシステムを「プラットフォーム」と呼んでおり、「PF」という略称を使っています。記事データを最初に受け付けるのは「記事プラットフォーム」「記事PF」などと呼ばれているシステムです。
今回は、この「記事PF」が持っている下記2つの仕組みについてご紹介いたします。
- データの種類によって個別のシステムに格納する仕組み
- WebAPIにて様々な表示面に掲出する仕組み
データの種類によって別々に格納。その理由は?
まず、データの種類によって個別のシステムに格納する仕組みについてです。
ニュース提供社からYahoo!ニュースへ記事を入稿していただく際には、テキストファイル・画像ファイル・動画ファイルの3種類のファイルが利用されます。こういったファイルをまず最初に受け取るのが、記事PFです。これらの記事データを格納するために、記事PFでは、さらに別々の「◯◯PF」に渡していく処理を行います。
記事PFからのニュース画像は、画像PF内の「ニュース画像用」の領域に格納されます。画像PFには、他にもYahoo!天気・災害の天気図など、Yahoo! JAPANの様々なサービスで使用するための画像が格納されています。
動画ファイルについても同様です。記事PFから「動画PF」に格納され、GYAO!などのYahoo! JAPANグループで使用する様々な動画と一緒に格納されています。テキストファイル内のタイトル・記事本文・入稿時刻などのデータも同様に、「全社データベース」と呼ばれるシステムにて、Yahoo! JAPANの様々なデータと一緒に格納されます。
画像PF、動画PF、全社データベースといったそれぞれのシステムは、全て管理するチームが分かれています。このように「データの形式や取り扱い方によって、その専門的知識をもつチームが管理するシステムに別々に格納する」というのが、Yahoo! JAPANでは当たり前の運用スタイルとなっています。
その理由は大きく2点あります。
1点目は、深い知識による業務の効率化のためです。画像でも、動画でも、データベースでも、その技術の専門的な分野を極めるにはかなりの時間がかかります。そのため、それぞれの専門チームで深い知識を得た方が、業務を効率的に行うことができるからです。
2点目は、サーバーの効率化のためです。分散してデータを別々のサーバーにて管理するよりも、なるべく多くのデータを集約して大容量のサーバーに格納した方が、費用面で見たときに効率的だからです。以前は画像やデータベースをそれぞれのサービスで管理していましたが、複数のサービスのデータを同じシステムに寄せることによって、効率的になっています。
Yahoo!ニュース以外で記事を見ることができる理由
次に、WebAPIにて様々な表示面に掲出する仕組みについてです。
Yahoo!ニュースに掲載されているニュース記事は、Yahoo! JAPANの様々なページからリンクが貼られています。この「ニュース記事見出しリンク」が表示されているサービスには、Yahoo!みんなの政治、スポーツナビ、Yahoo!天気・災害、Yahoo!テレビなどがあります。
各サービスのシステムが「ニュース記事見出しリンク」を作成する際には、記事PFのWebAPIがリクエストされます。記事PFではYahoo!ニュース内の記事を一元管理していますので、ニュース提供社から受け取ったらすぐに、各サービスが欲しい条件に合わせて、記事の一覧をWebAPIのレスポンスとして提供できます。
各サービスのシステムから記事PFのWebAPIへのリクエストには、下記のようなパラメーターが指定されています。
- サービス識別子(各サービスごとに出せる記事が決まっているため)
- 記事のソート順(記事作成日時か最終更新日時か、など)
- 記事を絞り込むためのキーワードリスト(例:「野球」を含む記事、など)
- レスポンスに含まれる記事件数
記事PFのWebAPIは、各サービスのシステムからリクエストを受け付けると、下記のようなデータを複数記事分、xmlやjsonなど各サービスのシステムにて加工しやすいフォーマットで返却しています。
- 記事タイトル
- Yahoo!ニュース上の記事ページのURL
- 画像PFに置かれた記事画像のURL
- ニュース提供社名
- 記事作成日時
WebAPIというごく一般的な仕組みを採用することによって、記事PFを利用する開発が簡単に行えるようになっています。それぞれのサービスの開発担当者が、担当サービスのページに馴染むように「ニュース記事見出しリンク」を表示するためのプログラムを組むことができます。
Yahoo! JAPANのニュース心臓部のシステムを支える責任
写真/アフロ
今回ご紹介したのは、記事PFが行っている処理のほんの一部分だけです。
記事PFはYahoo! JAPANのニュース表示の心臓部を担うシステムであり、そのために必要となっている様々な処理を行っています。Yahoo!ニュースは月間100億PV、Yahoo! JAPANの全体PV数は月間600億にものぼります。膨大なユーザーにご利用いただいているサービスであるため、私たちも「バグが許されない」「システム停止が許されない」という責任感と緊張感の中で日々業務を行っています。
皆様のお目にかかるのはフロントエンドの部分のみですが、それを裏で支える様々な「◯◯PF」と呼ばれるシステムが、記事PF以外にも多数存在します。膨大なユーザーにご利用いただいている大規模なシステムを担当できることは、Yahoo! JAPANで働くエンジニアにとってのやりがいの一つです。
記事PFは心臓部を担うシステムであるがゆえに、なかなか大規模なシステム改修を行うことが難しく、レガシー(主流ではなくなってしまった古い仕組み)になってしまっている部分もあります。課題もまだまだありますが、一つ一つ乗り越えていきたいと思います。Yahoo!ニュースはこれからも、皆様により良いニュース体験をお届けすべく、「PF」と呼ばれる裏方も含めて最適なシステム運営に努めて参ります。
お問い合わせ先
このブログに関するお問い合わせについてはこちらへお願いいたします。