チャット型AIツールを業務フローでつなげるとどうなるか:ナレコムAI Chatbotで6機能を検証

はじめに

AIを業務に取り入れるツールは増えていますが、「実際に何ができるのか」「どんな業務に使えるのか」が分かりにくいと、導入のイメージが湧きにくいこともあります。

今回は、ナレコムAI Chatbotのツールを実際に動かしながら、各ツールがどのような業務で使えそうかを技術検証の形で確認しました。

単なる機能紹介ではなく、実際の入力内容や出力結果も見ながら、実務での使い方を意識して整理しています。

※ 本記事では、株式会社ナレッジコミュニケーションが提供するナレコムAI Chatbotを使い、各ツールを業務シナリオに沿って検証しています。

目次

1. ナレコムAI Chatbotとは

ナレコムAI Chatbotは、チャット形式でAIを活用できるツールです。

Web検索、Deep Research、コード生成、画像生成、コード実行などのツールを備えており、調査、整理、資料作成、確認作業をひとつの画面で進めやすいのが特徴です。

ナレコムAI Chatbotの概要画面

2. 今回触ってみたツール

まずは、今回検証したツールを簡単に確認します。

機能 簡単な説明
MCP選択 利用する機能や接続先を切り替えるための機能
Web検索 Web上の公開情報を検索して調べるための機能
Deep Research ひとつのテーマを深く調べて整理するための機能
コード生成 必要なコードをAIに作ってもらうための機能
画像生成 指示に応じて画像を作るための機能
コード実行 AIが作成したコードをその場で動かして確認するための機能

情報の確認だけでなく、整理、可視化、資料化まで含めて検証できるのが特徴でした。

今回扱うツールとは別に、同じ質問に対して複数のLLMの回答を見比べられるモデル比較、資料やナレッジをもとに回答しやすくするベクトルストア、問い合わせの流れを整理したり案内先を分けたりできる簡易エージェントといった機能もあります。

ツール選択画面

ナレコムAI Chatbotのツール選択画面
メニュー画面

メニュー画面

ナレコムAI Chatbotのメニュー画面

3. 各ツールはどんな業務に使えそうか

3-1. MCP選択

MCP選択は、利用する機能や接続先を切り替えるための機能です。

ナレコムAI Chatbotでは、公式ドキュメント、法令や制度の確認、補助金や支援制度の確認、HTTPリクエスト、現在時刻の取得など、用途に応じて参照先を切り替えやすくなっています。

たとえば、技術調査ではAWSなどの公式ドキュメントを使い、法律やルールを確認したいときは法令検索、補助金や助成金の情報を調べたいときは補助金検索を選ぶといった使い分けが考えられます。

入力プロンプト

Lambda関数の基本的な作成方法を公式ドキュメントで調べて

出力結果

クリックして開く

AWS Lambda関数の基本的な作成方法まとめ
AWS Lambda は、サーバーを意識せずにコードを実行できるサーバーレスサービスです。

1. 作成前の準備
- AWSアカウント
- AWSコンソールにログインできる権限
- Lambda を作成・実行するための IAM 権限

2. コンソールでの基本的な作成手順
- Lambda コンソールを開く
- 「関数の作成」を選ぶ
- 「一から作成」を選ぶ
- 関数名、ランタイム、実行ロールを設定する
- コードを入力する
- テストイベントで実行確認する
- CloudWatch Logs でログを確認する

3. 重要な基本概念
- ハンドラー
- イベントオブジェクト
- コンテキストオブジェクト
- ログ出力

必要であれば次に、公式ドキュメントに沿った画面操作ベースの手順や、Python/Node.js の最小サンプルでの作成例としてさらに具体化できます。

実際に触ってみて、AWS Knowledge MCPを選択した状態で質問すると、AWS公式ドキュメントをもとにした手順や概要が返ってきました。

用途に応じて参照先を切り替えることで、一般的な回答よりも根拠のはっきりした情報を得やすいと感じました。

気づき

  • 一次情報に近い内容を参照しやすい
  • 何を調べたいかが明確なときほど使いやすい
  • 技術調査や制度確認のように、参照元の信頼性が重要な場面と相性が良い

実際の業務の中では、AWSのサービス仕様や設定方法の確認、作業手順書を参照しながらの構築、障害発生時の調査、コスト見直し、システム移行の整理、補助金や制度の申請前確認などに活用できそうです。

MCP選択でAWS Knowledge MCPを選んだ画面
MCP選択で公式ドキュメントを参照した回答画面

3-2. Web検索

Web検索は、外部の公開情報を検索して確認するための機能です。

最新情報や公開されている参考情報を素早く確認したい場面で使いやすそうです。

たとえば、最近の生成AI関連のニュースを調べたいときや、技術情報の比較、製品の公開情報を確認したいときに活用できます。

入力プロンプト

最近の生成AI関連のニュースを調べて

出力結果

クリックして開く

最近の生成AI関連ニュースとしては、OpenAI、Anthropic、Google、Microsoft などの動きが中心です。

