mybook

FDE ツールキット — 武器庫を整える

道具を知らない職人

「ソウタ、FDE として半年が経ったな。技術力は申し分ない。だが一つ聞く——お前は今、どんなツールを使って仕事をしている?」

金曜日の夕方、Arclight AI のオフィスで、カイはホワイトボードの前に立っていた。

ソウタは少し考えてから答えた。「Slack でお客さんとやり取りして、Google Docs で提案書を書いて、ローカルで Rails アプリを動かしてデモして……あとは GitHub くらいですかね」

カイは苦笑した。

「道具を知らない職人は、腕だけで戦う羽目になる。腕がいいから今まで乗り切れたが、FDE として案件が増えてくると限界が来る。今日は武器庫の話をしよう」

カイがホワイトボードに描き始めたのは、FDE の仕事を支えるツール群の全体像だった。

Loading diagram...

CRM — 顧客関係の司令塔

「まず CRM だ。お前がお客さんと何を話して、どの案件がどのフェーズにあるか——これを頭の中だけで管理しているだろう?」

カイの指摘は痛いところを突いていた。ソウタは確かに、案件の状態を Notion のメモと記憶に頼っていた。

主要 CRM ツール

Salesforce は市場シェア最大のエンタープライズ CRM だ。Fortune 500 の 90% 以上が採用しており、FDE が大企業と仕事をする場合、まず間違いなく Salesforce のデータと向き合うことになる。商談のステージ管理、顧客とのやり取り履歴、収益予測まで一元管理できる。

HubSpot は AI 機能を積極的に統合している新世代 CRM だ。メールのパーソナライズ、リードスコアリング、ワークフロー自動化を AI が支援する。スタートアップや中規模企業での採用が急速に伸びている。

DealHub CPQ(Configure-Price-Quote)は、複雑な価格体系を持つプロダクトの見積もり自動化ツールだ。FDE が「この構成だといくらになりますか?」と聞かれたとき、即座に正確な見積もりを出せる。

Loading diagram...

「CRM は FDE にとって顧客の記憶装置だ」とカイは言った。「3ヶ月前にどんな技術的懸念を話したか、競合の何と比較されているか——全部ここに残す。未来の自分を助けるためにな」


デモプラットフォーム — 百聞は一見にしかず

「次はデモだ。ここが FDE の最大の武器になる」

カイの表情が変わった。ソウタも実感していた——どれだけ資料を作り込んでも、実際に動くプロダクトを見せた瞬間に顧客の目が輝く。問題は、本番環境でデモすると事故が起きることだ。

デモツールの分類

デモツールは目的によって大きく 5 つに分かれる。

Loading diagram...

インタラクティブデモ

NavatticWalnutStorylaneArcade といったツールは、ノーコードでプロダクトツアーを作れる。プロダクトの画面をキャプチャし、クリックポイントやガイドテキストを追加するだけだ。

「営業がエンジニアの手を借りずにデモを作れる。FDE の工数を食う『簡単なデモ依頼』が激減する」とカイは説明した。

ライブデモ拡張

ここからが FDE にとって特に重要な領域だ。

Saleo(年間 $40,000-50,000)は、本番プロダクトの上に合成データをリアルタイムでオーバーレイするツールだ。顧客が見ている画面では、顧客の業界に合ったデータが表示されるが、実際のデータベースには一切影響しない。

「製造業の顧客にデモするとき、画面に "サンプル株式会社" じゃなくて、実在しないが製造業っぽい会社名と数値が並ぶ。これだけで顧客のイメージが変わるんだ」

Demostack(年間約 $50,000)は、プロダクトのフロントエンドをまるごとクローンする。本番と見た目は同じだが完全に独立した環境なので、何を触っても壊れない。設定を変えたり、エラーケースを見せたりするデモに向いている。

INFO

