AIエディタ Windsurf の活用

【概要】WindsurfはVS Codeベースの無料でも利用できるAIエディタである。DeepSeek-V3-0324は無料で利用できる。Ctrl+LでCascade機能を起動し、日本語でさまざまな依頼が可能である。API Key不要でアカウント登録のみで使用できる。

【目次】

  1. メリットと機能
  2. 基本機能とショートカットキー
  3. 無料プランの機能
  4. API Key 要件
  5. Cursor と Windsurf の比較
  6. 事前準備
  7. Windsurf の起動と初回設定
  8. Windsurf の推奨モデル
  9. DeepSeek-V3-0324 モデルの選択手順
  10. Windsurf をエディタとして活用する
  11. Windsurf の AI 機能の活用
  12. Windsurf の重要機能一覧

【資料】旧版のWord windsurf.docx、PDF windsurf.pdf(このページの記事が最新版である)

【サイト内のPython関連主要ページ】

【外部リソース】

1. メリットと機能

WindsurfはVS Codeをベースとした統合開発環境(IDE: Integrated Development Environment)であり、AI機能を標準搭載している。無料プランが提供されており、学生や個人開発者にとって利用しやすい。VS Codeと操作方法が類似しているため、既存のVS Code利用者は移行が容易である。また、VS Codeの多くの拡張機能をそのまま利用できる。

Windsurf Tabと呼ばれるコード補完機能は、Tabキーを活用した効率的なコーディングを実現する。Cascade機能はコード生成や実行を支援するAI機能であり、開発作業を効率化する。

データ処理時の注意事項として、個人情報を含む画像やデータを使用する場合は、適切な匿名化処理を行い、データ保護法に従って取り扱う必要がある。

2. 基本機能とショートカットキー

Cascade 機能

Cascadeはコード生成や実行を支援するAI機能である。Ctrl + LキーでCascadeパネルを開くことができる。日本語でのリクエストに対応しており、例えば「Pythonで折れ線グラフのサンプルコードを作成して」のように自然言語で指示できる。

主要ショートカットキー

Windsurfの主要なショートカットキーは以下のとおりである。

3. 無料プランの機能

Windsurfの無料プランでは、月25クレジットのプロンプトクレジットが提供される。クレジットとは、AIモデルへの問い合わせに消費されるポイントであり、モデルによって消費量が異なる。月25クレジットはGPT-4.1プロンプト約100回分に相当する。利用可能なAIモデルとして、GPT-4.1(0.25クレジット/プロンプト)、Claude 3.7 Sonnet(1クレジット/プロンプト)、DeepSeek-V3-0324(無料)などを選択できる。

無制限のFast TabやSWE-1 Liteなどの機能も無料プランに含まれている。

4. API Key 要件

WindsurfではサードパーティのAPI キー(外部サービスにアクセスするための認証キー)は不要である。Windsurfアカウントの作成のみで利用を開始できる。アカウント登録は無料であり、登録完了後すぐに利用を開始できる。

5. Cursor と Windsurf の比較

Claude 3.7 Sonnetの利用回数について、Cursor無料版は月50回、Windsurf無料版は月約25回利用可能である。ただしWindsurfでは、無料(0クレジット)のモデル(DeepSeek-V3-0324など)を無制限で利用できる点が特徴である。

6. 事前準備

Python 3.12 のインストール(Windows 上) [クリックして展開]

以下のいずれかの方法で Python 3.12 をインストールする。Python がインストール済みの場合、この手順は不要である。

方法1:winget によるインストール

管理者権限コマンドプロンプトで以下を実行する。管理者権限のコマンドプロンプトを起動するには、Windows キーまたはスタートメニューから「cmd」と入力し、表示された「コマンドプロンプト」を右クリックして「管理者として実行」を選択する。

winget install --scope machine --id Python.Python.3.12 -e --silent --disable-interactivity --force --accept-source-agreements --accept-package-agreements --override "/quiet InstallAllUsers=1 PrependPath=1 Include_pip=1 Include_test=0 Include_launcher=1 InstallLauncherAllUsers=1"

--scope machine を指定することで、システム全体(全ユーザー向け)にインストールされる。このオプションの実行には管理者権限が必要である。インストール完了後、コマンドプロンプトを再起動すると PATH が自動的に設定される。