- OpenAI は ChatGPT の既定モデルを更新し、より正確で簡潔な回答やハルシネーション削減を訴求
- Anthropic は計算資源の提携や企業向け導入支援の強化を発表
- Google は企業向けエージェント基盤や TPU、Gemma などの強化を発表
- Microsoft は OpenAI との提携条件を見直し、より柔軟なクラウド利用を可能に

必要なら、OpenAIだけ、Google/Anthropic/Microsoftの比較、日本語ニュース中心などに絞って整理できます。

実際に触ってみて、複数の参考文献を示してくれるため、情報の裏付けを取りながら調べやすいと感じました。

ひとつの回答だけで完結するというより、関連リンクを見ながら状況を広く把握したいときに向いていそうです。

気づき

  • 最新動向や公開情報の確認がしやすい
  • 複数ソースを起点に追加調査しやすい
  • 一次情報への入口として使いやすい

実際の業務の中では、最新動向の把握、競合調査、製品比較、ニュース収集、障害対応時の事前調査などに役立ちそうです。

Web検索で生成AI関連ニュースを調べた画面

3-3. Deep Research

Deep Researchは、複数の情報をもとに深く調べて、内容を整理しながらまとめる機能です。

ひとつのテーマについて、関連情報を横断しながら把握したいときに向いています。

たとえば、生成AIの業務活用についてメリットと注意点を整理したいときや、複数の資料を比較しながら全体像をつかみたいときに活用できます。

入力プロンプト

生成AIの業務活用について、メリットと注意点を整理して調べて

出力結果

クリックして開く

生成AIは、文章・画像・音声・動画の生成だけでなく、業務の自動化、意思決定支援、ナレッジ活用、顧客対応の高度化まで広く使える一方、情報漏えい、知的財産権、誤情報、プロンプトインジェクション、バイアスなどのリスク管理が不可欠です。

1. 主なメリット
- 定型業務の高速化・省力化
- アイデア創出・企画の加速
- 顧客対応・社内問い合わせの効率化
- 小規模チームでも成果を出しやすい

2. 注意点
- 情報漏えい
- ハルシネーション(誤情報)
- 知的財産権・著作権
- プロンプトインジェクション
- バイアス・公平性の問題

3. 導入を成功させるための考え方
- いきなり全社導入せずPoCから始める
- KPIを先に決める
- ルール・責任分界・レビューを明文化する
- 高リスク領域では“補助”に徹する

必要なら、メリット・注意点・導入手順を1枚の表に整理することもできます。

実際に触ってみて、単に検索結果を並べるだけでなく、論点を整理しながらレポートとしてまとめてくれるため、調査の手間を減らしやすいと感じました。

テーマに対して複数の観点から整理してくれるので、調査メモや説明資料の下書きにもつなげやすそうです。

気づき

  • 単純な検索より整理された結果を得やすい
  • 「何が論点か」を見つけたいときに役立つ
  • そのままレビューや共有のたたき台にしやすい

実際の業務の中では、市場調査、競合分析、技術調査、法令や制度の確認、社内向けの調査メモ作成などに役立ちそうです。

Deep Researchで生成AI活用を調査した画面

3-4. コード生成

コード生成は、必要なコードをAIに作ってもらうための機能です。

この機能では、出力されたコードそのものが成果物になるため、そのままコピーして利用しやすいのが特徴です。

たとえば、CSVの整形処理や簡単な集計ロジック、テキスト変換の処理など、日常的な作業を効率化するためのコードを作る場面に向いています。

また、スライド作成の下準備として、構成案や各スライドの見出し、話す内容の整理にも使えそうです。

入力プロンプト

CSVを整形するPythonコードを書いて。PortableText [components.type] is missing "hardBreak"要件:前後の空白を削除、空行を除去、別ファイルに保存。html不要。

出力結果

クリックして開く

import csv

input_file = "input.csv"
output_file = "output.csv"

with open(input_file, "r", encoding="utf-8", newline="") as infile, \
     open(output_file, "w", encoding="utf-8", newline="") as outfile:

    reader = csv.reader(infile)
    writer = csv.writer(outfile)

    for row in reader:
        cleaned_row = [cell.strip() for cell in row]

        if not any(cleaned_row):
            continue

        writer.writerow(cleaned_row)

print("CSV整形が完了しました")

このコードは、前後の空白を削除し、空行を除去して別ファイルに保存する処理として、そのまま利用できる出力でした。

ゼロから実装を考える前に、まず動くサンプルを確認できるため、実装の出発点として使いやすいと感じました。

この機能でそのまま使えるもの

  • 生成されたコード
  • 関数や処理のひな型
  • たたき台としてのロジック

使う際に確認したいもの

  • 文字コード
  • 区切り文字
  • 列数の揺れ
  • 実運用での例外処理

実際の業務の中では、定型的なデータ整形、簡単な集計処理、ログやCSVの前処理、資料作成前の下準備などに役立ちそうです。

