Slide 1

Slide 1 text

ひとり情シスなCTOが LLMと始めるオペレーション最適化 JX通信社 小笠原みつき / @yamitzky

Slide 2

Slide 2 text

小笠原 みつき / @yamitzky # 経歴 2016 JX通信社 中途入社 (Engineer) 2018 VP of Engineering 2023 CTO 2024 情シス引き継ぎ # 好き BigQuery 生成AI Python K-POP 自己紹介

Slide 3

Slide 3 text

MISSION / データインテリジェンスの力で、より豊かで安全な社会を創る 生成AIを活用したニュース系SaaSなどの事業を展開 JX通信社

Slide 4

Slide 4 text

Good 生成AIが事業のコア 執行役員なので他部署のオペレーションも変えやすい Bad 引き継いだ時点でドキュメント・台帳が不足 分掌が多く、とにかく省力化が必要 全社コスト削減の旗振り役なので、自分が楽をするだけのSaaS導入は気が引ける... 情シスオペレーション最適化をするうえでの背景

Slide 5

Slide 5 text

情シス業務以外が多いため、実質0.n人情シスとして対応 情シス業務 アカウントの作成、削除、管理 SaaS導入・契約更新 SaaS、クラウドの権限設定 PCや社用携帯の管理・修理 セキュリティチェックシートの回答 情報セキュリティ活動(ISMS) CTO業務 知財活動 採用活動 etc... 担当業務

Slide 6

Slide 6 text

よし、全部生成AIやSaaSで自動化だ!!!! Vibe Codingだ!!!!!!!!

Slide 7

Slide 7 text

よし、全部生成AIやSaaSで自動化だ!!!! Vibe Codingだ!!!!!!!! まずは業務を分解してみよう

Slide 8

Slide 8 text

お金を払う 例) SaaSの契約更新 ...だけではない

Slide 9

Slide 9 text

契約更新フロー 稟議申請をする 稟議承認を待つ お金を払う 例) SaaSの契約更新

Slide 10

Slide 10 text

契約更新フロー 契約更新のやり方を思い出す、調べる 見積もり依頼メール出す 見積もりに返信する 稟議申請をする 稟議承認を待つ お金を払う 支払った証跡を保存・添付する 「契約更新」と言っても、複数の手順がある。一部だけ自動化しても効果は限定的 例) SaaSの契約更新

Slide 11

Slide 11 text

契約更新フロー 契約更新のやり方を思い出す、調べる → マニュアルの整備 見積もり依頼メール出す 見積もりに返信する → 生成AIで文面作成するプロンプトの整備 稟議申請をする → 各部署から申請できるように分担・環境整備 稟議承認を待つ → 数ヶ月前に申請し、待ち時間をなくす お金を払う 支払った証跡を保存・添付する → SaaS を活用 例) SaaSの契約更新

Slide 12

Slide 12 text

契約更新フロー → 更新しない 契約更新のやり方を思い出す、調べる 見積もり依頼メール出す 見積もりに返信する 稟議申請をする 稟議承認を待つ お金を払う 支払った証跡を保存・添付する 「何もしない」が最強の業務最適化 「そもそも不要なのではないか?」を考え、業務自体をなくすことも考える 例) SaaSの契約更新

Slide 13

Slide 13 text

そもそも業務自体をなくせないか、相談 マニュアルを徹底的に整備 作業の待ち時間・ボトルネックをなくす 誰でもできるように平準化・仕組み化 プロンプトを作り、Difyなどの既存ツールで一部業務を簡略化 既存のSaaSで自動化 (予算次第) 生成AIでプログラム化 すぐに「自動化」に飛びつかず、最適な方法から取り組む 既存ツールを使ったAI活用からは始める 引き継いだ業務を最適化するまでの流れ

Slide 14

Slide 14 text

既存ツール活用 プロンプト整備 メール作成 SaaSアカウントの月次チェック 台帳のスプレッドシートの作成 Claude Code、Devin Infrastructure as Code 化したSaaS権限の管理 NotebookLM セキュリティチェックシートの一次回答 内製AIエージェント 社内の問い合わせ対応 Google Workspaceアカウント作成 JX通信社での生成AIを活用した情シス業務の一例

Slide 15

Slide 15 text

