メインコンテンツに移動

builders.flash

ウェブサービス・SaaS 企業における生成 AI 活用例

Cline with Amazon Bedrock で始める Vibe Coding ~ テックアカデミーにおける活用事例

2025-10-02 | Author : 半田 満 (株式会社ブリューアス)、黒澤 蓮

はじめに

builders.flash 読者のみなさま、こんにちは!株式会社ブリューアスの半田と申します。

早速ですが「Vibe Coding(バイブコーディング)」という言葉を聞いたことがありますでしょうか ?

「Vibe Coding」とは OpenAI 共同創設者であり元 Tesla AI 責任者の Andrej Karpathy 氏によって提唱された概念で、AI に自然言語で指示を出して AI と一緒に「ノリ良くフィーリングで」開発を進めるようなプログラミング手法です。背景には生成 AI の劇的な進化により、開発者が AI を活用してより効率的に、そしてクリエイティブにコーディングを行うことが可能になったという事実があります。

このような流れを受け、近年、生成 AI を活用したコーディング支援ツールが注目を集めています。その中でも、Cline はユーザーが要求したタスクを自律的・動的に実行し、最適なアウトプットを生成することで開発者の生産性を大幅に向上させるツールとして知られています。一方で、組織内での導入にあたっては、適切な設定方法やコスト管理が課題となることがあります。

本記事では、Amazon Bedrock を使って Cline を設定・利用する方法から、組織内での効率的なコスト管理まで、実践的な手順をご紹介します。これにより、Cline with Amazon Bedrock を活用した「Vibe Coding」を実現し、開発組織の生産性向上につなげることができるでしょう。


X ポスト »
| Facebook シェア » | はてブ »

ご注意

本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。

*ハンズオン記事およびソースコードにおける免責事項 »

builders.flash メールメンバー登録

builders.flash メールメンバー登録で、毎月の最新アップデート情報とともに、AWS を無料でお試しいただけるクレジットコードを受け取ることができます。

今すぐ登録 »

1. Cline with Amazon Bedrock の利用開始方法

1-1. Amazon Bedrock のモデルアクセス設定

2025 年 8 月現在、本記事内では東京リージョン (ap-northeast-1)、生成 AI モデルは「Claude Sonnet 4」を利用します。

「Claude Sonnet 4」の利用を開始するためにモデルのアクセス設定をおこないます。マネジメントコンソールで Amazon Bedrock のページに遷移し、左側のナビゲーションペインから「特定のモデルを有効にする」を選択します。「モデルアクセスを変更」をクリックし「Claude Sonnet 4」にチェックを入れ有効化します。

Missing alt text value

1-2. アプリケーション推論プロファイルの作成

組織内で複数のメンバーが生成 AI モデルを使用する際に、モデルの使用状況の把握やコストの管理が課題となります。アプリケーション推論プロファイルを使い利用者ごとに専用のプロファイルを作成することでこの課題を解決できます。

アプリケーション推論プロファイルを作成

2025 年 8 月現在、推論プロファイルは Amazon Bedrock API を使用してのみ作成が可能です。 マネジメントコンソールで AWS CloudShell を開き以下のコマンドを実行してアプリケーション推論プロファイルを作成します。このとき、タグを付けてタグベースでコストを管理できるようにします。 作成に成功すると inferenceProfileArn が返ってきます。この ARN の値は Cline の設定で使用するので控えておきましょう。

bash
$ aws bedrock create-inference-profile \
--inference-profile-name 'bedrock-claude-inference-profile' \
--description 'Bedrock Claude inference profile example' \
--model-source '{"copyFrom": "arn:aws:bedrock:ap-northeast-1:{accountId}:inference-profile/apac.anthropic.claude-sonnet-4-20250514-v1:0"}' \
--tags '[{"key": "userName","value": "handa"},{"key": "teamName","value": "teamX"}]'

アプリケーション推論プロファイルの一覧を確認

※ {accountId}の部分は実際の AWS アカウント ID に置き換えてください。 以下のコマンドで作成済みのアプリケーション推論プロファイルの一覧を確認できます。

