iMessage‑Kit は macOS 用の iMessage SDK です。

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
bun add @photon-ai/imessage-kit
Node.js
npm install @photon-ai/imessage-kit better-sqlite3

基本的な使用例

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>;
  };
}

権限付与方法

  1. システム設定 → プライバシーとセキュリティ → フルディスクアクセス を開く
  2. 「+」をクリックし、IDE またはターミナル(例: Cursor, VS Code, Terminal, Warp)を追加する。

機能一覧とサンプル

機能メソッド
メッセージ送信
sdk.send()
01-send-text.ts
画像送信
sdk.send()
02-send-image.ts
ファイル送信
sdk.sendFile()
03-send-file.ts
グループ送信
sdk.send()
04-send-group.ts
メッセージ検索
sdk.getMessages()
05-query-messages.ts
チャット一覧取得
sdk.listChats()
06-list-chats.ts
リアルタイム監視
sdk.startWatching()
07-watch-messages.ts
自動応答
sdk.message()
08-auto-reply.ts
バッチ送信
sdk.sendBatch()
09-batch-send.ts
送信済みメッセージ取得
sdk.send()
10-get-sent-message.ts
プラグインシステム
sdk.use()
11-plugin.ts
エラー処理
12-error-handling.ts
自分のメッセージ監視
sdk.startWatching()
13-watch-own-messages.ts
スケジュール送信
MessageScheduler
14-scheduled-messages.ts
スマートリマインダー
Reminders
15-smart-reminders.ts

コアメソッド

// フィルタ付きでメッセージを検索
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
ファイル用途
01-send-text.ts
基本的なテキストメッセージ
02-send-image.ts
画像送信
03-send-file.ts
ファイル送信
04-send-group.ts
グループへ送信
05-query-messages.ts
メッセージ検索
06-list-chats.ts
チャット一覧取得
07-watch-messages.ts
メッセージ監視
08-auto-reply.ts
自動応答ボット
09-batch-send.ts
バッチ送信
10-get-sent-message.ts
送信済みメッセージ取得
11-plugin.ts
カスタムプラグイン
12-error-handling.ts
エラー処理例
13-watch-own-messages.ts
自分のメッセージ監視
14-scheduled-messages.ts
スケジュール送信
15-smart-reminders.ts
スマートリマインダー

API 参照(コアメソッド)

メソッド説明
getMessages(filter?)
フィルタ付きでメッセージ検索
getUnreadMessages()
送信者別に未読数取得
listChats(options?)
チャット一覧(フィルタ/ソート可)
send(to, content)
テキスト・画像・ファイルを送信
sendFile(to, path, text?)
単一ファイル送信
sendFiles(to, paths, text?)
複数ファイル送信
sendBatch(messages)
複数メッセージを並列送信
message(msg)
メッセージ処理チェーン作成
startWatching(events?)
新着メッセージ監視開始
stopWatching()
監視停止
use(plugin)
プラグイン登録
close()
SDK を閉じてリソースを解放

要件

  • OS: macOS(専用)
  • ランタイム: Node.js ≥ 18.0.0 または Bun ≥ 1.0.0
  • 権限: フルディスクアクセスが必要

ライセンス

MIT License – 教育・開発用途のみ。ユーザーのプライバシーと Apple の利用規約を尊重してください。

同じ日のほかのニュース

一覧に戻る →

2026/01/12 5:47

**macOS Tahoe におけるウィンドウサイズ変更の苦労** macOS Tahoe では、アプリケーションウィンドウをリサイズすることが思ったより難しい場合があります。ユーザーは次のような点に悩むことが多いです: - 標準のドラッグ&ドロップ方式が安定しない。 - リサイズ用キーボードショートカットが十分に文書化されていない。 - 特定のアプリではウィンドウサイズ制限を無視してしまう。 これらの問題は、デスクトップ上で効率的に作業することを困難にします。

## Japanese Translation: --- ## 要約 macOS Tahoe の極端に大きなウィンドウの角丸半径は、通常のリサイズ動作を妨げます。丸みが付いた角は、必要な 19×19 ピクセルのクリックターゲットの約 75% を可視ウィンドウ枠外へ押し出します。その結果、ユーザーが緑色領域(通常使う部分)内で角を掴もうとすると、クリックが許容領域外に落ちてリサイズが失敗します。見える角のすぐ外側、同じ 19×19 ピクセル帯内でのみクリックが成功し、リサイズが起動します。以前の macOS バージョンでは、このターゲットの約 62% がウィンドウ内部に配置されており、ユーザーの期待に合っていました。筆者はほぼ四十年にわたるコンピュータ使用経験の中でこのような問題を一度も遭遇したことがありません。この不一致はフラストレーションと生産性低下を招きます。開発者は対策を設計するか、Apple にバグ報告を提出する必要があります。 ---