コード生成で出力されたCSV整形用のPythonコード

3-5. 画像生成

画像生成は、指示に応じて画像を作るための機能です。

資料作成や企画のたたき台づくりなど、言葉だけでは伝わりにくい内容を視覚化したいときに使えそうです。

たとえば、提案資料に入れるイメージ画像や、サービス説明用の図、企画書のラフビジュアルなどを作る場面に向いています。

完成版をいきなり作るというより、まずはイメージを形にして共有したいときに使いやすそうです。

入力プロンプト

クラウドサービスの説明に使う未来的なイメージ画像を作って

出力結果

クリックして開く

画像生成で作成したクラウドサービスのイメージ画像
実際に触ってみたところ、文章だけでは伝えにくいテーマでも、まず視覚的なイメージとして共有できる点が便利だと感じました。

気づき

  • 抽象的なテーマでも、共有しやすい叩き台を作りやすい
  • 提案書や説明資料のラフに向いている
  • 仕上げ前提で使うと実務と相性が良さそう

実際の業務の中では、提案資料のイメージ作成、サービス紹介資料の挿絵、社内説明用のラフ作成、企画段階での方向性共有などに役立ちそうです。

画像生成の操作画面

3-6. コード実行

コード実行は、生成したコードをその場で動かし、結果まで確認できる機能です。

この機能では、画面に表示される長いコードは「実行ログ」や「内部処理の記録」に近いもので、読者がそのまま使うべき成果物ではありません。

一方で、実際に使える出力は、生成された画像・グラフ・PowerPoint・CSVなどのファイルです。

たとえば、売上や件数の集計、CSVデータの確認、簡単な分析、グラフ作成に加えて、その結果をPowerPointとして出力するような使い方も考えられます。

処理の作成から結果確認、資料のたたき台作成までをひと続きで進められる点が特徴です。

入力プロンプト

売上データを月ごとに集計して、その結果をまとめたPowerPointを生成してPortableText [components.type] is missing "hardBreak"PowerPointは16:9で3枚程度、見やすいデザインにしてPortableText [components.type] is missing "hardBreak"(サンプルデータ.txtを添付)

出力結果

クリックして開く

from pathlib import Path
import os
import sys
import zipfile
import importlib.util
from io import StringIO

# japanize_matplotlib setup

japanize_spec = importlib.util.find_spec("japanize_matplotlib")
if japanize_spec is None:
    zip_path = "/mnt/data/assistant-ASY4Uq4Jatj6zSokhWMf9q-japanize-matplotlib.zip"
    extract_dir = "/mnt/data/japanize_matplotlib"
    with zipfile.ZipFile(zip_path, 'r') as z:
        z.extractall(extract_dir)
    sys.path.append(extract_dir)

import matplotlib
matplotlib.use("Agg")

import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib

from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.enum.shapes import MSO_AUTO_SHAPE_TYPE
from pptx.dml.color import RGBColor

# 入力ファイル

txt_path = "/mnt/data/assistant-3hmx2t7qdekEAVh1LtTQX3-.txt"
cover_image = "/mnt/data/cf10670b6d1b990d7cde2e481734194d-image.png"

# データ読込

text = Path(txt_path).read_text(encoding="utf-8")

lines = []
for line in text.splitlines():
    line = line.strip()
    if line.startswith("日付") or line.startswith("2025-"):
        lines.append(line)

csv_text = "\n".join(lines)

df = pd.read_csv(StringIO(csv_text))
df["日付"] = pd.to_datetime(df["日付"])
df["売上金額"] = df["売上金額"].astype(int)
df["月"] = df["日付"].dt.strftime("%Y-%m")

monthly = df.groupby("月")["売上金額"].sum().reset_index()

# グラフ生成

plt.figure(figsize=(10, 4.8))
bars = plt.bar(monthly["月"], monthly["売上金額"], color="#57C7FF")

plt.title("月別売上推移", fontsize=18)
plt.xlabel("月")
plt.ylabel("売上金額")
plt.grid(axis="y", linestyle="--", alpha=0.4)

for bar, val in zip(bars, monthly["売上金額"]):
    plt.text(
        bar.get_x() + bar.get_width()/2,
        val,
        f"{val:,}",
        ha="center",
        va="bottom",
        fontsize=8
    )

plt.tight_layout()

chart_path = "/mnt/data/monthly_sales_chart.png"
plt.savefig(chart_path, dpi=220)
plt.close()

# PowerPoint

prs = Presentation()
prs.slide_width = Inches(13.333)
prs.slide_height = Inches(7.5)

dark = RGBColor(9, 20, 40)
blue = RGBColor(87, 199, 255)
white = RGBColor(255, 255, 255)

def add_dark_bg(slide):
    bg = slide.shapes.add_shape(
        MSO_AUTO_SHAPE_TYPE.RECTANGLE,
        0, 0,
        prs.slide_width,
        prs.slide_height
    )
    bg.fill.solid()
    bg.fill.fore_color.rgb = dark
    bg.line.color.rgb = dark