方法2:インストーラーによるインストール

  1. Python 公式サイト(https://www.python.org/downloads/)にアクセスし、「Download Python 3.x.x」ボタンから Windows 用インストーラーをダウンロードする。
  2. ダウンロードしたインストーラーを実行する。
  3. 初期画面の下部に表示される「Add python.exe to PATH」に必ずチェックを入れてから「Customize installation」を選択する。このチェックを入れ忘れると、コマンドプロンプトから python コマンドを実行できない。
  4. 「Install Python 3.xx for all users」にチェックを入れ、「Install」をクリックする。

インストールの確認

コマンドプロンプトで以下を実行する。

python --version

バージョン番号(例:Python 3.12.x)が表示されればインストール成功である。「'python' は、内部コマンドまたは外部コマンドとして認識されていません。」と表示される場合は、インストールが正常に完了していない。

AIエディタ Windsurf のインストール(Windows 上) [クリックして展開]

Pythonプログラムの編集・実行には、AIエディタの利用を推奨する。ここでは、Windsurfのインストールを説明する。Windsurf がインストール済みの場合、この手順は不要である。

管理者権限コマンドプロンプトで以下を実行する。管理者権限のコマンドプロンプトを起動するには、Windows キーまたはスタートメニューから「cmd」と入力し、表示された「コマンドプロンプト」を右クリックして「管理者として実行」を選択する。

winget install --scope machine --id Codeium.Windsurf -e --silent --disable-interactivity --force --accept-source-agreements --accept-package-agreements --custom "/SP- /SUPPRESSMSGBOXES /NORESTART /CLOSEAPPLICATIONS /DIR=""C:\Program Files\Windsurf"" /MERGETASKS=!runcode,addtopath,associatewithfiles,!desktopicon"
powershell -Command "$env:Path=[System.Environment]::GetEnvironmentVariable('Path','Machine')+';'+[System.Environment]::GetEnvironmentVariable('Path','User'); windsurf --install-extension MS-CEINTL.vscode-language-pack-ja --force; windsurf --install-extension ms-python.python --force; windsurf --install-extension Codeium.windsurfPyright --force"

--scope machine を指定することで、システム全体(全ユーザー向け)にインストールされる。このオプションの実行には管理者権限が必要である。インストール完了後、コマンドプロンプトを再起動すると PATH が自動的に設定される。

関連する外部ページ

Windsurf の公式ページ: https://windsurf.com/

Ubuntu環境での設定

ターミナルを開き、以下のコマンドを実行する。

# システムの更新
sudo apt update && sudo apt upgrade -y
# Python3と開発環境のインストール
sudo apt install -y python3 python3-pip python3-venv python3-dev build-essential
# Windsurf(Cursor系エディタ)のインストール
# 公式サイトからダウンロードするか、以下の方法でインストール
wget -qO- https://download.codeium.com/windsurf/linux/install.sh | sh

7. Windsurf の起動と初回設定

Windsurfの初回起動時には、アカウント登録と基本設定を行う。この設定により、AI機能を含むすべての機能が利用可能になる。

  1. Windsurfを起動する。スタートメニューから起動するか、コマンドラインで「windsurf」コマンドを実行する。
  2. 「Get Started」をクリックする。
  3. VS Codeから設定を引き継ぎたい場合は「Import from VS Code」を選択し、そうでない場合は「Start fresh」を選択する。
  4. 設定を続行する。
  5. 「Log in to Windsurf」の画面で、「Sign up」をクリックしてアカウントを新規作成する。この登録情報を記録しておき、次回からは「Log in」でログインする。Googleアカウントを使用してWindsurfのアカウント登録も可能である。これでインストールと初期設定は完了である。
  6. Getting Started(始めよう)の画面を確認する。
    Getting Startedの画面
  7. 動作確認のため、Ctrl + Lを同時押ししてCascadeを開き、「折れ線グラフを描くコードを出して」などと入力し、Enterキーを押す。
    Cascadeへの入力例

コードが出力される。

コード出力結果

このとき、左下に「Do you want to install the recommended 'Python' extension...」というメッセージが表示される場合がある。「Install」をクリックし、インストール終了を待つ。

Python拡張機能のインストール確認

AIパネルには「コードを実行します」のように表示される。実行する場合は「Accept」をクリックする。

コード実行の確認

実行結果を確認する。

実行結果の表示

8. Windsurf の推奨モデル

クレジットを節約するため、以下のモデルの利用を推奨する。

  1. DeepSeek-V3-0324(0クレジット・恒久的)
  2. SWE-1(0クレジット・期間限定)
  3. SWE-1-lite(0クレジット・軽量版)

9. DeepSeek-V3-0324 モデルの選択手順

DeepSeek-V3-0324モデルを選択する手順は以下のとおりである。

  1. Cascadeパネル(Ctrl + Lを同時押し)を開く。
  2. 入力欄上部のモデル選択ドロップダウンをクリックする。
  3. 使用モデル(例:「DeepSeek-V3-0324」)を選択する。

10. Windsurf をエディタとして活用する

ここでは、Windsurfでファイル作成、コード編集、実行を行う基本的な手順を説明する。この手順を習得することで、Pythonプログラムの開発を開始できる。

1. Windsurf の起動

Windsurfをスタートメニューなどから起動する。起動直後にログインを求められた場合はログインする。通常は自動ログインされる。初回起動時には、サインイン(IDとパスワードの登録)が必要である。サインインの際は、Googleアカウントの利用を推奨する。

2. 新規ファイルの作成

  1. 新規ファイルを作成する。メニューで「File」>「New File」を選択する。
  2. ファイル名を設定する。例えばa.pyとする。このとき、拡張子を「.py」に設定する。これはPythonファイルとして認識させるためである。
    新規ファイル作成
  3. ファイル作成を確定する。Enterキーを押し、「Create File」をクリックする。

3. プログラムの入力と実行

  1. Windsurfのa.py画面で、以下のプログラムを入力する。
print(100 + 200)
プログラムの入力

このとき、左下に「Do you want to install the recommended 'Python' extension...」というメッセージが表示される場合がある。「Install」をクリックし、インストール終了を待つ。

Python拡張機能のインストール確認
  1. プログラムを実行する。画面上部の三角形の実行ボタンをクリックする。実行ボタンがない場合は、Python extensionをインストールする。
  2. 実行結果として「300」が表示されることを確認する。ターミナルがない場合には、「View」メニュー > 「Terminal」を選択する。
    実行結果の表示

print()はPythonの関数であり、括弧内の値や計算結果を画面に表示する。この例では、100 + 200の計算結果である300が出力される。

11. Windsurf の AI 機能の活用

ここでは、Windsurfで本格的なプログラム(AIによる画像分類)を実行し、AIとの対話を行う。画像分類プログラムを通じて、深層学習の基本的な流れ(データ準備、モデル構築、学習、評価)を体験できる。

NVIDIA CUDA Toolkit 12.8のインストール

以下のコマンドを管理者権限コマンドプロンプトで実行する (手順:Windowsキーまたはスタートメニュー → cmd と入力 → 右クリック → 「管理者として実行」)。

REM NVIDIA CUDA Toolkit 12.8 をシステム領域にインストール
winget install --scope machine --id Nvidia.CUDA --version 12.8 -e --silent --disable-interactivity --force --uninstall-previous --accept-source-agreements --accept-package-agreements --override "-s -n"

REM 環境変数TEMP, TMPの設定(一時ファイルの保存先を短いパスに変更)
mkdir C:\TEMP
set "TEMP_PATH=C:\TEMP"
setx TEMP "%TEMP_PATH%" /M >nul
setx TMP "%TEMP_PATH%" /M >nul

PyTorch のインストール

PyTorch がインストール済みの場合、この手順は不要である。管理者権限コマンドプロンプトで以下を実行する。管理者権限のコマンドプロンプトを起動するには、Windows キーまたはスタートメニューから「cmd」と入力し、表示された「コマンドプロンプト」を右クリックして「管理者として実行」を選択する。

REM PyTorch をインストール
set "CUDA_TAG=cu126"
set "PYTHON_PATH=C:\Program Files\Python312"
"%PYTHON_PATH%\Scripts\pip" install -U torch torchvision torchaudio --index-url https://download.pytorch.org/whl/%CUDA_TAG%

必要なライブラリのインストール

管理者権限で起動したコマンドプロンプト(手順:Windowsキーまたはスタートメニュー > cmdと入力 > 右クリック > 「管理者として実行」)で以下を実行する。

pip install torch torchvision matplotlib numpy pillow japanize-matplotlib

pipはPythonのパッケージ管理システムである。インターネット上のライブラリを自動的にダウンロードし、インストールする。

ライブラリとは、再利用可能なプログラムの集合体である。機械学習や画像処理などの複雑な処理を簡単に実装できる。

各ライブラリの役割は以下のとおりである。

画像分類プログラムの実装

  • Windsurfエディタ画面に、以下のプログラムをコピーして貼り付ける。
  • # CIFAR-10画像分類プログラム
    #   CNNによる10クラス画像分類と学習過程の可視化
    #   論文: "Deep Residual Learning for Image Recognition" (CVPR 2016)
    #   GitHub: https://github.com/pytorch/vision/tree/main/torchvision/models
    #   特徴: 畳み込みニューラルネットワーク(CNN)は画像の局所的特徴を効率的に抽出
    #         CIFAR-10データセットで約70-80%の精度、並列処理により高速学習
    #   前準備: pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126
    #           pip install matplotlib numpy japanize-matplotlib
    #           (管理者権限のコマンドプロンプトで実行)
    
    import torch
    import torch.nn as nn
    import torch.optim as optim
    import torchvision
    import torchvision.transforms as transforms
    import matplotlib.pyplot as plt
    import numpy as np
    import japanize_matplotlib
    
    # 定数定義
    BATCH_SIZE = 32
    EPOCHS = 5
    LEARNING_RATE = 0.001
    RANDOM_SEED = 42
    
    # 再現性確保のためのシード設定
    torch.manual_seed(RANDOM_SEED)
    np.random.seed(RANDOM_SEED)
    
    # データセットのクラス名
    CLASSES = ['飛行機', '自動車', '鳥', '猫', '鹿', '犬', 'カエル', '馬', '船', 'トラック']
    
    # デバイス設定
    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
    print(f'使用デバイス: {device}')
    if torch.cuda.is_available():
        print('GPUを使用して学習を実行します')
    else:
        print('CPUを使用して学習を実行します')
    
    # データの前処理
    transform = transforms.Compose([
        transforms.ToTensor(),
        transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
    ])
    
    # CIFAR-10データセットの読み込み
    print("データセットを読み込み中...")
    trainset = torchvision.datasets.CIFAR10(
        root='./data', train=True, download=True, transform=transform
    )
    trainloader = torch.utils.data.DataLoader(
        trainset, batch_size=BATCH_SIZE, shuffle=True
    )
    
    testset = torchvision.datasets.CIFAR10(
        root='./data', train=False, download=True, transform=transform
    )
    testloader = torch.utils.data.DataLoader(
        testset, batch_size=BATCH_SIZE, shuffle=False
    )
    
    # CNNモデルの定義
    class CNN(nn.Module):
        def __init__(self):
            super(CNN, self).__init__()
            self.conv1 = nn.Conv2d(3, 32, 3, padding=1)
            self.conv2 = nn.Conv2d(32, 64, 3, padding=1)
            self.conv3 = nn.Conv2d(64, 64, 3, padding=1)
            self.pool = nn.MaxPool2d(2, 2)
            self.fc1 = nn.Linear(64 * 8 * 8, 64)
            self.fc2 = nn.Linear(64, 10)
            self.relu = nn.ReLU()
    
        def forward(self, x):
            x = self.pool(self.relu(self.conv1(x)))
            x = self.pool(self.relu(self.conv2(x)))
            x = self.relu(self.conv3(x))
            x = x.view(-1, 64 * 8 * 8)
            x = self.relu(self.fc1(x))
            x = self.fc2(x)
            return x
    
    model = CNN().to(device)
    criterion = nn.CrossEntropyLoss()
    optimizer = optim.Adam(model.parameters(), lr=LEARNING_RATE)
    
    # メイン処理
    print("学習を開始します...")
    train_losses = []
    val_losses = []
    model.train()
    
    for epoch in range(EPOCHS):
        # 訓練フェーズ
        model.train()
        running_train_loss = 0.0
        for inputs, labels in trainloader:
            inputs, labels = inputs.to(device), labels.to(device)
    
            optimizer.zero_grad()
            outputs = model(inputs)
            loss = criterion(outputs, labels)
            loss.backward()
            optimizer.step()
    
            running_train_loss += loss.item()
    
        # 検証フェーズ
        model.eval()
        running_val_loss = 0.0
        with torch.no_grad():
            for inputs, labels in testloader:
                inputs, labels = inputs.to(device), labels.to(device)
                outputs = model(inputs)
                loss = criterion(outputs, labels)
                running_val_loss += loss.item()
    
        epoch_train_loss = running_train_loss / len(trainloader)
        epoch_val_loss = running_val_loss / len(testloader)
        train_losses.append(epoch_train_loss)
        val_losses.append(epoch_val_loss)
        print(f'エポック {epoch+1}/{EPOCHS}: 訓練損失 = {epoch_train_loss:.4f}, 検証損失 = {epoch_val_loss:.4f}')
    
    print("評価を実行中...")
    model.eval()
    correct = 0
    total = 0
    test_images = []
    test_labels = []
    predictions = []
    
    with torch.no_grad():
        for images, labels in testloader:
            images, labels = images.to(device), labels.to(device)
            outputs = model(images)
            _, predicted = torch.max(outputs, 1)
            total += labels.size(0)
            correct += (predicted == labels).sum().item()
    
            if len(test_images) < 5:
                for j in range(min(5 - len(test_images), images.size(0))):
                    test_images.append(images[j].cpu())
                    test_labels.append(labels[j].cpu())
                    predictions.append(predicted[j].cpu())
    
    accuracy = 100 * correct / total
    
    # 結果出力
    plt.figure(figsize=(15, 3))
    for i in range(5):
        plt.subplot(1, 5, i+1)
        img = test_images[i].permute(1, 2, 0)
        img = img * 0.5 + 0.5
        plt.imshow(img)
        plt.title(f'予測: {CLASSES[predictions[i]]}\n実際: {CLASSES[test_labels[i]]}')
        plt.axis('off')
    plt.tight_layout()
    plt.show()
    
    plt.figure(figsize=(8, 4))
    plt.plot(range(1, EPOCHS + 1), train_losses, 'b-', label='訓練損失')
    plt.plot(range(1, EPOCHS + 1), val_losses, 'r-', label='検証損失')
    plt.title('学習過程')
    plt.xlabel('エポック')
    plt.ylabel('損失')
    plt.legend()
    plt.grid(True)
    plt.show()
    
    print(f"テスト精度: {accuracy:.2f}%")
    
    プログラムの入力

    プログラムの主要概念について説明する。

    プログラムの実行と結果確認

    1. プログラムを実行する。実行ボタンを押してプログラムを開始する。
    2. 実行完了まで数分待機する。機械学習の処理には時間を要する。
    プログラムの実行

    深層学習モデルの訓練は計算量が多いため、通常のプログラムより長い時間を要する。コンピュータの性能により数分程度かかる場合がある。

    実行結果の確認手順は以下のとおりである。

    1. 最初にAIによる画像分類結果が表示される。5枚のテスト画像に対する予測結果と正解の比較が表示される。
      画像分類結果
    2. 画面を切り替える。確認後、右上の「x」ボタンをクリックして次へ進む。
    3. 学習曲線(損失の変化)が表示される。モデルの学習過程を可視化したグラフが表示される。
      学習曲線
    4. プログラム実行を終了する。確認後、右上の「x」ボタンをクリックする。

    学習曲線の見方について、左のグラフは精度(正解率)の変化を、右のグラフは損失(誤差)の変化を示す。理想的には精度が上昇し、損失が減少する傾向を示す。

    AI 対話機能の活用

    AI対話機能は、Windsurfに搭載された人工知能アシスタント機能である。プログラムに関する質問、コードの説明、改善提案などを自然言語で対話できる。

    1. AI対話パネルの起動。Ctrl + Lキーを同時押しする。
    2. 右側にAI対話用パネルが開く。

    AI対話パネルが「Loading...」と表示されて使用できない場合は、Windsurfを再起動(一度終了し、再起動)することで解決する場合がある。これはAIサービスへの接続に時間がかかる場合に発生する。

    AI との対話例

    AIへの質問として、右側の対話画面で以下の質問を試すことができる。

    AIとの効果的な対話のために、以下の点に留意する。

    12. Windsurf の重要機能一覧

    AI機能

    開発支援機能