🐍

Slack APIを使用してCanvasを作成してみた

に公開

SlackのCanvas機能を使って、プログラムからドキュメントを作成する方法を試してみました。この記事では、Slack Bolt for Pythonを使用してcanvases_createでキャンバスを作成し、canvases_access_setでアクセス権限を設定する手順を紹介します。Slackの便利な機能を自動化したい方にとって、役立つ内容になれば嬉しいです!

Slack Canvasとは?

Slack Canvasは、Slack内で情報を整理・共有するためのドキュメント機能です。プロジェクトの計画や会議ノートなどを、チャンネルやDMに紐づけたり、スタンドアロンで作成したりできます。FreeプランではチャンネルやDM内のキャンバスが利用でき、Paidプランではスタンドアロンのキャンバスも作成可能です。今回はAPIを使ってスタンドアロンキャンバスを作成し、特定のチャンネルで共有する方法を試します。

前提条件

始める前に、以下の準備が必要です:

  • Slackアプリの作成: Slack APIポータルでアプリを作成。

  • スコープの追加: canvases:writeをアプリに追加(OAuth & Permissionsで設定)。

  • ボットトークン: xoxb-で始まるトークンを取得。

  • Python環境: slack-boltライブラリをインストール。

    pip install slack_bolt
    

アプリをワークスペースにインストールし、ボットトークンを控えておきましょう。

コードの実装

ここでは、キャンバスを作成し、チャンネルに書き込み権限を設定してリンクを共有するコードを紹介します。

基本コード

from slack_bolt import App

# アプリの初期化(トークンは実際の値に置き換えてください)
app = App(token="xoxb-your-bot-token")

# キャンバスの作成
response = app.client.canvases_create(
    document_content={"type": "markdown", "markdown": "# ようこそ私のキャンバスへ!\nここにメモを追加できます。"},
    title="私のテストキャンバス"
)
canvas_id = response["canvas_id"]

# アクセス権限の設定
access_response = app.client.canvases_access_set(
    canvas_id=canvas_id,
    access_level="write",
    channel_ids=["C1234567890"]  # 実際のチャンネルIDに置き換えてください
)

# キャンバスリンクをチャンネルに投稿
channel_id = "C1234567890"
team_id = "T1234567890"  # 実際のワークスペースIDに置き換えてください
link = f"https://your-workspace.slack.com/docs/{team_id}/{canvas_id}"
app.client.chat_postMessage(channel=channel_id, text=f"新しいキャンバスを作成しました! {link}")

print("キャンバス作成完了:", response)
print("アクセス設定完了:", access_response)

コードの解説

  1. canvases_create

    • document_content: Markdown形式で初期コンテンツを設定。今回は見出しと簡単なテキストを追加。
    • title: キャンバスの名前を設定。
    • レスポンスからcanvas_idを取得し、次のステップで使用。
  2. canvases_access_set

    • canvas_id: 作成したキャンバスのID。
    • access_level: "write"で編集権限を付与("read"なら閲覧のみ)。
    • channel_ids: アクセスを許可するチャンネルIDをリストで指定。
  3. リンクの共有

    • キャンバスのURL形式はhttps://<ワークスペース名>.slack.com/docs/<team_id>/<canvas_id>
    • chat_postMessageでチャンネルにリンクを投稿。

注意点

  • トークンの管理: ボットトークンは機密情報です。.envファイルや環境変数で管理しましょう。

    import os
    from dotenv import load_dotenv
    load_dotenv()
    app = App(token=os.getenv("SLACK_BOT_TOKEN"))
    
  • エラーハンドリング: API呼び出しが失敗する可能性があるので、例外処理を追加すると安心です。

    try:
        response = app.client.canvases_create(...)
    except Exception as e:
        print(f"エラー: {e}")
    
  • プラン制限: Freeプランではスタンドアロンキャンバスの作成に制限がある場合があります。動作確認はPaidプラン推奨。

実行結果

コードを実行すると、指定したチャンネルにキャンバスへのリンクが投稿されます。クリックすると、設定したタイトルとMarkdownコンテンツが表示され、権限を持つメンバーが編集可能です。

応用アイデア

  • 定期的なキャンバス作成: スケジュール機能(scheduleモジュールなど)で毎日ノートを作成。
  • テンプレート活用: プロジェクト管理用のテンプレートをMarkdownで事前に用意。
  • イベント連携: Slackのイベント(メッセージ投稿など)をトリガーにキャンバスを生成。

まとめ

Slack APIのcanvases_createcanvases_access_setを使えば、プログラムから簡単にキャンバスを作成・共有できます。Slack Boltのおかげで実装もシンプル!ドキュメント管理を自動化したいときや、チームのコラボレーションを強化したいときにぜひ試してみてください。

参考: Slack API Canvases Documentation

リバナレテックブログ

Discussion