# スライド1: 表紙

slide = prs.slides.add_slide(prs.slide_layouts[6])

slide.shapes.add_picture(
    cover_image,
    0,
    0,
    width=prs.slide_width,
    height=prs.slide_height
)

overlay = slide.shapes.add_shape(
    MSO_AUTO_SHAPE_TYPE.RECTANGLE,
    0,
    0,
    prs.slide_width,
    prs.slide_height
)
overlay.fill.solid()
overlay.fill.fore_color.rgb = RGBColor(0, 0, 0)
overlay.fill.transparency = 35
overlay.line.color.rgb = RGBColor(0, 0, 0)

title_box = slide.shapes.add_textbox(Inches(0.9), Inches(2.0), Inches(8), Inches(1))
p = title_box.text_frame.paragraphs[0]
p.text = "2025年 売上分析レポート"
p.font.size = Pt(30)
p.font.bold = True
p.font.color.rgb = white

sub_box = slide.shapes.add_textbox(Inches(0.9), Inches(3.0), Inches(6), Inches(0.5))
p2 = sub_box.text_frame.paragraphs[0]
p2.text = "月別売上の集計と分析"
p2.font.size = Pt(16)
p2.font.color.rgb = RGBColor(230, 230, 230)

# スライド2: KPI + サマリー

slide = prs.slides.add_slide(prs.slide_layouts[6])
add_dark_bg(slide)

title = slide.shapes.add_textbox(Inches(0.5), Inches(0.4), Inches(5), Inches(0.5))
tp = title.text_frame.paragraphs[0]
tp.text = "売上サマリー"
tp.font.size = Pt(24)
tp.font.bold = True
tp.font.color.rgb = white

total = monthly["売上金額"].sum()
max_row = monthly.loc[monthly["売上金額"].idxmax()]
min_row = monthly.loc[monthly["売上金額"].idxmin()]
avg = int(monthly["売上金額"].mean())

cards = [
    ("累計売上", f"¥{total:,}"),
    ("最高売上月", f"{max_row['月']}"),
    ("平均売上", f"¥{avg:,}")
]

positions = [0.7, 4.5, 8.3]

for (label, value), x in zip(cards, positions):
    card = slide.shapes.add_shape(
        MSO_AUTO_SHAPE_TYPE.ROUNDED_RECTANGLE,
        Inches(x),
        Inches(1.7),
        Inches(3),
        Inches(1.8)
    )
    card.fill.solid()
    card.fill.fore_color.rgb = RGBColor(20, 35, 60)
    card.line.color.rgb = blue

    box = slide.shapes.add_textbox(
        Inches(x+0.2),
        Inches(2.05),
        Inches(2.5),
        Inches(1)
    )

    tf = box.text_frame

    p1 = tf.paragraphs[0]
    p1.text = label
    p1.font.size = Pt(15)
    p1.font.color.rgb = RGBColor(180, 220, 255)

    p2 = tf.add_paragraph()
    p2.text = value
    p2.font.size = Pt(22)
    p2.font.bold = True
    p2.font.color.rgb = white

summary_box = slide.shapes.add_textbox(
    Inches(0.9),
    Inches(4.2),
    Inches(10),
    Inches(1.5)
)

summary = (
    f"・最高売上月: {max_row['月']}(¥{max_row['売上金額']:,})\n"
    f"・最低売上月: {min_row['月']}(¥{min_row['売上金額']:,})\n"
    f"・売上は後半に向けて増加傾向"
)

tf = summary_box.text_frame
tf.text = summary

for para in tf.paragraphs:
    para.font.size = Pt(18)
    para.font.color.rgb = white

# スライド3: グラフ

slide = prs.slides.add_slide(prs.slide_layouts[6])
add_dark_bg(slide)

title = slide.shapes.add_textbox(Inches(0.5), Inches(0.4), Inches(5), Inches(0.5))
tp = title.text_frame.paragraphs[0]
tp.text = "月別売上グラフ"
tp.font.size = Pt(24)
tp.font.bold = True
tp.font.color.rgb = white

slide.shapes.add_picture(
    chart_path,
    Inches(1),
    Inches(1.2),
    width=Inches(11)
)

# 保存

pptx_path = "/mnt/data/monthly_sales_report_16x9.pptx"
prs.save(pptx_path)

print(f"生成完了: {pptx_path}")
print(f"グラフ画像: {chart_path}")

python

コードをコピーする
from pathlib import Path
import os
import sys
import zipfile
import importlib.util
from io import StringIO

# japanize_matplotlib setup

japanize_spec = importlib.util.find_spec("japanize_matplotlib")

if japanize_spec is None:
    zip_path = "/mnt/data/assistant-ASY4Uq4Jatj6zSokhWMf9q-japanize-matplotlib.zip"
    extract_dir = "/mnt/data/japanize_extract"

    with zipfile.ZipFile(zip_path, 'r') as z:
        z.extractall(extract_dir)

    for root, dirs, files in os.walk(extract_dir):
        if "japanize_matplotlib" in dirs:
            sys.path.append(root)
            break

