Tips & Tricks

Claude Code × SaaS連携完全ガイド|Notion・Slack・Linear・GitHub・Figma

日常業務のSaaSをClaude Codeから直接操作する実践ガイド。5大SaaSそれぞれの連携コードと実運用パターンを、動くコード付きで徹底解説。

Claude Code がコード編集だけのツールだと思っていませんか? 普段使いのSaaSとつなげば、Claude Code は「業務オーケストレーター」に進化します。Notion にメモを書き、Slack に投稿し、Linear にチケットを切り、GitHub に PR を出し、Figma デザインを参照する——これら全てを自然言語1発でこなせます。

この記事では、ClaudeCodeLab 運営でも実際に使っている5大SaaS連携パターン を、動くコードと設定手順付きで解説します。読み終わる頃には、あなた専用の業務自動化ハブが完成します。

連携の基本アーキテクチャ

Claude Code と SaaS を繋ぐ方法は大きく3つあります。

方式実装コスト柔軟性おすすめ用途
MCP サーバー頻繁に使う連携、複数プロジェクト横断
CLIラッパー単発スクリプト、シンプルな連携
Webhook受信SaaS側からの双方向連携

初心者は CLIラッパー から始めるのが最短。「Claude Code に Bash ツールで API 叩かせる」だけなので、環境変数にAPIキーを置くだけで動きます。慣れてきたら MCP サーバー化してツール化するのが定石です。

1. Notion 連携: ページを AI で量産する

ユースケース

  • 議事録を Notion にそのまま投稿
  • 週次レポートを自動作成
  • 社内ナレッジベースを AI が拡張していく

実装

// scripts/notion-create-page.mjs
import { Client } from "@notionhq/client";

const notion = new Client({ auth: process.env.NOTION_TOKEN });

async function createPage(databaseId, title, markdown) {
  const blocks = markdown.split("\n\n").map((para) => ({
    object: "block",
    type: "paragraph",
    paragraph: {
      rich_text: [{ type: "text", text: { content: para } }],
    },
  }));

  const page = await notion.pages.create({
    parent: { database_id: databaseId },
    properties: {
      Name: { title: [{ text: { content: title } }] },
      Status: { select: { name: "Draft" } },
    },
    children: blocks,
  });

  return page.url;
}

const [, , dbId, title, ...bodyParts] = process.argv;
const url = await createPage(dbId, title, bodyParts.join(" "));
console.log(`Created: ${url}`);

Claude Code からの使い方

claude -p "
以下の会議議事録を読んで、3つのセクション
(決定事項・アクションアイテム・次回議題) にまとめ、
Notion の議事録DBに投稿:

$(cat ~/inbox/meeting-raw.txt)

database_id: abc123... を使用。
投稿後、URLを slack-channel-general に送信してほしい。
"

Claude Code が Bash ツール経由で notion-create-page.mjs を呼び、完了URLをSlack通知する一連の流れが1プロンプトで走ります。

2. Slack 連携: 通知と投稿の自動化

ユースケース

  • デプロイ完了通知
  • エラーサマリーの週次投稿
  • 長文レポートをスレッドに整形

実装 (Incoming Webhook版、最も簡単)

// scripts/slack-notify.mjs
const webhookUrl = process.env.SLACK_WEBHOOK_URL;
const message = process.argv.slice(2).join(" ");

const res = await fetch(webhookUrl, {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    text: message,
    blocks: [
      { type: "section", text: { type: "mrkdwn", text: message } },
    ],
  }),
});

console.log(res.ok ? "✓ Sent" : `✗ ${res.status}`);

Slack Bolt SDK版 (スレッド返信、DM送信なども可能)

// scripts/slack-post-thread.mjs
import { WebClient } from "@slack/web-api";

const client = new WebClient(process.env.SLACK_BOT_TOKEN);

async function postThread(channel, parent, replies) {
  const main = await client.chat.postMessage({ channel, text: parent });
  for (const reply of replies) {
    await client.chat.postMessage({
      channel,
      text: reply,
      thread_ts: main.ts,
    });
  }
  return main.ts;
}

const channel = process.argv[2];
const [parent, ...replies] = process.argv.slice(3);
await postThread(channel, parent, replies);

Claude Code での実運用例

