【Claude Code】バイブコーディングで医療現場向け書類作成補助アプリケーションを作ってみた! – 神戸のデータ活用塾!KDL Data Blog

データインテリジェンスチームの黒臺(くろだい)です。
先日”人間がコードを書いてはいけない”社内アプリ開発コンテストに参加し、Claude Codeを使って「医療現場向け書類作成補助アプリケーション」を実装しました。
(社内コンテストの詳細についてはKDL BLOGの”社内バイブコーディングコンテスト開催!Claude Codeと一緒に「めんどくさい」を解決するアプリを作ってみた。”をご覧ください)

www.kdl.co.jp

本記事では初めてClaude Codeを使って得られたバイブコーディングの実践Tipsをご紹介します。

作成したアプリケーション

著者は元医療従事者で、患者さんの書類を作成する際に、点在するデータや書類を人力で収集し、転記しなければならない日々を過ごした経験があります。
そうした課題感を背景に、「現場の書類作成の負担が大きく減り、患者さん一人ひとりによりきめ細かい支援ができるようになれば」という思いを形にしてみたいと考えました。
今回実装した「医療現場向け書類作成補助アプリケーション」は、入力された要件をもとにAIが文書を生成し、人間が確認・修正する仕組みです。
AIは下書き支援に徹し、最終的な判断と責任は人間が持つ設計にしました。

ユースケース

  • 医療現場で用いる計画書のドラフト作成

アーキテクチャ

アプリケーションのイメージ図

完成したアプリケーション

アプリケーションのUI画面

設計のポイント
  • AIは「下書き支援」に徹し、人間が最終確認できる設計
  • 操作はシンプルに、最小限の入力でドラフトが得られる

Claude Codeの実践Tips

【仕様・要件定義フェーズ】

・プロジェクト憲章プロンプトを作成

初めてのバイブコーディング挑戦だったこともあり、仕様を固める作業に最も時間をかけました。
バイブコーディングで曖昧な指示を出すと余計な機能や意図しない分岐を生みやすく手戻りが増えます。
そこで全体像・目的・開発ルール・技術スタックを「プロジェクト憲章プロンプト」として定めました。
初回の指示でプロジェクト憲章プロンプトを渡すことで、大きな手戻りがなく開発を進めることができました。

プロンプト例(プロジェクト憲章プロンプト):
これから、退院支援計画書を自動作成するPythonアプリケーションの開発を始めます。あなたはこのプロジェクトのシニア開発者です。

【プロジェクト憲章】

目的: 複数のデータソース(カルテ、問診票、検査結果)から情報を集約し、退院支援計画書のサマリーを生成する。

主要技術: FastAPI, Azure OpenAI Service, Python

最優先事項: 個人情報保護法と医療情報ガイドラインの遵守。 いかなる場合も、生データや個人情報をログに出力しないこと。

コーディングスタイル: PEP 8に準拠し、関数や変数には分かりやすい名前を付けること。

この憲章を理解し、今後のすべての対話においてこの前提を守ってください。準備ができたら『了解』とだけ返信してください。

プロジェクト憲章を定めるにあたっては、複数のLLMに「このアイデアを実現するにはどんな機能が必要か」「どのように設計すべきか」を尋ね、回答を比較・統合しました。
・プロンプトテンプレートの作成

2回目以降のプロンプトでは、下記のようなプロンプトテンプレートを使いました。
テンプレートを使用することでステップバイステップで実装が進められ、手戻りを減らして開発を進められました。

プロンプトテンプレート例

プロンプトテンプレートを定めるにあたっては、こちらも複数のLLMに尋ねて回答を比較・統合しました。

・開発の工程を分ける

Claude Codeでは1回のリクエストで思い通りのシステムを完成させることは難しいです。ゴールを失念しないためにも、一つの開発工程が終わってから次の工程に移ることを徹底しました。そうすることで、大きな迷いなく開発を進められました。

開発工程のイメージ

【実装フェーズ】

・抽象度の高い部分から低い部分に

コード実装では基底の抽象クラス、データ型定義から実装しました。
最初から複雑な処理をまとめて生成させるのではなく、依存関係の少ない抽象レイヤーから順に実装を行うことで、出力精度を高めることができました。
抽象度が高いものから低いものへ段階的に実装をすることで、仕様から外れたコードを生成したときに、修正をする手間が抑えられました。

・プロンプトは簡潔に

