noet

Crates.ionoet
lib.rsnoet
version0.1.2
created_at2025-11-13 13:00:21.30646+00
updated_at2025-11-13 17:22:44.102713+00
descriptionCLI tool for managing Note.com blog articles with Markdown. Create, publish, and export articles from your terminal with rate limiting and Japanese UI.
homepagehttps://github.com/kako-jun/noet
repositoryhttps://github.com/kako-jun/noet
max_upload_size
id1931092
size201,647
kako-jun (kako-jun)

documentation

https://github.com/kako-jun/noet#readme

README

noet

note.comをターミナルから操作する、Rust製の高速CLIツール

CI Crates.io Downloads License: MIT Rust

note.com の記事を管理するためのコマンドラインツール(Rust製)。

noetを使うと、Hugoなどの静的サイトジェネレータのように、Markdownファイルでターミナルから記事の作成・投稿・管理ができます。

目次

特徴

  • 記事管理: 記事の作成、投稿、編集、削除、一覧表示
  • インタラクティブモード: 引数なしでnoetを実行すると、メニュー駆動のUIで操作可能
  • TUI差分表示: 公開前に変更内容を左右並列で確認
  • ワークスペース機能: Gitリポジトリのように.noet/でプロジェクト管理
  • テンプレート機能: 記事テンプレートの作成・管理・使用
  • エクスポート機能: Note.comから記事をMarkdownでダウンロード(上書き警告付き)
  • エディタ統合: 新規作成時に設定したエディタを自動起動
  • タグ管理: ハッシュタグの一覧表示、検索、サジェスト
  • マガジン管理: 記事のマガジン追加・削除
  • エンゲージメント: いいね/いいね解除、コメント閲覧
  • ユーザー情報: ユーザープロフィールと統計情報の取得
  • 安全な認証: 認証情報はシステムキーリングに安全に保存
  • レート制限: 500ms固定のレート制限でIPバンを防止
  • 完全日本語化: すべてのメッセージを日本語で表示
  • Hugoライクなインターフェース: frontmatter付きMarkdownベースの記事作成

インストール

Cargoからインストール(推奨)

Rustがインストールされている場合、最も簡単な方法です:

cargo install noet

バイナリをダウンロード

GitHub Releasesから、お使いのOSに対応したバイナリをダウンロードしてください。

Linux (x86_64)
wget https://github.com/kako-jun/noet/releases/latest/download/noet-linux-amd64.tar.gz
tar xzf noet-linux-amd64.tar.gz
sudo mv noet /usr/local/bin/
macOS (Intel)
curl -LO https://github.com/kako-jun/noet/releases/latest/download/noet-macos-amd64.tar.gz
tar xzf noet-macos-amd64.tar.gz
sudo mv noet /usr/local/bin/
macOS (Apple Silicon)
curl -LO https://github.com/kako-jun/noet/releases/latest/download/noet-macos-arm64.tar.gz
tar xzf noet-macos-arm64.tar.gz
sudo mv noet /usr/local/bin/
Windows

noet-windows-amd64.zipをダウンロードして展開し、パスを通してください。

ソースからビルド

git clone https://github.com/kako-jun/noet.git
cd noet
cargo install --path .

必要要件

  • note.comアカウント
  • (ソースビルドの場合)Rust 1.70以上

クイックスタート

1. ワークスペースの初期化(オプション)

記事をGitで管理したい場合、まずワークスペースを初期化します:

mkdir ~/my-articles
cd ~/my-articles
git init
noet init  # .noet/ディレクトリを作成

2. 認証

Noteアカウントで認証します:

noet auth login

以下の手順が必要です:

  1. ブラウザで https://note.com にログイン
  2. 開発者ツール (F12) → Application/Storage → Cookies を開く
  3. _note_session_v5 クッキーの値をコピー
  4. プロンプトに貼り付け

認証状態を確認:

noet auth status

3. インタラクティブモードで使う(推奨)

引数なしでnoetを実行すると、メニュー駆動のUIが起動します:

noet

メニューから以下の操作ができます:

  1. 📝 新規記事を作成(タイトル入力 → テンプレート選択 → エディタ自動起動)
  2. ✏️ 既存記事を編集(ファイル選択 → エディタ起動)
  3. 📤 記事を公開(ファイル選択 → 差分表示 → 公開確認)
  4. 📋 自分の記事一覧
  5. 🚪 終了

4. コマンドラインから使う

従来通り、コマンドラインからも操作できます:

# 新しい記事を作成
noet new "初めての記事"

