Sem: Git エンティティによるセマンティックコード理解

Sem はコード解析を行ベースの差分からエンティティベースの理解へシフトします

Sem は、Git の上にセマンティック解析を重ねる新しいコード理解のプリミティブです。従来の Language Server Protocol (LSP) とは異なり、Sem はコードを関数、クラス、メソッドなどのエンティティの集合として識別し、行の変更の連続としてではなく扱います。このアプローチにより、開発者や AI エージェントは、テキストベースの差分でどのように表現されていても、プログラムのロジックで実際に何が変わったかを追跡できます。

コア機能とコマンドセット

Sem は、設定ファイルやプラグインを必要とせずに Git リポジトリを解析するための 6 つの主要コマンドを提供し、26 の言語と 5 種類のデータフォーマットに対応しています。

エンティティレベルの差分と履歴

  • sem diff: 標準的な行差分をエンティティレベルの変更に置き換えます。リネームを検出し、構造ハッシュを使用して関数が追加、変更、削除されたかを識別し、単語レベルのインラインハイライトを提供します。
  • sem blame: エンティティ単位の blame を提供し、特定の関数、クラス、メソッドを最後に変更したコミットを特定します。
  • sem log: 単一エンティティの Git 履歴全体での変遷を追跡し、特定の関数に触れたすべてのコミットを表示します。

影響分析とコンテキスト

  • sem impact: ファイル横断的な依存関係グラフを生成します。特定の関数に依存するすべてのエンティティを特定し、推移的に影響を受けるエンティティとテストを列挙します。
  • sem entities: 指定されたパス内のすべての関数、クラス、メソッド、型をリストアップし、正確な行範囲を含めて表示します。
  • sem context: LLM 用のトークン予算に合わせたコンテキストウィンドウを作成します。対象エンティティとその依存先・依存元をプロンプト用の形式にまとめ、LLM のトークン上限内に収めます。

パフォーマンスと互換性

Sem は高速かつ広範な互換性を念頭に設計されており、典型的な差分処理時間は 8ms です。TypeScript、JavaScript、Python、Go、Rust、Java、C、C++、C#、Ruby、PHP、Swift、Kotlin、Elixir、Bash、HCL、Fortran、Vue、Svelte、Dart、Perl、OCaml、Scala、Zig など多数の言語と、JSON、YAML、TOML、CSV、Markdown といったデータフォーマットをサポートしています。

AI エージェント統合とベンチマーク

Ataraxy Labs の報告によると、AI エージェントは Sem のエンティティレベル出力を使用した場合、従来の行ベース差分に比べて精度が 2.3 倍向上します。この統合を容易にするためにツールは機械可読な出力用の --json フラグを提供していますが、コミュニティの一部メンバーはこれらベンチマークの特異性に疑問を呈し、一般的なコーディングタスクではなく Sem 独自の「エンティティ」概念に合わせたものではないかと指摘しています。

コミュニティのフィードバックと実装上の懸念

ツールの技術的有用性は称賛されているものの、コミュニティはインストールや統合に関していくつかの懸念を提起しています。

  • Git 統合: sem setup コマンドは Git を外部 diff ツールとして Sem を使用するように設定し(git config --global diff.external = sem)、pre-commit フックをインストールします。一部のユーザーはこれを「ユーザーに対して敵対的」と表現し、デフォルトの git diff 動作を上書きし、CLI を補完的なツールとして使用する明確で破壊的でない方法がないことを指摘しています。
  • モノレポでのスケーリング: 標準的な Git 操作がすでにパフォーマンス低下を起こす大規模モノレポにおいて、ツールがどのように動作するかについて疑問が提起されています。
  • コードレビューへの適用: 一部のユーザーは、Sem のような AST ベースの diff システムをコードフォージ UI に統合し、レビュー担当者の主要なビューとして行差分に代わるものにできると提案しています。

"過去数ヶ月間、Ataraxy Labs のすべてのツールを使用しており、モデルが私にとってミスを減らす上で欠かせないものとなっています。より良い git diff、インパクト分析、コードレビューまで幅広く活用しています。"

"特に複雑なプロジェクトにおいて、これが人間やエージェントの実際の問題を解決するかどうかは疑わしいです。"

インストール

Sem は Homebrew または Cargo でインストールできます:

brew install sem-cli
# OR
cargo install --git https://github.com/Ataraxy-Labs/sem sem-cli

sem setup によって行われた Git 設定の変更を元に戻すには、ユーザーは sem unsetup を実行できます。

Sources