Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Turn HN's "Who is hiring?" Thread Into a Spreadsheet With the Algolia API

2026年11月04日に「Dev.to」が公開したITニュース「Turn HN's "Who is hiring?" Thread Into a Spreadsheet With the Algolia API」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Hacker Newsの膨大な求人スレッドはエンジニアにとって重要だが、テキストの羅列で読みにくい。本記事では、プログラミングとAPIを使い、この求人コメントから企業名、職種、給与などの情報を自動抽出し、スプレッドシート化する方法を解説。書式が不揃いな点を考慮したデータ取得と整形のテクニックを紹介する。

ITニュース解説

Hacker Newsの「Who is hiring?」スレッドは、世界中のエンジニアにとって優れた求人情報源として知られている。毎月第1営業日に「whoishiring」アカウントが投稿し、数百もの企業がトップレベルコメントで求人情報を寄せ合う。しかし、その情報は単なるテキストの羅列であり、膨大な投稿の中から自分に合った求人を探し出し、比較検討するのは非常に困難な作業だ。この記事では、この「テキストの壁」から有益な構造化されたデータを抽出し、スプレッドシート形式で利用可能にするための技術的なアプローチを解説する。

まず、この非構造化データを構造化された形式に変換するためには、「API(Application Programming Interface)」という技術が不可欠となる。APIは、ソフトウェア同士がデータをやり取りするための窓口の役割を果たす。Hacker Newsの情報を取得するために利用できる公式APIは主に二つある。一つは「Hacker News API(Firebase)」で、これは個々の投稿やコメントを正確に取得できるが、スレッド全体を網羅的に取得するには、一つ一つのアイテムを辿る手間がかかる。もう一つは「HN Search by Algolia」で、これはHacker Newsのデータに対して全文検索が可能なAPIだ。特定のキーワードやタグを使って投稿やコメントを効率的に検索できるため、求人スレッドのような大量のコメントの中から目的の情報を探す際に非常に実用的だ。このAPIは、特定の投稿に関連するコメントをまとめて取得したり、投稿者名でフィルタリングしたりする機能を持つため、今回の目的にはAlgolia APIが最適である。

実際にデータを取得する手順を見てみよう。ここではPythonプログラミング言語と、Webリクエストを送信するためのrequestsライブラリを使用する。最初に、目的の「Ask HN: Who is hiring?」スレッド自体を特定する。Algolia APIのsearch_by_dateエンドポイントを使い、story(記事)とauthor_whoishiring(投稿者「whoishiring」)のタグ、そして「Who is hiring」というキーワードで検索をかける。これにより、毎月投稿される求人スレッドの記事(ストーリー)の情報を取得し、そのスレッドの固有の識別子であるobjectIDを取り出す。これが、すべての求人コメントが紐づく「親」となるスレッドのIDだ。

次に、このobjectIDを使ってスレッドに紐づくすべてのコメントを取得する。再びsearch_by_dateエンドポイントを用い、comment(コメント)とstory_{tid}(特定の記事IDに紐づく)というタグを指定する。この方法だと、求人コメントに対する返信(リプライ)まで含めて、スレッド内のあらゆるコメントが取得されてしまう。私たちが欲しいのは、企業が直接スレッドに投稿した「トップレベル」の求人コメントだけであるため、取得したコメントの中から、そのコメントの親ID(parent_id)が、最初に取得したスレッド自体のobjectIDと一致するものだけを抽出する。これにより、不要なリプライを除外し、純粋な求人情報のみを厳選して取得できる。取得したコメントの中には、企業が「会社名 | 職種 | ロケーション | ONSITE/REMOTE | 給与 | ...」のようにパイプ(|)で区切って記述する慣習があるため、コメントの最初の行を抽出し、パイプで分割することで各項目を個別のデータとして取り出すことが試みられる。