bash
$ aws bedrock list-inference-profiles --type-equals 'APPLICATION'

1-3. IAM ユーザーを作成

bedrock-claude-user という名前で IAM ユーザーを作成し、アプリケーション推論プロファイルを実行するためのポリシーをアタッチします。 ポリシーは以下の内容で作成します。{accountId}の部分は実際の AWS アカウント ID に置き換えてください。

bash
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "bedrock:InvokeModel*",
            "Resource": "arn:aws:bedrock:ap-northeast-1:{accountId}:application-inference-profile/*",
            "Effect": "Allow"
        },
        {
            "Condition": {
                "ArnLike": {
                    "bedrock:InferenceProfileArn": "arn:aws:bedrock:ap-northeast-1:{accountId}:application-inference-profile/*"
                }
            },
            "Action": "bedrock:InvokeModel*",
            "Resource": "arn:aws:bedrock:*::foundation-model/anthropic.claude-sonnet-4-20250514-v1:0",
            "Effect": "Allow"
        }
    ]
}

画面イメージ

Missing alt text value

Missing alt text value

IAM ユーザーのアクセスキーとシークレットアクセスキーを取得

IAM ユーザーの作成が完了しましたら IAM ユーザーのアクセスキーとシークレットアクセスキーを取得します。先ほど作成した IAM ユーザーを選択し、「セキュリティ認証情報」タブに移動して、新しいアクセスキーを作成します。次の Cline の設定では、アプリケーション推論プロファイルの ARN と合わせて、このアクセスキーとシークレットアクセスキーを使用します。

Missing alt text value

Missing alt text value

(オプション) 1-3a. AWS IAM Identity Center (AWS SSO) の設定

セキュリティベストプラクティスに従うならば、実際の利用には長期的な認証情報の代わりに一時的な認証情報を使用すべきです。AWS IAM Identity Center を使用することで、安全かつ効率的に一時的な認証情報によるアクセス管理を行います。

1-3a-1. IAM Identity Center の有効化

  1. AWS マネジメントコンソールで IAM Identity Center を開きます。
  2. 初回の場合は「有効化」をクリックします。
  3. ID ソースとして「Identity Center ディレクトリ」を選択します。

1-3a-2. ユーザーの作成

1. ナビゲーションペインで「ユーザー」を選択
2. 「ユーザーを追加」をクリック
3. 以下の情報を入力:

  • ユーザー名 : bedrock-claude-user
  • Eメールアドレス : 実際のメールアドレス
  • 名前 : 適切な名前を入力

 

1-3a-3. 許可セットの作成

  1. ナビゲーションペインで「許可セット」を選択
  2. 「許可セットを作成」をクリック
  3. 「カスタム許可セット」を選択
  4. 以下のインラインポリシーを追加:

インラインポリシー

bash
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "bedrock:InvokeModel*",
            "Resource": "arn:aws:bedrock:ap-northeast-1:{accountId}:application-inference-profile/*"
        },
        {
            "Effect": "Allow",
            "Action": "bedrock:InvokeModel*",
            "Resource": "arn:aws:bedrock:*::foundation-model/anthropic.claude-sonnet-4-20250514-v1:0",
            "Condition": {
                "ArnLike": {
                    "bedrock:InferenceProfileArn": "arn:aws:bedrock:ap-northeast-1:{accountId}:application-inference-profile/*"
                }
            }
        }
    ]
}

  1. 許可セット名 : BedrockClineAccessPermissionSet
  2. セッション期間 : 4 時間 (必要に応じて調整)

1-3a-4. アカウントへの割り当て

  1. 「AWS アカウント」を選択
  2. 対象のアカウントを選択し「ユーザーまたはグループを割り当て」をクリック
  3. 作成したユーザーと許可セットを関連付けます

1-3b. AWS CLI v2 の設定と SSO Profile の作成

1-3b-1. AWS CLI v2 のインストール

最新の AWS CLI v2 がインストールされていることを確認します:

bash
# バージョン確認
aws --version

