無料ゲームの一覧ページを作成しました
現在配布されているお得な無料ゲームの情報を一箇所で確認できる一覧ページを作成し、公開しました。以下のリンクから実際のページをすぐにご覧いただけます。
SteamやEpic Games Storeなどで不定期に実施されるゲームの無料配布キャンペーンですが、これらを毎回各プラットフォームにログインして検索したり、情報を探し回ったりするのは非常に大変だと感じていました。数日間や24時間限定といった短い配布期間のものもあり、一箇所でまとめて確認できる便利な場所があれば見落とさずに済むと思っていました。各プラットフォームの検索で探す手間を省き、一箇所で手軽に確認できる仕組みが欲しいと考えたのが、今回のページ作成のきっかけです。
割引情報のみに特化
世の中には多くのゲーム価格比較サイトが存在しますが、情報量が多すぎて「今、何が無料で手に入るのか」という目的だけに絞って確認するには不向きでした。そこで、ネット上で公開されている情報から価格が0円の無料配布ゲームデータだけをピンポイントで収集し、自身のブログの固定ページへ完全自動で蓄積・更新し続ける、ノイズのない独自の無料ゲームアーカイブを構築しようと考えました。これにより、不要な情報を削ぎ落とした独自のデータベースが構築可能となります。
以下は2026/05/26時点での無料ゲームの表示例です。
定期自動巡回
システム構築にあたり、手動での運用コストを完全にゼロにすることを目標としました。開発基盤には、様々なWebサービスやデータ処理をプログラムで繋いで自動化できるワークフローツール「n8n(エヌエイトエヌ)」を採用しています。
過去の配布履歴を蓄積してアーカイブ化するにはデータを溜めておくデータベースが必須ですが、わざわざ外部に専用のデータベースサーバーを新規構築するのは非常に面倒に感じられました。そこで、n8nに内蔵されているデータベース的な機能「Data Tables(データテーブル)」に目をつけ、今回初めてこの機能を活用してデータを溜め込む設計を試みました。
情報収集の頻度については、データ提供元への不要なサーバー負荷を抑える観点から、まずは1日4回のペースで巡回させる設定としています。
【課題】開発時に直面した3つの罠
初めて触るData Tablesとn8nの仕様の組み合わせにより、開発時は予期せぬ多層的な技術的課題に直面することになりました。
- (空データによる停止): 新着データがない(0件の)ときに、そのままData Tablesへデータを追加(Insert)しようとするとエラーが発生し、処理が止まってしまう。
- (ノードの接続ミスによる重複): ノードの繋ぎ方(直列にするべきところを並列接続にしていた)を間違えたことで、Data Tablesに保存されている過去のデータと最新情報が正しく比較できず、すべてのゲームが「新着」として処理されてしまう。
- (不要なキーの混入による不整合): 新着数(カウント)とゲームの詳細情報をまとめて後続ノードへ送ろうとした結果、データの中に余計な “json" キーの階層が潜り込んでしまい、Data Tablesへの追加(Insert)が正常に行えなくなる。
【解決策】ノードの直列化とデータ制御
これらの課題を根本から解決するため、JavaScriptによるデータ成形とn8nの適切なノード配置を行うことで、Data Tablesの挙動を完全に制御下に置きました。
- データを送る前に新着数をカウントする仕組みをCodeノードに入れ、後続にIfノードを設置して「新着数が1件以上ある場合のみ処理を進める」という条件分岐を作ることで、空データによるエラーを回避した。
- 今回の構築において、最も頭を悩ませ、解決に多大な時間を費やしたのがこの部分でした。原因が分かってしまえば「ノードの繋ぎ方」という単純なミスでしたが、「データを比較する」という先入観があったために処理を別々に動かしてしまっていることに気づくのが非常に困難でした。この構造上の間違いに気づいた後、ノードの接続を並列から「直列(一本道)」へと繋ぎ直すことで、Data Tablesのデータと最新の公開情報を同じプログラム(JavaScript)上で確実に比較・突合できるように修正できました。
- 「Item Lists(Split Out)」ノードを使ってネストしたデータを個々のアイテムに綺麗に分割してからData Tablesへ追加し、その後「Aggregate」ノードで再びまとめることで、新着数を追加する前と同じスムーズな挙動を実現
今後の拡張(ゲームとDLCの判別や、本来の定価の表示など)を見据え、公開情報から type や regularPrice などの属性も抽出しています。
自動化アーカイブページの公開
これらにより、無料ゲームアーカイブページの一般公開に成功しました。定期的な自動巡回により、ページ先頭には常に最新の更新日時が打刻され、期限が近い順にソートされた最新の無料ゲームが、自動生成されたHTMLテーブルとして重複なく正確に描写され続けています。
現時刻と登録日時の差分を計算し、24時間以内に検知されたデータへ自動で付与される赤色の「NEW!」バッジ、残り24時間内の「赤セルグラフ」、終了済みの「灰色セル」による動的デザイン制御も完璧に機能しており、見落としのリスクは皆無となりました。
まとめ
各プラットフォームを巡回する手間を省き一箇所で手軽に確認できる「無料ゲーム一覧ページ」を公開しました。外部DBを構築する手間を省くため、n8nの機能「Data Tables」を初めてデータベースとして採用。開発時は新着なしの際のエラー、ノード接続ミスによるデータの重複、データの階層不整合に直面しました。特に、データ突合の先入観からノードを並列に配置してしまい、処理が別々に動いていた原因の特定には最も頭を悩ませましたが、直列への繋ぎ替え、If文、Item Listsノード等の活用で克服しました。24時間以内NEW!フラグやクレジット隠蔽を備えた無人アーカイブを実現し、今後はSNS自動ポスト連携を目指します。