2026/01/12 6:29

2026 年はセルフホスティング(自前で運用すること)の年です。

## 日本語訳: > 本記事は、Claude Code CLI エージェントを利用することで、誰でも低価格のミニPCで完全に機能的なホームサーバーを構築できることを示しており、深いシステム管理スキルが不要になる点を強調しています。Beelink Mini N150($379)に8 TB NVMe SSDを搭載し、著者はUbuntu 22.04 LTS をインストールし、セキュアネットワーク用に Tailscale を追加、その後 SSH で Claude Code をインストールします。シンプルな英語のプロンプトを発行するだけで、Claude Code は自動的に Docker を設定し、Compose ファイルを作成し、サービス(Vaultwarden, Plex, Immich, Uptime Kuma, Caddy, Home Assistant, ReadDeck)をデプロイし、リバースプロキシを構築し、永続性を確保し、更新とセキュリティパッケージを管理し、ブート時の再起動も可能にします。 > > Vaultwarden は軽量な Bitwarden 互換パスワードマネージャーとして機能し、Immich は Google Photos の代わりにモバイルアプリ、ローカル顔認識、タイムライン/マップビューを提供します。ReadDeck は Mozilla Pocket を補完するクリーンな UI と読み続行機能を備えています。Lazydocker(Docker コンテナ UI)や Glances(システムモニタリング)などの追加ユーティリティもスタックを完成させます。著者は低い消費電力(CPU 約6 %、メモリ約32 %)を指摘し、保守作業がサーバーを所有する感覚に近く、問題は SSH と Claude Code への英語プロンプトで解決できると強調しています。 > > 対象読者はターミナル操作に慣れたユーザーで、既に SaaS サービスの料金を支払っているが、フルインフラ専門家になることなく基盤システムを理解したい人々です。本記事は、ミニPC 上で Claude Code を利用したセルフホスティングが今や実現可能で楽しく、今年おすすめできると結論付けています。

2026/01/12 7:14

このゲームは、Windows・Linux・ブラウザ上で動作する単一の13 KiBファイルです。

<|channel|>final <|constrain|>## Japanese Translation: 記事では、1つのソースファイルが「ポリグロット」バイナリを生成する方法を示しています。このバイナリには、Windows、Linux/BSD、およびブラウザ用にコンパイルされた3つの小さなプログラム(スネークゲーム)がすべて含まれており、合計13 312バイトです。コードはJustine Tunneyのcosmopolitan libcアイデアを使用し、各プラットフォームでネイティブに実行できる<16 KiBの実行ファイルを生成します。 3つのビルドが作成されます: • WinAPI用C(i686 Visual C)– 画面スクリプトとしても機能する非従来型PEヘッダーを使用。スタブはゲームを解凍して起動し、最初に再実行まで0xc0000005エラーが表示されます。 • Linux/X11用C(x86_64 clang)– lzmaデコンプレッションとシェルドロッパーを使用してファイルからELF64バイナリを抽出します。 • ブラウザ用JavaScript – ブラウザは先頭の無害なゴミを無視し、CSSで隠し、HTML/Canvasゲームがこの余白後に開始されます。 各コンパイル済み/ミニファイド版は約3–5 KiBです。3つのバイナリは順序通りに連結され、各オペレーティングシステムまたはブラウザが自分のセクションを実行します。元のゲームソースは13 772バイトでしたが、パッキングと連結後、正確に13 312バイトになります。 ゲームプレイの詳細(パッケージング物語の一部ではなく、キーポイントで言及されている)は次の通りです: - スネークは食べ物を食べることで成長し、壁を避けます。 - 操作:矢印キー/WASDキー、ESCで終了、Rでリセット、Pで一時停止、Spacebarで開始。 - スコア:フルーツごとに+10、黄色のフルーツは+20。フルーツは一定レートで生成され、スネーク速度/長さに比例した時間が経過すると消えます。 - 10個のフルーツ後、ランダム壁を含むレベル変更が行われ、ヘッドから任意の食べ物へのパスが保証されます。初期スネーク位置はランダムですが、向いている方向に少なくとも5つの空きタイルがあります。 このプロジェクトは、複数のオペレーティングシステムとウェブブラウザ用の実行コードを1ファイルにまとめることができることを示し、小規模プログラムの軽量でプラットフォーム非依存的な展開の可能性を開きます。

iMessage‑Kit は macOS 用の iMessage SDK です。 | そっか~ニュース