生成AIを業務に活用する場合、3つの組み合わせ次第で性能が大きく変わる 「◯◯のモデルは悪い」 「AIにはこのタスクは難しい」とすぐに決めつけず、組み合わせを試行錯誤する モデル自体の賢さ 得意・不得意 Gemini ProはFlashよりも遅いが賢い 新しいモデルのほうがだいたい賢い コーディングに強いモデル vs ロング コンテキストに強いモデル × エージェントや ツールの設計 すぐ諦めるエージェント vs 達成する までお金を使い続けるエージェント タスク分割をしてくれるエージェント の活用(Claude Code, Roo) × モデルに与える 情報の質 AIは業務知識や細かい一般知識、最新 の知識を知らない 今日の日付すら知らない 逆に情報を与えすぎると、性能が落 ちることも 補足:生成AIの「性能」

Slide 16

Slide 16 text

aichatを使った利用規約の和訳

Slide 17

Slide 17 text

https://github.com/sigoden/aichat Rust 製のオープンソースな CLI の生成 AI ツール (MIT / Apache‑2.0) REPLやpipe入力などに対応 プロンプトをroleやmacroとして保存可能 (GPTs的なもの) 例) 「メール返信」 「日英翻訳」 「Spreadsheetの達人」を作成 MCP、ツール統合あり 20 以上の LLM プロバイダー (OpenAI, Claude, Gemini) に対応 aichat

Slide 18

Slide 18 text

Spreadsheetの関数を考えてください。Google Spreadsheet(Google Sheets)です。 - ARRAYFORMULAの中で AND や OR を使うことはできません。積算を使って実現してください - 原則、VLOOKUPなどは使わず、XLOOKUPを使ってください - カラムを参照するときは、Sheet_name!A:A のように参照するだけではなく、Sheet_name[名前] のように参照することもできます。 ユーザーが「テーブル参照」と表現する場合、Sheet_name[名前]のような表記のことを言っています。 - 関数は、適切にインデントを使って見やすくしてください ↓ 生成したもの =ARRAYFORMULA( IF(Zoom[最終ログイン(UTC)]<=EDATE(TODAY(),-3), 1, 0)* IF(Zoom[金額]>0, 1, 0) >= 1 ) スプレッドシート職人の aichat role 例

Slide 19

Slide 19 text

2024年にロールアウトされた「テーブル機能」も活用し、スプレッドシートで台帳管理 「スプレッドシート職人」と作った台帳

Slide 20

Slide 20 text

アカウント台帳のインポート作業(手動時代)

Slide 21

Slide 21 text

AIに任せたくないことは人間と分担し、自動化 台帳のインポート自動化の全体像

Slide 22

Slide 22 text

https://github.com/yamitzky/spreadsheet-mcp 生成AIによるPlaywrightのブラウザ操作は Google スプレッドシートと相性が悪い(2025年現在) 表形式のスプレッドシートをimport/exportするためのMCPサーバーを開発 ツール名 できること load_sheet スプレッドシートを読み込み get_column_names 列名(ヘッダー)一覧を取得 detect_sheet_url シート名を指定して、そのシートのURLを取得 get_sheet_names スプレッドシート内の全シート名を取得 upload_csv_to_spreadsheet CSVファイルをスプレッドシートにアップロード upload_spreadsheet_to_spreadsheet スプレッドシートから別のシートへ内容をコピー spreadsheet-mcp

Slide 23

Slide 23 text

1月当初、browser-useを使っていたが、あまりうまくいかなかった browser-use を使って情シス業務を自動化するための実践的テクニック - JX通信社テックブログ Gemini 2.5 Pro と Roo code の Boomerang Task を活用 → ほぼ自動化できた Gemini 2.5 Pro は長いコンテキストに強い Boomerang Tasks でサービスごとにタスクを分割 Roo code はタスク達成までリトライする傾向 プロンプトもかなり具体的な指示をするよう工夫 モデルの個性、ツールの設計、適切なコンテキストの組み合わせが重要(再掲) 台帳管理自動化の変遷

Slide 24

Slide 24 text

# サービスアカウント棚卸し作業の指示 あなたには、当社で利用している各種サービスのユーザーアカウント情報を収集し、指定のGoogleスプレッドシートに集約する棚卸し作業を行っていただきます。この作業は毎月実施する必要があります。 先月のデータを格納する必要があるので、YYYY-MM は先月の月を指定してください。 タスク分割をする際は、「情シス」のモードでサブタスクを実行してください。また、1サービス1タスクとなるよう分割してください。 ## あなたの作業の流れ 1. tanaoroshi-YYYY-MM.txt のチェックリストを作成してください。すでに存在する場合は、作成しないでください。 - チェックリストは tanaoroshi/*.txt のファイルの数だけあります。1行1ファイルとしてください。 2. ダウンロードフォルダのため、~/path/to/downloads/YYYY-MM を作成してください。 3. サブタスクに分解し、tanaoroshi/*.txt の各ファイルを実行させてください。すでに完了しているタスク(チェック済みのタスク)は、実行しないでください。 4. すべてが終わったら、チェックリストを確認し、すべてが完了していることを確かめてください。 チェックリストは、以下のような形式です。 - [ ] zoom - [ ] slack ## サブタスクへの指示 AIは、複雑な指示を達成することができません。したがって、以下のように指示をしてください。XXXXX.txt や YYYY-MM には具体的な値をいれてください。 ``` あなたには、当社で利用しているサービスのユーザーアカウント情報を収集し、指定のGoogleスプレッドシートに集約する棚卸し作業を行っていただきます。 この作業は毎月実施する必要があります。 今回は YYYY-MM の分の作業を行います。 あなたが担当しているのは tanaoroshi/XXXXX.txt です。 tanaoroshi/XXXXX.txt のファイルを読み、ファイル内の指示に従って作業を行ってください。 ``` 全体管理用プロンプト

