{description}
- slack-utils シリーズの共通テンプレートです。
- {Category} をはじめとした {category} ワークフローを素早く構築できます。
- Slack Deno SDK v2.0.0 を利用し、関数・ワークフロー・トリガーを一貫して管理します。
- Deno 1.37+ がインストールされていること
- Slack CLI が利用可能で、ワークスペースにログイン済みであること
- Slack App を作成できる権限を持っていること
- Git がインストールされていること(Git Hooks使用時)
詳細は 開発環境のセットアップ を参照してください。
# リポジトリを取得
git clone https://github.com/your-org/slack-utils-template.git
cd slack-utils-template
# 環境変数の設定
cp .env.example .env
# .env ファイルを編集して、アプリ名やカテゴリをカスタマイズ
# 依存設定と初期化
slack login
slack env add local
# Git hooks をセットアップ(推奨)
# macOS/Linux: bash scripts/setup-git-hooks.sh
# Windows: Git Bash または WSL で実行.env ファイルで以下の変数をカスタマイズできます:
# Slack App Configuration
SLACK_APP_NAME=Slack Utils Template # アプリ名
SLACK_APP_DESCRIPTION=A template... # アプリの説明
SLACK_CATEGORY=Channel # カテゴリ名(例: Team, Project など)これらの変数は、ワークフロー、ファンクション、トリガーの名前や説明に自動的に反映されます。
slack.json には以下の設定が含まれています:
"environments": {
"local": {
"env_file": ".env"
}
}environments.local:slack run実行時に.envファイルを自動読み込み- 環境変数(API キーなど)を
.envで管理できます
本番環境へデプロイする場合は、deploymentsセクションを追加してください:
"deployments": {
"production": {
"workspace": "your-workspace-name",
"token_alias": "production"
}
}その後、slack deploy --env productionでデプロイできます。
.slack/フォルダー: Slack CLI が自動生成・管理(手動編集不要)import_map.json: 依存関係の解決に使用- Git hooks: セットアップすると commit/push 前に自動チェック実行
# フォーマット・Lint・テスト
deno task fmt
deno task lint
deno task check
deno task test
# カバレッジ付きテスト
deno test --allow-all --coverage=cov
deno coverage cov --html
# ローカル実行
slack run workflows/example_workflowfunctions/example_function/mod.tsが {category} チャンネル情報を取得するサンプルです。workflows/example_workflow.tsは上記関数を利用して {Category} を分析します。triggers/example_trigger.tsを Slack CLI で登録し、ショートカットからワークフローを呼び出せます。
# 全テストを実行
deno task test
# カバレッジを測定
deno test --allow-all --coverage=cov
deno coverage cov --html # HTML形式で確認新しい関数を作成する際は、以下を必ず実施してください:
- JSDocコメント: 関数の説明、パラメータ、戻り値、エラーを記載
- テストファイル: 正常系と異常系のテストを作成
- テストカバレッジ: 主要な処理パスをカバー
詳細は docs/testing-guide.md を参照してください。
/**
* Slackチャンネルの情報を取得します
*
* @param client - Slack APIクライアント
* @param channelId - 取得対象のチャンネルID
* @returns チャンネルの概要情報
* @throws {Error} チャンネル情報の取得に失敗した場合
*/
export async function retrieveChannelSummary(
client: SlackAPIClient,
channelId: string,
): Promise<ChannelSummary> {
// 実装
}参考実装: functions/example_function/
このプロジェクトは、英語と日本語の多言語対応をサポートしています。
- English (en) - ベース言語
- 日本語 (ja)
環境変数で言語を指定できます:
# 英語で実行(デフォルト)
export LOCALE=en
deno run your_script.ts
# 日本語で実行
export LOCALE=ja
deno run your_script.tsimport { t } from "../../lib/i18n/mod.ts";
// シンプルなメッセージ
const message = t("errors.unknown_error");
// プレースホルダー付きメッセージ
const error = t("errors.channel_not_found", { error: "not_found" });詳細は docs/i18n-guide.md を参照してください。
このプロジェクトでは、統一的な例外処理パターンを採用しています。
- API通信: 必ず
response.okをチェック - バリデーション: 入力値の型チェック・空文字チェック必須
- エラーメッセージ: 必ず
t()関数で多言語化 - Slack関数: try-catchで全体をラップ
import { t } from "../../lib/i18n/mod.ts";
// API通信の例外処理
const response = await client.conversations.info({ channel: channelId });
if (!response.ok) {
throw new Error(t("errors.api_call_failed", { error: response.error }));
}
// バリデーション
if (typeof input !== "string") {
throw new Error(t("errors.invalid_type", {
expected: "string",
actual: typeof input,
}));
}
// Slack関数
export default SlackFunction(MyFunction, async ({ inputs, client }) => {
try {
// 処理
return { outputs: { result } };
} catch (error) {
const message = error instanceof Error ? error.message : String(error);
console.error("Function error:", message);
return { error: message };
}
});詳細は docs/exception-handling-guide.md
を参照してください。
このプロジェクトでは、型安全なバリデーションのためにZodを使用しています。
lib/validation/schemas.ts に以下の共通スキーマが定義されています:
channelIdSchema: Slackチャンネル ID(C12345678形式)userIdSchema: Slackユーザー ID(U0812GLUZD2またはW1234567890形式)nonEmptyStringSchema: 空でない文字列
import { channelIdSchema } from "../../lib/validation/schemas.ts";
// パース(エラー時は例外をthrow)
const channelId = channelIdSchema.parse(inputs.channel_id);
// 安全なパース(エラー時は結果オブジェクトを返す)
const result = channelIdSchema.safeParse(inputs.channel_id);
if (!result.success) {
console.error(result.error);
}Zodのバリデーションエラーメッセージは動的に多言語化されます。
.superRefine()を使用しているため、バリデーション実行時に現在のロケールに応じたエラーメッセージが表示されます:
import { channelIdSchema } from "../../lib/validation/schemas.ts";
import { setLocale } from "../../lib/i18n/mod.ts";
// 英語でバリデーション実行
setLocale("en");
const result1 = channelIdSchema.safeParse("invalid");
// エラー: "Channel ID must start with 'C' followed by uppercase alphanumeric characters"
// 同じスキーマインスタンスで日本語に切り替え
setLocale("ja");
const result2 = channelIdSchema.safeParse("invalid");
// エラー: "チャンネルIDは'C'で始まり、その後に大文字の英数字が続く必要があります"
// 英語に戻す
setLocale("en");
const result3 = channelIdSchema.safeParse("invalid");
// エラー: "Channel ID must start with 'C' followed by uppercase alphanumeric characters"ポイント:
- デフォルトスキーマ(
channelIdSchema等)もロケール変更に動的に対応します - スキーマを再作成する必要はありません
- 環境変数
LOCALEまたはLANGでデフォルトロケールを設定できます
詳細は CONTRIBUTING.md
の「バリデーション(Zod)」セクションを参照してください。
# インストールスクリプトを使用
curl -fsSL https://deno.land/install.sh | sh
# Homebrewを使用(macOS)
brew install deno# PowerShellでインストール
irm https://deno.land/install.ps1 | iex
# Chocolateyを使用
choco install deno
# Scoopを使用
scoop install denodeno --versioncurl -fsSL https://downloads.slack-edge.com/slack-cli/install.sh | bash
slack login方法1: インストーラーを使用(推奨)
- Slack CLI リリースページ から最新のインストーラーをダウンロード
- ダウンロードした
.msiファイルを実行 - PowerShellまたはコマンドプロンプトで
slack loginを実行
方法2: WSL (Windows Subsystem for Linux) を使用
# WSL内で実行
curl -fsSL https://downloads.slack-edge.com/slack-cli/install.sh | bash
slack loginslack version
slack login# Xcodeコマンドラインツールと一緒にインストール
xcode-select --install
# Homebrewを使用
brew install git# Ubuntu/Debian
sudo apt-get update
sudo apt-get install git
# CentOS/RHEL
sudo yum install git
# Fedora
sudo dnf install git- Git for Windows から公式インストーラーをダウンロード
- インストール時に「Git Bash」を含めることを推奨(スクリプト実行に必要)
- インストール完了後、Git Bashまたは PowerShellで動作確認
git --version- Visual Studio Code - 公式Deno拡張機能が利用可能
- Cursor - AI統合エディタ(このプロジェクトでは
.cursor/rules/でルールを設定済み)
このプロジェクトには .vscode/
ディレクトリが用意されており、以下の設定が自動的に適用されます:
含まれる設定ファイル:
settings.json- Deno LSP、エディタ、フォーマッター設定extensions.json- 推奨拡張機能のリストtasks.json- Denoタスクのショートカットlaunch.json- デバッグ設定(Slack Function、テスト、翻訳スクリプト等)
推奨拡張機能(自動でインストール推奨されます):
denoland.vscode-deno- Deno公式拡張(必須)github.copilot- AI支援コーディングeamodio.gitlens- Git履歴可視化usernamehw.errorlens- エラー行内表示
初回起動時に「推奨拡張機能をインストールしますか?」と表示されたら、「すべてインストール」を選択してください。
デバッグ機能:
F5 キーまたは「実行とデバッグ」パネルから、以下のデバッグ設定を使用できます:
- Debug Slack Function - Slack関数のデバッグ
- Debug Deno Tests - 全テストのデバッグ
- Debug Current File - 現在開いているファイルのデバッグ
- Debug i18n Tests - i18nテストのデバッグ
- Debug Translation Script - 翻訳スクリプトのデバッグ
GitHub Actionsを使用するため、以下のシークレットを設定してください:
Settings → Secrets and variables → Actions
必須のシークレット:
SLACK_WEBHOOK- Slack通知用のIncoming Webhook URLANTHROPIC_API_KEY- Claude Code Action 用のAPIキー(Issue自動実装・PRレビュー)
オプションのシークレット:
CODECOV_TOKEN- コードカバレッジレポート用(プライベートリポジトリの場合)NPM_TOKEN- npm公開用(npmパッケージとして公開する場合)JSR_TOKEN- JSR公開用(JSRパッケージとして公開する場合)
このプロジェクトには、Claude Code を使ったGitHub自動化が組み込まれています。
| 機能 | トリガー | 説明 |
|---|---|---|
| Issue → PR 自動実装 | claude-ready ラベル |
Issueの内容を分析し、コードを実装してPRを作成 |
| @claude メンション | コメントで @claude |
質問への回答、コード実装、レビュー依頼など |
| PR 自動コードレビュー | PR作成・更新時 | CLAUDE.md準拠、型安全性、i18n対応などをチェック |
- Issueを作成(実装してほしい内容を詳しく記述)
claude-readyラベルを付与- Claudeが自動でブランチを作成し、実装してPRを提出
IssueやPRのコメントで @claude とメンションすると、Claudeが応答します:
@claude このエラーの原因を調べてください
@claude テストを追加してください
@claude コードレビューをお願いします
- Anthropic Console でAPIキーを取得
- リポジトリの Settings → Secrets → Actions に
ANTHROPIC_API_KEYを追加 - ワークフローは既に設定済み(追加設定不要)
詳細: anthropics/claude-code-action
# ローカルで実行(開発環境)
slack run workflows/example_workflow
# .envファイルは自動的に読み込まれます本番環境へデプロイする場合は、以下の手順を実行してください:
# 1. slack.jsonにdeploymentsセクションを追加
# slack.jsonに以下を追加:
# "deployments": {
# "production": {
# "workspace": "your-workspace-name",
# "token_alias": "production"
# }
# }
# 2. テストと型チェックを完了させる
deno task test
deno task check
# 3. Slack CLI でデプロイ
slack deploy --env production
# 4. トリガーを有効化
slack triggers create --trigger-file triggers/example_trigger.ts注意:
deploymentsセクションはデフォルトでは含まれていません(開発専用テンプレートのため)- 本番デプロイ時に必要に応じて追加してください
- 詳細は「slack.json 設定」セクションを参照
slack-utils-template/
├── functions/ # Slack Functions(各関数にtest.tsを配置)
├── workflows/ # Slack Workflows
├── triggers/ # Slack Triggers
├── docs/ # ドキュメント(テストガイド等)
├── assets/ # アイコンなどの静的アセット
├── .github/ # CI/CD と Issue テンプレート
├── .cursor/ # Cursor AI エディタのルール設定
├── .gitattributes # 改行コード統一設定 (LF)
└── deno.jsonc # Deno設定(CHANGELOG.md除外含む)
- 全ファイルでLF(Unix形式)に統一されています
.gitattributesで自動的に設定されます- Windows環境では Git が自動変換するため、特別な設定は不要です
- Cursor AI:
.cursor/rules/push_rules.mdcでpush前チェックが自動実行されます - Deno:
deno.jsoncで設定を管理(フォーマッター、リンターなど) - VSCode/Cursor: Deno拡張機能を有効化してください
- CHANGELOG.md: release-please/semantic-release が自動生成するため、フォーマットチェックから除外されています
- 手動で編集しないでください(自動更新されます)
- Git Bash の使用: スクリプト実行時は Git Bash または WSL を使用
- 改行コード:
.gitattributesが自動的にLFに変換します - パス区切り: スラッシュ(
/)を使用(バックスラッシュ不要)
- Xcode Command Line Tools: Gitインストールに必要
- Homebrew: 各種ツールのインストールに推奨
- 権限: スクリプト実行時に
chmod +xが必要な場合があります - パッケージマネージャー: ディストリビューションに応じて選択
Git hooksを設定すると、commit/push時に自動的に品質チェックが実行されます。
bash scripts/setup-git-hooks.shPowerShellを使用:
# Git Bashがインストールされている場合
bash scripts/setup-git-hooks.sh
# または、WSL内で実行
wsl bash scripts/setup-git-hooks.shGit Bashを使用:
bash scripts/setup-git-hooks.shpre-commit(コミット前):
- ✅ フォーマットチェック
- ✅ リントチェック
pre-push(プッシュ前):
- ✅ フォーマットチェック
- ✅ リントチェック
- ✅ テスト実行
- CI/CDのエラーを事前に防止
- ローカルで即座にフィードバック
- 品質の自動保証
git commit --no-verify # pre-commitをスキップ
git push --no-verify # pre-pushをスキップ詳細は docs/git-hooks-setup.md を参照してください。
本テンプレートは MIT ライセンスで提供されています。詳細は LICENSE
を参照してください。