Saleo はライブプロダクトにデータを重ねる「オーバーレイ型」、Demostack はフロントエンドを丸ごと複製する「クローン型」。前者は最新 UI が常に反映される利点があり、後者は自由にカスタマイズできる利点がある。予算と用途で使い分ける。

動画ファーストデモ

Consensus は、非同期の動画デモに特化したプラットフォームだ。FDE が録画したデモ動画を、顧客がいつでも視聴でき、興味のあるセクションを選んで深掘りできる。

驚くべきことに、Consensus を使った案件ではクロージング率が 2 倍になるというデータがある。「ライブデモの日程調整に 2 週間かかる間に、動画デモなら翌日に全ステークホルダーが観られる。スピードが勝負を分けるんだ」とカイは言った。

サンドボックス / ハンズオンデモ

TestBoxInstruqtCloudShare は、顧客に実際に触ってもらえる完全な動作環境を提供する。

Instruqt は特に開発者向けプロダクトで威力を発揮する。ブラウザ上に仮想マシンやコンテナが立ち上がり、顧客のエンジニアが自分の手で API を叩いたり、コードを書いたりできる。

「技術者は、誰かのデモを見るより自分で触りたい。その欲求に応えるのがサンドボックスだ」

AI エージェントデモ

Karumi は最新世代のデモツールで、AI エージェントがデモを自律的に実行する。顧客の質問に応じて画面を操作し、該当する機能を見せてくれる。FDE が同席しなくても、AI が初期デモを担当する未来がすぐそこに来ている。


プロダクト分析 — データで語る

「デモが終わった後、顧客がトライアル環境で何を触っているか——見えているか?」

ソウタは首を振った。

主要ツール

Mixpanel はイベントベースの分析ツールだ。「ユーザーが API キーを発行した」「ダッシュボードを作成した」といった行動を追跡できる。FDE はトライアル中の顧客の利用状況を見て、適切なタイミングでフォローアップできる。

Amplitude はプロダクトインテリジェンスに強い。ユーザーの行動パスを可視化し、どこで離脱しているかを特定する。「トライアル顧客の 80% がデータ接続で止まっている」と分かれば、FDE はそこに集中的に支援を入れられる。

Pendo はアプリ内ガイダンスを提供する。新機能のウォークスルーやツールチップをコードなしで追加でき、FDE が顧客ごとにオンボーディング体験をカスタマイズできる。

FullStory はセッションリプレイツールだ。顧客が実際にどう操作したかを録画のように再生できる。「顧客が困っている」と言ったとき、何に困っているかをビデオで確認できる。

WARNING

プロダクト分析ツールのデータを顧客に見せるときは、プライバシーに注意すること。「御社のユーザーの行動を追跡しています」ではなく、「利用状況の傾向から、この機能がお役に立てそうです」という伝え方をする。


会話インテリジェンス — 商談を科学する

「次は、お前が一番苦手そうなやつだ」

カイの言葉にソウタは身構えた。

Gong

Gong(年間 $1,600/ユーザー)は、営業通話やビデオ会議を録音・文字起こしし、AI が分析するツールだ。

  • 顧客が競合の名前を何回言ったか
  • 価格の話題でどんな反応を示したか
  • FDE の技術説明のどこで顧客が質問を始めたか

これらが全て数値化される。

「自分のデモを後から見返すのは辛い。だが、そこに成長がある。Gong は FDE にとっての試合映像だ」

Revenue.io

Revenue.io はリアルタイムコーチング機能を持つ。商談中に「今の説明が長すぎます」「競合比較のスライドを出しましょう」といったアドバイスが画面に表示される。新人 FDE の立ち上がりを加速させるツールだ。


RFP 自動化 — 最大の苦痛を消す

ソウタの表情が曇った。RFP(Request for Proposal)——顧客から送られてくる数百項目の技術要件書に回答する作業だ。先月も 200 問の RFP に 3 日間かかった。

「あの地獄を知っているか」とカイが笑った。「だが今は違う」

