0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Poetry(Python)×Node.js環境での複数AIエージェントのコード標準化とObsidian自動メンテナンス

0
Posted at

はじめに

Google Gemini (Antigravity)、Anthropic Claude Code、OpenAI Codexなど、複数のAIエージェントを開発ワークフローに組み込むソロ開発・マルチエージェント開発が増加しています。

しかし、複数のAIエージェントにコード作成やリファクタリングを任せると、以下のような課題が発生しやすくなります。

  • エージェントごとにインデント、引用符、フォーマットの流儀がバラバラになる
  • Python (Poetry) や Node.js のプロジェクト構成ルールが守られない
  • Obsidian等のナレッジベースに作成されたノートが孤立(リンク切れ・死蔵メモ化)する

本記事では、Poetry (Python 3.10) / Node.js 環境において、全AIエージェントに共通のコードフォーマットルールを強制する仕組みと、Obsidian Vaultの死蔵メモを自動検知して補正する 「セルフメンテナンス自動化」 の実装手法を解説します。


1. 共通開発ルール(Common Rules)によるツールチェーンの統一

複数のAIエージェントに一貫したフォーマットを適用させるため、プロジェクトルートおよびAI共有メモリ(10_AI_Brain/03_Shared_Memory/Common_Rules.md)に共通開発ルールを定義します。

採用ツールチェーン

  • Python環境: Python 3.10.9 + 依存関係管理 Poetry
  • Pythonフォーマッタ/リンター: Ruff (高速・統一ルール適用)
  • Kotlin/Javaフォーマッタ: ktlint
  • Node.js環境: 最新仕様 (v26.3.0 等) に準拠したJavaScript/TypeScript記述

設定ルール記述例 (Common_Rules.md)

# 共通開発ルール (Common Rules)

## 1. コーディングおよびフォーマット
- Pythonのフォーマットは Ruff、Kotlinのフォーマットは ktlint で統一すること。
- 最終チェックとしてコーディング終了時にフォーマット機能を呼び出すこと。
- 新しいPythonプロジェクトを作る、あるいは依存関係を追加する際は Poetry を利用すること。

AIエージェントがコード変更を行った際、各エージェントのインストラクションファイル経由で「作業終了時に poetry run ruff format . を自動実行する」という行動ルールを刷り込むことで、差分の表記揺れを完全に根絶できます。


2. Obsidian Vaultの健全性を保つ「自動メンテナンスボット」

ナレッジベース(Obsidian)にAIエージェントが自動的に思考ログや出力を書き込む運用を行うと、参照されない「死蔵メモ」や「孤立ノート(どこからもリンクされていないノート)」が徐々に蓄積されます。

これを解決するため、定期的にVaultを走査・健全化する自動メンテナンススクリプト(obsidian-auto-maintenance)を構築します。


3. 死蔵メモ抽出&不整合修正のロジック実装

以下は、PythonでObsidian内のMarkdownファイルをスキャンし、インバウンドリンク(被参照)を持たない孤立ノートを抽出・修正するスクリプトの例です。

import re
from pathlib import Path

VAULT_ROOT = Path(r"C:\Obsidian\10_AI_Brain")

def find_orphaned_notes():
    """Vault内の全ノートを走り、どこからもWikilinkされていない孤立ノートを抽出"""
    all_notes = {f.stem: f for f in VAULT_ROOT.rglob("*.md")}
    referenced_notes = set()

    # 全ノートの本文から [[ノート名]] を正規表現で抽出
    wikilink_pattern = re.compile(r"\[\[([^\]\|]+)(?:\|[^\]]+)?\]\]")

    for note_path in all_notes.values():
        content = note_path.read_text(encoding="utf-8", errors="ignore")
        matches = wikilink_pattern.findall(content)
        for match in matches:
            referenced_notes.add(match.strip())

    # どこからも参照されていないノートを特定
    orphaned = []
    for stem, path in all_notes.items():
        if stem not in referenced_notes and not stem.startswith("README"):
            orphaned.append(path)

    return orphaned

if __name__ == "__main__":
    orphans = find_orphaned_notes()
    print(f"[INFO] 検出された孤立ノート数: {len(orphans)}")
    for note in orphans:
        print(f"  - {note.relative_to(VAULT_ROOT)}")

4. マルチAIエージェント運用におけるベストプラクティス

  1. ルールの単一真実源(Single Source of Truth)化:
    各エージェント個別の設定ファイルに直接ルールを直書きするのではなく、03_Shared_Memory/Common_Rules.md などの共有ノートを参照させる構成にすることで、ルール改定時の保守コストを最小化します。
  2. フォーマッタの自動実行義務化:
    コード生成後、AIに ruff check --fixruff format を実行させるターンを設けることで、人間のレビュー負担を劇的に軽減します。
  3. 定期的なVault健康診断:
    Antigravity等の自律エージェントに定期メンテナンス(週1回の死蔵メモチェックやタグ整理)を実行させることで、セカンドブレインの検索精度を長期にわたって維持できます。

5. まとめ

マルチAIエージェント開発を成功させる鍵は、「コードフォーマットの厳格な標準化(Ruff/Poetry)」「ナレッジベースの自動健全化(Obsidianメンテナンス)」 の2本柱にあります。

人間の手を介さずに開発クオリティとセカンドブレインの美しさを保ちたい方は、ぜひ共通ルール設計とセルフメンテナンススクリプトを導入してみてください!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?