Skip to content

Setup#

選択したエディタに応じて、特定のセットアップ手順があります。このリストにエディタが表示されず、セットアップガイドが必要な場合は、問題を開いてください。

ruff-lspから設定を転送する場合は、エディタに関係なく、変更された設定や使用できなくなった設定がいくつかあります。詳細については、migration guideを参照してください。

Note

以下に示すセットアップ手順は、ベストエフォートベースで提供されています。エディタでRuffをセットアップ中に問題が発生した場合は、open an issueにこのドキュメントを改善するための支援と支援を求めてください。

Tip

エディタに関係なく、競合を防ぐために、古い言語サーバ(ruff-lsp)を無効にすることをお勧めします。

VS Code#

VS Code Marketplaceから Ruff 拡張をインストールします。Ruff 言語サーバーで最高のエクスペリエンスを得るには、Ruff 拡張バージョン2024.32.0以降を使用することをお勧めします。

Ruff 拡張機能に関する詳細なドキュメントについては、拡張機能リポジトリのREADMEを参照してください。

Neovim#

nvim-lspconfigプラグインを使用して、Neovim で Ruff Language Server を設定できます。セットアップするには、nvim-lspconfigプラグインをインストールし、configurationドキュメントに従ってセットアップし、次のものをinit.luaに追加します:

require('lspconfig').ruff.setup({
  init_options = {
    settings = {
      -- Ruff language server settings go here
    }
  }
})

Note

インストールされたnvim-lspconfigのバージョンにneovim/nvim-lspconfig@70d1c2cからの変更が含まれている場合は、Ruffバージョン0.5.3以降を使用する必要があります。

Ruff を別の言語サーバー(Pyright など)と一緒に使用している場合は、textDocument/hoverのような特定の機能については、その言語サーバーに任せることができます。:

vim.api.nvim_create_autocmd("LspAttach", {
  group = vim.api.nvim_create_augroup('lsp_attach_disable_ruff_hover', { clear = true }),
  callback = function(args)
    local client = vim.lsp.get_client_by_id(args.data.client_id)
    if client == nil then
      return
    end
    if client.name == 'ruff' then
      -- Disable hover in favor of Pyright
      client.server_capabilities.hoverProvider = false
    end
  end,
  desc = 'LSP: Disable hover capability from Ruff',
})

Ruff をリンティング、フォーマット、インポートの整理にのみ使用したい場合は、Pyright のこれらの機能を無効にすることができます。:

require('lspconfig').pyright.setup {
  settings = {
    pyright = {
      -- Using Ruff's import organizer
      disableOrganizeImports = true,
    },
    python = {
      analysis = {
        -- Ignore all files for analysis to exclusively use Ruff for linting
        ignore = { '*' },
      },
    },
  },
}

デフォルトでは、Ruff はログを表示しません。Neovim でログを有効にするには、trace設定をmessagesまたはverboseに設定し、logLevel設定を使用してログレベルを変更する必要があります。:

require('lspconfig').ruff.setup {
  trace = 'messages',
  init_options = {
    settings = {
      logLevel = 'debug',
    }
  }
}

デフォルトでは、これは Neovim の LSP クライアントログファイル(:lua vim.print(vim.lsp.get_log_path()))で使用可能な stderr にログを書き込みます。logFile設定を使用して、これらのログを別のファイルに転送することもできます。

Vim#

vim-lspプラグインを使用して、Vim で Ruff Language Server を設定できます。

設定するには、vim-lspプラグインをインストールし、.vimrcに次のコマンドを使用してサーバを登録します。:

if executable('ruff')
    au User lsp_setup call lsp#register_server({
        \ 'name': 'ruff',
        \ 'cmd': {server_info->['ruff', 'server']},
        \ 'allowlist': ['python'],
        \ 'workspace_config': {},
        \ })
endif

言語サーバの設定方法の詳細については、vim-lspドキュメントを参照してください。

Ruff を別の LSP(Pyright など)と併用している場合は、textDocument/hoverのような特定の機能については、関数のs:on_lsp_buffer_enabled()に次の内容を追加して、その LSP に従うことをお勧めします。:

function! s:on_lsp_buffer_enabled() abort
    " add your keybindings here (see https://github.com/prabirshrestha/vim-lsp?tab=readme-ov-file#registering-servers)

    let l:capabilities = lsp#get_server_capabilities('ruff')
    if !empty(l:capabilities)
      let l:capabilities.hoverProvider = v:false
    endif