SiftHub

SiftHub は RFP 回答を AI で自動化するツールだ。過去の回答データベース、プロダクトドキュメント、ナレッジベースを学習し、新しい RFP の質問に対して自動で回答を生成する。

自動充填率は 70-90%。手動に比べて 8 倍速い

「200 問の RFP が届いたら、まず SiftHub に食わせる。7 割は自動で埋まる。FDE は残りの技術的に難しい 3 割に集中すればいい」

Inventive AI

Inventive AI も同様の RFP 自動化ツールだ。特にセキュリティ質問票(SOC 2、ISO 27001 関連)の自動回答に強い。

INFO

RFP 対応は SE(Sales Engineer)の業務時間の中でも最も非生産的とされる作業の一つだ。自動化によって、FDE は本来注力すべき技術的な課題解決と顧客理解に時間を振り向けられる。


ナレッジ管理 — 即座に引き出せる知識

「顧客との通話中に『御社の製品は SOC 2 に準拠していますか?』と聞かれたら、どうする?」

「えっと……セキュリティチームに Slack で聞きます」

「通話中に? 顧客を 5 分待たせるのか?」

主要ツール

Guru は、ブラウザ拡張やSlack 連携で、必要な情報をその場で検索・表示できるナレッジ管理ツールだ。通話中でも検索バーから「SOC 2」と打てば、最新の準拠状況が即座に出てくる。

Glean はエンタープライズ AI 検索だ。Slack、Confluence、Google Drive、GitHub——社内のあらゆるデータソースを横断検索し、AI が最適な回答を提示する。

Notion はドキュメント管理の定番だ。FDE チームの技術 FAQ、競合比較表、デモシナリオ集をまとめておく。

Highspot はセールスイネーブルメントプラットフォームだ。顧客の業界や商談のフェーズに応じて、最適な資料やケーススタディを推薦してくれる。


SE の時間配分の現実

カイがダッシュボードを開いた。SE(Sales Engineer)の時間配分に関する業界データだ。

WARNING

SE の業務時間のうち、直接的な営業活動(デモ、技術検証、顧客対応)に使える時間はわずか 56% だ。残りの 44% は管理業務、社内会議、ツール操作に消えている。ツールの自動化と効率化は「あれば便利」ではなく「なければ致命的」なレベルの課題だ。

Loading chart...

「44% が本来の仕事じゃないことに消えている。ツールで自動化できる部分を削れば、その時間を顧客の課題解決に回せる。これが FDE ツールキットの本当の価値だ」


実践: 社内デモ管理システムを Rails で構築する

「理論はここまでだ。実際にツールを作ってみよう」

カイが提案したのは、Arclight AI 社内のデモ管理システムだった。どの顧客にどのデモ環境が割り当てられているか、環境のステータスはどうか——これを一元管理するシステムだ。

Demo モデル

まず、デモの基本モデルを定義する。顧客との紐付け、ステータス管理、スケジュール管理を担う。

# app/models/demo.rb
class Demo < ApplicationRecord
  belongs_to :customer
  belongs_to :fde, class_name: "User"
  has_one :demo_environment, dependent: :destroy
 
  enum :status, {
    draft:      "draft",
    scheduled:  "scheduled",
    ready:      "ready",
    in_progress: "in_progress",
    completed:  "completed",
    archived:   "archived"
  }
 
  enum :demo_type, {
    live:        "live",
    sandbox:     "sandbox",
    video:       "video",
    interactive: "interactive"
  }
 
  validates :title, presence: true
  validates :scheduled_at, presence: true, if: :scheduled?
  validates :scenario, presence: true
 
  scope :upcoming, -> { where(status: %w[scheduled ready]).order(:scheduled_at) }
  scope :for_fde, ->(user) { where(fde: user) }
 
  def provision_environment!
    return unless sandbox?
    return if demo_environment&.running?
 
    DemoProvisioningJob.perform_later(id)
    update!(status: :scheduled)
  end