import matplotlib
matplotlib.use("Agg")

import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib

from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.enum.shapes import MSO_AUTO_SHAPE_TYPE
from pptx.dml.color import RGBColor

# 入力

txt_path = "/mnt/data/assistant-3hmx2t7qdekEAVh1LtTQX3-.txt"
cover_image = "/mnt/data/cf10670b6d1b990d7cde2e481734194d-image.png"

text = Path(txt_path).read_text(encoding="utf-8")

lines = []
for line in text.splitlines():
    line = line.strip()
    if line.startswith("日付") or line.startswith("2025-"):
        lines.append(line)

csv_text = "\n".join(lines)

df = pd.read_csv(StringIO(csv_text))
df["日付"] = pd.to_datetime(df["日付"])
df["売上金額"] = df["売上金額"].astype(int)
df["月"] = df["日付"].dt.strftime("%Y-%m")

monthly = df.groupby("月")["売上金額"].sum().reset_index()

# グラフ

plt.figure(figsize=(10, 4.8))
bars = plt.bar(monthly["月"], monthly["売上金額"], color="#57C7FF")

plt.title("月別売上推移", fontsize=18)
plt.xlabel("月")
plt.ylabel("売上金額")
plt.grid(axis="y", linestyle="--", alpha=0.4)

for bar, val in zip(bars, monthly["売上金額"]):
    plt.text(
        bar.get_x() + bar.get_width()/2,
        val,
        f"{val:,}",
        ha="center",
        va="bottom",
        fontsize=8
    )

plt.tight_layout()

chart_path = "/mnt/data/monthly_sales_chart.png"
plt.savefig(chart_path, dpi=220)
plt.close()

# PowerPoint

prs = Presentation()
prs.slide_width = Inches(13.333)
prs.slide_height = Inches(7.5)

dark = RGBColor(10, 20, 40)
blue = RGBColor(87, 199, 255)
white = RGBColor(255, 255, 255)

def add_bg(slide):
    bg = slide.shapes.add_shape(
        MSO_AUTO_SHAPE_TYPE.RECTANGLE,
        0, 0,
        prs.slide_width,
        prs.slide_height
    )
    bg.fill.solid()
    bg.fill.fore_color.rgb = dark
    bg.line.color.rgb = dark

# 表紙

slide = prs.slides.add_slide(prs.slide_layouts[6])

slide.shapes.add_picture(
    cover_image,
    0,
    0,
    width=prs.slide_width,
    height=prs.slide_height
)

overlay = slide.shapes.add_shape(
    MSO_AUTO_SHAPE_TYPE.RECTANGLE,
    0,
    0,
    prs.slide_width,
    prs.slide_height
)
overlay.fill.solid()
overlay.fill.fore_color.rgb = RGBColor(0, 0, 0)
overlay.fill.transparency = 35
overlay.line.color.rgb = RGBColor(0, 0, 0)

title_box = slide.shapes.add_textbox(Inches(0.8), Inches(2.0), Inches(8), Inches(1))
p = title_box.text_frame.paragraphs[0]
p.text = "2025年 売上分析レポート"
p.font.size = Pt(30)
p.font.bold = True
p.font.color.rgb = white

sub_box = slide.shapes.add_textbox(Inches(0.8), Inches(3.0), Inches(6), Inches(0.5))
p2 = sub_box.text_frame.paragraphs[0]
p2.text = "月別売上データの集計と分析"
p2.font.size = Pt(16)
p2.font.color.rgb = RGBColor(220, 220, 220)

# KPI

slide = prs.slides.add_slide(prs.slide_layouts[6])
add_bg(slide)

title = slide.shapes.add_textbox(Inches(0.5), Inches(0.4), Inches(5), Inches(0.5))
tp = title.text_frame.paragraphs[0]
tp.text = "売上サマリー"
tp.font.size = Pt(24)
tp.font.bold = True
tp.font.color.rgb = white

total = monthly["売上金額"].sum()
max_row = monthly.loc[monthly["売上金額"].idxmax()]
min_row = monthly.loc[monthly["売上金額"].idxmin()]
avg = int(monthly["売上金額"].mean())

cards = [
    ("累計売上", f"¥{total:,}"),
    ("最高売上月", max_row["月"]),
    ("平均売上", f"¥{avg:,}")
]

positions = [0.7, 4.5, 8.3]

for (label, value), x in zip(cards, positions):
    shape = slide.shapes.add_shape(
        MSO_AUTO_SHAPE_TYPE.ROUNDED_RECTANGLE,
        Inches(x),
        Inches(1.8),
        Inches(3),
        Inches(1.8)
    )

    shape.fill.solid()
    shape.fill.fore_color.rgb = RGBColor(20, 35, 60)
    shape.line.color.rgb = blue

    tb = slide.shapes.add_textbox(
        Inches(x+0.2),
        Inches(2.1),
        Inches(2.5),
        Inches(1)
    )

    tf = tb.text_frame

    p1 = tf.paragraphs[0]
    p1.text = label
    p1.font.size = Pt(15)
    p1.font.color.rgb = RGBColor(180, 220, 255)

    p2 = tf.add_paragraph()
    p2.text = value
    p2.font.size = Pt(22)
    p2.font.bold = True
    p2.font.color.rgb = white