endfunction

Ruff は、coc.nvimcoc-pyright拡張の一部としても利用できます。

VimまたはNeovim用のALEプラグインを使用します。
" Linter
let g:ale_linters = { "python": ["ruff"] }
" Formatter
let g:ale_fixers = { "python": ["ruff-format"] }
Ruffは、efm言語サーバを介してわずか数行で統合することもできます。
以下は、Python ファイルのリンティングとフォーマットに Ruff を使用するための efm の設定例です。:
tools:
  python-ruff:
    lint-command: "ruff check --stdin-filename ${INPUT} --output-format concise --quiet -"
    lint-stdin: true
    lint-formats:
      - "%f:%l:%c: %m"
    format-command: "ruff format --stdin-filename ${INPUT} --quiet -"
    format-stdin: true
Neovim用のconform.nvimプラグインを使用します。
require("conform").setup({
    formatters_by_ft = {
        python = {
          -- To fix auto-fixable lint errors.
          "ruff_fix",
          -- To run the Ruff formatter.
          "ruff_format",
          -- To organize the imports.
          "ruff_organize_imports",
        },
    },
})
Neovimのnvim-lintプラグインを使用します。
require("lint").linters_by_ft = {
  python = { "ruff" },
}

Helix#

Helix のlanguage configuration fileを開き、次のように言語サーバーを追加します。:

[language-server.ruff]
command = "ruff"
args = ["server"]

次に、言語サーバを Python で使用するサーバとして登録します。Python で使用する言語サーバがまだ登録されていない場合は、これをlanguages.tomlに追加します。:

[[language]]
name = "python"
language-servers = ["ruff"]

または、すでにlanguage-serversが定義されている場合は、リストに"ruff"を追加するだけです。たとえば、すでにpylspが言語サーバーとして定義されている場合は、言語エントリを次のように変更できます。:

[[language]]
name = "python"
language-servers = ["ruff", "pylsp"]

Note

1つの言語に対する複数言語サーバのサポートは、Helixバージョン23.10以降でのみ利用可能です。

例えば、自動フォーマットを有効にしたい場合は、auto-format = trueを追加します。:

[[language]]
name = "python"
language-servers = ["ruff", "pylsp"]
auto-format = true

ここで使用できるその他の設定については、Helix documentationを参照してください。

[language-server.ruff.config.settings]を使用してruff serverに設定を渡すことができます。例::

[language-server.ruff.config.settings]
lineLength = 80

[language-server.ruff.config.settings.lint]
select = ["E4", "E7"]
preview = false

[language-server.ruff.config.settings.format]
preview = true

デフォルトでは、Ruff は Helix に何もログしません。ログを有効にするには、RUFF_TRACE環境変数をmessagesまたはverboseに設定し、logLevel設定を使用してログレベルを変更します。:

[language-server.ruff]
command = "ruff"
args = ["server"]
environment = { "RUFF_TRACE" = "messages" }

[language-server.ruff.config.settings]
logLevel = "debug"

logFile設定を使用して、Ruff のログを別のファイルに転送することもできます。

Note

`RUFF_TRACE=verbose`を設定しても、それ自体ではHelixのverboseモードは有効になりません。verboseログを作成するには、`-v`を指定してHelixを実行する必要があります。

Kate#

  1. LSP Client pluginを有効にします。
  2. LSP Client をセットアップしますas desired
  3. 最後に、これをSettings->Configure Kate->LSP Client->User Server Settingsに追加します:
{
  "servers": {
    "python": {
      "command": ["ruff", "server"],
      "url": "https://github.com/astral-sh/ruff",
      "highlightingModeRegex": "^Python$",
      "settings": {}
    }
  }
}

そこからサーバを設定する方法の詳細については、LSP Client documentationを参照してください。

Important

KateのLSPクライアントプラグインは、同じ言語の複数のサーバをサポートしていません。

Sublime Text#

Sublime Text で Ruff を使用するには、Sublime Text のLSPおよびLSP-ruffパッケージをインストールします。

PyCharm#

Via External Tool#

Ruff は、PyCharm のExternal Toolとしてインストールできます。環境設定ペインを開き、"ツール"、"外部ツール"の順に移動します。そこから、次の設定で新しいツールを追加します。:

Install Ruff as an External Tool

