Jules を使って PHP のレガシーコードをコーディング規約準拠に修正してみた

![ChatGPT Image 2025年6月1日 01_07_58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357904/1057d58b-e7fd-45ad-8c47-3b84dfbc43ef.png)

# Google の AI コーディングエージェント「Jules」にレガシー PHP を託してみた

[この記事](https://qiita.com/Nozomuts/items/20ec1438cf478932201b)を見て、Google が提供しているコーディングエージェント「Jules」が気になりすぎて、いてもたってもいられず触ってみました。

対象は、手強いことでおなじみのレガシー PHP コード。果たして Jules は救世主となるのか、それとも…？

---

## 🛠️ 前提

- 約 2000 行の **FuelPHP 製レガシー PHP コード**
- `php-cs-fixer` では **Error 3件 / Warning 39件**（主に行長超過）
- 現在は `// @codingStandardsIgnoreFile` で linter を回避中
- 独自カスタマイズを加えた PSR-12 をコーディング規約に採用

---

## 🧾 まずは軽く依頼

```text
日本語で解答をお願いします
<filename> を PSR-12 に従う形で、phpcs が error / warning とならないように修正を行いたいです
````

すると Jules が即座に修正案を提示。ボタン一つで `Approve`！

![Approveの様子](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357904/3bda38db-612e-4d59-9ca5-7b6717617553.png)

---

## 🧠 忘れてた「除外外し」問題

そういえば… `// @codingStandardsIgnoreFile` を外すの忘れてた！

というわけで、急遽追加指示。

```text
現在のプログラムではファイルの先頭に // @codingStandardsIgnoreFile が記載されております
それを削除した状態で phpcs を実行してください。
```

再修正が始まる Jules。

![修正の様子1](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357904/b1c48ff2-94f4-41b5-8240-71db2d2941c5.png)
![修正の様子2](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357904/b5a01304-c229-4604-987f-70142f39ee87.png)
![修正の様子3](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357904/1c1946b4-e01b-45e7-b8ba-a8ad220a6af1.png)

**最終結果**：

```text
再度 phpcs を実行し、エラーが0件、警告が30件（すべて行長超過）であることを確認しました。構造的なPSR-12違反は解消されています。
```

![修正後](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357904/61091995-6188-4bef-b6b0-63330b721572.png)

---

## 🧨 問題発覚：Class 名が勝手に変わってる！

* クラス名が Jules により改名されていた → **FuelPHP では命取り**
* 警告（行長超過）は依然として 30 件

---

## 📌 追加で依頼してみた

```text
このファイルはフレームワークの命名規則に則っているため、名前空間をつけてはなりません またクラス名も変更してはなりません

行長超過は、文字列を不自然にならないところで分割して、連結する形で対応してください
```

![再修正の様子](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357904/18a6be8c-d80b-429b-881f-033ace9a7df9.png)

### → 結果：Error 2件 / Warning 30件（変わらず）

![再実行後](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357904/11dffa82-074e-4290-bd6b-6e708235a3be.png)

---

## 📂 phpcs.xml の指定も忘れていた

さらにこんな指示を追加：

```text
<path/to/phpcs.xml> を用いると、2件のエラーは消えます

そのうえで、行長超過の警告30件は可読性を損なわない形で分割して改行してください。
```

```php
// 文字列の場合
$a = '<longtext>'
    . '<longtext>'
    . '<longtext>';

// 引数が長い場合
function longMethodName(
    Something $arg1,
    Something $arg2,
    Something $arg3,
    Something $arg4,
): ReturnType {
    // something
}
```

![指示の様子](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357904/7921a7b1-4f5b-4bd2-9419-bc54c1a77bac.png)

---

## 🤔 それでも修正されなかった点

* メソッド名と引数が長い → **改行されない**
* 関数呼び出しの引数 → **改行されない**
* 文字列連結の途中 → **改行されない**
* `if` や `for` の条件 → **改行されない**
* 行末のコメント → **別行に移されない**

---

## 💬 結論：頼れる相棒には、まだ早い

* **実行時間が長い**
* **意図を伝える指示がとにかく細かい**
* 特に **「行の分割」「改行」** がとにかく苦手
* ぶっちゃけ全部自分でやった方が早いまである

---

## 📝 備考：Jules、日本語ちょっと苦手です

* 日本語 IME を使って変換 → **Enter でそのまま送信されてしまう**
* **改行も効かない**
* ※ 決して内間違えたわけじゃないんです！

![日本語入力の罠](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357904/d161940e-b08b-4d10-b7eb-04797e079fff.png)

---

## 🎉 おわりに

AI によるコーディング補助、夢がありますね。が、現実はまだ手取り足取りが必要な段階。

Jules は「型」や「構文チェック」には強くても、「感覚的な可読性」や「現場の文脈理解」はまだまだ。

それでも、今後に期待したくなるポテンシャルは感じました。

次はもっと素直なコードで再挑戦してみようかな！