Show HN:Treepeat ~Tree-sitter を使用したコードの類似性検出~

2026/09/23 1:53

Show HN:Treepeat ~Tree-sitter を使用したコードの類似性検出~

RSS: https://news.ycombinator.com/rss

要約▶

日本語訳:

Treepeat は、抽象構文木(AST)を Tree-sitter を介して解析し、局所的感受性ハッシュング(locality-sensitive hashing)を用いてコードの類似性を検出するための概念検証ツールです。JavaScript、Python、Go、Rust、TypeScript、Java などをサポートする十余数カ種以上の言語に対応しています。ユーザーは、

none
(行レベル)、
default
(空白・文字列を無視)、
loose
(匿名化された識別子を持つ構造的に類似したもの)の 3 つの正規化モードを通じて検出感度を制御できます。主要なコマンドラインフラグには、
--similarity
(1-100% の閾値)、
--min-lines
、サイドバイサイドビュー向けの
--diff
、CI パイプラインに適したコンソールまたは SARIF 出力向けの
--format
があり、追加オプションとしてメトリクスと進捗バーを表示する
--verbose
および
--progress
が用意されています。
list-ruleset
および
treesitter
などのサブコマンドはデバッグと設定に役立ちます。コミュニティからの寄与を歓迎する開発段階のツールである Treepeat は、チームがコピー&ペーストのエラーを早期に特定しソフトウェア品質を向上させるのに貢献します。アーキテクチャ決定記録(ADR)を含むドキュメントは
docs/adr
にあります。

本文

Treepeat: コードベース内の類似箇所を検出するツール

Treepeat は、コードベース内で類似または重複しているコードブロックを検出するためのツールです。本ツールは概念検証のプロトタイプであり、開発者による PR の募集中です。

対応する言語

以下の言語に対応しています:

  • Astro, Bash, CSS, Go, HTML
  • JavaScript, Lua, Markdown
  • Python, SQL
  • TypeScript, Java, Kotlin
  • Rust, YAML

主な機能

ツールは**ルールセット(正規化の厳密さ)**によって検出方法を変えられます。

  • 言語固有の文脈に意義のある重複コードブロックを検出します(クラスや関数など)
    • 設定例:
      --ruleset none
  • 似ているが完全に一致しないコードを特定します
    • 空白、文字列、関数名などの高レベルな AST ノードを無視して比較します。
    • 設定例:
      --ruleset default
      (デフォルト)
  • 構造が類似したコードを発見します
    • 識別子や定数などの匿名化処理が含まれます。
    • 設定例:
      --ruleset loose

インストールと使用方法

注: 具体的なインストール手順については、公式ドキュメントやリポジトリを参照してください。

検出の実行原理

Tree-sitter を活用した抽象構文木(AST)解析と、**局所感度ハッシュ化(Locality-sensitive hashing)**を用いて、コードベース全体を走査します。

メインなフラグ

以下は

treepeat detect
コマンドで使用できる主要なオプションです。

  • --ruleset
    : 使用する正規化ルールセットを指定します。
    • 選択肢:
      none
      ,
      default
      ,
      loose
    • 目的:コードを比較する前にどの程度の正規化を行うかを制御します。
  • --similarity
    : 類似度閾値を指定します(1〜100 の範囲)。
    • デフォルトは
      100
      です(完全な重複を検出)。
  • --min-lines
    : マッチと判定するための最小行数を指定します。
    • デフォルトは
      5 行
      です。
  • --diff
    : 類似しているブロックの左右対比表示(Diff)を表示します。
  • --format
    : 出力形式を指定します。
    • デフォルト:コンソール出力
    • CI ツール向け:SARIF 形式
  • --verbose
    : 追加の実行メトリクスを表示します(ステージごとの所要時間など)。
  • --progress
    : 長期間実行されるパイプラインのステージごとに進行状況をバーグラフで表示します。
    • 実装詳細: 進捗バー(tqdm)は標準エラー出力(stderr)に書き込まれ、通常のコマンド出力(stdout)や
      -o
      で指定されたファイルには影響しません。

コマンド例

1. 完全な重複を検出する場合

treepeat detect /path/to/codebase

2. 類似度 80% を閾値として、似ている箇所を検出する場合

treepeat detect --similarity 80 /path/to/codebase

3. 緩やかなルールセット(loose)を使用し、差分を表示して最小行数を 10 に設定する場合

treepeat --ruleset loose detect --diff --min-lines 10 /path/to/codebase

4. 解析の進行状況と各ステージごとの所要時間を詳細に表示する場合

treepeat detect --progress --verbose /path/to/codebase

5. CI ツール向けに SARIF 形式で結果を出力する場合

treepeat detect --format sarif -o results.sarif /path/to/codebase

その他のサブコマンド

  • list-ruleset
    : すべてのルールセットとその記述を一覧表示します。
    • --language
      フラグを使用すると、特定の言語に適用されるルールのみを表示できます。
  • treesitter
    : Treepeat がソースコードをどのように正規化して Tree-sitter トークンに変換し、類似性を検出しているかを表示します。
    • 元となるソースコードと、正規化されたトークンの表現を左右対比で表示します。
    • 用途:特定のセクションが似ている理由を理解・デバッグする際に役立ちます。