Slide 25

Slide 25 text

# サービスアカウント棚卸し作業の指示 あなたには、当社で利用している各種サービスのユーザーアカウント情報を収集し、指定のGoogleスプレッドシートに集約する棚卸し作業を行っていただきます。 この作業は毎月実施する必要があります。 先月のデータを格納する必要があるので、YYYY-MM は先月の月を指定してください。 ## 全般的な注意事項 1. あなたはログイン情報を知らないので、パスワードの入力は禁止です。Google認証が可能な場合は使用し、ログインできなければ、ユーザーにログインを依頼してください。 Google認証を使用する場合は、指定されたアカウントでログインしてください。 2. ダウンロードしたファイルは必ず行数が2以上あることを確認してください(ヘッダー行+データ行)。head コマンドのみ利用が許可されています。 3. Googleスプレッドシートの操作をする際は、spreadsheet の MCP を使用してください。 4. ブラウザの操作が必要な場合は、playwrightのMCPを使用してください。ダウンロード済みファイル一覧は browser_list_downloads のツールを使ってください 5. 複雑なJavascriptを使ったサイトが多いため、表示を待った後に無闇にリロードするのはやめてください。 6. ダウンロードしたCSVは、記録のため、~/path/to/downloads/YYYY-MM に移動してください。 7. ダウンロードフォルダは既に存在するため、作成する必要はありません。また、ブラウザを閉じる必要もありません。 ## サービスごとの全体的な流れ 1. 指示に書いてある内容に忠実に従い、作業を行う 2. 作業が完了したら、チェックリストを更新する ## 収集対象サービスと手順 ### 1. Zoom - https://*****/ にアクセスし、ログインを確認 - もしログインしていない場合は、****@jxpress.net のアカウントでログイン - https://*****/ を開き、エクスポート → テーブル内のすべてのユーザー からダウンロード - ダウンロードしたファイルを https://docs.google.com/spreadsheets/d/****/edit?gid=****#gid=****にアップロード 各サービス用プロンプト

Slide 26

Slide 26 text

不在時の一次対応のため、内製でAIエージェントの開発を決意 💪 ゴール 業務フローや社内ルール、ドキュメントを元に、Slack上で会話すること 各種アカウント操作は人間(CTOや総務)が行う前提(最初から「完全自動化」は目指さない) 言語・フレームワーク Python 3.12 Agent Development Kit (ADK) AIエージェントを開発するためのOSSフレームワーク Slack bolt Slackのbotを開発するためのOSSフレームワーク 内製AIエージェント

Slide 27

Slide 27 text

https://github.com/yamitzky/slack-agent-development-kit-mcp Slackで動くAIエージェントのサンプル MCPツールとの統合も実装 ※ADKのバージョンが古いです 実装サンプル

Slide 28

Slide 28 text

各業務オペレーションに fan-out するような設計 ※このアーキテクチャーは改善の余地が大きいという所感です 実際のエージェントの設計

Slide 29

Slide 29 text

うまくいったときの様子

Slide 30

Slide 30 text

AIが誤った回答をしても、業務改善や、ルール・ドキュメントを改善、業務のコード化を進める機会に エージェントを作ってみて良かった点

Slide 31

Slide 31 text

自動化の前に、まず業務を「なくす」 「見直す」 「何もしない」が最強の最適化。作業の分解、マニュアル化から始める。 生成AIは「小さく」始める いきなり開発するより、メール作成などのプロンプト整備からが効果的。 良いAIは「組み合わせ」で生まれる 「モデルの賢さ」 「ツールの設計」 「与える情報の質」の掛け算で性能が決まる。 AIは業務改善の「触媒」になる AIの失敗は、ドキュメントや業務フローの弱点を教えてくれる好機。 まとめ