しかし、現実のデータは常にきれいな形をしているわけではない。Hacker Newsの求人スレッドの大きな課題は、投稿のフォーマットが「ゆるい」点にある。多くの企業はパイプ区切りのルールに従うものの、その厳密性は投稿者によって異なり、フィールドの数や順序が一定ではない。中には全くパイプを使わない投稿も存在する。そのため、フィールドの位置だけで機械的に情報を判断することは難しい。「リモートワーク」の表記も多様で、独立した項目として記述されることもあれば、ロケーション情報の一部として埋め込まれることもある。給与表記も同様に、範囲表記、通貨記号、特殊記号、あるいは「詳細はリンク先を参照」といったテキストまで様々だ。さらに、コメントテキストはHTML形式なので、タグや特殊文字を適切にデコードしてテキストを抽出する作業が必要だ。利用するAlgolia API自体にも、一度に取得できる結果が1,000件までという制限があるため、大量のデータを処理する場合は、日付範囲を細かく区切って複数回検索を実行するなどの工夫が求められる。また、類似する他のスレッドと混同しないよう、スレッドのタイトルを正確に識別する注意も必要となる。

これらの複雑な課題に自力で完璧に対応しようとすると、多大な労力と時間が必要となる。特に、多様な表記や不規則なフォーマットから正確な情報を抽出する「パース」のプロセスは非常に骨が折れる。このような状況に対応するため、この記事の著者は一連のデータ取得とパースのプロセスを「Apify Actor」としてパッケージ化している。これはWebスクレイピングやデータ処理のタスクを自動化するツールだ。「Hacker News Scraper」というActorは、先述したデータ取得のロジックに加えて、複雑なパース処理も組み込んでいる。例えば、whoIsHiringモードで実行すると、最新の求人スレッドから会社名、職種、ロケーション、リモートフラグ、給与テキスト、ビザの有無、関連するすべてのURL、投稿者、タイムスタンプ、Hacker Newsへのリンク、そして元のコメント全文といった、構造化された情報が自動的に抽出される。

もちろん、完璧な精度で全ての情報を抽出できるわけではない。例えば、50件の投稿を解析した場合、37件で場所、31件で職種、25件で給与範囲がパースできたという実測値が示されている。これは、パイプフォーマットに従わない投稿や、そもそも情報が明記されていない投稿が存在するためだ。しかし、パースできなかったフィールドは空(null)となるものの、元のテキストデータやリンク情報は必ず含まれるため、情報が失われる心配はない。もし、さらに完璧な構造化が必要な場合は、抽出されたテキストに対して「LLM(大規模言語モデル)」、つまりChatGPTのようなAIを適用し、より高度な意味解析を行わせるという選択肢も考えられる。Apify Actorは、まずソート可能なスプレッドシートの形にデータを整理する「第一歩」を提供してくれるものだ。

このApify Actorは有料サービスとして提供されているが、月に一度の求人スレッドを処理するだけであれば、この記事で紹介されているPythonスクリプトは無料で利用でき、十分な機能を提供する。有料ツールは、より頻繁なスクレイピング、高度なフィルター機能、メンテナンス、あるいは他のデータ取得モードが必要な場合に役立つものだ。

Hacker Newsの求人情報を構造化して抽出するこの取り組みは、単なるデータ収集以上の多くのことを教えてくれる。Web上の非構造化データをAPIを使ってプログラム的に取得し、そのデータを整形して利用可能な形にするための基本的な技術を学ぶ良い機会となるだろう。APIの選定、HTTPリクエストの送信、JSONデータのパースといった基礎的なスキルは、システムエンジニアとして働く上で不可欠なものだ。同時に、現実のデータが常にきれいな形をしているわけではないという厳しさも浮き彫りになる。投稿フォーマットの不統一、HTMLの混在、APIの制限など、様々な課題が存在し、それらにどう対処するか、あるいはどこまで対応するかという判断が求められる。プログラミングのスキルだけでなく、問題解決能力や、どこまで自動化し、どこからAIのような高度な技術を導入するかというバランス感覚も養われるだろう。最後に、取得した情報を利用する上での倫理的な配慮も重要だ。企業が求人情報を投稿しているのは採用のためであり、その情報を無断で営業活動に利用するなど、目的外の使用は避けるべきである。この一連のプロセスは、システムエンジニアを目指すあなたが、Webとデータとプログラミングの世界で直面するであろう現実的な課題と、その解決策の一端を垣間見せてくれるはずだ。

関連コンテンツ

関連IT用語

関連ITニュース