開発環境の設定

  • パフォーマンスベンチマーク: 本番リポジトリ内の
    tools/perf/harness.py
    (ドキュメントあり)を使用します。

アーキテクチャに関する判断記録 (ADRs)

アーキテクチャに関する決定の記録は、

docs/adr
ディレクトリに格納されています。

同じ日のほかのニュース

一覧に戻る →

2026/09/25 0:26

F-Droid 2.0

## Japanese Translation: F-Droid 2.0 は、10 年ぶりの最大のマイルストーンであり、Android との統合をより向上させるために Kotlin Compose を用いて完全に再構築されたコアを備えています。このアップデートは、ナビゲーションを「Discover」「Search」「My Apps」の 3 つの中核領域に簡素化し、「Discover」機能として更新およびダウンロードを強調する新機能を追加するとともに、カテゴリーと高度なフィルタリングも拡大しています。セキュリティと安定性は、Open Technology Fund からのもう一つの独立した審査、背景で Android アップデートを可能にする新しい事前承認 API、そして各種のプライバシー団体によってサポートされた 14 のリリースにわたる厳格なテストによって強化されています。しかし、ユーザーはいくつかの変更点に適応する必要があります:Android 6 へのサポートはシステム全体の修正のために終了され、旧バージョンを使用し続ける必要があります。プライバシーツールは簡素化され、アプリを隠すマスク機能はもはや機能の隠蔽ではなくアプリのリネームのみを実行し、Tor の自動検出は一般のプロキシ設定に移動しました、そして議論の対象となった「アプリの消去」緊急機能が削除されました。F-Droid が順次展開される中で、それは現代のデバイスにより安全で簡素化された体験を提供しながら、1 年以上の開発を通じて安全性の基準を維持しています。

2026/09/24 7:53

HN: タイムスニューバスタードのような呪われたフォントを作成する

## Japanese Translation: Bastardica は、既存の OpenType ファイルをブラウザ内で直接デジタル混合することにより、ユーザーが瞬時にカスタム Web フォントを作成できる画期的なローカルツールです。Times New Bastard といった以前のソリューションとは異なり、Pyodide および fontTools を使用して完全にオフラインで動作し、フォントが外部サーバーにアップロードまたは保存されることはありません。このプライバシー重視のアプローチは、ブラウザの組み込み機能を活用してリアルタイムのフォント合成を実現し、単純なフォントにおける視覚的な豊かさ向上およびグリフの配置改善のためにスケール調整や垂直オフセットなどの調整を適用します。このプロセスは、Times New Bastard や Easy Pete といった以前の実験的クリエイティブ作品に触発されています。ツールは OpenType テキスト整形が可能であるあらゆる環境(ブラウザ、デザインツール、印刷など)をサポートしますが、フォントの組み合わせには注意が必要です。3 つ以上のスタイルを混合すると、最初に選択されたフォントが交差点における形状を決定するようになり、グリフの衝突が発生する可能性があります(例:5 番目と 7 番目が 35 番目の交差点で衝突)。この問題を回避するために、開発者にはフォントのストライドとして素数を使用することが推奨され、これにより視覚的なコンフリクトを大幅に軽減できます。Bastardica は追加のライセンス条件を課さず、出典への言及は歓迎されますが必須ではありませんが、2 つのフォントを混合することは派生作品の作成となり、ユーザーには 2 つの元フォントの商用ライセンスを各自で検証する必要があります。無料フォントのおすすめソースには Google Fonts、UNCUT、Velvetyne、Font Squirrel、FontSpace、DaFont が含まれます。サポートに関する問い合わせについては [email protected] に連絡してください。最終的には、Bastardica はデザイナーに独自のタイポグラフィを瞬時に生成することを可能にしつつ、クリエイティブアセットと知的財産権について完全な制御を保証します。

2026/09/25 6:33

Show HN: Koi.rest – 錦鯉を見て心を落ち着けましょう

## Japanese Translation: ## 要約: 発達性脳機能障害(ADHD)を抱える失職した開発者のポールは、8 月に始まったストレスの多い時期に平和を見出すために、人工知能(AI)を用いて生きた仮想のコイの池を作成しました。複雑な JavaScript コーディングを一から習得して待つ代わりに、「完璧さは善敵なり」という哲学を掲げ、AI を活用することで技能ギャップを迅速につなぎ、物理的に構築することができないその時における「枯山水」のデジタル版を実現しました。このプロジェクトは、彼の失業闘争にとって重要な対処法であり、静けさへの単純な願望を誰もがアクセスできるオンライン体験へと変容させました。生成されたウェブサイトはすでに公開されており、不特定の人々がインターネット上で共同でコイが静かに泳ぐ様子を眺める共有空間を提供しています。結局のところ、このイニシアチブは、限られた技術能力や大きな個人的な困難を抱える個人でも、従来の大規模な訓練や完璧な条件を必要とせず、すぐに創造的な情熱を実体化し、デジタル上の絆を育むことができることを示しています。現在なお求職活動中のポールは、関心のある方々の連絡を歓迎しています。