Feedly APIを使ったキーボード操作特化のRSSリーダー。マルチユーザー対応。
- Node.js 20.x 以上
- Feedlyアカウント(Proプラン推奨、なくても利用可能)
# リポジトリをクローン
git clone https://github.com/tamekuniz/freeder.git
cd freeder
# 依存パッケージをインストール
npm install
# 環境変数を設定
cp .env.local.example .env.local
# .env.local を編集- Node.js 20以上をインストール(https://nodejs.org/)
- Visual Studio Build Tools をインストール(better-sqlite3のコンパイルに必要)
- https://visualstudio.microsoft.com/visual-cpp-build-tools/
- 「C++ によるデスクトップ開発」ワークロードを選択
git clone https://github.com/tamekuniz/freeder.git
cd freeder
npm install
copy .env.local.example .env.localBuild Toolsの代わりに
npm install -g windows-build-toolsでも可。
.env.local に以下を設定:
FEEDLY_ACCESS_TOKEN=xxxxxxxxxxxxxxx
SESSION_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxFEEDLY_ACCESS_TOKEN: Feedly Developer Token(共有トークンとして利用可能)SESSION_SECRET: セッション暗号化用の秘密鍵(openssl rand -hex 32で生成)
npm run devブラウザで http://localhost:3000 を開く。
freederはマルチユーザー対応です。
- 初回アクセス時にログイン画面が表示されます
- 「新規登録」でアカウントを作成
- Feedlyトークンの設定画面に進みます
- Feedly Proを持っている場合: 自分のDeveloper Tokenを入力
- Feedly Proを持っていない場合: サーバーの共有トークンを使用
最初に登録したユーザーには .env.local のトークンが自動で割り当てられます。
/キーでfreeder全体を検索fキーで選択中のフォルダ内を検索- 記事タイトルと本文が検索対象(フィード名は除外)
- アプリ起動時に全フィードをバックグラウンドでクロールし、検索インデックスを構築します
| キー | 動作 |
|---|---|
| j / k | 次/前の記事 |
| h / l | 次/前のRSS |
| H / L | 次/前の未読RSS |
| g / ; | 次/前のフォルダ |
| x | フォルダを開閉 |
| / | 検索 |
| f | フォルダ内検索 |
| b | ブラウザで開く |
| v | サイトプレビュー |
| m | 既読/未読切替 |
| s | スター切替 |
| +/- | フォント拡大/縮小 |
| Ctrl+R | Feedlyと同期 |
- Next.js 16 + React 19
- TypeScript
- Tailwind CSS 4
- better-sqlite3(キャッシュ・FTS5全文検索・ユーザー管理)
- iron-session(暗号化セッション管理)
- Feedly API
freeder-cache.db(SQLite)がプロジェクトディレクトリに自動作成されます- 購読情報、記事、未読カウント、UI設定、ユーザー情報がキャッシュされます
- FTS5トライグラム検索でタイトル・本文を高速に全文検索
- Feedly APIに接続できないときはキャッシュから表示します
npm install で better-sqlite3 のビルドに失敗する(Windows): Visual Studio Build Tools の「C++ によるデスクトップ開発」がインストールされているか確認してください。
npm install で better-sqlite3 のビルドに失敗する(Mac):
Xcode Command Line Tools をインストールしてください: xcode-select --install
FEEDLY_ACCESS_TOKEN のエラー: トークンの有効期限が切れている可能性があります。https://feedly.com/v3/auth/dev で再取得してください。
LAN内の他端末からアクセスしたい場合:
npm run dev -- -H 0.0.0.0 で起動してください。
編集場所と build source を物理分離し、「dev で動作確認 → main へ merge → prd 反映」のフローで運用する。
| 用途 | パス | branch | 役割 |
|---|---|---|---|
| 編集本拠地 | ~/GitHub/tamekuniz/freeder |
main / dev 切替 | コード編集・commit・push の起点 |
| prd ビルドソース | ~/server/repos/freeder-prd |
main 固定 | freeder コンテナの build context(編集しない、pull のみ) |
| dev ビルドソース | ~/server/repos/freeder-dev |
dev 固定 | freeder-dev コンテナの build context(worktree、編集しない、pull のみ) |
freeder-prd は通常の clone、freeder-dev は freeder-prd の git worktree(.git を共有してディスク節約)。
- prd:
https://316006.com/freeder/ - dev:
https://dev.316006.com/freeder/
# 1. dev branch で開発
cd ~/GitHub/tamekuniz/freeder
git checkout dev
# ...コード編集...
git add -A && git commit -m "feat: ..."
git push origin dev
# 2. dev 環境に反映 → 動作確認
cd ~/server/repos/freeder-dev
git pull origin dev
cd ~/server
docker compose build freeder-dev && docker compose up -d freeder-dev
# ブラウザで https://dev.316006.com/freeder/ を確認
# 3. OK なら main へ merge
cd ~/GitHub/tamekuniz/freeder
git checkout main
git merge dev
git push origin main
# 4. prd 反映
cd ~/server/repos/freeder-prd
git pull origin main
cd ~/server
docker compose build freeder && docker compose up -d freeder
# ブラウザで https://316006.com/freeder/ を確認.env.localは gitignore 対象。新 worktree を作るときは既存の.env.localをコピーcompose.yamlは~/server/compose.yaml(git 管理外)。build context が./repos/freeder-{prd,dev}を指す