tags : Emacs, AI

Aidermacs: Emacsでの AI ペアプログラミング

Cursorを使いたいけどEmacsを使いたい?Aidermacs は、最も強力なオープンソースAIペアプログラミングツールの一つであるAiderを統合することで、CursorのようなAI駆動の開発環境をEmacsワークフローにもたらします。コミュニティ主導のプロジェクトとして、AidermacはEmacsユーザーのニーズと好みを優先しながら、Cursorと同様の強力な機能を提供します!

  • 組み込みの Ediff 統合でAI生成の変更をレビュー
  • SWE Benchで主要オープンソースプロジェクトの実際のGitHub問題を解決するトップパフォーマンス
  • 複雑なコードベースでの複数ファイル編集のサポート
  • 真のペアプログラミングのためのリアルタイムファイル同期
  • Python、JavaScript、TypeScript、PHP、HTML、CSSなど幅広い言語サポート
  • Claude、ChatGPT、DeepSeekなど主要AIモデルとの互換性

なぜAidermacs?

ビデオデモ

![](https://img.youtube.com/vi/fB3-ie6zs4Y/0.jpg” link=“https://www.youtube.com/watch?v=fB3-ie6zs4Y)

コミュニティ主導の開発

Aidermacはコミュニティの参加によって成長します。ユーザーと貢献者の意見を取り入れた共同開発が最高のソフトウェアを生み出すと私たちは信じています。以下の方法で参加することを奨励します:

  • コードの貢献:バグ修正、新機能、既存機能の改善などのプルリクエストを提出する。
  • 問題の報告:GitHub Issuesを通じてバグ、予期しない動作、機能リクエストを知らせる。
  • アイデアの共有:議論に参加し、Aidermacをさらに良くするための新しいアイデアを提案する。
  • ドキュメントの改善:ドキュメントをより明確で包括的、使いやすくするのを手伝う。

あなたの貢献は、AidermacをEmacsでの最高のAIペアプログラミングツールにするために不可欠です!

https://contrib.rocks/image?repo=MatthewZMD/aidermacs

  • コミュニティの声

    Aidermacについてコミュニティが語っていることの一部をご紹介します:

    「aidermacs使ってる?私にとってはcursorより優れてる」 - u/berenddeboer

    「これは素晴らしい…パッケージをアップグレードするたびに新しいコミットが見られる。これが本物のemacsのaiderだと感じる」 - u/wchmbo

    「AidermacとGptelの間で、Emacsがこの分野でいかに最先端かは驚くべきこと。職場ではMCPレジストリを探求していて、流行の最先端のクライアント(例:Cursor)でさえ、mcp.elとgptelでツール利用ができることに遅れをとっている」 - u/no_good_names_avail

    「これは素晴らしそう…ローカルllmでellamaを使っていたけど、ここでも動きそうだね。素晴らしい!!」 - u/lugpocalypse

    「正直これの大ファンです。アップデートありがとう!」 - u/ieoa

クイックスタート

  1. 要件
  2. melpaからAidermacをダウンロードするか、手動でクローンする
  3. この サンプル設定 を修正して、Emacsの init.el に配置してください:
(use-package aidermacs
  :bind (("C-c a" . aidermacs-transient-menu))
  :config
  ; .bashrcにAPI_KEYを設定すると、aiderが自動的に取得するか、elispで設定する
  (setenv "ANTHROPIC_API_KEY" "sk-...")
  ; セキュリティ上の理由から、my-get-openrouter-api-keyは別の場所で自分で定義してください
  (setenv "OPENROUTER_API_KEY" (my-get-openrouter-api-key))
  :custom
  ; 以下の設定セクションを参照
  (aidermacs-use-architect-mode t)
  (aidermacs-default-model "sonnet"))
  1. プロジェクトを開き、M-x aidermacs-transient-menuまたはC-c a(バインドした場所)を実行する
  2. ファイルを追加して、AIとのコーディングを開始しましょう!

設定

デフォルトモデルの選択

aidermacs-default-model変数を設定することで、Aidermacが使用するデフォルトのAIモデルをカスタマイズできます:

(setq aidermacs-default-model "sonnet")

これにより、aidermacs-extra-args変数を変更することなく、異なるAIモデル間で簡単に切り替えることができます。

注意:この設定は~.aider.conf.yml~ファイルが存在する場合に上書きされます(詳細を参照)。

動的モデル選択

Aidermacは、ソロ(非Architect)モードでインテリジェントなモデル選択を提供し、複数のAIプロバイダーを自動的に検出して統合します:

  • サポートされているプロバイダー(OpenAI、Anthropic、DeepSeek、Google Gemini、OpenRouter)から利用可能なモデルを自動的に取得
  • クイックアクセスのためのモデルリストのキャッシング
  • 人気の事前設定モデルと動的に発見されるモデルの両方をサポート
  • .bashrcからのAPIキーと認証の自動処理
  • モデル互換性チェックの提供

動的モデル選択は、ソロ(非Architect)モードでのみ使用できます。

ソロモードでモデルを変更するには:

  1. M-x aidermacs-change-modelを使用するか、一時メニューでoを押す
  2. 以下のいずれかから選択:
    • 人気の事前設定モデル(高速)
    • サポートされているすべてのプロバイダーから動的に取得されたモデル(包括的)

システムは自動的にモデルをフィルタリングして、次のものだけを表示します:

  • 現在のAiderバージョンでサポートされている
  • 設定されたAPIキーを通じて利用可能
  • 現在のワークフローと互換性がある

Architectモード - コード推論と編集モデルの分離

Aidermacは、各コーディングタスクに特化した2つのモデルを使用する実験的モードを備えています:推論のためのArchitectモデルとコード生成のためのEditorモデルです。このアプローチは、このブログ記事で詳述されているように、*aiderのコード編集ベンチマークで最先端(SOTA)の結果を達成* しています。

このモードを有効にするには、aidermacs-use-architect-modetに設定します。また、Architectの役割に使用するモデルを指定するためにaidermacs-architect-model変数を設定する必要があります。

デフォルトでは、aidermacs-editor-modelaidermacs-default-modelと同じです。Editorの役割に異なるモデルを使用したい場合にのみ、aidermacs-editor-modelを設定する必要があります。

Architectモードが有効な場合、aidermacs-default-model設定は無視され、代わりにaidermacs-architect-modelaidermacs-editor-modelが使用されます。

(setq aidermacs-use-architect-mode t)
(setq aidermacs-architect-model "o1-mini") ; デフォルト
(setq aidermacs-editor-model "deepseek/deepseek-chat") ;; デフォルトはaidermacs-default-model

注意:この設定は~.aider.conf.yml~ファイルが存在する場合に上書きされます(詳細を参照)。

ターミナルバックエンドの選択

aidermacs-backendを設定することで、希望するターミナルバックエンドを選択できます:

vtermはより良いターミナル互換性を提供し、comintはAidermacと完全に互換性のある単純な組み込みオプションを提供します。

;; vtermバックエンドを使用(デフォルトはcomint)
(setq aidermacs-backend 'vterm)

利用可能なバックエンド:

  • comint(デフォルト):Emacsの組み込みターミナルエミュレーションを使用
  • vterm:より良いターミナル互換性のためにvtermを活用

複数行入力の設定

複数行入力のキーバインドをカスタマイズできます。このキーを使用すると、コマンドをAiderに送信せずに複数の行を入力できます。通常のRETを押すとコマンドが送信されます。

;; Comintバックエンド:
(setq aidermacs-comint-multiline-newline-key "S-<return>")
;; Vtermバックエンド:
(setq aidermacs-vterm-multiline-newline-key "S-<return>")

Trampによるリモートファイルのサポート

AidermacはEmacsのTrampモードを通じてリモートファイルでの作業を完全にサポートしています。これにより、SSH、Dockerなど、Trampがサポートするプロトコルを介してリモートサーバーでホストされているファイルでAidermacを使用できます。

リモートファイルで作業する場合:

  • ファイルパスはリモートシステム用に自動的にローカライズされます
  • すべてのAidermacs機能はローカルファイルとリモートファイルの両方でシームレスに動作します
  • 編集はリモートファイルに直接適用されます
  • 差分と変更レビューは期待通りに機能します

使用例:

;; SSHを介してリモートファイルを開く
(find-file "/ssh:user@remotehost:/path/to/file.py")
 
;; Aidermacセッションを開始 - リモートコンテキストを自動的に検出します
M-x aidermacs-transient-menu

差分と変更レビュー

aidermacs-show-diff-after-changeでAI生成の変更の差分を表示するかどうかを制御します:

;; 変更後に差分を表示する/しない(デフォルト:t)
(setq aidermacs-show-diff-after-change t)

有効になっている場合、Aidermacは以下を行います:

  • AI編集前のファイルの状態をキャプチャ
  • Emacsの組み込みediffインターフェースを使用して差分を表示
  • 変更を確認して受け入れ/拒否することが可能

自動コミットの再有効化

Aiderはデフォルトで自動的にAI生成の変更をコミットします。私たちはこの動作を*非常に*侵入的だと考えているため、無効化しています。aidermacs-auto-commitstに設定することで、自動コミットを再有効化できます:

;; 自動コミットを有効化
(setq aidermacs-auto-commits t)

自動コミットが無効の場合、お好みのGitワークフローを使用して手動で変更をコミットする必要があります。

注意:この設定は~.aider.conf.yml~ファイルが存在する場合に上書きされます(詳細を参照)。

aidermacs-extra-argsでのAiderオプションのカスタマイズ

これらの設定が十分でない場合、aidermacs-extra-args変数を使用してAiderがサポートするコマンドラインオプションを渡すことができます。

利用可能なオプションの完全なリストについては、Aider設定ドキュメントを参照してください。

;; 詳細度を設定:
(setq aidermacs-extra-args '("--verbose"))

これらの引数は、Aiderコマンドが実行されるときに追加されます。—model引数はaidermacs-default-modelによって自動的に処理されるため、aidermacs-extra-argsに含めるべきではないことに注意してください。

設定ファイルでの設定の上書き

Aidermacは~.aider.conf.yml~ファイルを介したプロジェクト固有の設定をサポートしています。これを有効にするには:

  1. ホームディレクトリ、プロジェクトのルート、または現在のディレクトリに~.aider.conf.yml~を作成し、希望する設定を定義します。利用可能なオプションについては、Aiderドキュメントを参照してください。

  2. 次の2つの方法のいずれかで、Aidermacに設定ファイルを使用するよう指示します:

;; Emacs設定で`aidermacs-config-file`変数を設定:
(setq aidermacs-config-file "/path/to/your/project/.aider.conf.yml")
;; *または*、`aidermacs-extra-args`に`--config`または`-c`フラグを含める:
(setq aidermacs-extra-args '("--config" "/path/to/your/project/.aider.conf.yml"))

注意:また、ホームディレクトリ、プロジェクトルート、または現在のディレクトリでこの順序で自動的に~.aider.conf.ymlを検索するというAiderのデフォルトの動作に依存することもできます。この場合、aidermacs-config-fileを設定したり、aidermacs-extra-args—config~を含める必要はありません。

  • 重要: 設定ファイルを使用する場合、引数オプションを提供する他のすべてのAidermacs設定変数(例:aidermacs-default-modelaidermacs-architect-modelaidermacs-use-architect-mode)は 無視 されます。Aiderは~.aider.conf.yml~ファイルで指定された設定 のみ を使用します。これらのEmacs設定と設定ファイルを組み合わせないでください。結果は予測不可能になります。
  • 優先順位: 設定ファイルが明示的に指定されている場合、.aider.conf.ymlの設定が 常に 優先されます。
  • 競合を避ける: 設定ファイルを使用する場合、aidermacs-extra-argsにモデル関連の引数(—model—architectなど)を含めないでください。 すべての 設定を~.aider.conf.yml~ファイル内で構成してください。

Claude 3.7 Sonnet 思考トークン

AiderはSonnet 3.7の新しい思考トークンと連携できますが、デフォルトではSonnetに思考トークンを使用するよう要求しません。

思考の有効化には現在、手動設定が必要です。ホームディレクトリ、プロジェクトのルート、または現在のディレクトリに~.aider.model.settings.yml~を作成し、以下をファイルに追加します。budget_tokensの値を調整して、目標とする思考トークン数を変更します。

- name: anthropic/claude-3-7-sonnet-20250219
  edit_format: diff
  weak_model_name: anthropic/claude-3-5-haiku-20241022
  use_repo_map: true
  examples_as_sys_msg: true
  use_temperature: false
  extra_params:
    extra_headers:
      anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19
    max_tokens: 64000
    thinking:
      type: enabled
      budget_tokens: 32000 # この数値を調整
  cache_control: true
  editor_model_name: anthropic/claude-3-7-sonnet-20250219
  editor_edit_format: editor-diff

より簡素化されたサポートが近日中に提供される予定です。

使用方法

はじめに

Aidermacの主要なインターフェースは、一時メニューシステム(Magitに似ています)を通じて行います。以下でアクセスできます:

M-x aidermacs-transient-menu

または設定でキーにバインドします:

(global-set-key (kbd "C-c a") 'aidermacs-transient-menu)

一時メニューが開いたら、表示されたキーを使用してコマンドをナビゲートおよび実行できます。以下はメインメニュー構造の概要です:

  • コア

    • a:セッション開始/オープン(プロジェクトルートを自動検出)
    • .:現在のディレクトリで開始(モノレポに適しています)
    • l:チャット履歴をクリア
    • s:セッションをリセット
    • x:セッション終了
  • 永続モード

    • 1:コードモード
    • 2:チャット/質問モード
    • 3:Architectモード
    • 4:ヘルプモード
  • ユーティリティ

    • ^:最後のコミットを表示(自動コミットが有効な場合)
    • u:最後のコミットを元に戻す(自動コミットが有効な場合)
    • R:リポジトリマップを更新
    • h:セッション履歴
    • o:メインモデルを変更
    • ?:Aiderメタレベルヘルプ
  • ファイルアクション

    • f:ファイルを追加(C-u:読み取り専用)
    • F:現在のファイルを追加
    • d:ディレクトリから追加(同じタイプ)
    • w:ウィンドウから追加
    • m:Diredからマークされたものを追加
    • j:ファイルを削除
    • J:現在のファイルを削除
    • k:Diredからマークされたものを削除
    • K:すべてのファイルを削除
    • S:セッションスクラッチパッドを作成
    • G:ファイルをセッションに追加
    • A:追加されたファイルを一覧表示
  • コードアクション

    • c:コード変更
    • e:コードに質問
    • r:Architect変更
    • q:一般的な質問
    • p:このシンボルについて質問
    • g:提案された変更を受け入れる
    • i:TODOを実装
    • t:テストを書く
    • T:テストを修正
    • !:例外をデバッグ

    「すべてのファイルアクション」と「すべてのコードアクション」のエントリは、より専門的なコマンドを含むサブメニューを開きます。表示されたキーを使用してこれらのサブメニューをナビゲートします。

プロンプトファイル用マイナーモード

Aidermacは、プロンプトファイルや他のAider関連ファイルを扱いやすくするマイナーモードを提供しています。このマイナーモードは、設定で~(aidermacs-setup-minor-mode)~を呼び出すことで、特定のファイルに対して自動的に有効にできます:

(aidermacs-setup-minor-mode)

有効にすると、マイナーモードは以下の便利なキーバインドを提供します:

  • C-c C-nまたはC-<return>:行/リージョンを1行ずつ送信
  • C-c C-c:ブロック/リージョンを全体として送信
  • C-c C-z:Aidermacバッファに切り替え

マイナーモードは以下に対して自動的に有効になります:

  • .aider.prompt.orgファイル(M-x aidermacs-open-prompt-fileで作成)
  • .aider.chat.mdファイル
  • .aider.chat.history.mdファイル
  • .aider.input.historyファイル
  • プロンプトファイルの操作

    .aider.prompt.orgファイルは特に以下に役立ちます:

    • よく使用するプロンプトの保存
    • 一般的なワークフローの文書化
    • 複雑な指示への迅速なアクセス

    aidermacs-auto-mode-filesを設定することで、マイナーモードを自動的に有効にするファイルをカスタマイズできます:

    (setq aidermacs-auto-mode-files
          '(".aider.prompt.org"
            ".aider.chat.md"
            ".aider.chat.history.md"
            ".aider.input.history"
            "my-custom-aider-file.org"))  ; 独自のファイルを追加

Aidermacs vs aider.el

Aidermacは、Aiderと統合しながらも、よりEmacsネイティブな体験を提供するように設計されています。これはaider.elのフォークとして始まりましたが、その後、Emacsワークフロー統合を優先するために大幅に分岐しました。

aider.elがAiderのCLIの動作を厳密に反映する一方、AidermacsはEmacs固有の機能やパラダイムを中心に構築されています。この設計哲学により、自然でEmacsネイティブなコーディング体験を通じてAiderの強力な機能を活用できます。

Aidermacsでは、以下を取得できます:

  1. AI生成の変更のための組み込みEdiff統合

    • シームレスなコードレビュー:Emacsの強力なediffインターフェースを使用して、AIによって変更されたすべてのファイルの差分を自動的に表示
    • 馴染みのあるインターフェース:変更のレビューにEmacsネイティブのediffワークフローを使用
    • インタラクティブなワークフロー:標準のediffコマンドで変更を受け入れまたは拒否
    • 構文ハイライト:比較中に適切な構文ハイライトを維持
    • 安全な変更管理:比較や元に戻すために元のファイル状態を保存
  2. インテリジェントなモデル選択

    • 複数のプロバイダーから利用可能なモデルの自動検出
    • リアルタイムのモデル互換性チェック
    • 設定されたAPIキーとのシームレスな統合
    • 頻繁に使用されるモデルへの迅速なアクセスのためのキャッシング
    • 人気の事前設定モデルと動的に検出されたモデルの両方のサポート
  3. 柔軟なターミナルバックエンドサポート

    • Aidermacsは複数のターミナルバックエンド(comintおよびvterm)をサポートしており、互換