はじめに
IBM Bobは、IBMが提供するAI機能を持ったIDEです。幅広い開発者向けに使いやすく、親しみやすい機能を提供しています。開発パートナーとしても有能ですが、その能力は開発ではない領域にも活かすことができます。
この記事では、ローカルで行うさまざまな領域での応用を考えてみます。
例として次の2点を実現します。
- ローカルディスクの整理を行う
- Webで今日のニュースを要約する(今回)
お取引のあるお客様の最新情報チェックや最新技術ニュースのチェックが毎朝の日課になっている方もいらっしゃると思います。その収集にかける時間を月単位で集計するとどのくらいですか?
何気ない細かい時間の使い方も、寄せ集めると思った以上のコストになっているかもしれません。
今回はこれらの集計作業をBobにお任せしようと思います。
この記事の内容は Bob2.0+Windows11環境 にて検証を行っています。
実際の利用にあたっては、所属されている組織の運用ルールをご確認のうえ、問題ない範囲でご利用ください。
IBM Bobとは?
IBM Bobは、コードベース上で開発者と協働し、ソフトウェア開発を支援するAIパートナーです。
コード補完だけでなく、アプリケーションの分析、設計、実装、レビュー、モダナイゼーションなど、開発ライフサイクル全体を支援します。
30日間の無料トライアルでは、IBM Bobの利用に必要な「Bobコイン」を40コイン利用できます。
- 無料トライアル:https://bob.ibm.com/trial
- Bobコインの追加購入:https://bob.ibm.com/pricing
この記事でBobが達成すること
次の要領で、指定されたサイトに掲載されたニュースを要約する。
- Chromeのブックマーク「毎日チェック」フォルダに登録されたページ(複数件)が対象
- 最近1週間に投稿されたニュースを集計対象とする
- 各ニュースを「ポジティブ」「ネガティブ」に分類して要約したレポートを生成する
Step.1 Bobを起動する
ワークスペースとなるフォルダを任意に作成します。
Bobを起動した後、このフォルダを開きます。成果物は基本的にこのフォルダでやりとりすることになります。
Step.2 BobにWebページへのアクセス機能を追加する
BobにMCPサーバーを登録することで、Webアクセスの機能を追加します。
一般のAIチャットを使い慣れていると忘れがちですが、LLMの仕組みには本来Webアクセスは含まれていません。
LLMの学習データに含まれる情報は利用できますが、「ここ一週間のニュースを教えて」のようなリクエストには適切に回答することはできません。
Bobにも、基本機能としてWebアクセスの仕組みは実装されていません。頑張ればCURLコマンド経由でアクセスすることはできなくもないですが、あまり実用的ではありません。
MCPを使って機能追加する
そのため、MCP(Model Context Protocol)の技術を使い、Bobに外部リソースへのアクセス機能を追加します。
MCPについては以前JavaでつくるMCP SSEサーバー on Libertyという記事で触れています。少々古いですが、MCPの仕組みをざっくり把握したい方はこちらもご覧ください。
Playwright MCPサーバーの導入
今回は「ローカルのWebブラウザを使ってWebサイトにアクセスできる」という機能が必要です。
様々な選択肢がありますが、ここでは機能性と信頼性を評価して Playwright というMCPサーバーを選択します。
MCPサーバーはBobの外側にアクセスできる便利な機能ですが、第三者が提供するMCPサーバーを利用する場合は安全性にも留意して選択してください。
MCPサーバーを使用するためには、Bobにサーバーを登録する必要があります。
Bobの設定メニューから登録を行う手順が一般的ですが、Bobに対して次のように指示を出すことで、Bobが登録を代行してくれます。
モードをAgentに指定し、次のように指示を出します。
Playwright MCPサーバーを登録して。HeadlessでChromeを起動する設定としてください。
とリクエストすればOKです。
ここは前の記事でのスキル登録と仕組みは同じです。
Playwrightでは次の指定が行えます。
| 機能 | 詳細 |
|---|---|
| ヘッドモード | headlessと指定するとブラウザを画面上に表示させずに処理が行えます |
| ブラウザ指定 | 次のブラウザが選択できます。 chrome firefox msedge webkit(playwrightが内蔵するブラウザ) |
今回は画面上の操作は見届けずに集計結果だけ取得したいことから、headlessを指定しています。
また、Chrome上のブックマークバーに登録されたURLを巡回して結果を取得したいことから、ブラウザはChromeを指定します。
Step.3 Bobに指示を出す
Bobにまとめを依頼します。Bobは指示を解釈してPlaywrightを通じて情報を収集、最終的にレポートまで行います。
新しいチャットを立ち上げて、例えば次のようにBobに指示します。
ブックマークバーの「毎日チェック」フォルダに登録されたサイトから、過去1週間のニュースを取得して、ポジティブなニュースとネガティブなニュースに分類して各々要約してください。
スキルの場合と同じく、Bobはユーザーからの指示内容を見て「これはMCPサーバーを使うべき」とBobが判断した際に、MCPサーバーが提供する機能を呼び出して処理を進めます。
検証環境にあるChromeの同フォルダには、IBM、Red Hat、Confluentの日本サイトのリンクが置いてあります。Bobは、OSコマンドでこの情報を取得した後、MCPサーバーの機能で各リンクにアクセスして必要な情報を収集します。
実行したところ、いくつかの承認操作を経て、次のようなレポートが作成されました。
依頼内容はかなりアバウトではありましたが、Bobは作業のパートナーとして意図を組んで適切な情報収集とサマリーを行ってくれました。
普段ユーザーが使っている環境のブックマークをそのまま利用し、Bobにサマリーを依頼することができました。
日常業務の延長として、普段あなたがストックしているコンテンツをシームレスに利用できるところもBobの特徴のひとつです。
Step.4 毎日利用しやすいように工夫する
スキルを併用して、レポート以外のさまざまな日常業務を短い依頼でまとめて処理できるようにします。スキル作成にもBobを使うことで、労力をかけずに準備できます。
上で示したリクエストを毎朝
実行する場合、もっとシンプルな指示で実施できると朝の仕事がスムーズになるのではないでしょうか。また、上に示した指示だと収集手順や出力結果フォーマットにばらつきが生じるかもしれません。
これらの課題を解消するために、前の記事で触れた「スキル」を併用してシンプルな指示で安定的に実行できるようにします。
スキルの定義を自分で手書きするのは大変かもしれませんが、ここでもBobを活用します。
前の手順で結果が取得できた後に、次のようにBobに指示をすることでスキル用のスクリプトを作成することができます。
今回のサマリー指示、およびこれを「おはよう」と呼びかけるだけで起動するスキルのテキストを作成してください。
「おはよう」という挨拶の後に、今後Webチェック以外の処理も追加したくなるかもしれません。ですので、「おはよう」で起動するスキル、Webチェックのスキルを別のスキルとしてください。新しい処理が必要な場合、新しいスキルを追加して「おはよう」プロセスから起動するようにしたいです。また、上記のリクエストにあわせて作成したスキルのテキストをmdファイルとしてワークスペースに出力してください。
こちらを実施した結果で出力されたスクリプトが次のようになります。
スキルのスクリプト化は難しそうですが、Bobが生成を支援できます。ユーザーは実現したいことを指示するだけでOK、ということが分かります。
サマリー指示も細かい手順に落とし込まれているので、Bobは迷うことなく効率的に作業を行うことができます。
---
name: ohayo
description: ユーザーが「おはよう」と挨拶したときに使用します。登録されているすべての朝のサブスキルを順番に起動して、モーニングルーティンを実行します。
---
# おはよう — モーニングルーティン オーケストレーター
ユーザーが「おはよう」と呼びかけたとき、登録されたモーニングサブスキルを順番に起動する。
## 実行手順
以下のサブスキルを **記載順に** `use_skill` ツールで起動する。
各スキルが完了してから次のスキルに進むこと。
### 登録済みサブスキル
1. `ohayo-news` — 毎日チェックフォルダのサイトから週次ニュースを取得・分類・要約
---
## 新しい処理を追加する方法
新しい朝のルーティン処理を追加したい場合は、以下の手順で対応する。
1. 新しいスキルを `.bob/skills/<skill-name>/SKILL.md` として作成する
2. このファイルの「登録済みサブスキル」セクションに `<skill-name>` を追加する
例:
2. `ohayo-weather` — 今日の天気予報を取得して表示
3. `ohayo-calendar` — 今日のカレンダー予定を一覧表示
サブスキルは単独でも呼び出し可能に設計すること。
---
name: ohayo-news
description: 朝のニュースの確認、または「毎日チェック」ブックマークフォルダからの週間ニュースの取得を求められたときに使用します。過去1週間のニュースを取得し、各記事をポジティブまたはネガティブに分類して、要約されたHTMLレポートのアーティファクトを生成します。
---
# ohayo-news — 毎日チェック 週次ニュース要約
ブックマークバーの「毎日チェック」フォルダに登録されたサイトから過去1週間のニュースを取得し、
ポジティブ/ネガティブに分類して HTML レポートを生成する。
## Step 1 — ブックマークからURLを取得
`execute_command` で以下のインラインコマンドを実行し、「毎日チェック」フォルダ内のURLとタイトルを取得する。
OS(Windows / Mac)を自動判定する。
``` script
$p = if ($IsMacOS) { "$HOME/Library/Application Support/Google/Chrome/Default/Bookmarks" }
else { "$env:LOCALAPPDATA\Google\Chrome\User Data\Default\Bookmarks" }
if (-not (Test-Path $p)) { '{"error":"Bookmarks file not found","urls":[]}'; exit 0 }
$j = Get-Content $p -Raw -Encoding UTF8 | ConvertFrom-Json
function fnd($n,$t){ if($n.type -eq 'folder' -and $n.name -eq $t){return $n} if($n.children){foreach($c in $n.children){$r=fnd $c $t;if($r){return $r}}} return $null }
function gtu($n){ $r=@(); if($n.type -eq 'url'){$r+=[PSCustomObject]@{title=$n.name;url=$n.url}} if($n.children){foreach($c in $n.children){$r+=gtu $c}} return $r }
$f = fnd $j.roots.bookmark_bar '毎日チェック'
if (-not $f) { $f = fnd $j.roots.other '毎日チェック' }
if (-not $f) { '{"error":"folder not found","urls":[]}'; exit 0 }
([PSCustomObject]@{error=$null;urls=(gtu $f)}) | ConvertTo-Json -Depth 5
```
出力された JSON をパースし、対象URLのリストを確定する。
`urls` が空の場合は「毎日チェックフォルダが見つかりませんでした」とユーザーに伝えて終了する。
## Step 2 — 各サイトのニュースを取得
取得したURLリストの各サイトについて、`mcp__playwright__browser_navigate` でアクセスする。
- 各サイトのニュース/プレスリリース/ブログのインデックスページを特定する
(トップページがニュース一覧でない場合は `/news`、`/newsroom`、`/blog` などを試みる)
- `mcp__playwright__browser_evaluate` で本文テキストを抽出する
- **対象期間**:実行日から遡って7日以内に公開された記事のみ対象とする
- 記事ごとに「日付・タイトル・要旨(2〜3文)」を記録する
- アクセスに失敗したサイトはスキップし、その旨をレポートに記載する
## Step 3 — ポジティブ/ネガティブに分類
収集した記事を以下の基準で分類する。
**ポジティブ(例)**
- 新製品・新機能の発表
- パートナーシップ・提携の締結
- 研究成果・技術的マイルストーンの達成
- 顧客成功事例・受賞
**ネガティブ(例)**
- 業績悪化・下方修正・大型案件の失注
- セキュリティ脆弱性・インシデントの報告
- サービス障害・廃止
- 組織変更・人員削減
どちらとも言い切れない中立的な記事は「ポジティブ」に分類し、カード内に「中立要素あり」と注記する。
## Step 4 — HTML レポートを生成
`create_html_artifact` で以下の構成の HTML レポートを出力する。出力したレポートをyyyy-mm-dd-news-report.html(yyyy-mm-ddは本日日付)のファイル名でワークスペースに保存する。
- **ヘッダー**:タイトル「毎日チェック — 週次ニュース要約」、取得期間、取得元サイト一覧(バッジ表示)
- **サマリー行**:ポジティブ件数・ネガティブ件数・合計件数をカード表示
- **ポジティブセクション**:緑系ヘッダー、各記事をカードで表示
(日付・サイト名タグ・カテゴリタグ・タイトル・要旨・ポジティブポイント)
- **ネガティブセクション**:赤系ヘッダー、同形式
- **総括**:全体の印象を2〜3文でまとめる
- artifact id は `weekly_news_report`(毎回同じIDで上書き更新する)
デザイン仕様:
- 背景 `#ffffff`、サーフェス `#f7f8fa`、ボーダー `#e5e7eb`、テキスト `#1f2328`
- ポジティブアクセント `#16a34a`、ネガティブアクセント `#dc2626`
- フォント:`-apple-system, "Segoe UI", system-ui, sans-serif`、14px、line-height 1.7
- 最大幅 760px、センタリング
これらの内容に問題がなければ、「ohayo-news.mdをワークスペースのスキルとして登録して」「ohayo.mdをワークスペースのスキルとして登録して」という指示でスキル化できます。
以降は、毎朝Bobを起動した後に「おはよう」と告げるだけでWebサイトの要約を作成してくれます。
他に朝のルーティーンがあれば、スキルとして追加登録することも可能ですね。
おわりに
スキル、MCPといった機能を駆使することで、事務系のタスクでもBobを活用する幅が広がります。
色々な可能性が考えられますので、日々の作業タスクで「これ以前も実施したかも」と気づいたものがあれば、Bobを頼ってみることを検討してみてください。