claude -p "
scripts/deploy.sh を実行。
成功したら '本番デプロイ完了 🚀' を #dev チャンネルにポスト、
スレッド返信として以下3件:
1. コミットハッシュ
2. 変更ファイル数
3. ビルド所要時間
を投稿して。
失敗したら #dev-alerts に赤字で通知。
"

3. Linear 連携: チケット自動起票

ユースケース

  • バグ報告を議論からチケット化
  • 設計レビューの指摘を一括起票
  • コードレビューコメントからタスク分離

実装

// scripts/linear-create-issue.mjs
const LINEAR_API_KEY = process.env.LINEAR_API_KEY;
const LINEAR_TEAM_ID = process.env.LINEAR_TEAM_ID; // "ENG" など

async function createIssue(title, description, priority = 2) {
  const query = `
    mutation CreateIssue($input: IssueCreateInput!) {
      issueCreate(input: $input) {
        success
        issue { id identifier url }
      }
    }
  `;
  const res = await fetch("https://api.linear.app/graphql", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      Authorization: LINEAR_API_KEY,
    },
    body: JSON.stringify({
      query,
      variables: {
        input: {
          teamId: LINEAR_TEAM_ID,
          title,
          description,
          priority, // 0=None, 1=Urgent, 2=High, 3=Medium, 4=Low
        },
      },
    }),
  });
  const json = await res.json();
  return json.data.issueCreate.issue;
}

const [, , title, ...desc] = process.argv;
const issue = await createIssue(title, desc.join(" "), 2);
console.log(`Created: ${issue.identifier} - ${issue.url}`);

運用例: PR レビューから一括起票

claude -p "
GitHub PR #234 のレビューコメントを全部読んで、
修正が必要な指摘を Linear チケットに個別起票して。

各チケットは:
- タイトル: 指摘内容の要約
- 本文: コメント原文 + PR URL + ファイル名:行番号
- priority: 『必須』なら1、『改善提案』なら3
"

4. GitHub 連携: gh CLI を組み合わせる

GitHub は独自API よりも gh CLI を使うのが圧倒的に楽です。Claude Code から Bash ツールで叩くだけ。

主要パターン

# PR作成
gh pr create --title "feat: add cache layer" --body "$(cat desc.md)"

# Issue起票
gh issue create --title "Bug: user logout fails" --label "bug,priority-high"

# PRレビュー
gh pr view 234 --comments

# CIの状態チェック
gh run list --workflow deploy.yml --limit 5

# リリース作成
gh release create v1.2.0 --notes "Changelog here"

運用例: インシデント対応

claude -p "
production ログで 500エラーが頻発してる。以下の手順で対応:

1. logs/prod-*.log の過去1時間分を読んで、エラーパターン抽出
2. スタックトレースから疑わしいコミットを git log で特定
3. そのコミットをrevertする PR を作成 (gh pr create)
4. Linear にインシデントチケット起票
5. #incident-response Slack に状況報告

所要時間15分以内を目標。
"

5. Figma 連携: デザインをコードに

ユースケース

  • デザインファイルのコンポーネント構造を読み取り
  • Figma の値 (色、余白、フォントサイズ) を CSS に変換
  • スクリーンショット比較テスト

実装 (Figma REST API版)

// scripts/figma-extract.mjs
const FIGMA_TOKEN = process.env.FIGMA_TOKEN;
const fileKey = process.argv[2];
const nodeId = process.argv[3];

const res = await fetch(
  `https://api.figma.com/v1/files/${fileKey}/nodes?ids=${nodeId}`,
  { headers: { "X-Figma-Token": FIGMA_TOKEN } }
);
const data = await res.json();
const node = data.nodes[nodeId].document;

// 色・フォント・レイアウトを抽出
const tokens = {
  colors: extractColors(node),
  typography: extractTypography(node),
  spacing: extractSpacing(node),
};

console.log(JSON.stringify(tokens, null, 2));

function extractColors(node) { /* 実装略 */ }
function extractTypography(node) { /* 実装略 */ }
function extractSpacing(node) { /* 実装略 */ }

Claude Code での使い方

claude -p "
Figma ファイル abc123 の nodeId=456:789 (カードコンポーネント) を読み取り、
React コンポーネント components/Card.tsx として実装して。