# 記事を投稿(既存記事の場合は差分表示)
noet publish my-first-article.md

# 下書きとして投稿
noet publish my-first-article.md --draft

# 差分表示のみ(公開しない)
noet diff my-first-article.md

# 記事の一覧表示
noet list your-username

コマンド

インタラクティブモード

# 引数なしで実行(推奨)
noet

メニュー駆動のUIで記事管理が可能です。

ワークスペース

# ワークスペースを初期化(.noet/ディレクトリを作成)
noet init [PATH]

ワークスペース機能により、記事をGitで管理できます。

記事管理

# 新しい記事を作成
noet new [TITLE] [--template <NAME>]

# 記事を投稿(既存記事の場合は差分を表示)
noet publish <FILE> [--draft] [--force]

# 差分表示のみ(公開しない)
noet diff <FILE>

# 既存の記事を編集
noet edit <ARTICLE_ID> <FILE>

# 記事を削除
noet delete <ARTICLE_ID> [--force]

# ユーザーの記事一覧
noet list <USERNAME> [--page <PAGE>]

エクスポート

# 単一記事をエクスポート
noet export <ARTICLE_KEY> -o article.md

# 全記事をエクスポート
noet export --all --username <USER> -o ./exports/

テンプレート

# テンプレート一覧
noet template list

# テンプレート作成
noet template add <NAME>

# テンプレート表示
noet template show <NAME>

# テンプレート削除
noet template remove <NAME>

タグ管理

# ハッシュタグ一覧を表示
noet tag list [--page <PAGE>]

# キーワードでタグをサジェスト
noet tag suggest <KEYWORD>

マガジン管理

# 記事をマガジンに追加
noet magazine add <MAGAZINE_KEY> --note-id <NOTE_ID> --note-key <NOTE_KEY>

# 記事をマガジンから削除
noet magazine remove <MAGAZINE_KEY> <NOTE_KEY>

エンゲージメント

# 記事にいいね
noet like <ARTICLE_KEY>

# いいねを解除
noet unlike <ARTICLE_KEY>

# コメントを表示
noet comments <ARTICLE_ID>

ユーザー情報

# ユーザープロフィールを表示
noet user <USERNAME>

認証

# Noteにログイン
noet auth login

# 認証状態を確認
noet auth status

# 認証を更新
noet auth refresh

# 保存済み認証情報をクリア
noet auth clear

設定

設定ファイルは以下の場所に保存されます:

  • Linux: ~/.config/noet/config.toml
  • macOS: ~/Library/Application Support/noet/config.toml
  • Windows: %APPDATA%\noet\config.toml
default_status = "draft"
default_tags = []
editor = "code -w"          # エディタコマンド(オプション)
username = "your-username"   # ユーザー名(オプション)
base_url = "https://note.com"

エディタ設定

エディタは以下の優先順位で決定されます:

  1. config.tomleditorフィールド
  2. 環境変数$VISUAL
  3. 環境変数$EDITOR
  4. プラットフォームデフォルト(vim/notepad/open -e)

VSCodeの場合: editor = "code -w" (-wは編集完了まで待機)

Frontmatter形式

記事はYAML frontmatterでメタデータを指定します:

---
title: 記事タイトル
status: draft  # または "published"
tags: rust, cli, tutorial
---

Markdown形式の記事内容...

プロキシ対応

環境変数でプロキシを設定できます:

export HTTP_PROXY=http://proxy.example.com:8080
export HTTPS_PROXY=https://proxy.example.com:8080

重要な注意事項

非公式API警告

このツールはNoteの非公式APIを使用しています。以下の点に注意してください:

  • APIエンドポイントは予告なく変更される可能性があります
  • 過度な使用はレート制限やIP制限の対象となる可能性があります
  • Noteのシステム更新により機能が動作しなくなる可能性があります
  • このツールはnote.comから公式にサポートされていません

責任を持って使用し、過度なAPI呼び出しは避けてください。

セキュリティ

  • 認証情報の保存: システムキーリングに保存(macOS: Keychain、Linux: Secret Service、Windows: Credential Manager)
  • 暗号化: OSレベルで自動的に暗号化されます
    • macOS: AES-256
    • Linux: OSレベルの暗号化(libsecret)
    • Windows: DPAPI(Data Protection API)
  • 平文保存なし: セッションクッキーは平文ファイルに保存されません
  • XSRF保護: XSRFトークンは自動的に管理されます

開発

ビルド

cargo build

テスト実行

cargo test

ローカル実行

cargo run -- <COMMAND>

使用例

日常的なワークフロー

