😎

Cursorとの拡張機能開発で躓きやすかったところ

に公開

普段JavaScriptでの開発に慣れていない方が、Cursorを使った拡張機能開発で直面しやすい問題点と、その解決策について解説します。前提知識が少ない状態で開発を進める中で、筆者自身が「これどうすればいいんだ…?」と頭を抱えたポイントと、そこから見つけ出した対処法をご紹介します。

JavaScript拡張機能開発で自分が陥った「躓き」ポイント

まず、JavaScript拡張機能開発で特に初心者が陥りやすい大まかな落とし穴について概説します。

開発環境構築の複雑さ: テスト環境やモジュール管理など、開発を始める前の準備段階でつまずくことがあります。特にJavaScript特有の概念(ESMなど)に慣れていないと、最初の一歩が踏み出しにくいと感じるでしょう。

デバッグの難しさ: エラーが発生した際に、その原因や箇所を特定するのが困難な場合があります。特に自動生成されたコードや、普段見慣れない環境でのエラーは、どこから手をつければいいのか途方に暮れてしまいがちです。

Cursorの挙動への慣れ: CursorのようなAIツールを使う際、どのように指示を出せば効率的に開発を進められるのか、その「癖」を掴むまでに時間がかかることがあります。

これらの大まかな課題を踏まえた上で、具体的な問題点と解決策を見ていきましょう。

各問題点と具体的な解決策

問題点:ESM(ECMAScript Modules)をお勧めされるがうまくいかない

Cursorにコード生成を依頼すると、ESM形式(import/export構文)での実装を提案されることがあります。しかし、既存のプロジェクトや特定の環境では、ESMがうまく動作しない、または設定が複雑で導入に手間取る場合があります。特にJavaScript初心者にとっては、モジュールシステムの概念自体が理解しにくい上に、環境による違いがさらに混乱を招きます。

解決案:ESMはあきらめる

割り切ってCommonJS形式(require/module.exports)で進めるのも一つの手です。特にシンプルな拡張機能や、既存の古いコードベースに合わせる必要がある場合は、無理にESMにこだわる必要はありません。Cursorに「CommonJS形式で書いて」と明確に指示することで、CommonJSベースのコードを生成させることができます。

問題点:テストファーストを試みるも、テスト環境の構築で失敗

「テストファースト」は素晴らしい開発手法ですが、JavaScript拡張機能開発において、適切なテスト環境(JestやMochaなど)を構築するのは、JavaScriptのモジュールシステムやビルドツールに関する知識が求められ、初心者には敷居が高いと感じるでしょう。特に、ブラウザ環境に依存する拡張機能のテストは、通常のNode.js環境でのテストとは異なる考慮が必要です。

解決案:テストはブラウザからの統合テストのみ

最初はブラウザでの手動による統合テストに絞るのが現実的です。拡張機能を実際にブラウザに読み込み、意図した通りに動作するかを目視で確認し、エラーが出たら修正するというサイクルで進めます。小さな変更ごとにブラウザで確認することで、問題の早期発見につながり、大規模なリファクタリングを防ぐことができます。本格的なテストコードの導入は、開発が進み、プロジェクトが安定してから検討しても遅くありません。

問題点:一気にたくさん実装されてエラー出まくり

Cursorは非常に優秀なAIですが、一度に多くの機能を実装させようとすると、複雑なコードが生成され、予期せぬエラーが多発することがあります。特にJavaScript初心者の場合、エラーメッセージの解読や、広範囲にわたるデバッグは困難を極めます。

解決案:最初は「問題点や提案を挙げてもらうだけ」にして、一つずつ実装

Cursorに対して、いきなりコードの生成を求めるのではなく、まずは「問題点や提案を挙げてもらうだけ」に留めます。例えば、「この機能を実現するために考えられるアプローチをいくつか教えて」のように質問し、得られた選択肢の中から一つを選んで、その機能だけを実装するよう依頼します。このように細かくステップを分け、一つずつ着実に実装していくことで、エラーの発生を抑え、もし発生しても問題箇所を特定しやすくなります。

問題点:エラーが起きても問題個所を正しく特定できない

JavaScriptの実行時エラーは、コールスタックが長く、どこで何が起きているのかを把握しにくいことがあります。特に拡張機能のように、バックグラウンドスクリプトやコンテンツスクリプトなど複数のコンテキストが絡む場合、問題の切り分けが困難になります。

解決案:問題個所付近のコンソール出力を増やしてもらう

エラーが起きた際は、Cursorに「このエラーが起きている付近のコードに、より詳細なコンソールログ(console.log)を追加して」と依頼しましょう。例えば、変数の中身や関数の実行順序、特定コードブロックへの到達有無などを出力させることで、プログラムの挙動を追跡し、問題のボトルネックを特定しやすくなります。

問題点:コンソールをコピペしたら「長すぎ」って文句言われる

デバッグのためにコンソールに大量のログを出力させると、その内容をCursorに貼り付けた際に「長すぎる」と指摘され、解析してもらえないことがあります。渡した情報が多すぎて、かえって情報過多になるというジレンマに陥ります。

解決案:コンソール出力はできるだけ減らしておく。必要な時だけ増やす。

普段の開発中は、コンソール出力を必要最小限に留めておきましょう。エラーが発生したり、特定の挙動を確認したい場合にのみ、一時的に詳細なログを追加するようにします。そして、問題が解決したら、不要なログはすぐに削除するかコメントアウトするように習慣づけましょう。また、Cursorに渡す際も、エラーメッセージや関連する少量のログに絞り込むことで、効率的なやり取りが可能になります。

まとめ

Cursorを使ったJavaScript拡張機能開発は、特にJavaScript初心者にとっては乗り越えるべきハードルがいくつかあります。しかし、今回紹介したような具体的な解決策を実践することで、これらの「躓き」を乗り越え、効率的に開発を進めることができるはずです。

最初から完璧を目指すのではなく、小さな成功体験を積み重ねながら、徐々に開発のスキルを向上させていきましょう。この記事が、あなたの拡張機能開発の一助となれば幸いです。

https://amzn.to/4lHI9vA

Discussion