JavaScript・TypeScriptでRSSフィードを取得・解析する方法を解説。npmのrss-parserを使ったインストール、parseURL、parseString、型定義、タイムアウト設定まで紹介します。
JavaScriptやTypeScriptからRSSフィードを取得して解析するなら、npmパッケージのrss-parserを使うと比較的簡単に実装できます。
rss-parserはRSSのXMLをJavaScriptオブジェクトへ変換するライブラリで、URLから直接取得するparseURLと、取得済みのXML文字列を解析するparseStringを利用できます。
2026年9月12日時点のnpm最新版は3.13.0で、TypeScriptの型定義もパッケージに含まれています。
npmを使う場合は次のコマンドです。
npm install rss-parser
TypeScriptでも別途@types/rss-parserをインストールする必要はありません。
npmパッケージ自体にTypeScriptの型定義が含まれています。
Node.jsからRSS URLを直接読み込む場合はparseURLを使います。
const Parser = require("rss-parser");
const parser = new Parser();
async function main() {
const feed = await parser.parseURL("https://example.com/rss.xml");
console.log(feed.title);
for (const item of feed.items) {
console.log(item.title);
console.log(item.link);
}
}
main();
解析後はfeed.itemsに記事一覧が入ります。
記事ごとに、
titlelinkpubDateisoDatecreatorcontentcontentSnippetguidなどを取得できます。
実際に含まれる項目は元のRSSフィードによって異なります。
TypeScriptでは次のように利用できます。
import Parser from "rss-parser";
const parser = new Parser();
async function main() {
const feed = await parser.parseURL(
"https://example.com/rss.xml"
);
console.log(feed.title);
for (const item of feed.items) {
console.log(item.title);
console.log(item.link);
console.log(item.isoDate);
}
}
main();
基本的な使い方はJavaScriptと同じです。
parseURLはPromiseに対応しているため、async/awaitで扱えます。
RSSを自分でfetchした場合など、すでにXML文字列を持っているならparseStringを利用できます。
import Parser from "rss-parser";
const parser = new Parser();
async function parseRSS(xml: string) {
const feed = await parser.parseString(xml);
for (const item of feed.items) {
console.log(item.title);
}
}
たとえば、
fetchでRSS取得
↓
XML文字列を取得
↓
parseString
↓
JavaScriptオブジェクト
という構成にできます。
HTTP取得処理とRSS解析処理を分けたい場合に便利です。
Node.jsのfetchを使う場合は次のように書けます。
import Parser from "rss-parser";
const parser = new Parser();
async function main() {
const response = await fetch(
"https://example.com/rss.xml"
);
if (!response.ok) {
throw new Error(
`RSS取得失敗: ${response.status}`
);
}
const xml = await response.text();
const feed = await parser.parseString(xml);
for (const item of feed.items) {
console.log(item.title, item.link);
}
}
main();
この方法なら、
などを自分で実装できます。
用途によって選びます。
| 方法 | 向いている場合 |
|---|---|
parseURL | RSSを簡単にURLから読みたい |
parseString | HTTP取得処理を自分で制御したい |
parseString | DBなどに保存済みのXMLを解析したい |
parseString | テストで固定XMLを解析したい |
小さなプログラムならparseURLで十分です。
RSS収集サービスなどでHTTP処理を細かく制御したいなら、fetchとparseStringを分離すると扱いやすくなります。
RSSにはサイト独自のXML要素が含まれることがあります。
rss-parserではcustomFieldsを使って追加項目を取得できます。
TypeScriptでは独自項目の型も指定できます。
import Parser from "rss-parser";
type CustomFeed = {};
type CustomItem = {
"media:content": {
$: {
url: string;
};
};
};
const parser: Parser<
CustomFeed,
CustomItem
> = new Parser({
customFields: {
item: ["media:content"],
},
});
サイト固有の、
media:contentなどを利用したい場合に使えます。
標準項目だけで足りる場合は設定する必要はありません。
外部サイトのRSSを取得する場合は、応答しないサイトも考慮する必要があります。
rss-parserではtimeoutをミリ秒で設定できます。
const parser = new Parser({
timeout: 10000,
});
この例では10秒です。
ライブラリのデフォルトは60秒ですが、Webアプリでは用途に合わせて短く設定することも検討します。
サイトによってはUser-Agentなどのヘッダーが必要になることがあります。
const parser = new Parser({
headers: {
"User-Agent": "MyRSSReader/1.0",
},
});
RSSを大量に定期取得するサービスを作る場合は、配信元へ過剰なアクセスをしないことも重要です。
parseURLはデフォルトで最大5回までリダイレクトを追跡します。
必要ならmaxRedirectsを変更できます。
const parser = new Parser({
maxRedirects: 10,
});
通常はデフォルト設定のままで問題ありません。
RSSでは公開日時がpubDateなどに含まれます。
rss-parserでは、解析可能な日時についてisoDateも取得できます。
for (const item of feed.items) {
console.log(item.pubDate);
console.log(item.isoDate);
}
DBへ保存して日時順に並べる場合は、ISO形式を利用すると扱いやすくなります。
ただし、RSSによって日時項目が存在しなかったり、独自形式になっていたりする場合があります。
すべてのフィードに必ず同じ項目が存在する前提にはしない方が安全です。
RSSを定期取得すると、以前取得した記事も毎回フィードに含まれます。
新着だけ保存する場合は重複判定が必要です。
候補としては、
guidがあります。
たとえば、
for (const item of feed.items) {
const id = item.guid ?? item.link;
if (!id) {
continue;
}
if (await alreadyExists(id)) {
continue;
}
await saveItem(item);
}
のような形です。
RSSによってguidがない場合もあるため、URLなどへのフォールバックを考えておきます。
rss-parserはブラウザ向けの利用方法も提供しています。
ただし、ブラウザから別ドメインのRSSへ直接アクセスすると、配信元のCORS設定によって取得できない場合があります。
ブラウザ
↓
別ドメインのRSS
↓
CORSでブロック
となる場合があります。
WebサービスとしてRSSを取得するなら、
ブラウザ
↓
自分のサーバー
↓
RSS配信元
のように、サーバー側で取得する構成の方が扱いやすいことがあります。
公開CORSプロキシへ無条件に依存する構成は避けた方が安全です。
Web上のフィードにはRSSだけでなくAtomもあります。
rss-parserの実装ではAtomの項目も共通のフィードオブジェクトへ変換して扱えるようになっており、たとえばAtomのupdatedはlastBuildDateとして扱われます。
不特定多数のWebサイトを対象にする場合は、
RSSだけ来る
と決めつけず、Atomのフィードが登録される可能性も考慮しておきます。
自分でXMLを解析することもできますが、RSSには複数の形式や独自項目があります。
rss-parserを使うと、
RSS XML
↓
rss-parser
↓
feed.items
という形でJavaScriptオブジェクトとして扱えます。
特に、
場合に使いやすいライブラリです。
2026年9月12日時点でnpmに公開されている最新版は3.13.0です。
npm上ではこのバージョンの公開から時間が経過しています。
そのため新規プロジェクトへ導入する場合は、
を確認したうえで採用してください。
「npmで有名だから」という理由だけで長期間の保守性まで保証されるわけではありません。
RSS解析に失敗した場合は、ライブラリだけでなく元フィードも確認します。
RSS自体の問題と、JavaScript側の問題を切り分けると原因を探しやすくなります。
一般的なRSS取得エラーについてはRSSが更新されない・取得できない原因6つでも紹介しています。
JavaScriptでRSSを解析するには、まず対象サイトのRSS URLが必要です。
サイトによって、
/feed
/rss
/rss.xml
/feed.xml
など形式が異なります。
探し方はRSS URLの見つけ方で解説しています。
RSS解析処理を作るときは、まず対象フィードにどんな記事や項目が含まれているか確認しておくと実装しやすくなります。
NagooFeedではRSS URLを登録して、新着記事が取得できるかブラウザから確認できます。
情報確認日:2026年9月12日