# AWS CLI v2 がインストールされていない場合は以下から取得
# https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html

1-4-2. SSO Profile の設定

bash
# SSO の設定を開始
aws configure sso

--------------------------------------------------

# プロンプトへの回答
SSO session name (Recommended): bedrock-cline-session
SSO start URL [None]: https://[your-domain].awsapps.com/start
SSO region [None]: ap-northeast-1
SSO registration scopes [sso:account:access]: # Enter

認証完了後、利用可能なアカウントとロールを確認

ブラウザが自動的に開き、認証を求められます。認証完了後、利用可能なアカウントとロールが表示されます。

bash
# ブラウザで認証後
CLI default client Region [None]: ap-northeast-1
CLI default output format [None]: json
CLI profile name [...]: bedrock-cline-profile  # この名前が重要

1-3b-3. Profile の動作確認

bash
# SSO ログイン(一時的認証情報を取得)
aws sso login --profile bedrock-cline-profile

# 認証情報の確認
aws sts get-caller-identity --profile bedrock-cline-profile

重要 : 一時的認証情報は設定したセッション期間 (デフォルト 4 時間) で期限切れになります。期限切れの場合は aws sso login コマンドを再実行してください。

1-4. Cline with Amazon Bedrock の設定

VS Code の拡張機能 (Extensions) から「Cline」を検索してインストールします。

⚙️(歯車)のボタンをクリックして Cline の設定画面を開いたら以下の項目を設定し [Save] ボタンをクリックします。

Missing alt text value

1-4. Cline with Amazon Bedrock の設定

  • API Provider : Amazon Bedrock
  • AWS Cledential を選択
  • AWS Access Key : 「1-3. IAM ユーザーを作成」で作成した IAM ユーザーのアクセスキー
  • AWS Secret Key : 「1-3. IAM ユーザーを作成」で作成した IAM ユーザーのシークレットアクセスキー
  • AWS Region : ap-northeast-1
  • Use cross-region inference : チェックを入れる
  • Use prompt caching : チェックを入れる
  • Model : Custom
  • Model ID : 「1-2. アプリケーション推論プロファイルの作成」で作成したアプリケーション推論プロファイルの ARN
  • Base Inference Model : anthropic.claude-sonnet-4-20250514-v1:0

これで、Cline with Amazon Bedrock を利用できる状態になりました。
続いては生成 AI モデルの使用状況をモニタリングする方法を解説していきます。
Missing alt text value

(オプション) 1-4. Cline with Amazon Bedrock の AWS SSO を利用する際の設定

  • AWS Profile を選択 : AWS Profile フィールドに bedrock-cline-profile を入力
  • Access Key、Secret Key、Session Token は空欄
  • それ以外は同上

1-4-1. セッションの更新

AWS SSO のセッションは設定した時間 (デフォルト 4 時間) で期限切れになります。期限切れの場合 :

bash
# セッションの更新
aws sso login --profile bedrock-cline-profile

注意 : VS Code や Cline を再起動する必要はありません。バックグラウンドで自動的に新しい認証情報が使用されます。

2. Amazon Bedrock のモデル呼び出しのログ記録を有効にする

マネジメントコンソールから Amazon CloudWatch を開き、ナビゲーションペインで、[ロググループ] を選択します。

/aws/bedrock/invoke-modelという名前でロググループを作成します。

Missing alt text value

ログ設定

続いて、Amazon Bedrock を開きナビゲーションペインで、[設定] を選択します。

[モデル呼び出しのログ記録] をオンにして、以下の項目を設定し保存します。

  • ログ記録先を選択 : [CloudWatch Logs のみ]

  • CloudWatch Logs の設定
    ロググループ名: /aws/bedrock/invoke-model

  • Bedrock を認可する方法を選択
    [新しいロールを作成して使用]
    サービスロール名: BedrockInvokeModelLogsRole
 
これにより、生成 AI モデルの呼び出しに関するログが CloudWatch Logs に記録されるようになります。
Missing alt text value

3. コスト分配タグを使用して生成 AI モデルの使用状況を管理する