end

DemoEnvironment モデル

AWS リソースの追跡を行うモデルだ。ECS タスクや関連するリソースの ARN を記録し、ライフサイクルを管理する。

# app/models/demo_environment.rb
class DemoEnvironment < ApplicationRecord
  belongs_to :demo
 
  enum :status, {
    provisioning: "provisioning",
    running:      "running",
    stopped:      "stopped",
    failed:       "failed",
    terminated:   "terminated"
  }
 
  validates :cluster_arn, presence: true, if: :running?
 
  def expires_soon?
    expires_at.present? && expires_at < 2.hours.from_now
  end
 
  def uptime
    return 0 unless provisioned_at
 
    Time.current - provisioned_at
  end
 
  def cost_estimate
    hours = (uptime / 1.hour).ceil
    hours * BigDecimal("0.15") # Fargate vCPU/hour の概算
  end
end

マイグレーション

# db/migrate/XXXXXX_create_demos.rb
class CreateDemos < ActiveRecord::Migration[7.2]
  def change
    create_table :demos do |t|
      t.references :customer, null: false, foreign_key: true
      t.references :fde, null: false, foreign_key: { to_table: :users }
      t.string :title, null: false
      t.text :scenario, null: false
      t.string :status, null: false, default: "draft"
      t.string :demo_type, null: false, default: "live"
      t.datetime :scheduled_at
      t.jsonb :metadata, default: {}
      t.timestamps
    end
 
    create_table :demo_environments do |t|
      t.references :demo, null: false, foreign_key: true
      t.string :status, null: false, default: "provisioning"
      t.string :cluster_arn
      t.string :task_arn
      t.string :access_url
      t.datetime :provisioned_at
      t.datetime :expires_at
      t.jsonb :resource_tags, default: {}
      t.timestamps
    end
 
    add_index :demos, %i[status scheduled_at]
    add_index :demos, %i[fde_id status]
  end
end

デモプロビジョニング Job

バックグラウンドで AWS 上にデモ環境を立ち上げる ActiveJob だ。ECS Fargate を使って、顧客ごとに隔離されたコンテナ環境を起動する。

