ai-feed

command module
v0.0.10 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 21, 2025 License: MIT Imports: 2 Imported by: 0

README

ai-feed

AI Feedは、RSSフィードから記事を自動収集し、AIが生成したコメント付きで推薦記事を提供するCLIツールです。

🌟 主な機能

  • 自動記事収集: 複数のRSSフィードから最新記事を取得
  • AIコメント生成: Google Gemini APIを使用して記事に対する洞察に富んだコメントを自動生成
  • 多様な出力先: Slack、Misskey、標準出力への投稿をサポート
  • カスタマイズ可能: プロンプトテンプレートやメッセージフォーマットを自由に設定
  • 設定管理: YAML形式の設定ファイルとプロファイル機能

🎯 ユースケース

  • 技術ブログの自動収集: 複数の技術ブログから最新情報をチェック
  • チーム情報共有: Slackチャンネルへの定期的な記事共有
  • 個人学習: 興味のある分野の記事をAIコメント付きで効率的に把握
  • SNS投稿: Misskeyなどの分散SNSへの記事紹介

こんな人におすすめ

  • 技術情報を効率的にキャッチアップしたい開発者
  • チームでの情報共有を自動化したい方
  • 複数のブログやニュースサイトをフォローしている方
  • AIによる記事要約や解説を活用したい方

🚀 インストール