- Tailwind の tokens に合わせる (色は theme.colors から選択)
- props は children, variant (primary/secondary)
- Storybook のストーリーも生成
- scripts/figma-extract.mjs でFigma値を取得して参考にする
"

認証情報の管理: .env + gitignore は必須

全連携で共通する鉄則:

# .env (絶対にgit管理しない)
NOTION_TOKEN=secret_xxx
SLACK_BOT_TOKEN=xoxb-xxx
SLACK_WEBHOOK_URL=https://hooks.slack.com/xxx
LINEAR_API_KEY=lin_api_xxx
LINEAR_TEAM_ID=ENG
FIGMA_TOKEN=figd_xxx
# .gitignore
.env
.env.*
!.env.example

CLAUDE.md に記載して事故防止

## 秘密鍵の扱い
- .env は絶対に commit しない
- スクリプト内で process.env から読み取る
- API キーをプロンプトや出力に含めない
- エラーメッセージで Authorization ヘッダを print しない

落とし穴5選

1. レートリミット無視 Slack は1秒1回、Notion は3秒3回、Linear は GraphQL 複雑度制限あり。バッチ処理時は必ず sleep を挟む。

async function batchPost(items) {
  for (const item of items) {
    await postToNotion(item);
    await new Promise((r) => setTimeout(r, 500)); // 500ms間隔
  }
}

2. Webhookのシークレット検証漏れ Webhook 受信側を作るとき、署名検証を省略するとリプレイ攻撃される。SlackもGitHubも署名方式を公開してるので必ず実装。

3. 誰の権限で叩くかを明示しない Bot権限で投稿してるのに「自分の名前で出る」と思い込む事故。権限スコープをREADMEに明記しましょう。

4. リトライで同じ処理を重複実行 ネットワークエラーで再試行した結果、Notion に同じページが3つ出来たなど。idempotency key をつけて一度きり保証を。

5. サービス停止時のフォールバック SlackがダウンしてるとDeploy通知が届かず、手動オペが放置される。主要通知経路は2つ用意 (例: Slack + メール) が安心。

統合運用: 1つのプロンプトで5サービス横断

究極の姿。複数SaaSを跨いだワークフローを1発で書く:

claude -p "
今週のリリース準備を進めて:

1. GitHub で master の未リリースコミットを gh log で抽出
2. リリースノートを Markdown で生成
3. Notion 'Releases' データベースに新規ページ作成
4. Linear で今週 closed になった issue を集計
5. Figma の 'v2.0 Design' ページから変更点スクショ5枚を export
6. 上記をまとめた Slack 投稿を #team に送信
   (スレッドに詳細、メインは要約3行)
7. gh release create v2.0.0 で正式リリース

各ステップのログを簡潔に報告して。
"

これが動けば、毎週1時間かかっていたリリース作業が Claude Codeに丸投げで5分 になります。

まとめ

SaaS最短連携発展形
NotionCLIラッパー + APIMCPサーバー化
SlackIncoming WebhookBolt SDK + スレッド管理
LinearGraphQL 直叩きMCPツール化
GitHubgh CLI で十分Actions と組み合わせ
FigmaREST APIPlugin + MCP

「Claude Code = コード書きツール」 という固定観念を捨てると、見える世界が一気に広がります。まずは Slack Incoming Webhook から試すのが 10分でできて最小コスト。次にNotionかLinearを加えれば、業務の30%は自動化できるはずです。

関連記事

参考資料

#claude-code #saas #notion #slack #linear #github #figma #integration

Claude Codeをもっと活用しませんか?

実務で使えるプロンプトテンプレート50選。コピペですぐ使えます。

無料プレゼント

無料PDF: Claude Code 5分でわかるチートシート

メールアドレスを登録するだけで、A4 1枚のチートシートPDFを今すぐお送りします。

個人情報は厳重に管理し、スパムは送りません。

Masa

この記事を書いた人

Masa

現役DX室長|Claude Code でゼロから多言語AI技術メディア運営中。実務直結の自動化、AI開発相談・研修受付中。

PR

関連書籍・参考図書

この記事のテーマに関連する書籍を楽天ブックスで探せます。

※ 当サイトは楽天市場のアフィリエイトプログラムに参加しています。上記リンクから商品をご購入いただくと、運営者に紹介料が支払われる場合があります。