「情報を探す時間」を消滅させるAIパートナー:MineContextの技術スタック(PythonによるRAGとElectron/ReactによるUX)
「落ち着け、相棒!見ろ、このキーワードだ...volcengine/MineContext、electron、react、python...そして『コンテキストアウェアなAIパートナー』だと!?これはただの事件じゃない、ソフトウェア開発における『生産性の殺人事件』だ!」
volcengine/MineContextは、あなたの作業環境(コンテキスト)を『能動的(プロアクティブ)』に収集・管理し、必要な時に『賢く掘り起こして(インテリジェント・リサーフェシング)』提供するAIパートナーのオープンソースプロジェクトです。
つまり、開発者が日々触れる大量のドキュメント、コード、ログなどの『断片的な情報(コンテキスト)』を自動で集め、あなたが「今、何に取り組んでいるか」を理解した上で、最も役立つヒントや要約、Todoを『先回りして(プロアクティブ)』提供してくれる仕組みです。
| 特徴 | 開発上のメリット |
| Effortless Collection | 過去のプロジェクト、調査資料、APIドキュメントなどを無意識に記録。情報を探す**「探索時間」の削減**。 |
| Intelligent Resurfacing | 新しいコードを書くときやバグ修正時に、過去の類似コードや関連メモを自動で提示。記憶の負荷を減らし、より良い決定を支援。 |
| Proactive Delivery | 日次・週次の作業サマリーや、忘れてはいけないTodoをプッシュ通知。タスク管理と振り返りを自動化。 |
| Context Engineering | 複数ソース・マルチモーダルなデータ(コード、文章、画像など)のライフサイクル全体を管理し、高精度なAIアシストを実現。 |
| Privacy-First | データはローカルに保存。機密性の高い企業コードや内部ドキュメントも安心して利用可能。 |
「くっ...これはただのメモツールじゃない!開発者の『集中力』と『流れ(フロー)』を奪っていた『情報探索の悪魔』を討伐するための『強力な証拠(ツール)』だ!」
MineContextは、electron(デスクトップアプリのフレームワーク)、react(UIフレームワーク)、python(バックエンドのAI処理)というモダンな技術スタックを採用しているため、以下のような役割分担で導入・開発が可能です。
| 技術 | 役割 |
| Electron | デスクトップアプリのシェル。Windows/macOS/Linuxで動作するクロスプラットフォームな窓口を提供。 |
| React | ユーザーインターフェース (UI)。収集したコンテキストの表示、サマリー画面、設定画面などのフロントエンドを構築。 |
| Python | AIの頭脳とバックエンド。コンテキストの収集、解析、ベクトル化、AI処理、検索、プロアクティブな情報生成を実行。 |
Python環境
Python (3.8以上推奨)
uv (高速なPythonパッケージインストーラ、またはpip)
JavaScript/TypeScript環境
Node.js (npm/yarn/pnpmなど)
クローン
リポジトリをローカルに取得します。
git clone https://github.com/volcengine/MineContext.git
cd MineContext
Pythonバックエンドのセットアップ
# uvまたはpipを使って依存関係をインストール
uv sync # または pip install -r requirements.txt
Electron/Reactフロントエンドのセットアップ
cd frontend # フロントエンドディレクトリへ移動
npm install # または yarn install, pnpm install
通常、バックエンドとフロントエンドを別々に起動し、開発を進めます。
Pythonバックエンドの起動 (AIサーバー)
# MineContextのルートディレクトリで
python run.py # 実際のプロジェクトの起動スクリプトに依存
Electron/Reactフロントエンドの起動
# frontendディレクトリで
npm start # Electron開発モードで起動
「素晴らしい!これでAIの頭脳とユーザーの目の両方が動き出したぞ!」
ここでは、ElectronとPythonが連携する、最も重要な部分に焦点を当てます。Electron(React)からPythonのAIロジックを呼び出すには、主にプロセス間通信 (IPC)やHTTP/WebSocketを使用します。
Python側でコンテキスト検索の機能を提供します。
# python_backend/api.py (FastAPIのイメージ)
from fastapi import FastAPI
from context_engine import search_context # 仮のコンテキスト検索モジュール
app = FastAPI()
# ユーザーの現在の入力に基づいて、関連コンテキストを返すAPI
@app.post("/api/resurface_context")
def resurface_context(current_input: str):
"""
現在の入力(例:ユーザーがエディタに入力中のテキスト)に基づき、
関連性の高い過去のコンテキストを検索して返す。
"""
# AI/RAGエンジンで検索を実行
relevant_contexts = search_context(current_input)
# 関連度が高い順に結果を整形して返す
return {"contexts": relevant_contexts[:5], "status": "success"}
# 実行: uvicorn api:app --reload
React/Electron側で、ユーザーの入力イベントをトリガーにPythonのAPIを呼び出します。
// frontend/src/components/AIPartnerWidget.js (Reactコンポーネントのイメージ)
import React, { useState, useEffect } from 'react';
import axios from 'axios'; // HTTPクライアント
const AIPartnerWidget = ({ currentEditorInput }) => {
const [suggestions, setSuggestions] = useState([]);
useEffect(() => {
// ユーザー入力が一定時間止まったら(Debounce)検索をトリガー
const handler = setTimeout(() => {
if (currentEditorInput.length > 5) {
fetchContextSuggestions(currentEditorInput);
} else {
setSuggestions([]);
}
}, 500); // 500msのデバウンス
return () => {
clearTimeout(handler);
};
}, [currentEditorInput]); // 入力が変わるたびに実行
const fetchContextSuggestions = async (input) => {
try {
// Pythonバックエンド(例:localhost:8000)のAPIを呼び出す
const response = await axios.post('http://localhost:8000/api/resurface_context', {
current_input: input,
});
// 検索結果をUIに表示
setSuggestions(response.data.contexts);
} catch (error) {
console.error('Context fetching failed:', error);
setSuggestions([{ text: "コンテキストエンジンの接続に失敗しました。" }]);
}
};
return (
<div className="ai-widget">
<h4> 推奨コンテキスト</h4>
{suggestions.length > 0 ? (
<ul>
{suggestions.map((ctx, index) => (
<li key={index}>{ctx.title}: {ctx.snippet}</li>
))}
</ul>
) : (
<p>関連するコンテキストを監視中です...</p>
)}
</div>
);
};
export default AIPartnerWidget;