Cline を OpenAI APIで利用したら完璧なコードができる!!??

# ClineでOpenAI APIを利用した感想についてまとめました！

Clineを利用してGPTモデルを用いたコードを書いてみた際の感想をまとめます。本記事では、GPTをモデルとして活用した際の所感を中心に記述しています。（2025年1月13日時点の記事です。今後進化すると思います。）内容にはネガティブな部分も含まれますが、**私の環境における結果**である点にご注意ください。また、今後の進化に期待しています。

Clineについての基本的な説明も記載していますので、既にご存知の方は[2. 利用した環境](#2-利用した環境)まで読み飛ばしていただいて構いません。

## 1. Clineについて

Clineは、AIを活用して開発者の生産性を向上させる次世代型の開発支援ツールです。主にVisual Studio Code（VSCode）などの統合開発環境（IDE）で利用でき、AIによる高度なコーディング支援を提供します。
注目を集めているため、フォーク版であるCool-ClineやRoo-Clineといった派生ツールも登場しており、情報がやや混乱している面もあります。

また、Terminal上でのコマンド実行も可能なため、`npm run dev`などのスクリプトを直接実行することもできるようです。

### 1.1. 主な特徴

- **複数AIモデルに対応**:
  - OpenAI（GPTシリーズ）、Anthropic（Claude）、Google Geminiなど複数のAIモデルを選択可能。プロジェクトの要件に応じて最適なモデルを利用できます。
- **課金制度**:
  - 各モデルのAPI仕様に基づく従量課金制。
- **幅広い機能**:
  - コード生成、エラー修正、リファクタリング、Git操作、自動タスク実行など、多岐にわたる開発支援機能を搭載。
- **カスタマイズ性**:
  - Model Context Protocol（MCP）を活用し、自動化ツールやカスタムワークフローを柔軟に構築可能。
- **シンプルな使用感**:
  - VSCodeにインストールするだけで利用開始可能。設定箇所が少なく、直感的な操作が可能です。

### 1.2. メリット

- **柔軟な統合**: 既存の開発環境にスムーズに組み込めるため、導入が容易。
- **効率的な開発支援**: 大規模プロジェクトでも長文の文脈を保持しつつ的確なサポートを提供。

## 2. 利用した環境

- **OS**: Windows（WSL2）
- **IDE**: VSCode
  - WSLへのリモート接続で利用
- **Cline**: 標準版
  - モデル: OpenAI (gpt-4o)

記事執筆に際して、[minorun365さん](https://qiita.com/minorun365) の[記事](https://qiita.com/minorun365/items/b2990a7228e8cc4ed025)を参考にしました。特に設定の手順や使用感について、大いに助けられました。

## 3. 感想

結論として、「**期待したほど実用的ではない**」という印象を受けました。ただし、これはあくまで私の環境と設定に基づく感想です。

モデルの選択や使用状況に大きく依存するため、適切なモデルを選ぶことが重要だと感じました。

## 4. 利用した結果、わかったこと

### 4.1. 👎 gpt-4oモデルはコストが高い

以下の理由から、gpt-4oは不適切と感じました。

1. **コストが高すぎる**
   - 2～4回のチャットで約$1.3を消費。これはGitHub Copilot（月額$10）と比較すると高コストです。
   - 利用時間は15～30分程度ですが、この間にトークン数制限にも頻繁に引っかかりました。
2. **トークン制限による処理中断**
   - OpenAI APIの仕様により、処理途中で中断されることがありました。

### 4.2. 👎 簡単なコードでも誤りが発生

特にFastAPI（Python 3.10環境）を使用した際、以下のようなミスが目立ちました。

- **import文の誤り**: 文法エラーが発生。
- **SQLModelの記述ミス**: 不適切な型ヒントの指定。

#### importの誤り

非常に簡単な内容です。

1. はじめのコード
提供した正常なコードです。

    ```python
    from app.models import (
        Item,
        Message,
        UpdatePassword,
        User,
        UserCreate,
        UserPublic,
        UserRegister,
        UsersPublic,
        UserUpdate,
        UserUpdateMe,
    )
    ```

2. Clineが記述したコード
Roleクラスをmodelsで作成したのでimportした際に記述を誤る。
複数importするための "("がなくなっています。Roleは追加されていますが...
なかなか間違いにくい内容だと思います。

    ```python
    from app.models import Role
        Item,
        Message,
        UpdatePassword,
        User,
        UserCreate,
        UserPublic,
        UserRegister,
        UsersPublic,
        UserUpdate,
        UserUpdateMe,
    )

    ```

#### SQLModelの誤り例

以下の不適切なコードが生成されました。

1. 出力された結果です。

    ```python
    class UserBase(SQLModel):
        email: EmailStr = Field(unique=True, index=True, max_length=255)
        is_active: bool = True
        roles: List[Role] = Relationship(back_populates="users", link_model=user_roles) # 本来はこれと同じ定義になるはず。
        full_name: str | None = Field(default=None, max_length=255)


    class UserCreate(UserBase):
        password: str = Field(min_length=8, max_length=40)
        roles: List[uuid.UUID] = [] # NOTE:ここが誤り

    ```

2. 正しくはこちら。
Baseで正しく定義しているので間違えないような気がしますが、子クラスで誤っています。

    ```python
    class UserBase(SQLModel):
        email: EmailStr = Field(unique=True, index=True, max_length=255)
        is_active: bool = True
        roles: list[Role] = Relationship(back_populates="users", link_model=user_roles)
        full_name: str | None = Field(default=None, max_length=255)


    class UserCreate(UserBase):
        password: str = Field(min_length=8, max_length=40)
        roles: list[Role] = [] # NOTE:ここが誤り

    ```

また、上記のコードもそうですが、実は元のコードをわざわざ`list`から`List`に書き換えてくれています。`list`のまま残っている箇所もあるので、少々不可解な挙動ではあります。
別箇所でも誤っていますが、python3.10の場合は、`List`ではなく `list`を利用します。元のコードはすべて `list`を利用しています。

### 4.3. 👍️利用準備は非常に楽

   1. 拡張機能のインストールとOpenAIのAPIのSecretKeyを準備するだけ。

ただ、それが利点とするならばGithub Copilotのほうが利用しやすいと感じました。Copilotも同じように設定は簡単ですからね。

## 5. 対策として

ここまでの経験を元にGPTを利用するならこれは必要だと思った対策です。

1. gpt-4-miniモデルを利用: コストが抑えられ、実用性が高い。
2. カスタムインストラクションの設定: プロジェクトの前提条件（例: Pythonバージョンなど）を明示的に指定する。
   1. これにより前提条件の指定ができますので、統一したコードを記述できると思います。（実際にはtypingの修正はできませんでしたが...）

### 5.1. 根本的な対策

根本的には、以下のような対策が必要だと思います。当面は私がGPTとClineの構成で利用することはないでしょう。

1. GPTモデルを利用しない。
2. Cursorを利用する
3. GitHub Copilotを利用する
4. GPTに直接コードを生成してもらう

現状聞いている限り、OpenRouterのclaude-3.5とかがいいんでしょうか？オール・インワンという意味では、Cursorを利用するのがいいような気がしますね。
「あなた使い方わかってないよ！」という意見があればぜひコメント下さい。もっと使いこなしたいです。

## 6. まとめ

GPT-4oの利用は現状ではコストパフォーマンスに課題があります。特にコード生成には他のツール（例: GitHub Copilot）の方が適していると感じました。なお、利用するモデルや設定次第で結果は大きく変わるため、引き続き検証を進めていく予定です。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ClineのGPT-4miniでコードを生成。X用に動画は端折っています。<br>結果は不適切なコードを書いています。GPT4oを利用しても間違える箇所なので、指摘しないと間違えたままゴリゴリコードを書いていきます。他のモデルであればいい感じに記述してくれる可能性はあります。 <a href="https://twitter.com/hashtag/Cline?src=hash&amp;ref_src=twsrc%5Etfw">#Cline</a> <a href="https://t.co/6eOwLOesD6">pic.twitter.com/6eOwLOesD6</a></p>&mdash; がっちりしたDev (@dev_chickenx) <a href="https://twitter.com/dev_chickenx/status/1878749982783889660?ref_src=twsrc%5Etfw">January 13, 2025</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

また、生成AIの経験則についての話は、別記事（[生成AIでコーディングをしてきた感想](https://qiita.com/dev_chickenx/items/8d241b5b9f4281e2d95a)）にざっくりまとめていますので良かったら、読んでいただけると嬉しいです。