ドキュメント

言語サポートとエージェント環境

Coroidが対応する言語、エージェントが実行される環境にインストールされているツール、そして十分にサポートされている言語とそうでない言語の違いについて説明します。

Coroidのエージェントは、シェルを使うエンジニアと同じようにコードを記述します。待つべき言語ごとの統合機能は存在しません。有能な開発者がリポジトリを開いて内容を読み、変更を加えてコマンドを実行できるのであれば、エージェントも同様に作業できます。

言語による違いは、Coroidがその言語で動作できるかどうかではありません。違いはCoroidが独立して証明できる変更内容に関する情報を――コードを意味的にナビゲートし、ビルドを実行し、テストスイートを走らせ、コンテナ内でアプリケーションを起動します。これこそが言語サポートの本質であり、結果を判断する前に理解しておくべき点です。

エージェントの実行環境

すべてのタスクはDebianイメージから構築されたクリーンで一時的なLinuxワークスペース内で、非特権ユーザーとして実行されます。タスク間で永続化されるデータは一切ありません。各タスクはキャッシュや事前インストール済みのツールが何もない新しいクローンから開始されます。

このイメージには汎用のツールチェーンが含まれているため、ほとんどのプロジェクトでは設定が不要です:

カテゴリ利用可能
JavaScript / TypeScriptNode.js 22、npm、npx
PythonPython 3、pip、venv、Poetry、Pipenv
JavaJDK(ヘッドレス版)、Maven、Gradle
GoGoツールチェーン
PHPPHP CLI、Composer
RubyRuby、Bundler
C / C++GCC、G++、Make、CMake
ブラウザChromium、ブラウザテスト用ブラウザテストおよびプレビュー検証
一般git、curl、jq、ripgrep、grep、sed、awk、coreutils、PostgreSQLクライアント

上記のリストに含まれていないもの――あまり一般的でないランタイム、特定のコンパイラバージョン、ネイティブ依存関係など――は障害にはなりません。それらは独自のコンテナを使用する.

言語による違い

品質に与える影響の大きさ順に並べた3つの要素です。

言語サーバー

言語サーバーはエージェントに意味論的な理解を提供します。定義への移動、参照の検索、実際の型情報などです。言語サーバーがあれば、エージェントはコードに関する正確な問いを投げかけることができ、テキストから答えを推測する必要がありません。言語サーバーがなければ、コードを読むだけです。これは小規模~中規模のコードベースでは問題なく機能しますが、コードベースが大規模で間接的になるほど信頼性が低下します。

Coroidは以下の言語の言語サーバーを実行します:TypeScriptおよびJavaScript、Python、Java、C#.

その他の言語では読み取り処理に切り替わります。これが言語間での最大の品質差であり、種類の違いではなく程度の違いです。

ビルドおよびテストコマンド

エージェントは自身の作業を検証するためにプロジェクトをコンパイルし、テストスイートを実行する必要があります。Coroidはプロジェクト作成時にこれらのコマンドを検出しますが、通常のレイアウトの方が特殊なレイアウトよりも検出精度が高いです。

これは機能の違いではなく設定の違いです――詳細はビルドおよびテスト設定です。珍しい言語で正しいコマンドの組み合わせがあれば、人気のある言語で誤ったコマンドの組み合わせよりも優れています。

コンテナ

プロジェクトがコンテナ内で実行可能な場合、Coroidはその実行環境としてコンテナを利用でき、環境のずれやサービス依存関係を一度に解消できます。

言語サーバーが存在しない場合

効果が得られる実用的な代替策を効果の高い順に紹介します:

  • ビルドおよびテストコマンドを明示的に設定する検出機能に頼るのではなく、これが言語サーバー以上に重要です。
  • **コンテナ化する。**正常に動作するコンテナがあれば、ほとんどの環境レベルのギャップが埋まります。
  • **プロジェクトコンテキストの整備に投資するプロジェクトコンテキスト.**適切なコンテキストがあれば、言語サーバーが提供する情報の一部を補うことができ、エージェントが自ら構造を発見する手間を減らせます。

独自のコンテナを使用する

既に動作しているDockerfileやComposeファイルでプロジェクトのビルドおよびテストが行える場合、それが最も信頼性の高い設定となります。デフォルトイメージ上で十分にサポートされている言語よりも優れており、コンテナ内にツールチェーン、バージョン、サービス依存関係が正確に記録されているからです。

テスト方法は簡単です。リポジトリを空のディレクトリにクローンし、他に何も設定せずにinstall、build、testを実行します。それが成功すれば、Coroidも正常に動作します。

プライベートレジストリおよびネットワークアクセス

ワークスペースはネットワークに接続可能なため、パブリックなパッケージレジストリは設定不要で利用できます。一方、プライベートなフィード(プライベートなnpmレジストリ、社内Mavenリポジトリ、自己ホスト型PyPIなど)を使用する場合は、プロジェクトの設定として認証情報を指定する必要があります。これは、クリーンなワークスペースには継承可能な環境依存の認証情報が存在しないためです。

複数言語を使用するプロジェクト

実際のプロジェクトの大半は複数の言語で構成されています。TypeScriptフロントエンドとPythonサービスを組み合わせた構成は一般的であり、Coroidはこれに対応します。処理の深さは変更が行われた言語に応じて決まり、サポートが充実している言語側での変更には、他の言語が何であるかに関係なく完全な処理が適用されます。