# 新しい記事を作成
noet new "Rustでコマンドラインツールを作る"

# エディタで編集
vim rustでコマンドラインツールを作る.md

# 下書きとして投稿
noet publish rustでコマンドラインツールを作る.md --draft

# レビュー後、公開状態に更新
# (markdownのstatusをpublishedに変更してから)
noet edit <ARTICLE_ID> rustでコマンドラインツールを作る.md

# 記事一覧を確認
noet list your-username

タグ付けのベストプラクティス

---
title: Rustでコマンドラインツールを作る
status: published
tags: Rust, CLI, プログラミング, チュートリアル
---

タグサジェスト機能を使うと便利です:

noet tag suggest rust
# → 関連するハッシュタグの候補が表示されます

トラブルシューティング

認証エラー

Error: Not authenticated. Please run 'noet auth login' first.

解決方法:

  1. noet auth clear で既存の認証情報をクリア
  2. noet auth login で再ログイン
  3. セッションクッキーが有効か確認(ブラウザでログイン状態を確認)

プロキシ環境での接続エラー

Error: HTTP request failed: ...

解決方法:

export HTTP_PROXY=http://proxy.example.com:8080
export HTTPS_PROXY=https://proxy.example.com:8080
noet auth status  # 接続テスト

Linux での keyring エラー

Error: Keyring error: No keyring found

解決方法(Ubuntu/Debian):

sudo apt-get install gnome-keyring libsecret-1-0

解決方法(Arch Linux):

sudo pacman -S gnome-keyring libsecret

macOS での権限エラー

初回起動時にキーチェーンへのアクセス許可を求められます。「許可」を選択してください。

開発

ビルド

cargo build

テスト実行

cargo test

ローカル実行

cargo run -- <COMMAND>

# 例:
cargo run -- auth status
cargo run -- new "テスト記事"

コントリビューション

プルリクエストを歓迎します!バグ報告や機能リクエストはIssuesにお願いします。

開発手順:

  1. フォークする
  2. フィーチャーブランチを作成 (git checkout -b feature/amazing-feature)
  3. コミット (git commit -m 'Add amazing feature')
  4. プッシュ (git push origin feature/amazing-feature)
  5. プルリクエストを作成

コミット前に自動的に cargo fmtcargo clippy が実行されます。

実装済み機能(v0.1.0)

  • ワークスペース機能(.noet/ディレクトリでプロジェクト管理)
  • テンプレート機能(記事テンプレートの作成・管理・使用)
  • エクスポート機能(Note.comから記事をMarkdownでダウンロード)
  • TUI差分表示(公開前に変更内容を並列比較)
  • インタラクティブモード(メニュー駆動のUI)
  • エディタ統合(設定可能なエディタ自動起動)

今後の予定

  • 画像アップロード機能(要API調査)
  • 記事の統計情報表示(PV、いいね数など)
  • crates.ioへの公開

FAQ

Q: セッションクッキーはどこに保存されますか?

A: OSのキーリングに安全に保存されます:

  • macOS: Keychain (AES-256で暗号化)
  • Linux: Secret Service (libsecret)
  • Windows: Credential Manager (DPAPI)

平文ファイルには保存されません。

Q: note.comの公式ツールですか?

A: いいえ、これは非公式ツールです。note.comやnote株式会社とは提携していません。

Q: APIレート制限はありますか?

A: 非公式APIを使用しているため、詳細な制限は不明です。過度な使用は避けてください。

Q: 複数アカウントを管理できますか?

A: 現在は1アカウントのみです。複数アカウント対応は今後検討します。

Q: 画像のアップロードはできますか?

A: 現在未対応です。Note.comの画像管理仕様が不明確なため、調査が必要です。 代替案として、Web UIで画像をアップロードしてURLを取得し、Markdownに貼り付けることができます。

Q: 記事のバックアップは取れますか?

A: はい、noet exportコマンドで記事をMarkdown形式でエクスポートできます:

  • 単一記事: noet export <ARTICLE_KEY> -o article.md
  • 全記事: noet export --all --username <USER> -o ./exports/

プロジェクト構造

詳細な実装仕様については CLAUDE.md を参照してください。

ライセンス

MIT License - 詳細は LICENSE を参照してください。

謝辞

  • Hugoなどの静的サイトジェネレータからインスピレーションを得ました
  • clap, reqwest, tokio を使用しています
  • Rustコミュニティに感謝

免責事項

これは非公式ツールであり、note.comやnote株式会社と提携、承認、または関連はありません。自己責任でご使用ください。

Commit count: 0

cargo fmt