# app/jobs/demo_provisioning_job.rb
class DemoProvisioningJob < ApplicationJob
  queue_as :provisioning
  retry_on Aws::ECS::Errors::ServiceError, wait: 30.seconds, attempts: 3
 
  def perform(demo_id)
    demo = Demo.find(demo_id)
    env = demo.create_demo_environment!(status: :provisioning)
 
    begin
      result = provision_fargate_task(demo)
 
      env.update!(
        status:         :running,
        cluster_arn:    result[:cluster_arn],
        task_arn:       result[:task_arn],
        access_url:     result[:access_url],
        provisioned_at: Time.current,
        expires_at:     24.hours.from_now
      )
 
      demo.update!(status: :ready)
      DemoReadyNotifier.notify(demo)
    rescue StandardError => e
      env.update!(status: :failed)
      Rails.logger.error("[DemoProvisioning] Failed: #{e.message}")
      ErrorNotifier.report(e, context: { demo_id: demo.id })
      raise
    end
  end
 
  private
 
  def provision_fargate_task(demo)
    ecs = Aws::ECS::Client.new(region: "ap-northeast-1")
 
    response = ecs.run_task(
      cluster:          ENV.fetch("DEMO_ECS_CLUSTER"),
      task_definition:  task_definition_for(demo),
      launch_type:      "FARGATE",
      count:            1,
      network_configuration: {
        awsvpc_configuration: {
          subnets:          ENV.fetch("DEMO_SUBNETS").split(","),
          security_groups:  [ENV.fetch("DEMO_SECURITY_GROUP")],
          assign_public_ip: "ENABLED"
        }
      },
      overrides: {
        container_overrides: [{
          name: "demo-app",
          environment: [
            { name: "CUSTOMER_ID", value: demo.customer_id.to_s },
            { name: "DEMO_SCENARIO", value: demo.scenario },
            { name: "DEMO_EXPIRES_AT", value: 24.hours.from_now.iso8601 }
          ]
        }]
      },
      tags: [
        { key: "demo_id", value: demo.id.to_s },
        { key: "customer", value: demo.customer.name }
      ]
    )
 
    task = response.tasks.first
    task_arn = task.task_arn
 
    # ENI のパブリック IP を取得するまで待機
    ecs.wait_until(:tasks_running, cluster: ENV.fetch("DEMO_ECS_CLUSTER"), tasks: [task_arn])
 
    public_ip = fetch_public_ip(ecs, task)
 
    {
      cluster_arn: ENV.fetch("DEMO_ECS_CLUSTER"),
      task_arn:    task_arn,
      access_url:  "https://demo-#{demo.id}.arclight.ai"
    }
  end
 
  def task_definition_for(demo)
    case demo.demo_type
    when "sandbox"  then "arclight-demo-sandbox:latest"
    when "live"     then "arclight-demo-live:latest"
    else "arclight-demo-sandbox:latest"
    end
  end
 
  def fetch_public_ip(ecs, task)
    eni_id = task.attachments
      .find { |a| a.type == "ElasticNetworkInterface" }
      &.details&.find { |d| d.name == "networkInterfaceId" }
      &.value
 
    return unless eni_id
 
    ec2 = Aws::EC2::Client.new(region: "ap-northeast-1")
    resp = ec2.describe_network_interfaces(network_interface_ids: [eni_id])
    resp.network_interfaces.first&.association&.public_ip
  end
end

コントローラ

FDE がデモの作成・プロビジョニング・一覧確認を行う API コントローラだ。

# app/controllers/api/v1/demos_controller.rb
module Api
  module V1
    class DemosController < ApplicationController
      before_action :authenticate_fde!
      before_action :set_demo, only: %i[show provision teardown]
 
      def index
        demos = Demo.for_fde(current_user)
                     .upcoming
                     .includes(:customer, :demo_environment)
 
        render json: demos, include: %i[customer demo_environment]
      end
 
      def create
        demo = Demo.new(demo_params.merge(fde: current_user))
 
        if demo.save
          render json: demo, status: :created
        else
          render json: { errors: demo.errors.full_messages },
                 status: :unprocessable_entity
        end
      end
 
      def provision
        if @demo.demo_environment&.running?
          render json: { error: "環境は既に起動中です" },
                 status: :conflict
          return
        end
 
        @demo.provision_environment!
        render json: { message: "プロビジョニングを開始しました", demo: @demo }
      end
 
      def teardown
        TeardownDemoJob.perform_later(@demo.id)
        render json: { message: "環境の停止を開始しました" }
      end
 
      private
 
      def set_demo
        @demo = Demo.for_fde(current_user).find(params[:id])
      end
 
      def demo_params
        params.require(:demo).permit(
          :title, :scenario, :demo_type,
          :scheduled_at, :customer_id, metadata: {}
        )
      end
    end
  end
end

AWS デモ環境の自動プロビジョニング

ソウタは、先ほどの Job が叩いている AWS インフラの全体像を理解したかった。カイがアーキテクチャを描いた。

Loading diagram...

「ポイントは 3 つある」とカイが説明した。

第一に、隔離性。各デモは独立した Fargate タスクとして起動する。顧客 A のデモが顧客 B のデモに影響することはない。

第二に、自動期限切れ。デモ環境は 24 時間で自動的に停止する。コストが無限に膨らむのを防ぐ。

第三に、再現性。同じシナリオなら、何度プロビジョニングしても同じ環境が立ち上がる。

期限切れ環境のクリーンアップ

放置された環境を定期的に停止するジョブも必要だ。