【注意】コスト分配タグを設定するには AWS の管理アカウントでログインして操作する必要があります。

マネジメントコンソールから Billing and Cost Management を開き、ナビゲーションペインで、[コスト配分タグ] を選択します。

アプリケーション推論プロファイルを作成する際にタグ付けした userName と teamName にチェックを入れ[有効化]をクリックします。

※ タグが認識されるまで概ね 24 時間かかります。タグが表示されない場合は時間を置いてから再度この画面を開いてみてください。


これにより請求をタグごとに分類したり、AWS Cost Explorer の表示をタグでフィルタリングすることができるようになります。詳しくは こちらのドキュメント をご覧ください。

また、AWS Budgets を使用することで予算を設定をしたり、アラートを通知することができるようになるのでユースケースに合わせて利用の検討をおすすめします。

Missing alt text value

4. AWS Lambda でログを監視して生成 AI モデルの使用状況を管理する

コスト分配タグによって Amazon Bedrock のコスト状況を管理できるようになりました。しかし、生成 AI モデルを呼び出してから請求データに反映されるまでには概ね 24 時間かかります。

そこで、ここからは AWS Lambda を定期実行してリアルタイムに近い形で使用状況を把握する方法を紹介します。

この手順を始める前にあらかじめ「2. Amazon Bedrock のモデル呼び出しのログ記録を有効にする」を完了させてください。

4-1. Lambda 用の IAM ロール作成

マネジメントコンソールで IAM を開き、Lambda に付与するロールを作成します。

Missing alt text value

  • 信頼されたエンティティタイプ : AWS のサービス
  • ユースケース : Lambda
Missing alt text value

  • 許可ポリシー : AWSLambdaExecute
  • ロール名 : BedrockMonitorLambdaRole

4-2. AWS Lambda 関数の作成

マネジメントコンソールで Lambda を開き、関数を作成します。

  • 名前 :bedrockMonitor

  • ランタイム : Python 3.13

  • アクセス権限 :
    実行ロール: [既存のロールを使用する]
    BedrockMonitorLambdaRole を選択

デプロイ

以下のコードを入力したら [Deploy] ボタンをクリックします。

python
import json
import boto3
import os
import time
import re
from datetime import datetime, timedelta

