create-neomutt-gmail - CLIツールで完結させる
引きこもり人生のスタート
はじめに
前回の記事で、mutt-config-coreとconfig-fs-utilsという2つのnpmパッケージを公開しました。
今日はその2つを組み合わせたCLIツールを完成させました。
npx create-neomutt-gmail
質問に答えるだけで、Neomutt + Gmail + OAuth2.0の設定が完了します。
なぜCLIツールを作ったのか
前回までの状態
2つのパッケージを公開しましたが、実際に使うにはコードを書く必要がありました:
const { generateMuttConfigs } = require('mutt-config-core');
const { setupStandardMuttDirs, writeConfigFiles } = require('config-fs-utils');
// 設定を生成
const configs = generateMuttConfigs({
email: 'user@gmail.com',
realName: 'John Doe',
editor: 'nvim',
locale: 'ja'
});
// ディレクトリ作成
await setupStandardMuttDirs();
// ファイル書き込み
await writeConfigFiles({...});
これでは一般のユーザーは使えません。
目指したもの
npx create-neomutt-gmail
これだけ。 プログラミング不要。
CLIツールの機能
1. Prerequisites Check
実行前に必要な依存関係をチェック:
📋 Prerequisites Check
✓ neomutt found
✓ python3 found
✓ gpg found
✓ GPG keys configured
足りないものがあれば、インストール方法を表示します。
2. 対話的な質問
必要な情報を順番に聞いていきます:
📝 Configuration
✔ Gmail address: user@gmail.com
✔ Your name (for email headers): John Doe
✔ Preferred text editor: nvim
✔ Gmail language setting: 日本語 (Japanese)
✔ GPG key ID: user@gmail.com
矢印キーで選択、Enterで確定。直感的です。
3. 安全確認
既存の設定がある場合は警告:
⚠️ Existing Neomutt configuration found.
A backup will be created before overwriting.
? Continue with setup? (Y/n)
4. ファイル作成
プログレススピナーで進捗を表示:
✔ Directories created
✓ /Users/username/.config/mutt/
✓ /Users/username/.config/mutt/accounts/
✓ /Users/username/.local/etc/oauth-tokens/
...
✔ Configuration files created
✓ /Users/username/.config/mutt/muttrc
✓ /Users/username/.config/mutt/accounts/user@gmail.com.muttrc
✔ mutt_oauth2.py downloaded
✓ /Users/username/.config/mutt/mutt_oauth2.py
5. 次のステップガイド
設定完了後、何をすべきか明確に表示:
🎉 Configuration complete!
📖 Next Steps:
1. Setup Google Cloud Console
Visit: https://console.cloud.google.com/
a. Create a new project
b. Enable Gmail API
c. Configure OAuth consent screen
...
2. Obtain OAuth 2.0 token
Run the following command:
python3 ~/.config/mutt/mutt_oauth2.py ...
3. Launch Neomutt
neomutt
コピペできるコマンドも表示されます。
安全機能
Dry-runモード
実際にファイルを作成する前に、何が起きるか確認できます:
npx create-neomutt-gmail --dry-run
🔍 DRY RUN MODE - No files will be created
📁 Directories to be created:
/Users/username/.config/mutt/
...
📄 Files to be created:
/Users/username/.config/mutt/muttrc
...
📝 Configuration preview:
Email: user@gmail.com
Name: John Doe
Editor: nvim
Locale: ja
自動バックアップ
既存ファイルは上書き前に自動バックアップ:
~/.config/mutt/muttrc
→ ~/.config/mutt/muttrc.backup-2026-01-26T15-30-00-000Z
確認プロンプト
重要な操作の前には必ず確認:
📦 Ready to create:
• Configuration directories
• Neomutt config files
• OAuth2 script
? Proceed with installation? (Y/n)
技術的な実装
使用ライブラリ
{
"dependencies": {
"mutt-config-core": "^0.1.0", // 設定生成
"config-fs-utils": "^0.1.0", // ファイル操作
"inquirer": "^13.2.1", // 対話的質問
"chalk": "^5.6.2", // カラフルな出力
"ora": "^9.1.0", // プログレススピナー
"node-fetch": "^3.3.2" // OAuth2スクリプトダウンロード
}
}
ファイル構成
create-neomutt-gmail/
├── bin/
│ └── cli.js # Entry point
├── src/
│ ├── index.js # Main logic
│ ├── prerequisites.js # Dependency checks
│ ├── questions.js # User prompts
│ ├── download.js # Download mutt_oauth2.py
│ └── display.js # Output formatting
├── package.json
└── README.md
コマンドラインオプション
npx create-neomutt-gmail --help # ヘルプ表示
npx create-neomutt-gmail --dry-run # プレビューのみ
npx create-neomutt-gmail --skip-prereqs # チェックスキップ
開発で苦労したこと
1. npm publishでのbin警告
"bin[create-neomutt-gmail]" script name bin/cli.js was invalid and removed
原因: パスの書き方が間違っていた
解決: .bin/cli.js → ./bin/cli.js
何度もバージョンを上げて再公開しました(0.1.1 → 0.1.4)
2. ESM vs CommonJS
"type": "module" を使ったため、import/exportで統一する必要がありました。
3. テスト環境の作り方
実際のホームディレクトリを壊さないように:
HOME=/tmp/test-home npm run dev
一時的なHOMEディレクトリを使ってテスト。
実際の使用例
標準的な使い方
$ npx create-neomutt-gmail
🔧 Neomutt + Gmail Setup Wizard
📋 Prerequisites Check
✓ neomutt found
✓ python3 found
✓ gpg found
📝 Configuration
? Gmail address:
質問に答えていくだけで完了します。
Dry-runでの確認
$ npx create-neomutt-gmail --dry-run
🔍 DRY RUN MODE - No files will be created
...
Run without --dry-run to actually create files.
安全に動作確認できます。
3つのパッケージの関係
create-neomutt-gmail (CLI - ユーザー体験)
├── mutt-config-core (設定生成)
└── config-fs-utils (ファイル操作)
それぞれが独立して使えるのがポイントです。
他のツールからmutt-config-coreだけを使うこともできるし、config-fs-utilsを別のプロジェクトで使うこともできます。
使い分け
| ユーザー | 使うパッケージ |
|---|---|
| 一般ユーザー | create-neomutt-gmail |
| プログラマー | mutt-config-core + config-fs-utils |
| ライブラリ開発者 | mutt-config-core のみ |
統計
create-neomutt-gmail
- バージョン: 0.1.4
- 依存関係: 6個(うち2つは自作)
- パッケージサイズ: 7.3 kB
- ファイル数: 10個
- 開発時間: 約4時間
今日の総パッケージ数
- md-blog-core ✅
- mutt-config-core ✅
- config-fs-utils ✅
- create-neomutt-gmail ✅
4つのnpmパッケージを公開!
学んだこと
1. CLIツールの設計
- 段階的な確認 - ユーザーを不安にさせない
- 明確なガイダンス - 次に何をすべきか常に表示
- 安全第一 - Dry-run、バックアップ、確認プロンプト
2. npmのbin設定
- パスは
./bin/cli.js形式 - shebang (
#!/usr/bin/env node) が必須 - 実行権限 (
chmod +x) を忘れずに
3. ユーザー体験の重要性
技術的に正しいだけでは不十分。ユーザーが:
- 迷わない - 明確な指示
- 安心できる - 確認とバックアップ
- 学べる - エラーメッセージで次の行動が分かる
まとめ
失敗から学んだことを、誰でも使えるツールに。
Neomuttの設定で何度も失敗した経験が、このCLIツールの礎になりました。
達成したこと
- ✅ 対話的なセットアップウィザード
- ✅ 安全なファイル操作
- ✅ 詳細なガイダンス
- ✅ Dry-runモード
- ✅ 日本語/英語対応
次のステップ
- ユーザーからのフィードバック収集
- エラーケースの改善
- ドキュメントの充実
- テストの追加
誰かの役に立てば嬉しいです。
リンク
- create-neomutt-gmail on npm
- GitHub Repository
- mutt-config-core
- config-fs-utils
- 前回の記事: 2つのnpmパッケージを公開
使ってみてください
npx create-neomutt-gmail
フィードバックや改善案、大歓迎です!
Issue: https://github.com/a-lost-social-misfit/create-neomutt-gmail/issues