開発環境のセットアップ¶
前提条件¶
- Python 3.12+(バックエンドは3.11でも動作しますが、プラグインのテストは3.12で行います)。
- Node 24+(Vite 8が必要)。古いNodeバージョンはビルドステップで
crypto.hash is not a functionというエラーで失敗します。 - Poetry(Python依存関係管理のため)。インストール:
curl -sSL https://install.python-poetry.org | python3 - - npm(Nodeに同梱)。
- GNU Make(オーケストレーションターゲットのため)。MakefileはSOTであり、すべてのCIコマンドはそこに記載されています。
クローン + インストール¶
make installは以下を実行します。
cd backend && poetry install— バックエンド + プラグインのパス依存関係。cd frontend && npm ci— フロントエンドの依存関係(Node 24)。plugins/内のすべてのプラグインをバックエンドのvenvにパス依存関係としてインストール(develop = trueにより編集が即時反映)。
make installが失敗する場合、最も多い原因はPoetryが誤ったPythonを選択することです。backend/(および深く入った場合は各プラグイン)でpoetry env use python3.12を実行して再インストールしてください。
設定¶
バックエンドは3層のチェーンから設定を読み取ります(優先度が高いものが優先されます)。
- 環境変数(
ADAPTIVE_LEARNER_*プレフィックス付き)。 - ユーザーシークレット(
~/.config/adaptive_learner/secrets.yaml)— 最初の起動時にコメント付きテンプレートとして自動生成(POSIXではchmod 0600が適用); gitにはコミットされません。 - デフォルト(
backend/config/app.yaml内)。
さらにプロバイダーごとのAIキー解決が上乗せされます: env > secrets.yaml > Fernet暗号化DBカラム(Settings UIで設定)。UserSettingsOutのkey_source_*フィールドとしてUIに公開されます。
必須のシークレットはADAPTIVE_LEARNER_SECRET_KEYです。FernetでユーザーのAPIキーを保存時に暗号化するために使用します。python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"で生成します。設定できる場所は3つあります(優先度が高いものが優先): ADAPTIVE_LEARNER_SECRET_KEY環境変数、secrets.yamlのsecret_key:、または開発用の一時キーとしてmake dev-secret。キーが未設定の場合、アプリは起動時にハードフェイルします(サイレントデフォルト生成という落とし穴はありません)。詳細はdocs/configuration.mdを参照してください。
実行¶
ポート18001でバックエンドを、ポート15174でフロントエンドを並行して起動します。バックエンドはuvicornの--reloadでホットリロードに対応し、フロントエンドはViteの開発サーバーです。Ctrl-Cを一度押すと両方が停止します。
バックグラウンドモード:
テスト¶
make test # バックエンド + プラグイン + フロントエンドVitest
make test-backend # バックエンドpytestのみ
make test-frontend # フロントエンドVitestのみ
make test-coverage # オプションのカバレッジ実行(低速)
E2Eテスト:
v1.20.0では16個のスモークスペックファイル: ランディング、オンボーディング + アセスメント、セッション(3チャンクSSE)、カリキュラム、設定、モバイルビューポート、同期ペアリング、バックアップラウンドトリップ、マルチサイクルオートループ、インポート + 分析、MDエクスポート、サブジェクト/タグフィルター、リッチテキストノート、モデルピッカー。
リント + フォーマット¶
cd backend && poetry run ruff check . # Pythonリント
cd backend && poetry run ruff format . # Pythonフォーマット
cd frontend && npx tsc --noEmit # TypeScriptチェック
cd frontend && npm run lint # ESLint
cd frontend && npm run format # Prettier
pre-commitフックにより、すべてのコミット時にruff + フォーマッターのチェックが強制されます。
ドキュメント¶
make docs-install # 一回限り、docs/にMkDocsのvenvをインストール
make docs-serve # localhost:8000でドキュメントをホットリロードで提供
make docs-build # 静的サイトをsite/にビルド
docsのvenvはバックエンドとは別です。MkDocsはmkdocs-material + mkdocs-static-i18nを含む独自のdocs/pyproject.tomlを持ちます。
よくある問題¶
make devが「port already in use」でクラッシュする: 別のAdaptiveLearnerインスタンスがまだ実行中です。make dev-downまたはpkill -f uvicornを実行してください。- 「duplicate column name」でテストが失敗する: Alembicのマイグレーションがスキーマを変更しています。
backend/adaptive_learner.dbを削除して再実行してください。 npm run buildがNode 18で失敗する: Node 24にアップグレードしてください。Vite 8が必要です。