はじめに
AIを業務に取り入れるツールは増えていますが、「実際に何ができるのか」「どんな業務に使えるのか」が分かりにくいと、導入のイメージが湧きにくいこともあります。
今回は、ナレコムAI Chatbotのツールを実際に動かしながら、各ツールがどのような業務で使えそうかを技術検証の形で確認しました。
単なる機能紹介ではなく、実際の入力内容や出力結果も見ながら、実務での使い方を意識して整理しています。
※ 本記事では、株式会社ナレッジコミュニケーションが提供するナレコムAI Chatbotを使い、各ツールを業務シナリオに沿って検証しています。
目次
- 1. ナレコムAI Chatbotとは
- 2. 今回触ってみたツール
- 3. 各ツールはどんな業務に使えそうか
- 4. 実際の導入事例
- 5. 実際に触ってみた印象
- 6. 導入時のイメージ
- 7. まとめ
- ナレコムAI Chatbotの詳細
1. ナレコムAI Chatbotとは
ナレコムAI Chatbotは、チャット形式でAIを活用できるツールです。
Web検索、Deep Research、コード生成、画像生成、コード実行などのツールを備えており、調査、整理、資料作成、確認作業をひとつの画面で進めやすいのが特徴です。
2. 今回触ってみたツール
まずは、今回検証したツールを簡単に確認します。
| 機能 | 簡単な説明 |
|---|---|
| MCP選択 | 利用する機能や接続先を切り替えるための機能 |
| Web検索 | Web上の公開情報を検索して調べるための機能 |
| Deep Research | ひとつのテーマを深く調べて整理するための機能 |
| コード生成 | 必要なコードをAIに作ってもらうための機能 |
| 画像生成 | 指示に応じて画像を作るための機能 |
| コード実行 | AIが作成したコードをその場で動かして確認するための機能 |
情報の確認だけでなく、整理、可視化、資料化まで含めて検証できるのが特徴でした。
今回扱うツールとは別に、同じ質問に対して複数のLLMの回答を見比べられるモデル比較、資料やナレッジをもとに回答しやすくするベクトルストア、問い合わせの流れを整理したり案内先を分けたりできる簡易エージェントといった機能もあります。
ツール選択画面
メニュー画面
3. 各ツールはどんな業務に使えそうか
3-1. MCP選択
MCP選択は、利用する機能や接続先を切り替えるための機能です。
ナレコムAI Chatbotでは、公式ドキュメント、法令や制度の確認、補助金や支援制度の確認、HTTPリクエスト、現在時刻の取得など、用途に応じて参照先を切り替えやすくなっています。
たとえば、技術調査ではAWSなどの公式ドキュメントを使い、法律やルールを確認したいときは法令検索、補助金や助成金の情報を調べたいときは補助金検索を選ぶといった使い分けが考えられます。
入力プロンプト
Lambda関数の基本的な作成方法を公式ドキュメントで調べて
出力結果
クリックして開く
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
AWS Lambda関数の基本的な作成方法まとめ AWS Lambda は、サーバーを意識せずにコードを実行できるサーバーレスサービスです。 1. 作成前の準備 - AWSアカウント - AWSコンソールにログインできる権限 - Lambda を作成・実行するための IAM 権限 2. コンソールでの基本的な作成手順 - Lambda コンソールを開く - 「関数の作成」を選ぶ - 「一から作成」を選ぶ - 関数名、ランタイム、実行ロールを設定する - コードを入力する - テストイベントで実行確認する - CloudWatch Logs でログを確認する 3. 重要な基本概念 - ハンドラー - イベントオブジェクト - コンテキストオブジェクト - ログ出力 必要であれば次に、公式ドキュメントに沿った画面操作ベースの手順や、Python/Node.js の最小サンプルでの作成例としてさらに具体化できます。 |
実際に触ってみて、AWS Knowledge MCPを選択した状態で質問すると、AWS公式ドキュメントをもとにした手順や概要が返ってきました。
用途に応じて参照先を切り替えることで、一般的な回答よりも根拠のはっきりした情報を得やすいと感じました。
気づき
- 一次情報に近い内容を参照しやすい
- 何を調べたいかが明確なときほど使いやすい
- 技術調査や制度確認のように、参照元の信頼性が重要な場面と相性が良い
実際の業務の中では、AWSのサービス仕様や設定方法の確認、作業手順書を参照しながらの構築、障害発生時の調査、コスト見直し、システム移行の整理、補助金や制度の申請前確認などに活用できそうです。
3-2. Web検索
Web検索は、外部の公開情報を検索して確認するための機能です。
最新情報や公開されている参考情報を素早く確認したい場面で使いやすそうです。
たとえば、最近の生成AI関連のニュースを調べたいときや、技術情報の比較、製品の公開情報を確認したいときに活用できます。
入力プロンプト
最近の生成AI関連のニュースを調べて
出力結果
クリックして開く
|
1 2 3 4 5 6 7 8 9 |
最近の生成AI関連ニュースとしては、OpenAI、Anthropic、Google、Microsoft などの動きが中心です。 - OpenAI は ChatGPT の既定モデルを更新し、より正確で簡潔な回答やハルシネーション削減を訴求 - Anthropic は計算資源の提携や企業向け導入支援の強化を発表 - Google は企業向けエージェント基盤や TPU、Gemma などの強化を発表 - Microsoft は OpenAI との提携条件を見直し、より柔軟なクラウド利用を可能に 必要なら、OpenAIだけ、Google/Anthropic/Microsoftの比較、日本語ニュース中心などに絞って整理できます。 |
実際に触ってみて、複数の参考文献を示してくれるため、情報の裏付けを取りながら調べやすいと感じました。
ひとつの回答だけで完結するというより、関連リンクを見ながら状況を広く把握したいときに向いていそうです。
気づき
- 最新動向や公開情報の確認がしやすい
- 複数ソースを起点に追加調査しやすい
- 一次情報への入口として使いやすい
実際の業務の中では、最新動向の把握、競合調査、製品比較、ニュース収集、障害対応時の事前調査などに役立ちそうです。
3-3. Deep Research
Deep Researchは、複数の情報をもとに深く調べて、内容を整理しながらまとめる機能です。
ひとつのテーマについて、関連情報を横断しながら把握したいときに向いています。
たとえば、生成AIの業務活用についてメリットと注意点を整理したいときや、複数の資料を比較しながら全体像をつかみたいときに活用できます。
入力プロンプト
生成AIの業務活用について、メリットと注意点を整理して調べて
出力結果
クリックして開く
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
生成AIは、文章・画像・音声・動画の生成だけでなく、業務の自動化、意思決定支援、ナレッジ活用、顧客対応の高度化まで広く使える一方、情報漏えい、知的財産権、誤情報、プロンプトインジェクション、バイアスなどのリスク管理が不可欠です。 1. 主なメリット - 定型業務の高速化・省力化 - アイデア創出・企画の加速 - 顧客対応・社内問い合わせの効率化 - 小規模チームでも成果を出しやすい 2. 注意点 - 情報漏えい - ハルシネーション(誤情報) - 知的財産権・著作権 - プロンプトインジェクション - バイアス・公平性の問題 3. 導入を成功させるための考え方 - いきなり全社導入せずPoCから始める - KPIを先に決める - ルール・責任分界・レビューを明文化する - 高リスク領域では“補助”に徹する 必要なら、メリット・注意点・導入手順を1枚の表に整理することもできます。 |
実際に触ってみて、単に検索結果を並べるだけでなく、論点を整理しながらレポートとしてまとめてくれるため、調査の手間を減らしやすいと感じました。
テーマに対して複数の観点から整理してくれるので、調査メモや説明資料の下書きにもつなげやすそうです。
気づき
- 単純な検索より整理された結果を得やすい
- 「何が論点か」を見つけたいときに役立つ
- そのままレビューや共有のたたき台にしやすい
実際の業務の中では、市場調査、競合分析、技術調査、法令や制度の確認、社内向けの調査メモ作成などに役立ちそうです。
3-4. コード生成
コード生成は、必要なコードをAIに作ってもらうための機能です。
この機能では、出力されたコードそのものが成果物になるため、そのままコピーして利用しやすいのが特徴です。
たとえば、CSVの整形処理や簡単な集計ロジック、テキスト変換の処理など、日常的な作業を効率化するためのコードを作る場面に向いています。
また、スライド作成の下準備として、構成案や各スライドの見出し、話す内容の整理にも使えそうです。
入力プロンプト
CSVを整形するPythonコードを書いて。
要件:前後の空白を削除、空行を除去、別ファイルに保存。html不要。
出力結果
クリックして開く
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<span class="kn">import</span> <span class="n">csv</span> <span class="n">input_file</span> <span class="o">=</span> <span class="sh">"</span><span class="s">input.csv</span><span class="sh">"</span> <span class="n">output_file</span> <span class="o">=</span> <span class="sh">"</span><span class="s">output.csv</span><span class="sh">"</span> <span class="k">with</span> <span class="nf">open</span><span class="p">(</span><span class="n">input_file</span><span class="p">,</span> <span class="sh">"</span><span class="s">r</span><span class="sh">"</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="sh">"</span><span class="s">utf-8</span><span class="sh">"</span><span class="p">,</span> <span class="n">newline</span><span class="o">=</span><span class="sh">""</span><span class="p">)</span> <span class="k">as</span> <span class="n">infile</span><span class="p">,</span> \ <span class="nf">open</span><span class="p">(</span><span class="n">output_file</span><span class="p">,</span> <span class="sh">"</span><span class="s">w</span><span class="sh">"</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="sh">"</span><span class="s">utf-8</span><span class="sh">"</span><span class="p">,</span> <span class="n">newline</span><span class="o">=</span><span class="sh">""</span><span class="p">)</span> <span class="k">as</span> <span class="n">outfile</span><span class="p">:</span> <span class="n">reader</span> <span class="o">=</span> <span class="n">csv</span><span class="p">.</span><span class="nf">reader</span><span class="p">(</span><span class="n">infile</span><span class="p">)</span> <span class="n">writer</span> <span class="o">=</span> <span class="n">csv</span><span class="p">.</span><span class="nf">writer</span><span class="p">(</span><span class="n">outfile</span><span class="p">)</span> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">reader</span><span class="p">:</span> <span class="n">cleaned_row</span> <span class="o">=</span> <span class="p">[</span><span class="n">cell</span><span class="p">.</span><span class="nf">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">cell</span> <span class="ow">in</span> <span class="n">row</span><span class="p">]</span> <span class="k">if</span> <span class="ow">not</span> <span class="nf">any</span><span class="p">(</span><span class="n">cleaned_row</span><span class="p">):</span> <span class="k">continue</span> <span class="n">writer</span><span class="p">.</span><span class="nf">writerow</span><span class="p">(</span><span class="n">cleaned_row</span><span class="p">)</span> <span class="nf">print</span><span class="p">(</span><span class="sh">"</span><span class="s">CSV整形が完了しました</span><span class="sh">"</span><span class="p">)</span> |
このコードは、前後の空白を削除し、空行を除去して別ファイルに保存する処理として、そのまま利用できる出力でした。
ゼロから実装を考える前に、まず動くサンプルを確認できるため、実装の出発点として使いやすいと感じました。
この機能でそのまま使えるもの
- 生成されたコード
- 関数や処理のひな型
- たたき台としてのロジック
使う際に確認したいもの
- 文字コード
- 区切り文字
- 列数の揺れ
- 実運用での例外処理
実際の業務の中では、定型的なデータ整形、簡単な集計処理、ログやCSVの前処理、資料作成前の下準備などに役立ちそうです。
3-5. 画像生成
画像生成は、指示に応じて画像を作るための機能です。
資料作成や企画のたたき台づくりなど、言葉だけでは伝わりにくい内容を視覚化したいときに使えそうです。
たとえば、提案資料に入れるイメージ画像や、サービス説明用の図、企画書のラフビジュアルなどを作る場面に向いています。
完成版をいきなり作るというより、まずはイメージを形にして共有したいときに使いやすそうです。
入力プロンプト
クラウドサービスの説明に使う未来的なイメージ画像を作って
出力結果
実際に触ってみたところ、文章だけでは伝えにくいテーマでも、まず視覚的なイメージとして共有できる点が便利だと感じました。
気づき
- 抽象的なテーマでも、共有しやすい叩き台を作りやすい
- 提案書や説明資料のラフに向いている
- 仕上げ前提で使うと実務と相性が良さそう
実際の業務の中では、提案資料のイメージ作成、サービス紹介資料の挿絵、社内説明用のラフ作成、企画段階での方向性共有などに役立ちそうです。
3-6. コード実行
コード実行は、生成したコードをその場で動かし、結果まで確認できる機能です。
この機能では、画面に表示される長いコードは「実行ログ」や「内部処理の記録」に近いもので、読者がそのまま使うべき成果物ではありません。
一方で、実際に使える出力は、生成された画像・グラフ・PowerPoint・CSVなどのファイルです。
たとえば、売上や件数の集計、CSVデータの確認、簡単な分析、グラフ作成に加えて、その結果をPowerPointとして出力するような使い方も考えられます。
処理の作成から結果確認、資料のたたき台作成までをひと続きで進められる点が特徴です。
入力プロンプト
売上データを月ごとに集計して、その結果をまとめたPowerPointを生成して
PowerPointは16:9で3枚程度、見やすいデザインにして
(サンプルデータ.txtを添付)
出力結果
クリックして開く
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 |
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は編集可能なので、後から文言やレイアウトを調整しながら仕上げていける点も実務向きだと感じました。
この機能でそのまま使えるもの
- 生成された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の詳細
本記事で扱ったツールの詳細は、以下の公式ページで確認できます。
画面や利用できる機能は、記事執筆時点の内容です。
今後のアップデートにより変更される可能性があります。














