【ITニュース解説】Atcoderの問題レコメンドアプリを作りました
2025年09月19日に「Qiita」が公開したITニュース「Atcoderの問題レコメンドアプリを作りました」について初心者にもわかりやすく解説しています。
ITニュース概要
AtCoderのプログラミング問題を推薦するWebアプリが開発された。ユーザーのAtCoderアカウント名と学習したいアルゴリズムを入力すると、最適な問題を自動でおすすめしてくれる。プログラミング学習やアルゴリズムの習得、Webアプリ開発に興味がある初心者にとって便利なツールとなるだろう。
ITニュース解説
今回紹介するアプリは、プログラミングコンテストの「AtCoder(アットコーダー)」で問題を解く際に役立つ、Webベースのレコメンドシステムだ。このアプリは、ユーザーがAtCoderで使うユーザーネームと、学習したい特定のアルゴリズムの種類を入力すると、そのユーザーにとって最適なAtCoderの問題を提案してくれる。アルゴリズム学習者はもちろん、これからWebアプリ開発を始めてみたいと考えているシステムエンジニアの卵たちにとっても、具体的な開発事例として非常に興味深い内容だろう。
まず、このアプリがどのようなものかを理解するために、「Webアプリ」という言葉から説明しよう。Webアプリとは、インターネットを通じて利用できるアプリケーションのことだ。私たちが普段使っているGoogle検索やSNS、オンラインショッピングサイトなどもWebアプリの一種である。Webアプリは通常、「フロントエンド」と「バックエンド」という二つの部分で構成される。フロントエンドは、ユーザーが直接目にする画面や操作するボタンなど、見た目の部分を担当する。一方、バックエンドは、ユーザーからの要求に応じてデータを処理したり、データベースから情報を取得したりする、アプリの裏側で動く処理を担当する。このAtCoderの問題レコメンドアプリも、入力画面がフロントエンド、そして問題を選び出すための計算やデータ取得がバックエンドに該当する。
このアプリの使い方はとてもシンプルだ。まず、AtCoderの自分のユーザーネームを入力する。次に、サイドバーに表示される選択肢の中から、学びたい「アルゴリズム」を選ぶ。例えば、「グラフ」「動的計画法(DP)」「データ構造」といった具体的なアルゴリズムを選択できる。さらに、どのくらいの難易度の問題をレコメンドしてほしいか、スライダーで調整することも可能だ。これらの情報を入力し終えたら、レコメンドボタンを押すだけで、アプリが適切な問題のリストを表示してくれる。表示されるリストには、問題のタイトル、その問題の難易度、そしてAtCoderの元の問題ページへのリンクが含まれており、すぐに学習を始められるようになっている。
このレコメンドアプリがどのようにして最適な問題を選び出しているのか、その裏側の仕組みを見てみよう。システムエンジニアを目指す上で、このようなデータの取得や処理の仕組みを理解することは非常に重要だ。 アプリは、まずユーザーが入力したAtCoderのユーザーネームを使って、AtCoder Problemsという外部のサービスが提供する「API」にアクセスする。API(Application Programming Interface)とは、異なるソフトウェア同士が情報をやり取りするための窓口のようなものだ。このAPIを通じて、ユーザーが過去にどの問題を解いたか、それぞれの問題の難易度はどのくらいかといった情報を取得する。 また、アプリは問題をカテゴリ分けするためのタグ情報を取得するために「Webスクレイピング」という技術も利用している。Webスクレイピングとは、WebサイトのHTML(ウェブページの構造を記述する言語)情報をプログラムで自動的に収集・解析し、必要なデータだけを抽出する技術のことだ。これにより、AtCoder Problems APIだけでは取得できないような、より詳細なアルゴリズムのタグ情報を取得している。
これらの方法で集めた大量のデータは、「pandas」というPythonのライブラリを使って効率的に処理される。pandasは、表形式のデータを扱うのに非常に強力なツールで、データの中から必要な情報だけを抜き出したり、加工したりするのに使われる。 レコメンドのロジックは以下の手順で機能する。まず、ユーザーが過去に正解した問題のデータから、そのユーザーが通常どのくらいの難易度の問題を解いているかを分析する。これにより、そのユーザーにとって「簡単すぎず、難しすぎない」適切な難易度の範囲を決定する。次に、ユーザーが選択した特定のアルゴリズムに属する問題だけを絞り込む。最後に、これらの条件、つまり「選択されたアルゴリズムに該当し、適切な難易度範囲にあり、かつユーザーがまだ解いていない問題」の中から、最適な問題をいくつか選び出してユーザーに提示するのだ。
このアプリの開発には、いくつかの主要な技術が使われている。まず、プログラミング言語としては「Python」が中心だ。Pythonはその書きやすさから、Web開発、データ分析、AI開発など幅広い分野で利用されており、システムエンジニアを目指すならぜひ習得したい言語の一つである。 Webアプリのフロントエンドとバックエンドの両方を開発するために「Streamlit(ストリームリット)」というライブラリが採用されている。StreamlitはPythonだけで簡単にWebアプリを構築できるフレームワークで、複雑なWeb開発の知識がなくても、データ分析の結果を共有するためのシンプルなアプリなどを手軽に作成できるのが大きな特徴だ。これにより、HTMLやJavaScriptといったフロントエンドの専門的な言語を学ぶことなく、Pythonの知識だけでWebアプリを形にすることが可能になっている。 データ処理には先述の「pandas」が使われ、数値計算には「NumPy(ナムパイ)」というライブラリが活用されている。また、難易度を調整する部分では「scikit-learn(サイキットラーン)」という機械学習ライブラリの一部も使われており、データに基づいてより良い判断を下すための技術が組み込まれている。
このようなアプリを開発する経験は、システムエンジニアを目指す上で非常に貴重な学びとなる。まず、Webアプリの基本的な仕組み、つまりフロントエンドとバックエンドがどのように連携して一つのサービスを作り上げるのかを実体験として理解できる。次に、外部のAPIを利用してデータを取得する方法や、Webスクレイピングで情報を集める技術、そしてそれらのデータを加工・分析して意味のある情報へと変換するデータ処理のスキルが身につく。さらに、ユーザーのニーズを分析し、それに合わせて最適な情報を提供する「レコメンドロジック」を設計・実装する能力も養われるだろう。最終的に、完成したアプリをインターネット上に公開する「デプロイ」のプロセスを経験することで、開発の最初から最後までの一連の流れを把握できる。
このAtCoderの問題レコメンドアプリは、プログラミング学習という具体的な課題を解決するために、様々な技術を組み合わせて作られた実践的なWebアプリの好例だ。システムエンジニアを目指す皆さんも、このような身近な課題を解決するアプリを自分で企画し、開発してみることで、多くの技術と知識を効果的に習得できるだろう。このアプリ開発の経験は、きっと皆さんの今後の学習やキャリア形成に大いに役立つはずだ。