Ruff は実行可能なアクションとして表示されます。:

Ruff as a runnable action

Via third-party plugin#

Ruff は、Ruffプラグインとしても入手できます。

IntelliJ Marketplace(@koxudaxi)。

Emacs#

Ruff は、Emacs のコアにあるEglotを介して言語サーバとして利用することができます。保存時の自動フォーマットで Ruff を有効にするには、次の設定を使用します。:

(add-hook 'python-mode-hook 'eglot-ensure)
(with-eval-after-load 'eglot
  (add-to-list 'eglot-server-programs
               '(python-mode . ("ruff" "server")))
  (add-hook 'after-save-hook 'eglot-format))

Ruff は、MELPA でflymake-ruffとして入手できます。:

(require 'flymake-ruff)
(add-hook 'python-mode-hook #'flymake-ruff-load)

Ruff は、emacs-ruff-formatとしても利用できます。:

(require 'ruff-format)
(add-hook 'python-mode-hook 'ruff-format-on-save-mode)

あるいは、次の設定を行うことで、Apheleiaフォーマッタライブラリを介して使用することもできます。:

;; Replace default (black) to use ruff for sorting import and formatting.
(setf (alist-get 'python-mode apheleia-mode-alist)
      '(ruff-isort ruff))
(setf (alist-get 'python-ts-mode apheleia-mode-alist)
      '(ruff-isort ruff))

TextMate#

Ruff は、TextMate のtextmate2-ruff-linterバンドルからも入手できます。

Zed#

Ruff は Zed エディタの拡張機能として利用できます。インストールするには:

  1. Cmd+Shift+Pでコマンドパレットを開きます。
  2. "zed:extensions"を検索します。
  3. extensions リストで"ruff"を検索し、"Install"をクリックします。

Python ファイルに Ruff 言語サーバを使用するように Zed を設定するには、次の行をsettings.jsonファイルに追加します。:

{
  "languages": {
    "Python": {
      "language_servers": ["ruff"]
      // Or, if there are other language servers you want to use with Python
      // "language_servers": ["pyright", "ruff"]
    }
  }
}

言語サーバを設定するには、lsp.ruff.initialization_options.settingsキーの下にserver settingsを指定します。:

{
  "lsp": {
    "ruff": {
      "initialization_options": {
        "settings": {
          // Ruff server settings goes here
          "lineLength": 80,
          "lint": {
            "extendSelect": ["I"]
          }
        }
      }
    }
  }
}

Note

特定の言語に対する複数のフォーマッタのサポートは、Zedバージョン0.146.0以降でのみ利用可能です。

Ruff フォーマッタを登録し、format_on_save設定を有効にすることで、保存時に Python コードをフォーマットするように Ruff を設定できます。:

    {
      "languages": {
        "Python": {
          "format_on_save": "on",
          "formatter": [
            {
              "language_server": {
                "name": "ruff"
              }
            }
          ]
        }
      }
    }
```

<!-- You can configure Ruff to fix lint violations and/or organize imports on-save by enabling the`source.fixAll.ruff` and `source.organizeImports.ruff` code actions respectively: -->

`source.fixAll.ruff`と`source.organizeImports.ruff`コードアクションをそれぞれ有効にすることで、リント違反を修正したり、保存時にインポートを整理したりするように Ruff を設定できます。:

=== "Zed 0.146.0+"

```json
{
  "languages": {
    "Python": {
      "format_on_save": "on",
      "formatter": [
        {
          "code_actions": {
            // Fix all auto-fixable lint violations
            "source.fixAll.ruff": true,
            // Organize imports
            "source.organizeImports.ruff": true
          }
        }
      ]
    }
  }
}

まとめると、次のsettings.jsonを使用して、保存時にインポートをフォーマット、修正、整理するように Ruff を設定できます。:

Note

この構成では、コード・アクションとフォーマッタ言語サーバー設定の正しい順序を使用することが重要です。コード・アクションは、フォーマッタの前に定義して、コード・アクションが適用された後に残りのスタイルの問題がフォーマッタによって確実に処理されるようにする必要があります。

{
  "languages": {
    "Python": {
      "format_on_save": "on",
      "formatter": [
        {
          "code_actions": {
            "source.organizeImports.ruff": true,
            "source.fixAll.ruff": true
          }
        },
        {
          "language_server": {
            "name": "ruff"
          }
        }
      ]
    }
  }
}