def lambda_handler(event, context):

    # ロググループ名
    LOG_GROUP_NAME = os.environ.get("LOG_GROUP_NAME", "/aws/bedrock/invoke-model")

    # 料金テーブル
    PRICE_TABLE = json.loads(os.environ.get("PRICE_TABLE"))
    """料金は頻繁に変更されるため、必ず最新の AWS Pricing ページを参照してください。"""

    # CloudWatch Logs クライアントの初期化
    logs_client = boto3.client("logs")

    # 現在時刻から1時間前までのログを取得対象とする
    end_time = datetime.now()
    start_time = end_time - timedelta(hours=1)

    # CloudWatch Logs Insights クエリの実行
    query = """
        fields @timestamp, identity.arn, modelId, input.inputTokenCount, input.cacheReadInputTokenCount, input.cacheWriteInputTokenCount, output.outputTokenCount
        | filter schemaType = "ModelInvocationLog"
        | stats 
            sum(input.inputTokenCount) as total_input_tokens,
            sum(input.cacheReadInputTokenCount) as total_cache_read_input_tokens,
            sum(input.cacheWriteInputTokenCount) as total_cache_write_input_tokens,
            sum(output.outputTokenCount) as total_output_tokens
            by identity.arn, modelId
    """

    response = logs_client.start_query(
        logGroupName=LOG_GROUP_NAME,
        startTime=int(start_time.timestamp()),
        endTime=int(end_time.timestamp()),
        queryString=query,
    )

    query_id = response["queryId"]

    # クエリ結果の取得(最大30秒待機)
    result_response = None
    for _ in range(30):
        time.sleep(1)
        result_response = logs_client.get_query_results(queryId=query_id)
        if result_response["status"] in [
            "Complete",
            "Failed",
            "Cancelled",
            "Timeout",
            "Unknown",
        ]:
            break

    # クエリ結果の解析処理
    for result in result_response["results"]:
        user_arn = None
        model_id = None
        total_input_tokens = 0
        total_cache_read_input_tokens = 0
        total_cache_write_input_tokens = 0
        total_output_tokens = 0

        for field in result:
            if field["field"] == "identity.arn":
                user_arn = field["value"]
                # SSO の assumed-role ARN からユーザー名を抽出
                # 例: arn:aws:sts::123456789012:assumed-role/AWSReservedSSO_BedrockClineAccessPermissionSet_xxxxx/bedrock-claude-user
                match = re.search(r'/([^/]+)$', user_arn)
                if match:
                    user_name = match.group(1)
                else:
                    user_name = user_arn
            elif field["field"] == "modelId":
                model_id = field["value"]
            elif field["field"] == "total_input_tokens":
                total_input_tokens = int(field["value"])
            elif field["field"] == "total_cache_read_input_tokens":
                total_cache_read_input_tokens = int(field["value"])
            elif field["field"] == "total_cache_write_input_tokens":
                total_cache_write_input_tokens = int(field["value"])
            elif field["field"] == "total_output_tokens":
                total_output_tokens = int(field["value"])

        # コスト計算
        input_cost = (total_input_tokens / 1000) * PRICE_TABLE["inputPrice"]
        output_cost = (total_output_tokens / 1000) * PRICE_TABLE["outputPrice"]
        cache_read_input_cost = (total_cache_read_input_tokens / 1000) * PRICE_TABLE["cacheReadPrice"]
        cache_write_input_cost = (total_cache_write_input_tokens / 1000) * PRICE_TABLE["cacheWritePrice"]

        total_cost = (input_cost + output_cost + cache_read_input_cost + cache_write_input_cost)

        print(f"User: {user_name}, Model ID: {model_id}, Total Cost: ${total_cost:.4f}")

        # 【ユースケースに応じて、コストを記録をしたり、通知を送信する処理を追加できます。】

    return {
        "statusCode": 200,
        "body": json.dumps(
            {
                "message": "Bedrock model invocation monitoring completed successfully.",
            }
        ),
    }

Lambda 関数の設定

[設定] タブをクリックして以下の設定を行います。

  • [一般設定] セクション : [タイムアウト] を 10 秒に設定

  • [環境変数] セクション → 以下の環境変数を追加します。
    LOG_GROUP_NAME: ロググループ名(例:/aws/bedrock/invoke-model)
    PRICE_TABLE: 料金テーブル(例:{"inputPrice":0.003,"outputPrice":0.015,"cacheReadPrice":0.0003,"cacheWritePrice":0.00375})


以上で Lambda 関数の作成が完了しました。続いてはこの Lambda 関数を定期実行するためのスケジュールを作成します。

4-3. Lambda を定期実行するスケジュールの作成

マネジメントコンソールで Amazon EventBridge を開き、左側のペインから「スケジュール」を選択し [スケジュールを作成] をクリックします。

スケジュールの詳細の指定

  • スケジュール名 : BedrockMonitorSchedule
  • 頻度 : 定期的なスケジュール
  • スケジュールの種類 : rate ベースのスケジュール
  • rate 式 : rate (1 hours)
  • フレックスタイムウィンドウ : オフ

ターゲットの選択

  • ターゲット API : [テンプレート化されたターゲット] から AWS Lambda Invoke を選択
  • ターゲット Lambda 関数 : bedrockMonitor


これで、Lambda 関数が1時間ごとに実行され、CloudWatch Logs から生成 AI モデルの使用状況を取得し、コストを計算するようになります。

Lambda の実行頻度やログの取得期間はユースケースに応じて調整してください。間隔を短くするとリアルタイムに近い形で使用状況を把握できますが、コストも増加するのでご注意ください。

画面イメージ

Missing alt text value

Missing alt text value