プロンプトは、必要な情報を密度高く簡潔にして送りました。
長い文章をそのまま渡すと入力トークンを無駄に消費するだけでなく、文脈の一部を忘れられて期待通りに動作しないことがあります。
簡潔なプロンプトに整理して渡すことで、出力が安定し、開発効率も高まりました。

出力が安定したプロンプト例

・コード修正時の差分管理と安全性

修正時は元のファイルを直接編集させず、既存ファイルに「_old」という名前を付けて残し、新しいファイルを生成しました。
これにより変更前後のコードを簡単に比較でき、差分を確認※しやすくなりました。
※注意 コードが全て書き換えられるなどの事故を防ぐために、バージョン管理ツールの使用を強く推奨します。)
またDockerでコンテナ化を進める中で、Bashコマンドに制限を設けることも重要です。危険なコマンドを禁止することで、意図しない動作を防げます。

# .claude/setting.json内
{
  "permissions": {
    "deny": [
      "Bash(rm:*)",
      "Bash(rm -rf:*)",
      "Read(.env.*)",
      "Write(.env.*)",
      "Read(id_rsa)",
      "Read(id_ed25519)",
      "Read(.ssh.*)",
      "Bash(pip uninstall:*)",
      "Bash(pip3 uninstall:*)",
      "Bash(pipenv uninstall:*)"
    ]
  },
}

・Claudeのプライバシー設定を変更

2025年8月29日から、Claude Codeはデフォルト設定でユーザーのデータが学習に利用されるようになりました。シークレット情報を学習に利用されないように、Claudeのプライバシーポリシーを変更しましょう。
Claudeの設定画面内のプライバシーの”Claudeの改善にご協力ください”のスライドボタンをオフにするだけです。

Claudeの設定内のプライバシー

・ファイアウォール設定を変更

今回はAzure OpenAIを利用するために、ファイアウォールの設定を変更し、Claude CodeがAzure OpenAIのAPIを呼び出せるように権限を調整しました。環境構築の段階でこの設定をしておくと、実装時に余計なトラブルを避けられます。

# .devcontainer/init-firewall.shのファイル内に修正を加える
for domain in \
    "registry.npmjs.org" \
    "api.anthropic.com" \
    "sentry.io" \
    #LLMのAPIを使うために下記の行を追加
    "openai.azure.com" \
    "cognitiveservices.azure.com" \
    "azure.microsoft.com" \
    "login.microsoftonline.com" \
    "graph.microsoft.com" \
    "statsig.anthropic.com" \
    "pypi.org"\
    "files.pythonhosted.org"\
    "statsig.com"; do
    echo "Resolving $domain..."
    ips=$(dig +short A "$domain")
    if [ -z "$ips" ]; then
        echo "ERROR: Failed to resolve $domain"
        exit 1
    fi
    
    while read -r ip; do
        if [[ ! "$ip" =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
            echo "WARN: Skipped invalid IP from DNS for $domain: $ip"
            continue
        fi
        echo "Adding $ip for $domain (if not already exists)"
        ipset -exist add allowed-domains "$ip"
    done < <(echo "$ips")
done

【修正・改善フェーズ】

・修正のコツ

Claude Codeはコードを修正時に不要な部分まで書き換えてしまうリスクがあります。そこで改善時は次の3点に気を付け実施しました。

1. 会話履歴をリセットしてから修正を依頼

古い仕様と新しい仕様が混在すると、矛盾を取り込んで応答が不安定になります。出力が乱れ始めたら、いったん会話をリセットしてから修正内容を提示しました。
2. 修正の目的と内容を明確にする

「何を直すのか」「なぜ直すのか」を明記し、それ以外は変更しないよう明示することで、意図しないコード修正を防ぎました。
3. 必要最小限の改善に留める

AIは余計な機能を足したがる傾向があるため、修正は最小範囲に絞り、スコープを広げないよう徹底しました。

【感想】

今回初めてClaude Codeを触ってみて、コード生成のスピード感が従来の開発体験と大きく異なり、創作意欲を刺激され、モチベーションも高まりました。
一方で、API実装の途中で、突然文字化けしたコードが出力されたり、思わぬ挙動に苦労する場面もありました。
こうした不確実性を踏まえると、現時点ではClaude Codeとはペアプログラミングのようなスタンスで付き合うのが安全だと感じました。
今後は、テスト駆動開発(TDD)のような手法を取り入れながら、AIと協働する開発スタイルをさらに検証していきたいと思います。




Source link

関連記事

コメント

この記事へのコメントはありません。