summary_box = slide.shapes.add_textbox(
    Inches(0.9),
    Inches(4.3),
    Inches(10),
    Inches(1.5)
)

summary_text = (
    f"・最高売上月: {max_row['月']}(¥{max_row['売上金額']:,})\n"
    f"・最低売上月: {min_row['月']}(¥{min_row['売上金額']:,})\n"
    f"・累計売上: ¥{total:,}"
)

tf = summary_box.text_frame
tf.text = summary_text

for para in tf.paragraphs:
    para.font.size = Pt(18)
    para.font.color.rgb = white

# グラフスライド

slide = prs.slides.add_slide(prs.slide_layouts[6])
add_bg(slide)

title = slide.shapes.add_textbox(Inches(0.5), Inches(0.4), Inches(5), Inches(0.5))
tp = title.text_frame.paragraphs[0]
tp.text = "月別売上グラフ"
tp.font.size = Pt(24)
tp.font.bold = True
tp.font.color.rgb = white

slide.shapes.add_picture(
    chart_path,
    Inches(1),
    Inches(1.2),
    width=Inches(11)
)

# 保存

pptx_path = "/mnt/data/monthly_sales_report_16x9.pptx"
prs.save(pptx_path)

print("完了")
print(pptx_path)
print(chart_path)

python

コードをコピーする
from io import StringIO
import os
import sys
import zipfile
import importlib.util

# japanize_matplotlib setup

japanize_spec = importlib.util.find_spec("japanize_matplotlib")

if japanize_spec is None:
    zip_path = "/mnt/data/assistant-ASY4Uq4Jatj6zSokhWMf9q-japanize-matplotlib.zip"
    extract_dir = "/mnt/data/japanize_extract"

    with zipfile.ZipFile(zip_path, 'r') as z:
        z.extractall(extract_dir)

    for root, dirs, files in os.walk(extract_dir):
        if "japanize_matplotlib" in dirs:
            sys.path.append(root)
            break

import matplotlib
matplotlib.use("Agg")

import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib

from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.enum.shapes import MSO_AUTO_SHAPE_TYPE
from pptx.dml.color import RGBColor

# サンプル売上データ

csv_text = """日付,商品カテゴリ,商品名,地域,売上金額
2025-01-05,PC,ノートPC,A東京,185000
2025-01-12,クラウド,クラウド保守契約,B大阪,320000
2025-01-18,PC,デスクトップPC,C名古屋,210000
2025-02-03,PC,ノートPC,B大阪,172000
2025-02-14,クラウド,クラウドバックアップ,A東京,280000
2025-02-21,ソフトウェア,会計ソフト,B大阪,125000
2025-03-02,PC,ノートPC,A東京,193000
2025-03-10,クラウド,SaaS契約,B大阪,410000
2025-03-20,ソフトウェア,CRMシステム,A東京,220000
2025-04-04,クラウド,データ分析基盤,A東京,530000
2025-04-13,PC,ノートPC,C名古屋,201000
2025-04-22,ソフトウェア,勤怠管理システム,A東京,134000
2025-05-06,PC,ゲーミングPC,A東京,265000
2025-05-09,クラウド,AI分析サービス,C名古屋,620000
2025-05-20,ソフトウェア,販売管理ソフト,A東京,176000
2025-06-03,クラウド,セキュリティ監視,B大阪,450000
2025-06-11,PC,ノートPC,A東京,188000
2025-06-23,ソフトウェア,在庫管理システム,B大阪,143000
"""

cover_image = "/mnt/data/cf10670b6d1b990d7cde2e481734194d-image.png"

# DataFrame

df = pd.read_csv(StringIO(csv_text))
df["日付"] = pd.to_datetime(df["日付"])
df["月"] = df["日付"].dt.strftime("%Y-%m")

monthly = df.groupby("月")["売上金額"].sum().reset_index()

# グラフ

plt.figure(figsize=(10, 4.8))
bars = plt.bar(monthly["月"], monthly["売上金額"], color="#59C7FF")

plt.title("月別売上推移", fontsize=18)
plt.xlabel("月")
plt.ylabel("売上金額")
plt.grid(axis="y", linestyle="--", alpha=0.4)

for bar, val in zip(bars, monthly["売上金額"]):
    plt.text(
        bar.get_x() + bar.get_width()/2,
        val,
        f"{val:,}",
        ha="center",
        va="bottom",
        fontsize=8
    )

plt.tight_layout()

chart_path = "/mnt/data/monthly_sales_chart.png"
plt.savefig(chart_path, dpi=220)
plt.close()

