はじめに
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は、以下のような仕組みで動作します。
- ユーザーがStreamlitアプリにリポジトリのURLを入力
- CodeLumiaがリポジトリをクローンし、ファイルツリーを生成
.CodeLumiaignore
パターンに一致するファイルとディレクトリを除外- 残りのファイルの内容を読み込み、マークダウンコンテンツを生成
- 生成されたマークダウンを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やプルリクエストでお待ちしています。
コードを読む力を高め、ドキュメンテーションを充実させて、より良いソフトウェア開発を目指しましょう!
コメント