# app/jobs/cleanup_expired_demos_job.rb
class CleanupExpiredDemosJob < ApplicationJob
  queue_as :maintenance
 
  def perform
    expired = DemoEnvironment.running.where("expires_at < ?", Time.current)
 
    expired.find_each do |env|
      Rails.logger.info("[Cleanup] Terminating expired demo: #{env.demo_id}")
      TeardownDemoJob.perform_later(env.demo_id)
    end
 
    Rails.logger.info("[Cleanup] Queued #{expired.count} environments for teardown")
  end
end
# config/recurring.yml (Solid Queue)
cleanup_expired_demos:
  class: CleanupExpiredDemosJob
  queue: maintenance
  schedule: every hour

WARNING

デモ環境の自動クリーンアップは必ず実装すること。以前 Arclight AI では、停止忘れのデモ環境が 47 台溜まり、月の AWS 請求が $8,000 余分にかかった事故があった。


ツールを組み合わせたワークフロー

「個々のツールを知るだけでは不十分だ。組み合わせて初めて威力が出る」

カイが描いたのは、案件のライフサイクルに沿ったツールの連携フローだった。

Loading diagram...
  1. リード獲得: HubSpot が Web サイトからのリードを自動でスコアリング
  2. 初回デモ: Consensus の動画デモを送り、顧客が興味を持つ領域を特定
  3. 技術検証: Instruqt のサンドボックスで、顧客のエンジニアに実際に触ってもらう
  4. 商談分析: Gong で全ての商談を録音・分析し、顧客の懸念点を把握
  5. RFP 回答: SiftHub で技術要件書を 8 倍速で回答
  6. クローズ: DealHub CPQ で複雑な見積もりを自動生成

「一つ一つは単なるツールだ。だが繋げるとワークフロー全体が加速する。FDE の生産性が 10 倍になるというのは、比喩じゃない」


武器庫を整えた先に

オフィスを出る頃には、外はすっかり暗くなっていた。

ソウタは歩きながら考えていた。半年前、自分は「良いコードを書けば顧客は満足する」と思っていた。だが FDE の仕事はコードだけではなかった。顧客を理解し、信頼を築き、技術で課題を解決する——そのプロセス全体を支えるツールがあった。

「ツールは便利なおまけじゃない」

カイの言葉が蘇る。

ツールはフォースマルチプライヤーだ。腕力を 10 倍にするてこの原理みたいなもの。FDE が本当にやるべきこと——顧客の課題を理解し、解決すること——に集中するための装置なんだ」

来週から、ソウタは社内デモ管理システムの本格開発に入る。CRM との連携、デモ環境の自動プロビジョニング、利用状況のトラッキング。これまで手作業でやっていたことを仕組みにする。

「道具を知る職人は、腕を最大限に活かせる」

ソウタは手帳にそう書き加えた。武器庫はまだ揃い始めたばかりだ。だが、その一つ一つが確実に、自分の FDE としての力を増幅させている実感があった。


まとめ

本章で学んだ FDE ツールキットの全体像を振り返る。

カテゴリ主要ツールFDE にとっての価値
CRMSalesforce, HubSpot, DealHub CPQ顧客情報の一元管理と見積もり自動化
デモ基盤Navattic, Saleo, Demostack, Consensus, Instruqt, Karumiデモの品質と効率を劇的に向上
プロダクト分析Mixpanel, Amplitude, Pendo, FullStory顧客の利用状況をデータで把握
会話分析Gong, Revenue.io商談の質を科学的に改善
RFP 自動化SiftHub, Inventive AIRFP 回答を 8 倍速に
ナレッジ管理Guru, Glean, Notion, Highspot必要な知識を即座に引き出す

次章では、FDE のキャリアパスと成長戦略について掘り下げていく。技術者としての深化と、ビジネスリーダーとしての発展——FDE ならではのキャリアの分岐点を探る。