Himalaya Skill - ターミナルベースのメール管理をClawdbotに統合
Clawdbot向けHimalaya Skillを利用して、IMAP/SMTP対応のCLIメールクライアントによるメール送受信・検索・管理を実現する方法を解説します。
Himalaya Skill - ターミナルベースのメール管理をClawdbotに統合
概要
Clawdbot向けHimalaya Skillは、ターミナルからメールの送受信・検索・管理を実行する機能を提供するスキルである。pimalaya/himalayaプロジェクトが開発するCLIメールクライアント「Himalaya」をバックエンドとして利用し、IMAP/SMTP、Notmuch、Sendmailなど複数のバックエンドに対応する。
本スキルは、MML(MIME Meta Language)を使用したリッチテキストメール作成、複数アカウント管理、JSON/プレーン出力形式によるスクリプト統合に対応しており、プライバシー重視のメール運用を可能にする。
技術的仕様
システム要件
- macOS / Linux / Windows(Rust環境が動作する環境)
- IMAP/SMTPサーバーへのアクセス権限
- 認証情報の管理ツール(
pass、システムキーリング等、推奨) - テキストエディタ($EDITOR環境変数で指定)
インストール方法
Homebrew経由(macOS/Linux):
brew install himalaya
cargo経由(クロスプラットフォーム):
cargo install himalaya
バイナリダウンロード: GitHubのReleasesページから各OS向けのバイナリをダウンロードして配置する。
初期設定
対話式ウィザードによる設定:
himalaya account configure
このコマンドにより、メールアドレス、IMAPサーバー、SMTPサーバー、認証情報等を対話的に設定できる。
手動設定(~/.config/himalaya/config.toml):
[accounts.personal]
email = "you@example.com"
display-name = "Your Name"
default = true
backend.type = "imap"
backend.host = "imap.example.com"
backend.port = 993
backend.encryption.type = "tls"
backend.login = "you@example.com"
backend.auth.type = "password"
backend.auth.cmd = "pass show email/imap" # passwordコマンド経由で取得
message.send.backend.type = "smtp"
message.send.backend.host = "smtp.example.com"
message.send.backend.port = 587
message.send.backend.encryption.type = "start-tls"
message.send.backend.login = "you@example.com"
message.send.backend.auth.type = "password"
message.send.backend.auth.cmd = "pass show email/smtp"
主要機能
1. フォルダ管理
フォルダ一覧:
himalaya folder list
2. メール一覧表示
INBOX(デフォルト):
himalaya envelope list
特定フォルダ:
himalaya envelope list --folder "Sent"
ページネーション:
himalaya envelope list --page 1 --page-size 20
3. メール検索
送信者と件名で検索:
himalaya envelope list from john@example.com subject meeting
4. メール閲覧
プレーンテキスト表示:
himalaya message read 42
生のMIME形式エクスポート:
himalaya message export 42 --full
5. メール返信
返信(対話式エディタ):
himalaya message reply 42
全員に返信:
himalaya message reply 42 --all
6. メール転送
himalaya message forward 42
7. メール作成・送信
対話式作成($EDITORで編集):
himalaya message write
テンプレートから送信:
cat << 'EOF' | himalaya template send
From: you@example.com
To: recipient@example.com
Subject: Test Message
Hello from Himalaya!
EOF
ヘッダー指定で送信:
himalaya message write -H "To:recipient@example.com" -H "Subject:Test" "Message body here"
8. メール移動・コピー
移動:
himalaya message move 42 "Archive"
コピー:
himalaya message copy 42 "Important"
9. メール削除
himalaya message delete 42
10. フラグ管理
既読フラグ追加:
himalaya flag add 42 --flag seen
既読フラグ削除:
himalaya flag remove 42 --flag seen
11. 添付ファイル管理
添付ファイルダウンロード:
himalaya attachment download 42
保存先指定:
himalaya attachment download 42 --dir ~/Downloads
12. 複数アカウント管理
アカウント一覧:
himalaya account list
特定アカウントで実行:
himalaya --account work envelope list
13. 出力形式
JSON形式(スクリプト統合):
himalaya envelope list --output json
プレーン形式:
himalaya envelope list --output plain
実装例
例1: 未読メール件数の取得(Bash)
#!/bin/bash
# unread-count.sh
UNREAD_COUNT=$(himalaya envelope list --output json | jq '[.[] | select(.flags | contains(["seen"]) | not)] | length')
echo "未読メール: ${UNREAD_COUNT}件"
例2: Node.jsによるメール送信
const { exec } = require('child_process');
const util = require('util');
const execPromise = util.promisify(exec);
async function sendEmail(to, subject, body) {
const message = `From: you@example.com
To: ${to}
Subject: ${subject}
${body}
`;
try {
const command = `echo '${message}' | himalaya template send`;
await execPromise(command);
console.log(`メール送信完了: ${to}`);
} catch (error) {
console.error('Error sending email:', error);
}
}
// 使用例
sendEmail('recipient@example.com', 'テストメール', 'Himalayaからのテストメッセージです。');
例3: 日次メール要約レポート(Bash)
#!/bin/bash
# daily-email-summary.sh
DATE=$(date +%Y-%m-%d)
OUTPUT_FILE="email-summary-${DATE}.txt"
echo "メール要約レポート ${DATE}" > "$OUTPUT_FILE"
echo "==============================" >> "$OUTPUT_FILE"
echo "" >> "$OUTPUT_FILE"
echo "未読メール:" >> "$OUTPUT_FILE"
himalaya envelope list --output plain | grep -v "seen" >> "$OUTPUT_FILE"
echo "" >> "$OUTPUT_FILE"
echo "今日受信したメール:" >> "$OUTPUT_FILE"
himalaya envelope list --output json | \
jq -r '.[] | select(.date | startswith("'$DATE'")) | "\(.from) - \(.subject)"' >> "$OUTPUT_FILE"
echo "レポートを${OUTPUT_FILE}に保存しました"
例4: Clawdbot統合スクリプト(自動メール返信)
// auto-reply.js
const { exec } = require('child_process');
const util = require('util');
const fs = require('fs').promises;
const execPromise = util.promisify(exec);
async function autoReplyToUnread() {
try {
// 未読メール一覧を取得
const { stdout } = await execPromise('himalaya envelope list --output json');
const emails = JSON.parse(stdout);
const unreadEmails = emails.filter(email => !email.flags.includes('seen'));
for (const email of unreadEmails) {
// 特定の件名パターンに一致する場合のみ自動返信
if (email.subject.includes('自動返信希望')) {
const replyBody = `
ご連絡ありがとうございます。
こちらは自動返信メッセージです。
担当者より後ほどご連絡いたします。
よろしくお願いいたします。
`;
await execPromise(`himalaya message reply ${email.id} --body "${replyBody}"`);
console.log(`自動返信送信: ${email.subject}`);
}
}
} catch (error) {
console.error('Error in auto-reply:', error);
}
}
autoReplyToUnread();
例5: 添付ファイル一括ダウンロード(Bash)
#!/bin/bash
# download-attachments.sh
DOWNLOAD_DIR="$HOME/Downloads/email-attachments"
mkdir -p "$DOWNLOAD_DIR"
# 特定のフォルダ(例: "仕事")のメール一覧を取得
EMAIL_IDS=$(himalaya envelope list --folder "仕事" --output json | jq -r '.[].id')
for email_id in $EMAIL_IDS; do
echo "処理中: メールID ${email_id}"
himalaya attachment download "$email_id" --dir "$DOWNLOAD_DIR"
done
echo "すべての添付ファイルを${DOWNLOAD_DIR}にダウンロードしました"
ユースケース
1. プライバシー重視のメール運用
GmailやOutlook.comなどのWebメールを利用せず、ターミナルからプライバシーを保護しながらメールを管理する。
2. メール自動化・スクリプト統合
定期的にメールをチェックし、特定条件に一致するメールを自動分類・転送・アーカイブする。
3. 複数アカウントの一元管理
個人用、仕事用、プロジェクト用など複数のメールアカウントを1つのインターフェースで管理する。
4. オフライン環境でのメール作成
インターネット接続がない環境でメールを作成し、接続回復後に一括送信する。
制限事項・セキュリティ考慮事項
制限事項
- リッチテキスト制限: HTMLメールの作成にはMML(MIME Meta Language)の知識が必要
- メールID依存: メールIDは現在のフォルダに相対的であり、フォルダ変更後は再度リスト表示が必要
- 対話式UI: 多くの操作が対話式エディタを必要とするため、完全自動化には工夫が必要
- 添付ファイルサイズ: 大容量の添付ファイル送信時にタイムアウトする可能性がある
セキュリティ考慮事項
-
認証情報の保護:
- 設定ファイル(
~/.config/himalaya/config.toml)に平文でパスワードを保存しないこと pass、システムキーリング、1Password CLI等のシークレット管理ツールを利用すること- 例:
backend.auth.cmd = "pass show email/imap"
- 設定ファイル(
-
TLS/SSL暗号化:
- IMAP/SMTP接続には必ずTLS/SSL暗号化を使用すること
backend.encryption.type = "tls"または"start-tls"を設定
-
設定ファイルのパーミッション:
~/.config/himalaya/config.tomlのパーミッションを600に設定
chmod 600 ~/.config/himalaya/config.toml -
ログ出力の管理:
- デバッグモード(
RUST_LOG=debug)実行時にログに認証情報が含まれる可能性がある - 本番環境ではデバッグログを無効化すること
- デバッグモード(
-
共有環境での利用:
- SSH経由でアクセスされる環境では、設定ファイルやキャッシュの漏洩リスクに注意
- 必要に応じて環境変数で認証情報を渡す方法を検討
-
メール本文の暗号化:
- 機密情報を含むメールはPGP等で暗号化することを推奨
- HimalayaはPGP統合をサポートしていないため、外部ツール(gnupg等)との併用が必要
参考リンク
- Himalaya GitHub: https://github.com/pimalaya/himalaya
- pimalayaプロジェクト: https://pimalaya.org/
- MML(MIME Meta Language)仕様: https://www.gnu.org/software/emacs/manual/html_node/emacs-mime/MML-Definition.html
- pass(パスワード管理ツール): https://www.passwordstore.org/
- Clawdbot公式サイト: https://clawdbot.com
本記事の情報は2026年2月15日時点のものです。各ツールの機能や仕様は変更される可能性があります。最新情報は各公式サイトおよびGitHubリポジトリをご確認ください。
関連記事
ClawdHub Skill - Clawdbotスキル管理を効率化
ClawdHub CLIを利用して、Clawdbotスキルの検索、インストール、更新、公開を効率化する方法を解説します。
Spotify Player Skill - ターミナルベースのSpotify再生・検索機能をClawdbotに統合
Clawdbot向けSpotify Player Skillを利用して、spogoまたはspotify_playerを通じたターミナルベースのSpotify制御を実現する方法を解説します。
OpenAI Whisper Skill - ローカル音声認識をClawdbotに統合
Clawdbot向けOpenAI Whisper Skillを利用して、APIキー不要のローカル音声認識による文字起こし・翻訳機能を実現する方法を解説します。
人気記事
ChatGPT(OpenAI)とClaude(Anthropic)の機能比較 2026年版。コーディング・長文解析・コスト・API料金の違いを検証
ChatGPT(GPT-4o/o3)とClaude(Sonnet 4.6/Opus 4.5)を2026年時点の最新情報で比較する。コーディング能力、長文処理、日本語品質、API料金、無料プランの違いをSWE-benchなどのベンチマーク結果とともに解説する。
【2026年2月20日 所感】「AIがコードを書く」は仮説から現実になった——しかし私たちはその意味をまだ消化できていない
2026年2月20日に観測したコーディングエージェント関連ニュースの総括と所感。Anthropicの自律性研究、cmux、MJ Rathbunのエージェント事故、HN「外骨格 vs チーム」論争、Stripe Minions週1000件PR、Taalas 17k tokens/sec——朝から夜までの流れを通じて見えてきた「AIがコードを書く時代」の実相を考察する。
868のスキルをnpx 1コマンドで——「Antigravity Awesome Skills」が主要AIコーディングエージェントの共通スキル基盤になりつつある
Claude Code・Gemini CLI・Codex CLI・Cursor・GitHub Copilotなど主要AIコーディングアシスタントを横断する868以上のスキルライブラリ「Antigravity Awesome Skills」(v5.4.0)を詳細分析。Anthropic・Vercel・OpenAI・Supabase・Microsoftの公式スキルを統合した設計思想、ロール別バンドル・ワークフロー機能、SKILL.mdによる相互運用性のアーキテクチャを解説する。
最新記事
AIエージェント間通信の標準化競争が始まる——AquaとAgent Semantic Protocolが同日登場
2026年2月23日、Hacker Newsに2つのAIエージェント通信プロジェクトが同日掲載された。Go製CLI「Aqua」とセマンティックルーティングを実装する「Agent Semantic Protocol」は、MCPが解決できないP2P・非同期通信の課題に取り組む。
Claude Sonnet 4.6、無料・Proプランのデフォルトモデルに——社内テストでOpus 4.5を59%の確率で上回る
Anthropicは2026年2月17日にリリースしたClaude Sonnet 4.6を、claude.aiの無料・Proプランのデフォルトモデルに設定した。価格はSonnet 4.5と同額の$3/$15 per 1Mトークン。社内評価ではコーディングエージェント用途でOpus 4.5を上回る結果が出ている。
GoogleがOpenClaw経由のGemini利用ユーザーのアカウントを永久停止——月額$250請求継続のまま
2026年2月23日、Hacker Newsで140pt/107コメントを集めたレポートによると、GoogleはOpenClaw(サードパーティクライアント)経由でGeminiを使用していたGoogle AI Pro/Ultraユーザーを予告なしに永久停止した。技術的・経済的背景を整理する。