# PowerPoint

prs = Presentation()
prs.slide_width = Inches(13.333)
prs.slide_height = Inches(7.5)

dark = RGBColor(8, 18, 38)
blue = RGBColor(89, 199, 255)
white = RGBColor(255, 255, 255)

def add_bg(slide):
    bg = slide.shapes.add_shape(
        MSO_AUTO_SHAPE_TYPE.RECTANGLE,
        0, 0,
        prs.slide_width,
        prs.slide_height
    )
    bg.fill.solid()
    bg.fill.fore_color.rgb = dark
    bg.line.color.rgb = dark

# スライド1 表紙

slide = prs.slides.add_slide(prs.slide_layouts[6])

slide.shapes.add_picture(
    cover_image,
    0,
    0,
    width=prs.slide_width,
    height=prs.slide_height
)

overlay = slide.shapes.add_shape(
    MSO_AUTO_SHAPE_TYPE.RECTANGLE,
    0,
    0,
    prs.slide_width,
    prs.slide_height
)

overlay.fill.solid()
overlay.fill.fore_color.rgb = RGBColor(0, 0, 0)
overlay.fill.transparency = 40
overlay.line.color.rgb = RGBColor(0, 0, 0)

tb = slide.shapes.add_textbox(Inches(0.9), Inches(2.0), Inches(8), Inches(1))
p = tb.text_frame.paragraphs[0]
p.text = "2025年 売上分析レポート"
p.font.size = Pt(30)
p.font.bold = True
p.font.color.rgb = white

sb = slide.shapes.add_textbox(Inches(0.9), Inches(3.0), Inches(6), Inches(0.5))
p2 = sb.text_frame.paragraphs[0]
p2.text = "月別売上データの集計と分析"
p2.font.size = Pt(16)
p2.font.color.rgb = RGBColor(230,230,230)

# スライド2 KPI

slide = prs.slides.add_slide(prs.slide_layouts[6])
add_bg(slide)

title = slide.shapes.add_textbox(Inches(0.5), Inches(0.4), Inches(5), Inches(0.5))
tp = title.text_frame.paragraphs[0]
tp.text = "売上サマリー"
tp.font.size = Pt(24)
tp.font.bold = True
tp.font.color.rgb = white

total = monthly["売上金額"].sum()
max_row = monthly.loc[monthly["売上金額"].idxmax()]
avg = int(monthly["売上金額"].mean())

cards = [
    ("累計売上", f"¥{total:,}"),
    ("最高売上月", max_row["月"]),
    ("平均売上", f"¥{avg:,}")
]

positions = [0.7, 4.5, 8.3]

for (label, value), x in zip(cards, positions):
    card = slide.shapes.add_shape(
        MSO_AUTO_SHAPE_TYPE.ROUNDED_RECTANGLE,
        Inches(x),
        Inches(1.8),
        Inches(3),
        Inches(1.8)
    )

    card.fill.solid()
    card.fill.fore_color.rgb = RGBColor(20, 35, 60)
    card.line.color.rgb = blue

    box = slide.shapes.add_textbox(
        Inches(x+0.2),
        Inches(2.1),
        Inches(2.5),
        Inches(1)
    )

    tf = box.text_frame

    p1 = tf.paragraphs[0]
    p1.text = label
    p1.font.size = Pt(15)
    p1.font.color.rgb = RGBColor(180,220,255)

    p2 = tf.add_paragraph()
    p2.text = value
    p2.font.size = Pt(22)
    p2.font.bold = True
    p2.font.color.rgb = white

# スライド3 グラフ

slide = prs.slides.add_slide(prs.slide_layouts[6])
add_bg(slide)

title = slide.shapes.add_textbox(Inches(0.5), Inches(0.4), Inches(5), Inches(0.5))
tp = title.text_frame.paragraphs[0]
tp.text = "月別売上推移"
tp.font.size = Pt(24)
tp.font.bold = True
tp.font.color.rgb = white

slide.shapes.add_picture(
    chart_path,
    Inches(1),
    Inches(1.2),
    width=Inches(11)
)

pptx_path = "/mnt/data/monthly_sales_report_design.pptx"
prs.save(pptx_path)

print("生成完了")
print(pptx_path)
print(chart_path)

この部分はツール内部の実行記録であり、読者がそのまま使う出力ではありません。

実際に使える成果物は、以下のようなファイルです。

クリックして開く(集計グラフ)

月別売り上げ推移
クリックして開く(PowerPoint)
スライド1枚目
スライド2枚目

クリックして開く(PowerPoint)

スライド3枚目
実際に触ってみて、単に集計結果を確認するだけでなく、そのまま報告資料のたたき台まで作れるため、作業をまとめて進めやすいと感じました。また、生成されたPowerPointは編集可能なので、後から文言やレイアウトを調整しながら仕上げていける点も実務向きだと感じました。

この機能でそのまま使えるもの

  • 生成されたPNG画像
  • 生成されたPowerPointファイル
  • 必要に応じて保存されたCSVや集計結果

