コントリビュートの方法
私たちはこのプロジェクトへのパッチとコントリビューションを歓迎します。
コントリビューションプロセス
コードレビュー
プロジェクトメンバーによる提出物を含め、すべての提出物はレビューが必要です。これには GitHub プルリクエスト を使用します。
プルリクエストガイドライン
PR の迅速なレビューとマージのために以下のガイドラインに従ってください。これらの基準を満たしていない PR はクローズされることがあります。
1. 既存の Issue へのリンク
すべてのプルリクエストは、トラッカー内の既存の Issue にリンクされている必要があります。これにより、コードを書く前にすべての変更が議論され、プロジェクトの目標と一致していることが保証されます。
- バグ修正の場合: プルリクエストはバグレポートの Issue にリンクしてください。
- 機能追加の場合: プルリクエストはメンテナーによって承認された機能リクエストまたは提案の Issue にリンクしてください。
変更内容に対応する Issue が存在しない場合は、まず Issue を作成し、コーディングを開始する前にフィードバックを待ってください。
2. 小さく、集中して
私たちは、単一の Issue を解決したり、単一の自己完結型の機能を追加したりする小さなアトミックなプルリクエストを推奨しています。
- すべきこと: 特定のバグを修正する、または特定の機能を追加するプルリクエストを作成してください。
- すべきではないこと: 複数の無関係な変更(例:バグ修正、新機能、リファクタリング)を一つのプルリクエストにまとめないでください。
大規模な変更は、レビューおよび独立してマージできる一連の小さな論理的なプルリクエストに分割する必要があります。
3. 作業中のPRにはDraft PRを使用する
作業内容について早期のフィードバックを得たい場合は、GitHubのDraft Pull Request機能を使用してください。これにより、PRが正式なレビューの準備ができていないが、議論と初期のフィードバックのためにオープンになっていることがメンテナーに伝わります。
4. すべてのチェックがパスすることを確認する
PRを提出する前に、npm run preflightを実行してすべての自動チェックがパスしていることを確認してください。このコマンドはすべてのテスト、リンティング、およびその他のスタイルチェックを実行します。
5. ドキュメントを更新する
PRでユーザー向けの変更(新しいコマンド、修正されたフラグ、または動作の変更など)を導入する場合は、/docsディレクトリ内の関連するドキュメントも更新する必要があります。
6. 明確なコミットメッセージと良いPRの説明を書く
PRには、明確で説明的なタイトルと、変更内容の詳細な説明が必要です。コミットメッセージについては、Conventional Commits 標準に従ってください。
- 良いPRのタイトル例:
feat(cli): Add --json flag to 'config get' command - 悪いPRのタイトル例:
Made some changes
PRの説明では、変更の「理由」を説明し、関連するIssueへのリンクを記載してください(例: Fixes #123)。
開発環境のセットアップとワークフロー
このセクションでは、コントリビューターがプロジェクトの開発環境をビルド・変更・理解する方法について案内します。
開発環境のセットアップ
前提条件:
- Node.js:
- 開発時: Node.js
~20.19.0を使用してください。この特定のバージョンは、上流の開発依存関係の問題により必要です。nvm のようなツールを使用して Node.js のバージョンを管理できます。 - 本番環境: CLI を本番環境で実行する場合、Node.js
>=20の任意のバージョンを使用できます。
- 開発時: Node.js
- Git
ビルドプロセス
リポジトリをクローンするには:
git clone https://github.com/QwenLM/qwen-code.git # またはあなたのフォークのURL
cd qwen-codepackage.json に定義された依存関係とルートの依存関係をインストールするには:
npm installプロジェクト全体(すべてのパッケージ)をビルドするには:
npm run buildこのコマンドは通常、TypeScript を JavaScript にコンパイルし、アセットをバンドルして、パッケージを実行可能な状態に準備します。ビルド中に何が行われるかの詳細については、scripts/build.js および package.json のスクリプトを参照してください。
サンドボックスの有効化
サンドボックスは強く推奨されており、最低限 ~/.env で QWEN_SANDBOX=true を設定し、サンドボックスプロバイダ(例:macOS Seatbelt、docker、または podman)が利用可能であることを確認する必要があります。詳細についてはサンドボックスを参照してください。
qwen-code CLI ユーティリティとサンドボックスコンテナの両方をビルドするには、ルートディレクトリから build:all を実行します:
npm run build:allサンドボックスコンテナのビルドをスキップする場合は、代わりに npm run build を使用できます。
実行
ソースコードから Qwen Code アプリケーションを起動するには(ビルド後)、ルートディレクトリから以下のコマンドを実行します:
npm startqwen-code フォルダ外でソースビルドを実行したい場合は、npm link path/to/qwen-code/packages/cli を利用して(詳細:docs )、qwen-code で実行できます。
テストの実行
このプロジェクトには、ユニットテストとインテグレーションテストの2種類のテストが含まれています。
単体テスト
プロジェクトの単体テストスイートを実行するには:
npm run testこれにより、packages/core および packages/cli ディレクトリにあるテストが実行されます。変更を提出する前に、テストがパスすることを確認してください。より包括的なチェックを行うためには、npm run preflight を実行することをお勧めします。
結合テスト
結合テストは、Qwen Code のエンドツーエンド機能を検証するように設計されています。デフォルトの npm run test コマンドでは実行されません。
結合テストを実行するには、以下のコマンドを使用してください:
npm run test:e2e結合テストフレームワークの詳細については、結合テストドキュメントをご参照ください。
Linting とプレフライトチェック
コードの品質とフォーマットの一貫性を確保するために、プレフライトチェックを実行します:
npm run preflightこのコマンドは、ESLint、Prettier、すべてのテスト、およびプロジェクトの package.json で定義されているその他のチェックを実行します。
プロティップ
クローン後に git の precommit フックファイルを作成し、コミットが常にクリーンであることを保証してください。
echo "
# npm build を実行し、エラーをチェック
if ! npm run preflight; then
echo "npm build failed. Commit aborted."
exit 1
fi
" > .git/hooks/pre-commit && chmod +x .git/hooks/pre-commitフォーマット
プロジェクト内のコードを個別にフォーマットするには、ルートディレクトリから以下のコマンドを実行します:
npm run formatこのコマンドは Prettier を使用して、プロジェクトのスタイルガイドラインに従ってコードをフォーマットします。
Linting
プロジェクト内のコードを個別に lint するには、ルートディレクトリから以下のコマンドを実行します:
npm run lintコーディング規約
- 既存のコードベース全体で使用されているコーディングスタイル、パターン、規約に従ってください。
- インポート: インポートパスには特に注意してください。プロジェクトではESLintを使用してパッケージ間の相対インポートに対する制限を強制しています。
プロジェクト構造
packages/: プロジェクトの個別サブパッケージが含まれます。cli/: コマンドラインインターフェース。core/: Qwen Codeのコアバックエンドロジック。
docs/: すべてのプロジェクトドキュメントが含まれます。scripts/: ビルド、テスト、開発タスク用のユーティリティスクリプト。
より詳細なアーキテクチャについては、docs/architecture.mdを参照してください。
ドキュメント開発
このセクションでは、ドキュメントをローカルで開発およびプレビューする方法について説明します。
前提条件
- Node.js(バージョン18以上)がインストールされていることを確認してください
- npmまたはyarnが利用可能であること
ドキュメントサイトをローカルでセットアップする
ドキュメントの作業や変更のプレビューをローカルで行うには:
-
docs-siteディレクトリに移動します:cd docs-site -
依存関係をインストールします:
npm install -
メインの
docsディレクトリからドキュメントコンテンツをリンクします:npm run linkこれにより、
../docsから docs-site プロジェクト内のcontentへのシンボリックリンクが作成され、Next.js サイトでドキュメントコンテンツを提供できるようになります。 -
開発サーバーを起動します:
npm run dev -
ブラウザで http://localhost:3000 を開き、変更を行うとリアルタイムで更新されるドキュメントサイトを確認します。
メインの docs ディレクトリにあるドキュメントファイルに加えられた変更は、すぐにドキュメントサイトに反映されます。
デバッグ
VS Code:
F5を使用して VS Code で対話的にデバッグするには、CLI を実行します。- ルートディレクトリから CLI をデバッグモードで起動します。
このコマンドは
npm run debugpackages/cliディレクトリ内でnode --inspect-brk dist/index.jsを実行し、デバッガがアタッチされるまで実行を一時停止します。その後、Chrome ブラウザでchrome://inspectを開いてデバッガに接続できます。 - VS Code で「Attach」起動設定(
.vscode/launch.json内にあります)を使用します。
あるいは、現在開いているファイルを直接起動する場合は、VS Code の「Launch Program」設定を使用することもできますが、一般的には「F5」の使用が推奨されます。
サンドボックスコンテナ内でブレークポイントにヒットさせるには、以下を実行します。
DEBUG=1 qwen-code注: プロジェクトの .env ファイルに DEBUG=true があっても、自動的に除外されるため qwen-code には影響しません。qwen-code 固有のデバッグ設定には .qwen-code/.env ファイルを使用してください。
React DevTools
CLI の React ベースの UI をデバッグするには、React DevTools を使用できます。CLI のインターフェースに使用されているライブラリである Ink は、React DevTools バージョン 4.x と互換性があります。
-
開発モードで Qwen Code アプリケーションを起動します:
DEV=true npm start -
React DevTools バージョン 4.28.5(または互換性のある最新の 4.x バージョン)をインストールして実行します:
グローバルにインストールする方法:
npm install -g react-devtools@4.28.5 react-devtoolsまたは、npx を使用して直接実行する方法:
npx react-devtools@4.28.5実行中の CLI アプリケーションが React DevTools に接続されます。
Sandboxing
TBD
Manual Publish
内部レジストリには各コミットに対してアーティファクトを公開していますが、ローカルビルドを手動で作成する必要がある場合は、以下のコマンドを実行してください:
npm run clean
npm install
npm run auth
npm run prerelease:dev
npm publish --workspaces