必要な環境
  • Go 1.24以上(ソースからビルドする場合)
  • Google Gemini API キー(取得方法
バイナリのダウンロード(推奨)
macOS
# Intel Mac
curl -sLO https://github.com/canpok1/ai-feed/releases/latest/download/ai-feed_darwin_amd64.tar.gz
tar -xzf ai-feed_darwin_amd64.tar.gz
sudo mv ai-feed /usr/local/bin/
rm ai-feed_darwin_amd64.tar.gz

# Apple Silicon Mac
curl -sLO https://github.com/canpok1/ai-feed/releases/latest/download/ai-feed_darwin_arm64.tar.gz
tar -xzf ai-feed_darwin_arm64.tar.gz
sudo mv ai-feed /usr/local/bin/
rm ai-feed_darwin_arm64.tar.gz

# Homebrewでのインストール(将来予定)
# brew install canpok1/tap/ai-feed
Linux
# x86_64
wget https://github.com/canpok1/ai-feed/releases/latest/download/ai-feed_linux_amd64.tar.gz
tar -xzf ai-feed_linux_amd64.tar.gz
sudo mv ai-feed /usr/local/bin/
rm ai-feed_linux_amd64.tar.gz

# ARM64
wget https://github.com/canpok1/ai-feed/releases/latest/download/ai-feed_linux_arm64.tar.gz
tar -xzf ai-feed_linux_arm64.tar.gz
sudo mv ai-feed /usr/local/bin/
rm ai-feed_linux_arm64.tar.gz
Windows
  1. リリース一覧から ai-feed_windows_amd64.zip をダウンロード
  2. ZIPファイルを解凍
  3. ai-feed.exe をパスが通ったディレクトリに配置
Go installを使用したインストール
go install github.com/canpok1/ai-feed@latest

注意: go install でインストールされたバイナリは $GOPATH/bin または $HOME/go/bin に配置されます。このディレクトリが PATH に含まれていない場合は、以下のコマンドで PATH を設定してください:

# 現在のセッションのみ有効
export PATH=$PATH:$(go env GOPATH)/bin

# 永続化する場合(.bashrc, .zshrc等に追記)
echo 'export PATH=$PATH:$(go env GOPATH)/bin' >> ~/.bashrc
インストール確認
ai-feed --help
更新方法

最新版へ更新する場合は、以下の手順で行ってください:

  1. GitHub Releasesにアクセス
  2. 最新版のバイナリをダウンロード
  3. 既存のバイナリ(例: /usr/local/bin/ai-feed)を新しいバイナリで置き換え

または、以下のコマンドでインストールし直すことも可能です:

go install github.com/canpok1/ai-feed@latest

🛠️ 利用可能なコマンド

メインコマンド
コマンド 説明
ai-feed init 設定ファイル(config.yml)を生成
ai-feed recommend 記事の推薦とコメント投稿を実行
ai-feed version バージョン情報を表示
設定管理コマンド
コマンド 説明
ai-feed config check 設定ファイル(config.yml)を検証
ai-feed config check -v 設定ファイルを検証(詳細サマリー表示)
ai-feed profile init <file> 新しいプロファイルファイルを作成
ai-feed profile check [file] プロファイルファイルを検証

詳細なオプションについては ai-feed [コマンド] --help でご確認ください。

⚡ クイックスタート

1. 設定ファイルの生成
ai-feed init

実行後、カレントディレクトリに config.yml が作成されます。

2. APIキーの設定
環境変数での設定(推奨)
# Google Gemini APIキーを設定
export GEMINI_API_KEY="your-api-key-here"

# 永続化する場合(.bashrc, .zshrc等に追記)
echo 'export GEMINI_API_KEY="your-api-key-here"' >> ~/.bashrc
設定ファイルでの設定

config.ymlを編集して、APIキーを設定:

default_profile:
  ai:
    gemini:
      type: "gemini-2.5-flash"
      api_key_env: "GEMINI_API_KEY"  # 環境変数名を指定
      # または直接記載(非推奨)
      # api_key: "your-api-key-here"
3. 初回実行
# 技術ブログから記事を取得してAIコメント付きで表示
ai-feed recommend --url https://zenn.dev/feed

# 複数のフィードから取得
ai-feed recommend --url https://zenn.dev/feed --url https://qiita.com/popular-items/feed

# ファイルからURL一覧を読み込み
echo "https://zenn.dev/feed" > feeds.txt
echo "https://qiita.com/popular-items/feed" >> feeds.txt
ai-feed recommend --source feeds.txt

ログの色付け

ai-feedはログレベルごとに色を付けて視認性を向上させます:

  • DEBUG: 灰色
  • INFO: 緑色
  • WARN: 黄色
  • ERROR: 赤色
色の無効化

以下の場合、色付けは自動的に無効化されます:

  • パイプやファイルリダイレクト時
  • CI環境での実行時
  • NO_COLOR 環境変数が設定されている時

手動で色を無効化する場合:

# 色なしでアプリケーションを実行
NO_COLOR=1 ./ai-feed recommend --url {RSS URL}

# 環境変数として設定
export NO_COLOR=1
./ai-feed recommend --url {RSS URL}
サポート環境

ログの色付け機能は以下の環境でサポートされます:

  • Unix/Linux
  • macOS

Windows環境では色付けされません。

📚 詳細な使用方法

設定リファレンス

設定値の必須/任意について理解しておくと、設定ファイルを正しく作成できます。

設定値の分類
表記 説明
必須 省略するとバリデーションエラーになります
任意 省略可能です。デフォルト値が使用されるか、機能が無効になります
条件付き必須 特定の条件下で必須となります
設定値一覧
設定項目 必須/任意 デフォルト値 説明
ai.gemini.type 必須 - 使用するGeminiモデル名
ai.gemini.api_key または api_key_env 必須(どちらか) - Gemini APIキー
ai.mock.enabled 任意 false モックAIの有効/無効(テスト用)
ai.mock.selector_mode 任意 first 記事選択モード(first, random, last
ai.mock.comment 任意 空文字列 モックが返す固定コメント
system_prompt 必須 - AIの性格を定義するプロンプト
comment_prompt_template 必須 - 記事紹介文生成用テンプレート
selector_prompt 必須 - 記事選択用プロンプト
fixed_message 任意 空文字列 メッセージに追加する固定文言
output.slack_api.enabled 任意 true Slack投稿の有効/無効
output.slack_api.api_token/api_token_env 条件付き必須 - enabled=trueの場合必須
output.slack_api.channel 条件付き必須 - enabled=trueの場合必須
output.slack_api.message_template 条件付き必須 - enabled=trueの場合必須
output.slack_api.username 任意 - Bot表示名
output.slack_api.icon_url 任意 - アイコンURL(icon_emojiと併用不可)
output.slack_api.icon_emoji 任意 - アイコン絵文字(icon_urlと併用不可)
output.misskey.enabled 任意 true Misskey投稿の有効/無効
output.misskey.api_token/api_token_env 条件付き必須 - enabled=trueの場合必須
output.misskey.api_url 条件付き必須 - enabled=trueの場合必須
output.misskey.message_template 条件付き必須 - enabled=trueの場合必須
cache.enabled 任意 false キャッシュ機能の有効/無効
cache.file_path 任意 ~/.ai-feed/recommend_history.jsonl キャッシュファイルのパス
cache.max_entries 任意 1000 最大エントリ数
cache.retention_days 任意 30 保持期間(日数)
APIキー・トークン設定について

APIキーやトークンは、直接指定(api_key/api_token)と環境変数指定(api_key_env/api_token_env)の2通りの方法で設定できます。

設定方法 説明
api_key / api_token 設定ファイルに直接値を記載(非推奨)
api_key_env / api_token_env 環境変数名を指定し、実行時に環境変数から値を読み込む(推奨)

動作ルール:

  • 両方が指定された場合、直接指定(api_key/api_token)が優先されます
  • api_key_env/api_token_envで指定した環境変数が未設定の場合、エラーになります
profile checkコマンドの検証ルール

profile check [file] コマンドは以下の順序で検証を行います:

  1. config.ymlの読み込み: デフォルトプロファイル(default_profile)を読み込みます
  2. プロファイルのマージ: プロファイルファイルが指定されている場合、その設定がデフォルトプロファイルを上書きします
  3. バリデーション実行: マージされた最終的なプロファイルに対して検証を実行します

重要: プロファイルファイル単体で全ての必須項目を満たす必要はありません。config.ymlのデフォルトプロファイルと合わせて必須項目が揃っていればOKです。

# 例: config.ymlでAI設定を定義し、プロファイルでoutput設定だけを変更する場合

# config.yml
default_profile:
  ai:
    gemini:
      type: gemini-2.5-flash
      api_key_env: GEMINI_API_KEY
  system_prompt: "..."
  comment_prompt_template: "..."
  selector_prompt: "..."
  output:
    slack_api:
      enabled: false
    misskey:
      enabled: false

# my-profile.yml(AI設定は省略可能)
output:
  slack_api:
    enabled: true
    api_token_env: SLACK_TOKEN
    channel: "#tech-news"
    message_template: "..."
プロファイルの作成

異なる設定を使い分けるためのプロファイル機能:

# プロファイルファイルを作成
ai-feed profile init my-profile.yml

# プロファイルを使用して実行
ai-feed recommend --profile my-profile.yml --url https://example.com/feed
Slack連携
# Slack API トークンを環境変数に設定
export SLACK_TOKEN="your-token-here"

# config.ymlまたはプロファイルに設定を追加
output:
  slack_api:
    api_token_env: "SLACK_TOKEN"
    channel: "#general"
    message_template: |
      :newspaper: *{{.Article.Title}}*
      {{.Article.Link}}
      
      {{.Comment}}
Misskey連携
# Misskey APIトークンを環境変数に設定
export MISSKEY_TOKEN="your-token-here"
output:
  misskey:
    api_url: "https://misskey.io"
    api_token_env: "MISSKEY_TOKEN"
    message_template: |
      【おすすめ記事】
      {{.Article.Title}}
      {{.Article.Link}}
      
      {{.Comment}}
      
      #ai_feed #tech
よく使うオプション
# 詳細ログを表示
ai-feed recommend -v --url https://example.com/feed

# 色なしで出力(パイプ時に便利)
NO_COLOR=1 ai-feed recommend --url https://example.com/feed

# 設定ファイルの検証
ai-feed config check

# 設定ファイルの詳細検証(サマリー表示付き)
ai-feed config check -v

# プロファイルファイルの検証
ai-feed profile check my-profile.yml

🔧 開発者向け情報

本プロジェクトの開発に参加したい方は、以下のドキュメントを参照してください:

簡単な開発コマンド
# プロジェクトをクローンして開発環境をセットアップ
git clone https://github.com/canpok1/ai-feed.git
cd ai-feed
make setup

# テスト実行
make test

# ビルド
make build
その他の便利なコマンド
# 開発中にアプリケーションを実行
# option="..." には ai-feed コマンドの引数を渡します
make run option="recommend"
make run option="recommend --url https://example.com/feed"

# リリースビルドをローカルでテスト(goreleaserによるクロスコンパイル)
make build-release

# ビルド成果物とテストファイルを削除
make clean

# インターフェース変更後にモックを再生成
make generate

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
internal
app
domain/mock_domain
Package mock_domain is a generated GoMock package.
Package mock_domain is a generated GoMock package.
infra/mock_infra
Package mock_infra is a generated GoMock package.
Package mock_infra is a generated GoMock package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL