Skip to content

Instantly share code, notes, and snippets.

@laiso
Last active July 24, 2025 06:15
Show Gist options
  • Save laiso/ce83f586fdaae5829301fcf4f0131fcf to your computer and use it in GitHub Desktop.
Save laiso/ce83f586fdaae5829301fcf4f0131fcf to your computer and use it in GitHub Desktop.
Cursor Background Agentsのコンテナ環境下でGUIアプリケーションの動作能力

目的

Cursor Background Agentsのコンテナ環境下でGUIアプリケーションの動作能力を検証する

実施日

2024年7月24日

検証環境

  • OS: Ubuntu 25.04 (Linux 6.12.8+)
  • 環境: CursorBackground コンテナ環境
  • Node.js: v22.15.0
  • Python: 3.13.3
  • DISPLAY: :99 (システムにより事前設定済み)

実施内容

1. Webアプリケーションアクセステスト

1.1 テスト環境構築

  • Docker CE 28.3.2をインストール
  • Nginxコンテナでテストページをlocalhost:80で配信
  • Playwright (最新版)をNode.js環境にインストール

1.2 基本アクセステスト

// テストコード: test-localhost.js
const { chromium } = require('playwright');
// localhost:80へのアクセス、要素取得、スクリーンショット取得

結果: ✅ 成功

  • ページアクセス: 正常(約500ms)
  • DOM要素取得: 成功
  • スクリーンショット: 保存成功

1.3 高度な機能テスト

  • ネットワークリクエスト/レスポンス監視
  • アクセシビリティチェック
  • パフォーマンス計測
  • 複数解像度でのスクリーンショット(1920x1080、768x1024、375x667)
  • PDFエクスポート

結果: ✅ すべて成功

2. 日本語フォント対応検証

2.1 問題の発見

  • 症状: 日本語文字が□□□(豆腐)として表示
  • 原因: ヘッドレス環境に日本語フォントが未インストール

2.2 解決方法

sudo apt-get install -y fonts-noto-cjk fonts-ipafont-gothic fonts-ipafont-mincho
fc-cache -fv

2.3 結果比較

項目 インストール前 インストール後
日本語表示 文字化け 正常表示
PDFファイルサイズ 12KB 30KB
フォント埋め込み なし あり

3. xvfb-run必要性の検証

3.1 実験マトリックス

アプリケーション モード DISPLAY環境変数 xvfb-runなし xvfb-runあり
Playwright headless あり
Playwright headless なし
Playwright headful あり
Playwright headful なし
Electron - あり
Electron - なし

3.2 重要な発見

  1. Playwrightのheadlessモード: Xサーバー不要(内部レンダリング)
  2. Playwrightのheadfulモード: Xサーバー必須(親切なエラーメッセージ)
  3. Electron: 常にXサーバーが必要(なければクラッシュ)

4. 環境特性の確認

4.1 CursorBackground環境の特徴

  • DISPLAY=:99が事前設定済み
  • 仮想Xサーバーが既に動作中
  • xvfb-runが多くの場合不要

4.2 エラーメッセージの分析

# Electronでよく見られるエラー(無害)
[ERROR:dbus/bus.cc:408] Failed to connect to the bus
[ERROR:ui/gl/angle_platform_impl.cc:49] GLX is not present

# Playwrightの親切なエラー
Looks like you launched a headed browser without having a XServer running.
Set either 'headless: true' or use 'xvfb-run <your-playwright-app>'

結論

動作能力評価

  1. ヘッドレスブラウザ自動化: ⭐⭐⭐⭐⭐ 完璧

    • Playwright/Puppeteerは問題なく動作
    • 日本語フォント追加で完全対応
  2. Electronアプリケーション: ⭐⭐⭐⭐ 良好

    • 基本的に動作するが、警告メッセージあり
    • xvfb-runの使用で安定動作
  3. GUIデバッグ機能: ⭐⭐⭐⭐ 良好

    • headfulモードも使用可能
    • 既存のXサーバーで十分

推奨事項

一般的な使用

# Playwrightのheadlessテスト(推奨)
node playwright-test.js

# Electronアプリケーション
xvfb-run -a electron-app

# 日本語対応は必須
apt-get install -y fonts-noto-cjk

CI/CD環境での使用

# 念のためxvfb-runを使用
xvfb-run -a npm test

# 画面録画が必要な場合
xvfb-run -a -s "-screen 0 1920x1080x24" npm run e2e:record

制限事項

  1. DBusサービスが利用不可(システム通知など)
  2. GPUアクセラレーションは制限的
  3. 音声出力は不可

まとめ

CursorBackground環境は、GUIアプリケーションの実行に十分な能力を持っています。特に:

  • E2Eテスト自動化に最適
  • ヘッドレスブラウザテストは完璧に動作
  • Electronアプリ開発も可能
  • 日本語環境も適切に構築可能

この環境は、モダンなWeb開発におけるGUIテストのニーズを十分に満たしており、実用的な開発環境として活用できることが確認されました。

const { chromium } = require('playwright');
/**
* 基本的なPlaywrightテスト
* localhost:80にアクセスして要素を取得し、スクリーンショットを保存
*/
(async () => {
console.log('Playwrightテストを開始します...');
// ブラウザを起動(ヘッドレスモード)
const browser = await chromium.launch({
headless: true
});
try {
// 新しいコンテキストとページを作成
const context = await browser.newContext();
const page = await context.newPage();
console.log('localhost:80にアクセスします...');
// localhost:80にアクセス
await page.goto('http://localhost:80');
// ページタイトルを取得
const title = await page.title();
console.log('ページタイトル:', title);
// h1要素のテキストを取得
const h1Text = await page.textContent('h1');
console.log('h1要素のテキスト:', h1Text);
// test-element要素のテキストを取得
const testElement = await page.textContent('#test-element');
console.log('テスト要素のテキスト:', testElement);
// スクリーンショットを取得
await page.screenshot({ path: 'assets/images/basic-test.png' });
console.log('スクリーンショットを保存しました: assets/images/basic-test.png');
console.log('\nテスト成功!localhost:80にアクセスできました。');
} catch (error) {
console.error('エラーが発生しました:', error);
} finally {
// ブラウザを閉じる
await browser.close();
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment