makefile-for-telegram について
Bunを使うTelegram Botプロジェクト向けに、セットアップ、開発、テスト、macOS LaunchAgent管理用のMakefileを生成するスキルです。ローカル実行とバックグラウンドサービスの運用設定に使えます。
主な機能
- 01setup、run、devターゲットの生成
- 02LaunchAgentの起動・停止コマンド
- 03状態確認とログ表示コマンド
- 04install、test、typecheckターゲット
- 05プロジェクト固有の名前とパスを設定
活用シーン
- 01Telegram Botプロジェクトの初期設定
- 02macOSバックグラウンドサービスとしてBotを実行
- 03Bot開発用の簡易操作コマンドを追加
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ htlin222/ dotfiles --skill makefile-for-telegramインストール後、Claude Code で/makefile-for-telegramを入力して読み込まれたか確認します。
詳細
Telegram Bot 用の Makefile
LaunchAgent のバックグラウンドサービスに対応した、macOS 上で動作する Telegram Bot プロジェクト向けの本番環境対応 Makefile を生成します。
使用する場面
- 新しい Telegram Bot プロジェクトをセットアップするとき
- macOS の LaunchAgent サービス管理を追加するとき
- Bot の起動、停止、再起動をすばやく実行したいとき
- Bot をバックグラウンドサービスとして管理したいとき
生成される機能
クイックスタート
| コマンド | 説明 |
|---|---|
make setup | 初回セットアップ(依存関係をインストールし、.env を作成) |
make run | Bot をフォアグラウンドで実行 |
make dev | 自動リロードで実行(ウォッチモード) |
バックグラウンドサービス(macOS LaunchAgent)
| コマンド | 説明 |
|---|---|
make start | バックグラウンドサービスをインストールして起動 |
make stop | バックグラウンドサービスを停止 |
make restart | バックグラウンドサービスを再起動 |
make status | サービスが実行中か確認 |
make logs | 標準出力ログを末尾まで表示 |
make logs-err | 標準エラーログを末尾まで表示 |
make uninstall | バックグラウンドサービスを削除 |
開発
| コマンド | 説明 |
|---|---|
make install | 依存関係をインストール |
make test | テストを実行 |
make typecheck | TypeScript の型チェックを実行 |
make clean | 一時ファイルとログを削除 |
要件
生成する前に、プロジェクトに以下があることを確認してください。
launchagent/com.{project-name}.plist.templateにある LaunchAgent plist テンプレート.env.exampleにある 環境ファイルのテンプレート- ランタイムとしての Bun(または npm/node 用に変更)
手順
ステップ 1:プロジェクト情報を収集する
ユーザーに以下を尋ねます。
- プロジェクト名(plist のラベルに使用します。例:
claude-telegram-ts) - ランタイムコマンド(デフォルト:
bun run src/index.ts) - ログファイルのパス(デフォルト:
/tmp/{project-name}.log)
ステップ 2:Makefile を生成する
以下を含む Makefile を作成します。
# {Project Name} - Makefile
# Usage: make <target>
SHELL := /bin/bash
PLIST_NAME := com.{project-name}
PLIST_PATH := ~/Library/LaunchAgents/$(PLIST_NAME).plist
PLIST_TEMPLATE := launchagent/$(PLIST_NAME).plist.template
LOG_FILE := /tmp/{project-name}.log
ERR_FILE := /tmp/{project-name}.err
.PHONY: help install setup run dev stop start restart status logs logs-err clean typecheck test uninstall
help:
@echo "{Project Name}"
@echo ""
@echo "Quick start:"
@echo " make setup - First-time setup (install deps, create .env)"
@echo " make run - Run bot in foreground"
@echo " make dev - Run with auto-reload (watch mode)"
@echo ""
@echo "Background service (macOS LaunchAgent):"
@echo " make start - Install and start background service"
@echo " make stop - Stop background service"
@echo " make restart - Restart background service"
@echo " make status - Check if service is running"
@echo " make logs - Tail stdout logs"
@echo " make logs-err - Tail stderr logs"
@echo " make uninstall - Remove background service"
@echo ""
@echo "Development:"
@echo " make install - Install dependencies"
@echo " make test - Run tests"
@echo " make typecheck - Run TypeScript type check"
@echo " make clean - Remove temp files and logs"
install:
bun install
setup: install
@if [ ! -f .env ]; then \
cp .env.example .env; \
echo "Created .env from template"; \
echo ">>> Edit .env with your credentials"; \
else \
echo ".env already exists"; \
fi
run:
bun run start
dev:
bun run dev
test:
bun test
typecheck:
bun run typecheck
start:
@if [ ! -f .env ]; then \
echo "Error: .env not found. Run 'make setup' first."; \
exit 1; \
fi
@echo "Installing LaunchAgent..."
@mkdir -p ~/Library/LaunchAgents
@export $$(grep -v '^#' .env | xargs) && \
sed -e "s|/Users/USERNAME/.bun/bin/bun|$$(command -v bun)|g" \
-e "s|/Users/USERNAME/Dev/{project-path}|$$(pwd)|g" \
-e "s|USERNAME|$$(whoami)|g" \
-e "s|your-bot-token-here|$${TELEGRAM_BOT_TOKEN}|g" \
-e "s|<string>123456789</string>|<string>$${TELEGRAM_ALLOWED_USERS}</string>|g" \
$(PLIST_TEMPLATE) > $(PLIST_PATH)
@echo "Created $(PLIST_PATH) with values from .env"
@launchctl unload $(PLIST_PATH) 2>/dev/null || true
@launchctl load $(PLIST_PATH)
@echo "Service started. Check 'make logs' for output."
stop:
@launchctl unload $(PLIST_PATH) 2>/dev/null || echo "Service not running"
@echo "Service stopped"
restart:
@launchctl kickstart -k gui/$$(id -u)/$(PLIST_NAME) 2>/dev/null || \
(echo "Service not loaded. Run 'make start' first." && exit 1)
@echo "Service restarted"
status:
@if launchctl list | grep -q $(PLIST_NAME); then \
echo "Service: RUNNING"; \
launchctl list $(PLIST_NAME); \
else \
echo "Service: NOT RUNNING"; \
fi
uninstall: stop
@rm -f $(PLIST_PATH)
@echo "Service uninstalled"
logs:
@if [ -f $(LOG_FILE) ]; then \
tail -f $(LOG_FILE); \
else \
echo "No log file yet. Start the service first."; \
fi
logs-err:
@if [ -f $(ERR_FILE) ]; then \
tail -f $(ERR_FILE); \
else \
echo "No error log yet."; \
fi
clean:
rm -f $(LOG_FILE) $(ERR_FILE) 2>/dev/null || true
@echo "Cleaned temp files"
ステップ 3:sed の置換をカスタマイズする
start ターゲットでは、plist テンプレートに一致する sed パターンが必要です。一般的なパターンは以下のとおりです。
your-bot-token-here→${TELEGRAM_BOT_TOKEN}123456789→${TELEGRAM_ALLOWED_USERS}/Users/USERNAME→$(whoami)で展開されるパス- その他の環境変数には、
-e "s|pattern|replacement|g"を追加します
ステップ 4:検証する
make help
make setup
make run # Test in foreground first
make start # Then as service
make status
例
入力:「Telegram Bot プロジェクト用の Makefile を作成してください」
出力: 完全な Makefile を生成し、プロジェクト固有の値(名前、パス)を尋ね、plist テンプレートに基づいて sed パターンをカスタマイズします。
コメント
Markdown 対応