
2026/01/12 6:59
iMessage‑Kit は macOS 用の iMessage SDK です。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
@photon-ai/imessage-kit は、macOS 向けの型安全でクロスランタイム iMessage SDK です。開発者はこの SDK を使って会話を読み取り、送信し、自動化することができ、AI エージェントやチャットファーストアプリケーションを実現します。主要メソッドは次のとおりです。 - send, sendFile, sendFiles, sendBatch - getMessages, listChats - startWatching, stopWatching - message(処理チェーン) - use(プラグイン登録)および close テキスト、画像、PDF、DOCX、XLSX、MP4 などをサポートし、グループチャットや MessageScheduler を使ったスケジュール送信も可能です。リアルタイムウォッチングは、すべてのメッセージ(個別/グループ)、エラー、および自動返信用の message チェーン API のコールバックを提供します。 スケジューリング機能には、一回限りと繰り返し(毎日・毎週など)のスケジュール、再スケジュール、キャンセル、永続化(export / import)と自然言語時間に対応した人間向け Reminders ラッパーが含まれます。プラグインシステムでは、ビルトインまたはカスタムプラグインを使用でき、`onInit`、`onBeforeSend`、`onAfterSend`、`onDestroy` などのフックがあります。 エラー処理は以下のクラスを公開します:SendError、DatabaseError、PlatformError。 設定(`IMessageConfig`)にはデバッグログ、maxConcurrentSends(デフォルト5)、appleScriptTimeout、dbPath、plugins 配列、watcher 設定(pollInterval、unreadOnly、excludeOwnMessages)および webhook オプションが含まれます。 要件:macOS 専用。Node.js ≥18 または Bun ≥1.0 で Node 用の better‑sqlite3 が必要です。フルディスクアクセス権限は System Settings → Privacy & Security から取得してください。 例スクリプトでは、テキスト/画像/ファイル送信、メッセージ検索、バッチ送信、チャット一覧表示、グループメッセージング、リアルタイムウォッチング、自動返信ボット、スケジューリングとリマインダー、プラグイン、およびエラー処理を示しています。 添付ファイルヘルパー(`attachmentExists`、`downloadAttachment`、`getAttachmentSize`、`isImageAttachment` など)は、メッセージ添付ファイルの管理に役立ちます。 SDK は MIT ライセンスで提供され、教育・開発目的のみを想定しています。
本文
@photon‑ai/imessage‑kit
macOS で動作し、クロスランタイム対応の型安全で洗練された iMessage SDK。
概要
iMessage Kit はフル機能を備えた SDK で、以下が可能です:
- macOS 上で iMessage の会話を読み取り・送信・自動化
- AI エージェント、オートメーションツール、チャットファースト型アプリの構築
注意: フルディスクアクセス が必要です(「権限付与」セクション参照)。
速やかな始め方
インストール
| ランタイム | コマンド |
|---|---|
| Bun | |
| Node.js | |
基本的な使用例
import { IMessageSDK } from '@photon-ai/imessage-kit'; const sdk = new IMessageSDK(); // メッセージを送信 await sdk.send('+1234567890', 'Hello from iMessage Kit!'); // 後片付け await sdk.close();
設定
interface IMessageConfig { debug?: boolean; // デバッグログを有効化 maxConcurrent?: number; // 同時送信数の上限(デフォルト: 5) scriptTimeout?: number; // AppleScript のタイムアウト (ms) databasePath?: string; // カスタム DB パス plugins?: Plugin[]; // プラグイン watcher?: { pollInterval?: number; // ポーリング間隔(デフォルト: 2000) unreadOnly?: boolean; // 未読のみ監視(デフォルト: false) excludeOwnMessages?: boolean;// 自分のメッセージを除外(デフォルト: true) }; webhook?: { url: string; headers?: Record<string, string>; }; }
権限付与方法
- システム設定 → プライバシーとセキュリティ → フルディスクアクセス を開く
- 「+」をクリックし、IDE またはターミナル(例: Cursor, VS Code, Terminal, Warp)を追加する。
機能一覧とサンプル
| 機能 | メソッド | 例 |
|---|---|---|
| メッセージ送信 | | |
| 画像送信 | | |
| ファイル送信 | | |
| グループ送信 | | |
| メッセージ検索 | | |
| チャット一覧取得 | | |
| リアルタイム監視 | | |
| 自動応答 | | |
| バッチ送信 | | |
| 送信済みメッセージ取得 | | |
| プラグインシステム | | |
| エラー処理 | – | |
| 自分のメッセージ監視 | | |
| スケジュール送信 | | |
| スマートリマインダー | | |
コアメソッド
// フィルタ付きでメッセージを検索 getMessages(filter?): Promise<Message[]>; // 送信者別に未読数を取得 getUnreadMessages(): Promise<{ total: number; senderCount: number }>; listChats(options?): Promise<Chat[]>; // テキスト・画像・ファイルの送信 send(to: string, content: string | MessageContent): Promise<SendResult>; sendFile(to: string, path: string, text?: string): Promise<SendResult>; sendFiles(to: string, paths: string[], text?: string): Promise<SendResult>; // 複数メッセージを並列送信 sendBatch(messages: BatchMessage[]): Promise<SendResult[]>; // メッセージ処理チェーン message(msg: Message); // 新着メッセージの監視開始/停止 startWatching(events?): void; stopWatching(): void; // プラグイン登録 use(plugin: Plugin): void; // SDK を閉じてリソースを解放 close(): Promise<void>;
型定義
interface Message { id: string; guid: string; text: string | null; sender: string; senderName: string | null; chatId: string; isGroupChat: boolean; isFromMe: boolean; isRead: boolean; service: 'iMessage' | 'SMS' | 'RCS'; attachments: Attachment[]; date: Date; // リアクション関連 isReaction: boolean; reactionType: 'love' | 'like' | 'dislike' | 'laugh' | 'emphasize' | 'question' | null; isReactionRemoval: boolean; associatedMessageGuid: string | null; } interface SendResult { sentAt: Date; message?: Message; // 監視中のみ取得可能 }
添付ファイルヘルパー
import { attachmentExists, downloadAttachment, getAttachmentSize, isImageAttachment, isVideoAttachment, isAudioAttachment } from '@photon-ai/imessage-kit'; const msgs = await sdk.getMessages({ hasAttachments: true, limit: 1 }); const attachment = msgs[0].attachments[0]; if (await attachmentExists(attachment)) { const size = await getAttachmentSize(attachment); if (isImageAttachment(attachment)) { await downloadAttachment(attachment, '/path/to/save.jpg'); } }
PDF、DOC、画像、vCard、CSV、ZIP、MP4 等がサポートされています。
スケジューリング
MessageScheduler
import { IMessageSDK, MessageScheduler } from '@photon-ai/imessage-kit'; const sdk = new IMessageSDK(); const scheduler = new MessageScheduler(sdk, { debug: true }, { onSent: (msg, result) => console.log(`✅ Sent: ${msg.id}`), onError: (msg, error) => console.error(`❌ Failed: ${error.message}`), onComplete: (msg) => console.log(`🏁 Completed: ${msg.id}`) }); // 一度限りのメッセージ const id = scheduler.schedule({ to: '+1234567890', content: 'Reminder!', sendAt: new Date(Date.now() + 5 * 60 * 1000) // 5 分後 });
スマートリマインダー
import { IMessageSDK, Reminders } from '@photon-ai/imessage-kit'; const sdk = new IMessageSDK(); const reminders = new Reminders(sdk); // 相対時間 reminders.in('5 minutes', '+1234567890', 'Take a break!'); // 固定時刻 reminders.at('5pm', '+1234567890', 'End of day review'); // 正確な日時 reminders.exact(new Date('2025-12-25T10:00:00'), '+1234567890', 'Merry Christmas!');
サポート形式:
| Duration | 例 |
|---|---|
| "5 minutes" | 5 min |
| "2 hours" | 2 h |
| "1 day" | 24 h |
| Time | 例 |
|---|---|
| "5pm" | 17:00 |
| "5:30pm" | 17:30 |
| Day + Time | 例 |
|---|---|
| "tomorrow 9am" | 翌日 09:00 |
| "friday 2pm" | 今週金曜 14:00 |
プラグインシステム
import { loggerPlugin } from '@photon-ai/imessage-kit'; // ビルト‑インロガー sdk.use(loggerPlugin({ level: 'info', colored: true })); // カスタムプラグイン sdk.use({ name: 'my-plugin', onInit: async () => console.log('Initialized'), onBeforeSend: async (to, content) => { console.log('Sending to:', to); return { to, content }; }, onAfterSend: async (result) => console.log('Sent:', result), onDestroy: async () => console.log('Destroyed') });
エラー処理
import { SendError, DatabaseError, PlatformError } from '@photon-ai/imessage-kit'; try { await sdk.send('+1234567890', 'Hello'); } catch (error) { if (error instanceof SendError) { console.error('Send failed:', error.message); } else if (error instanceof DatabaseError) { console.error('Database error:', error.message); } else if (error instanceof PlatformError) { console.error('Platform error:', error.message); } }
サンプル実行
# Bun を使う場合 bun run examples/<filename>.ts
| ファイル | 用途 |
|---|---|
| 基本的なテキストメッセージ |
| 画像送信 |
| ファイル送信 |
| グループへ送信 |
| メッセージ検索 |
| チャット一覧取得 |
| メッセージ監視 |
| 自動応答ボット |
| バッチ送信 |
| 送信済みメッセージ取得 |
| カスタムプラグイン |
| エラー処理例 |
| 自分のメッセージ監視 |
| スケジュール送信 |
| スマートリマインダー |
API 参照(コアメソッド)
| メソッド | 説明 |
|---|---|
| フィルタ付きでメッセージ検索 |
| 送信者別に未読数取得 |
| チャット一覧(フィルタ/ソート可) |
| テキスト・画像・ファイルを送信 |
| 単一ファイル送信 |
| 複数ファイル送信 |
| 複数メッセージを並列送信 |
| メッセージ処理チェーン作成 |
| 新着メッセージ監視開始 |
| 監視停止 |
| プラグイン登録 |
| SDK を閉じてリソースを解放 |
要件
- OS: macOS(専用)
- ランタイム: Node.js ≥ 18.0.0 または Bun ≥ 1.0.0
- 権限: フルディスクアクセスが必要
ライセンス
MIT License – 教育・開発用途のみ。ユーザーのプライバシーと Apple の利用規約を尊重してください。