5. リソースの削除

  • Amazon EventBridge Scheduler
    Amazon EventBridge 管理画面の「スケジュール」を選択し、BedrockMonitorSchedule を削除します。

  • Amazon Bedrock
    Amazon Bedrock 管理画面の [設定] を選択し、[モデル呼び出しのログ記録] をオフにして設定を保存します。

  • AWS Lambda
    AWS Lambda 管理画面の [関数] を選択し、bedrockMonitor を削除します。

  • AWS IAM
    AWS IAM 管理画面の [ロール ]を選択し、BedrockMonitorLambdaRole を削除します。
    AWS IAM 管理画面の [ロール] を選択し、BedrockInvokeModelLogsRole を削除します。
    AWS IAM 管理画面の [ユーザー] を選択し、bedrock-claude-user を削除します。

  • Amazon CloudWatch
    Amazon CloudWatch 管理画面の [ロググループ] を選択し、/aws/bedrock/invoke-model を削除します。

  • Amazon Bedrock アプリケーション推論プロファイルの削除
    CloudShell を開き、以下のコマンドを実行してアプリケーション推論プロファイルを削除します。
    $ aws bedrock delete-inference-profile --inference-profile-identifier アプリケーション推論プロファイルの ARN
    • AWS IAM Identity Center (AWS SSO)

      許可セットの削除 :

      1. IAM Identity Center 管理画面を開く
      2. 「AWS アカウント」から対象アカウントを選択
      3. BedrockClineAccessPermissionSet の割り当てを解除
      4. 「許可セット」から BedrockClineAccessPermissionSet を削除

      ユーザーの削除 (必要に応じて) :
      1. 「ユーザー」を選択
      2. bedrock-claude-user を選択して削除
      3. 他のサービスでも使用している場合は削除しない

    AWS CLI Profile の削除

    ローカル環境の設定ファイルから Profile を削除します。

    bash
    # Profile の削除
    aws configure delete-profile --profile bedrock-cline-profile
    
    # または手動で編集
    vi ~/.aws/config
    # [profile bedrock-cline-profile] セクションを削除
    
    # SSO セッションの削除(オプション)
    # [sso-session bedrock-cline-session] セクションも削除可能

    6. 【まとめ】 Cline with Amazon Bedrock 導入の効果と展望

    (株) ブリューアスは AI エージェントや Vibe Coding を学習することができる「テックアカデミー」を運営、開発しています。「テックアカデミー」の開発において Amazon Bedrock を使うことで適切なガバナンスを保ちながら生成 AI を活用し、開発者の生産性を大幅に向上させることができました。

    私たちは、コーディングだけでなく以下のようにあらゆる開発プロセスにおいて生成 AI を活用しています。これにより、工程によっては 7 ~ 8 割以上の時間の短縮を実現しました。

    • 調査
    • 仕様検討
    • 設計
    • 実装、コーディング
    • ドキュメンテーション
    • デバッグ
    • コードレビュー
    • リファクタリング
    • テストケース作成
    • テストコード作成

    また、新たな試みとしてテックアカデミーの教材執筆の際に Cline with Amazon Bedrock を使用して、これまでより短期間で教材を作成することができました。

    今後は、MCP (Model Context Protocol) やローカル LLM の活用を進めさらに開発プロセスの効率化を図るとともに、社内事例をもとにテックアカデミーで提供するコースの充実を図っていきます。

    筆者プロフィール

    Missing alt text value

    半田 満

    株式会社ブリューアス
    R&D Section

    2019 年キラメックス株式会社 (現ブリューアス) に入社。エンジニアとして「テックアカデミー」の開発に携わる。
    現在は、生成 AI の社内活用と自社サービスへの導入を推進。また、Vibe Coding の実践経験をもとに テックアカデミー「Vibe Codingコース」 の企画を担当。

    Missing alt text value

    黒澤 蓮 (Ren Kurosawa)

    アマゾン ウェブ サービス ジャパン合同会社
    ソリューションアーキテクト

    Web 業界のお客様を中心にアーキテクチャ設計や構築をサポートしています。データアナリティクスサービスや機械学習の領域を得意としています。将来の夢は宇宙でポエムを詠むことです。