内部ログとして見るもの

  • 実行時のコード断片
  • 一時ファイルの保存先
  • ライブラリ導入や実行環境のメッセージ

気づき

  • 集計だけで終わらず資料化まで進められる
  • 定型レポートや会議資料の初稿づくりに向いている
  • 実務利用ではテンプレートや配色の指定を足すとさらに使いやすくなりそう

実際の業務の中では、月次報告資料の作成、売上や件数の集計結果の共有、会議用資料の下書き作成、簡単な分析結果の可視化などに役立ちそうです。

4. 実際の導入事例

ナレコムAI Chatbotは、実際の業務改善にも活用されています。

トヨタ情報システム愛知株式会社では、開発教育の標準化やコードレビューの効率化に利用されており、ベテラン社員の「口伝」に依存していた規約理解や、半日から1日ほどかかっていたレビュー待ち時間の短縮につながったと紹介されています。

導入後は、開発規約や運用ルールに関するQ&A、ソースコードの一次レビューに活用され、命名規則や改行ルールなどの定型的な確認をAIが即時に返せるようになりました。

今回見てきたツールの観点でいうと、ナレッジを参照しながら一貫した回答を返す仕組みや、コードを扱う機能が、実際の開発現場での効率化や技術継承の支援にもつながっていることが分かります。

詳細は以下の記事で紹介されています。

5. 実際に触ってみた印象

実際に触ってみると、ツールごとに役割が分かれていて、用途に応じて使い分けやすい印象でした。

Web検索やDeep Researchのように情報収集に向いたツールもあれば、コード生成やコード実行のように作業を前に進めるためのツールもあり、ひとつの場で進めやすい点が便利です。

特に、MCP選択で参照先を切り替え、Web検索やDeep Researchで情報を集め、コード生成やコード実行でその先の作業につなげられるため、単発ではなく一連の流れの中で使いやすい印象があります。

また、モデル比較やベクトルストア、簡易エージェントのような補足機能もあるため、AIを“会話する相手”としてだけでなく、“業務を支える道具”として使うイメージが持ちやすいと感じました。

6. 導入時のイメージ

ナレコムAI Chatbotは、まずは調査補助や資料作成のたたき台づくりなど、比較的始めやすい業務から導入するとイメージしやすそうです。

たとえば、技術調査ではMCP選択やWeb検索、Deep Researchを使って必要な情報を確認し、資料作成では画像生成やコード実行を使って下準備を進める、といった形で段階的に活用できそうです。

組み合わせて使うイメージ

各ツールは単体でも使えますが、組み合わせることで活用イメージがさらに具体的になります。

たとえば、技術調査から資料作成までを次のような流れでつなげることもできそうです。

MCP選択 → Web検索 → Deep Research → 画像生成 → コード実行

  • MCP選択で公式ドキュメントを参照
  • Web検索で周辺情報や最新情報を確認
  • Deep Researchで論点を整理
  • 画像生成で説明用のイメージを作る
  • コード実行で表やグラフ、PowerPointのたたき台を作る

技術調査だけで終わらず、そのまま説明資料や共有資料に落とし込む流れを作れそうです。

また、コード生成やコード実行を使えば、簡単な集計やデータ整形、PowerPointのたたき台作成までつなげられるため、定型的な作業や報告資料づくりの効率化にも向いていそうです。

7. まとめ

ナレコムAI Chatbotは、Web検索やDeep Research、コード生成、画像生成、コード実行など、幅広いツールを備えたチャットボットです。

各ツールをそれぞれの業務にどう生かせるかを意識して見ると、導入後の活用イメージがつかみやすくなりました。

今回実際に触ってみて、各ツールを単体で使うだけでなく、組み合わせながら業務の流れに沿って使える点が大きな強みだと感じました。

特に、情報収集から論点整理、資料のたたき台づくりまでをひとつの場でつなげやすいため、そのまま実務にも結びつけやすそうです。

今回触ったツールと、役立てられそうな業務をまとめると以下のようになります。

ツール 役立てられそうな業務
MCP選択 技術調査、設定確認、制度確認、補助金申請前の情報収集
Web検索 最新動向の把握、競合調査、製品比較、障害対応時の事前調査
Deep Research 市場調査、競合分析、技術調査、社内向けの調査メモ作成
コード生成 データ整形、自動化処理の作成、集計ロジックのたたき台作成
画像生成 提案資料のイメージ作成、サービス紹介資料の挿絵、企画段階のラフ作成
コード実行 売上集計、CSV確認、簡単な分析、報告資料やPowerPointのたたき台作成

まずは小さく試しながら、自分たちの業務に合う使い方を見つけていくのがよさそうです。

ナレコムAI Chatbotの詳細

本記事で扱ったツールの詳細は、以下の公式ページで確認できます。

画面や利用できる機能は、記事執筆時点の内容です。
今後のアップデートにより変更される可能性があります。

この記事を書いた人

azure-recipe-user