コード生成と解説
Claudeを使ってクリーンで文書化されたコードを生成し、複雑なコードの明確な説明を取得。
学べること
- 適切なドキュメントとエラーハンドリングを備えた本番対応コードを生成するClaudeへのプロンプト方法
- 見慣れないまたはレガシーコードの明確で正確な説明を得るテクニック
- 構造化されたフォローアップのプロンプトを通じて生成されたコードを反復的に改善する方法
ユースケース
コード生成はClaudeの最も強力な機能の一つです——そして最も誤用しやすいものでもあります。使い捨てのボイラープレートを得るか本番対応のコードを得るかの違いは、要件をどれほどうまく説明するかにまったくかかっています。スタック、制約、意図についてClaudeにコンテキストを与えると、アウトプットの品質が劇的に向上します。
Claudeがコーディング作業で際立つ主な2つのシナリオがあります。最初は仕様から新しいコードを生成すること——必要なものを説明し、Claudeがそれを書きます。2番目は既存のコードを説明すること——馴染みのないもの(同僚のレガシーモジュール、オープンソースライブラリの内部、引き継いだコードの一部)を貼り付けて、Claudeに詳細を説明させます。両方のタスクは同じ基本的な原則に従います:コンテキストを多く提供するほど、アウトプットが良くなります。
実際のユースケースには、新しい機能のブートストラッピング、ユーティリティ関数の作成、擬似コードの動作する実装への変換、言語間のコードの翻訳、既存のコードベースの謎めいたロジックのデコードが含まれます。すべてのレベルの開発者がClaudeを使って速く動きます——ジュニアはパターンを学ぶために、シニアはボイラープレートをスキップしてアーキテクチャに集中するために。
ステップバイステップガイド
ステップ1:要件を精確に定義する
プロンプトを書く前に、30秒かけて実際に何が必要かを考えましょう。曖昧なプロンプトは曖昧なコードを生成します。良いコード生成プロンプトはこれらの質問に答えます:
- 言語とバージョンは?(例:Python 3.11、TypeScript 5.x、Go 1.22)
- 関数/モジュールは何をすべきか?(入力、出力、動作)
- どんな制約が適用されるか?(パフォーマンス、許可される依存関係、コーディングスタイル)
- 何を処理すべきか?(エッジケース、エラー状態)
弱いプロンプトの例:「日付を解析する関数を書いてください。」
強いプロンプトの例:「ISO 8601形式(YYYY-MM-DDおよびYYYY-MM-DDTHH:MM:SSZ)の日付文字列を解析するPython 3.11の関数を書いてください。datetimeオブジェクトを返し、解析が失敗した場合は説明的なメッセージでValueErrorを発生させ、タイムゾーン対応の日時を処理すべきです。型ヒントとdocstringを含めてください。」
ステップ2:環境についてのコンテキストを提供する
Claudeはスタックを知っているとより良いコードを生成します。特定の依頼の前に、簡単なコンテキスト行を追加しましょう:
FastAPIバックエンド(Python 3.11)でSQLAlchemy 2.0とPydantic v2を使っています。
または
これはReact 18プロジェクトでTypeScriptを使用し、状態管理にZustand、スタイリングにTailwindCSSを使っています。
この1行により、ClaudeがORMの構文の間違い、互換性のないフックAPI、または持っていない依存関係の使用といった、既存のパターンと矛盾するコードを生成することを防ぎます。
ステップ3:インラインで説明を依頼する
新しいコードを生成する際は、自明でない決定を説明するインラインコメントを追加するようClaudeに依頼しましょう。これには2つの目的があります:生成されたものを理解するのに役立ち、Claudeが自分のアウトプットを推論することを促します(品質を向上させることが多い)。
プロンプトに追加しましょう:「自明でないロジックや設計の決定を説明するインラインコメントを含めてください。」
ステップ4:理解できないコードを説明する
コードを直接メッセージに貼り付けて、Claudeに説明するよう依頼しましょう。特定の詳細レベルで説明の依頼を構造化してください:
- 高レベルのサマリーの場合:「この関数が何をするか2〜3文で説明してください。」
- 詳細な説明の場合:「このコードを行ごとに説明してください。各セクションが何をするか、なぜそのように構成されているか、そして異常または潜在的にバグのありそうなものにフラグを立ててください。」
- 特定の懸念の場合:「
cursorがNoneの場合に23行目で何が起きるかが分かりません。そのブランチを説明してください。」
ステップ5:フォローアップで反復する
最初のアウトプットが最終的なアウトプットであることはほとんどありません。フォローアップのプロンプトで改善しましょう:
- 「これをより読みやすくリファクタリングしてください——内部ロジックをヘルパー関数に抽出してください。」
- 「APIが429レート制限応答を返す場合のエラーハンドリングを追加してください。」
- 「asyncioを使ってこれを非同期にしてください。」
- 「これをTypeScriptに翻訳してください、同じロジックを保ちながら。」
プロンプトテンプレート
コンテキスト:[言語/バージョン]で[関連するフレームワークまたはライブラリ]を使って作業しています。
タスク:以下を行う[関数/クラス/モジュール]を書いてください:
- [主要な動作]
- [副次的な動作または制約]
- [処理するエッジケース]
要件:
- 入力:[入力の型と形式を説明]
- 出力:[期待される戻り値または副作用を説明]
- エラーハンドリング:[エラーはどのように表面化されるべきか?]
- スタイル:型ヒント、docstring、自明でないロジックのインラインコメントを含める。
[適用可能な場合、これが従う必要がある既存のコードまたはインターフェースを貼り付けてください。]
ヒントとベストプラクティス
-
正確なバージョンを指定する — 「Python 3」と「Python 3.11」は意味のある異なるコードを生成できます。
matchステートメント、TypeAlias、ウォルラス演算子などのバージョン固有の機能は重要です。 -
まずインターフェースをClaudeに与える — すでに必要な関数シグネチャまたはクラスインターフェースを知っている場合は、明示的に述べましょう。Claudeにインターフェース自体を発明させるのではなく、実装を埋めさせましょう。
-
コードとともにテストを依頼する — プロンプトに*「通常の使用とエッジケースをカバーする3〜5つのユニットテストも書いてください」*を追加しましょう。これにより生成されたコードが検証され、テストハーネスがすぐに得られます。
-
「選択を説明してください」を使う — *「コードの後に、行った重要な設計の選択を簡単に説明してください」*を追加すると、Claudeの推論への窓が開き、コンテキストに合わない前提を見つけるのに役立ちます。
-
コードの説明には塊を切り出す — 500行のファイル全体を貼り付けて「これを説明してください」と尋ねないでください。混乱している特定の関数またはブロックを貼り付けましょう。焦点を絞った質問は焦点を絞った答えを得ます。
試してみよう
現在のプロジェクトからより清潔またはより文書化されていると思うユーティリティ関数を見つけましょう。Claudeに以下のプロンプトで貼り付けましょう:
「これは私のコードベースからの関数です。以下を実施してください:(1) 平易な言語で何をするか説明する、(2) 処理しない潜在的なバグまたはエッジケースを特定する、(3) より良いエラーハンドリングとインラインコメントで書き直す。」
書き直されたバージョンを元のものと比較しましょう。Claudeが見つけた見落としていたかもしれないものに注目しましょう。