sem: エンティティレベルでコード変更を追跡するセマンティック バージョン管理ツール(行単位ではなく)

sem: エンティティレベルでコード変更を追跡するセマンティック バージョン管理ツール(行単位ではなく)

解決する課題

従来の Git などのバージョン管理システムはテキスト行単位で変更を追跡しますが、実際のロジックの変更が見えにくくなることがよくあります。sem はエンティティレベル(関数、クラス、メソッド)で変更を追跡するセマンティック バージョン管理を提供し、コードで実際に何が変わったかを把握しやすくします。

仕組み

sem は Git の上にレイヤーとして動作します。tree-sitter を利用して 32 のプログラミング言語および構造化データ形式のコードを解析し、エンティティを個別のオブジェクトとして抽出します。3 段階のマッチングプロセス(正確な ID マッチ、構造ハッシュ(空白とコメントを無視)、曖昧な類似度)を用いて、単なる追加・削除ではなく、ロジックのリネームや移動を検出します。

対象ユーザー

  • 開発者:より意味のある diff と変更のインパクト分析が欲しい人。
  • AI コーディングエージェント:依存関係を理解し、ファイル全体を読むことなくコードをリファクタリングできる、トークン効率の高いコンテキスト(Model Context Protocol 経由)が必要な人。
  • CI/CD パイプライン:自動コード分析のために構造化された JSON 出力が必要な人。

ハイライト

  • エンティティレベルの Diff:どの関数やクラスが変更、リネーム、移動されたかを正確に把握できます。
  • インパクト分析:特定のエンティティを変更した場合に壊れる可能性のあるファイル間依存関係グラフを提供します。
  • LLM コンテキスト最適化:エンティティとその依存関係のトークン予算に合わせたスニペットを提供する context コマンドがあります。
  • MCP サーバー:Model Context Protocol の組み込みサポートにより、AI エージェントが sem ツールをネイティブスキルとして利用できます。
  • 広範な言語サポート:TypeScript、Python、Rust、Go、Java など 32 言語のエンティティ抽出に対応しています。
  • Git 連携sem setup を通じてデフォルトの git diff 出力として設定可能です。

Sources