CodeLumia: GitHubリポジトリの解読ドキュメンテーションを自動生成

AI

はじめに

CodeLumiaは、GitHubリポジトリのソースコードを分析し、包括的なマークダウン形式のドキュメントを自動生成するPythonツールです。このツールを使用することで、以下のようなメリットがあります。

  • プロジェクトの構造、依存関係、設定などを簡単に理解できる
  • 新しいチームメンバーのオンボーディングが容易になる
  • コードの保守性が向上する

CodeLumiaは、開発者がコードベースをすばやく把握し、プロジェクトに効率的に貢献できるようにすることを目的としています。

主な特徴

CodeLumiaには以下のような特徴があります。

  • GitHubリポジトリの自動分析
  • マークダウン形式のドキュメント生成
  • ファイルとディレクトリの無視パターンのカスタマイズ
  • わかりやすいStreamlitユーザーインターフェース

使い方

CodeLumiaを使うのは非常に簡単です。以下の手順に従って、リポジトリのドキュメントを生成しましょう。

1. リポジトリのURLを入力

StreamlitアプリケーションでリポジトリのURLを入力します。

https://github.com/username/repository

2. 無視パターンの編集(オプション)

サイドバーで、ドキュメント生成時に無視したいファイルやディレクトリのパターンを編集できます。デフォルトでは.CodeLumiaignoreファイルの内容が使用されます。

3. ドキュメントの生成

"Generate Documentation"ボタンをクリックすると、CodeLumiaがリポジトリを分析し、マークダウンのドキュメントを生成します。生成されたドキュメントはアプリ上に表示されます。

4. ドキュメントのダウンロード

"Download Markdown File"リンクをクリックすると、生成されたマークダウンファイルをダウンロードできます。

プロジェクト構造

CodeLumiaのプロジェクト構造は以下のようになっています。

CodeLumia/
├─ docs/
│  ├─ language_map.json
│  ├─ page_front.md
│  └─ SourceSageDocs.md  
├─ modules/
│  ├─ file_operations.py
│  ├─ git_operations.py
│  └─ markdown_operations.py
├─ app.py
├─ CodeLumia.md
├─ docker-compose.yml
├─ Dockerfile  
├─ README.md
└─ requirements.txt
  • docs/: プロジェクトのドキュメントが含まれるディレクトリ
    • language_map.json: ファイル拡張子と言語のマッピング
    • page_front.md: アプリのフロントページに表示されるマークダウンコンテンツ
    • SourceSageDocs.md: SourceSageを使用したドキュメンテーション
  • modules/: 主要な機能を提供するPythonモジュール
    • file_operations.py: ファイル操作関連の関数
    • git_operations.py: Git操作関連の関数
    • markdown_operations.py: マークダウン生成関連の関数
  • app.py: Streamlitアプリケーションのメインファイル
  • CodeLumia.md: CodeLumia自体のドキュメント
  • docker-compose.yml: Docker Composeの設定ファイル
  • Dockerfile: Dockerイメージのビルド手順
  • README.md: プロジェクトの説明文書
  • requirements.txt: 必要なPythonパッケージのリスト

アプリケーションの仕組み

CodeLumiaは、以下のような仕組みで動作します。

  1. ユーザーがStreamlitアプリにリポジトリのURLを入力
  2. CodeLumiaがリポジトリをクローンし、ファイルツリーを生成
  3. .CodeLumiaignoreパターンに一致するファイルとディレクトリを除外
  4. 残りのファイルの内容を読み込み、マークダウンコンテンツを生成
  5. 生成されたマークダウンをStreamlitアプリに表示し、ダウンロードリンクを提供

重要な処理はmodules/ディレクトリ内の各Pythonモジュールに分割されています。

  • git_operations.py: リポジトリのクローンを処理

    def clone_repository(repo_url, repo_name):
      repo_path = f"tmp/{repo_name}"
      if os.path.exists(repo_path):
          shutil.rmtree(repo_path)
      os.system(f"git clone {repo_url} {repo_path}")
      return repo_path
  • file_operations.py: ファイルツリーの生成と内容の読み込みを処理

    def get_file_tree(repo_path, ignore_patterns):
      file_tree = ""
      for root, dirs, files in os.walk(repo_path):
          dirs[:] = [d for d in dirs if not any(fnmatch.fnmatch(d, pattern) for pattern in ignore_patterns)]
          level = root.replace(repo_path, "").count(os.sep)
          indent = " " * 4 * (level)
          file_tree += f"{indent}{os.path.basename(root)}/\n"
          subindent = " " * 4 * (level + 1)
          for f in files:
              if not any(fnmatch.fnmatch(f, pattern) for pattern in ignore_patterns):
                  file_tree += f"{subindent}{f}\n"
      return file_tree
  • markdown_operations.py: マークダウンコンテンツの生成を処理

    def create_markdown_content(repo_name, file_tree, repo_path, ignore_patterns):
      markdown_content = f"# << {repo_name}>> \n## {repo_name} File Tree\n\n``\n{file_tree}\n``\n\n"
      file_contents = process_files(repo_path, ignore_patterns)
      for file_path, content in file_contents:
          _, file_extension = os.path.splitext(file_path)
          language = language_map.get(file_extension, "")
          markdown_content += f"## {file_path}\n\n``{language}\n{content}\n``\n\n"
      return markdown_content

これらのモジュールが連携して、GitHubリポジトリからマークダウンドキュメントを生成します。

おわりに

CodeLumiaを使えば、GitHubリポジトリのドキュメンテーションを簡単に自動生成できます。プロジェクトの理解を深め、チームのコラボレーションを促進するのに役立つでしょう。

ぜひCodeLumiaを試してみて、フィードバックをお寄せください。バグ報告や機能要望は、GitHubのIssueやプルリクエストでお待ちしています。

コードを読む力を高め、ドキュメンテーションを充実させて、より良いソフトウェア開発を目指しましょう!

デモアプリ

CodeLumia - a Hugging Face Space by MakiAi
Discover amazing ML apps made by the community

リポジトリ

GitHub - Sunwood-ai-labs/CodeLumia
Contribute to Sunwood-ai-labs/CodeLumia development by creating an account on GitHub.

コメント

タイトルとURLをコピーしました