## 経緯
[[Ruff]]が話題に上がっていて良さそうなのでいじってみたくなった。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://github.githubassets.com/favicons/favicon.svg" />
<span class="link-card-v2-site-name">GitHub</span>
</div>
<div class="link-card-v2-title">
GitHub - astral-sh/ruff: An extremely fast Python linter and code formatter, written in Rust.
</div>
<div class="link-card-v2-content">
An extremely fast Python linter and code formatter, written in Rust. - astral-sh/ruff
</div>
<img class="link-card-v2-image" src="https://opengraph.githubassets.com/3caba2fccc86b30754d5e72c89bbf3055e1221db2b8ab24e678cc47d40823689/astral-sh/ruff" />
<a href="https://github.com/astral-sh/ruff"></a>
</div>
## 環境
- [[Windows 11]]
- [[Python 3.12]]
## インストール
仮想環境を作ってインストールする。
```console
python -m venv .venv
.venv/Scripts/activate
pip install ruff
```
## main.pyの作成
公式のサンプルコードで`main.py`を作成しておく。
```python
from typing import Iterable
import os
def sum_even_numbers(numbers: Iterable[int]) -> int:
"""Given an iterable of integers, return the sum of all even numbers in the iterable."""
return sum(
num for num in numbers
if num % 2 == 0
)
```
ここからはエディタごとに設定してみる。
## [[Neovim]]
公式を参考に。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://docs.astral.sh/static/favicon-32x32.png" />
<span class="link-card-v2-site-name">docs.astral.sh</span>
</div>
<div class="link-card-v2-title">
Integrations | Ruff
</div>
<div class="link-card-v2-content">
An extremely fast Python linter and code formatter, written in Rust.
</div>
<a href="https://docs.astral.sh/ruff/integrations/#vim-neovim"></a>
</div>
> Ruff is also available as part of the coc-pyright extension for coc.nvim.
とあるので[[coc.nvim]]でも[[coc-pyright]]が入っていれば使えそう。[[coc-settings.json]]を修正する。
```diff
- "python.formatting.provider": "black",
+ "python.formatting.provider": "ruff",
+ "python.linting.ruffEnabled": true,
```
> [!caution]
> [[coc-pyright]]で[[Ruff]]対応されたのは最近のため、最新にアップデートしておくこと。
ちゃんと動作していそうだったが、quickfixしようとするとエラーに。
```error
[coc.nvim] Error on applyEdits Error: Change of c:%5CUsers%5Csyoum%5Ctmp%5Cruff-sandbox%5Cmain.py not supported
```
これは[[coc-pyright]]側の問題かな? [[Ubuntu]]で試すとエラーにはならなかったものの、quick fixの修正結果にゴミが混じってエラーになっていた。ここはもう少し安定するまで時間が必要かも。
### [[🦉OwlMixin]]を使ってみる
せっかくなので[[🦉OwlMixin]]を使ってみる。
```console
pip install owlmixin
```
import補完には[[rope]]が必要だった...
```console
pip install rope
```
import補完は[[rope]]をインストールすれば動いた。他のquick fixはできないけど。
```python
from owlmixin import OwlMixin, TList
class Human(OwlMixin):
id: int
name: str
def main():
tatsuwo = Human.from_dict({"id": 15, "name": "タツヲ"})
mimizou = Human.from_dict({"id": 33, "name": "みみぞう"})
shiroo = Human.from_dict({"id": -1, "name": ""})
message = (
TList([tatsuwo, mimizou, shiroo])
.to_iterator()
.filter(lambda x: x.id > 0)
.map(lambda x: x.name)
.join("\n")
)
print(message)
if __name__ == "__main__":
main()
```
## [[VSCode]]
[[Ruff(VSCode)]]を使う。バージョンは0.1.0。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://marketplace.visualstudio.com/favicon.ico" />
<span class="link-card-v2-site-name">marketplace.visualstudio.com</span>
</div>
<div class="link-card-v2-title">
Ruff - Visual Studio Marketplace
</div>
<div class="link-card-v2-content">
Extension for Visual Studio Code - A Visual Studio Code extension with support for the Ruff linter and formatter ...
</div>
<img class="link-card-v2-image" src="https://charliermarsh.gallerycdn.vsassets.io/extensions/charliermarsh/ruff/2025.22.0/1742565386909/Microsoft.VisualStudio.Services.Icons.Default" />
<a href="https://marketplace.visualstudio.com/items?itemName=charliermarsh.ruff"></a>
</div>
[[settings.json]]を変更。`pytho.formatting.provider`は非推奨なのでこの機会に削除。
```diff
- "python.formatting.provider": "black",
"[python]": {
"editor.formatOnType": true,
+ "editor.defaultFormatter": "charliermarsh.ruff"
},
```
流石、[[Ruff]]公式の[[VSCode Extension]]なのでしっかり動く。
## [[IntelliJ IDEA]]
非公式の[[📒IntelliJプラグイン]]はあるらしい。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://docs.astral.sh/static/favicon-32x32.png" />
<span class="link-card-v2-site-name">docs.astral.sh</span>
</div>
<div class="link-card-v2-title">
Integrations | Ruff
</div>
<div class="link-card-v2-content">
An extremely fast Python linter and code formatter, written in Rust.
</div>
<a href="https://docs.astral.sh/ruff/integrations/#pycharm-unofficial"></a>
</div>
[[Ruff(IntelliJ)]]をインストールする。バージョンは0.0.24。[[IntelliJ IDEA]]のバージョンは2023.2。
まずは[[BlackConnect]]を無効化。競合するので。
[[Ruff(IntelliJ)]]の設定は赤枠部分をデフォルトから変更。
![[Pasted image 20231029141600.png]]
ただ、`Run ruff when the python file is saved`は保存時にフォーマットされなそう...
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://github.githubassets.com/favicons/favicon.svg" />
<span class="link-card-v2-site-name">GitHub</span>
</div>
<div class="link-card-v2-title">
Files are not formatted on save · Issue #297 · koxudaxi/ruff-pycharm-plugin
</div>
<div class="link-card-v2-content">
Describe the bug I've enabled Run ruff when the python file saved setting, however it does not format (as in ruf ...
</div>
<img class="link-card-v2-image" src="https://opengraph.githubassets.com/80c46174929b64d589ae632d6ae395ac2773cff1628903a5818c8578b64df8bc/koxudaxi/ruff-pycharm-plugin/issues/297" />
<a href="https://github.com/koxudaxi/ruff-pycharm-plugin/issues/297"></a>
</div>
また、`Use ruff-lsp (Experimental) for PyCharm Pro/IDEA Ultimate`はREADMEにも記載のとおり、quick fixまでは適応してくれない。不要importとか。
以上から、現時点での設定は以下が望ましい。
![[Pasted image 20231029143833.png]]
[[Actions on Save]]の設定で、ファイルを保存したときに自動フォーマットできるようにすればOK。
![[Pasted image 20231029144301.png]]