UNPKG

@milkmaccya2/hostswitch

Version:

A simple CLI tool to manage and switch between multiple hosts file profiles for different development environments

345 lines (258 loc) 9.88 kB
# HostSwitch [![npm version](https://badge.fury.io/js/@milkmaccya2%2Fhostswitch.svg)](https://www.npmjs.com/package/@milkmaccya2/hostswitch) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) シンプルなhostsファイル切り替えCLIツール [English](README.md) ## 概要 HostSwitchは、開発環境やテスト環境で異なるhosts設定を簡単に切り替えるためのCLIツールです。Gas MaskのようなGUIアプリとは異なり、コマンドラインから素早く操作できることを重視しています。 ### こんな人におすすめ - 👨‍💻 複数の開発環境を切り替えるWeb開発者 - 🔧 ローカル、ステージング、本番環境のテストが必要なエンジニア - 🏢 複数のサーバー環境を管理するシステム管理者 - 🚀 CLIでの素早い操作を好む人 ## 主な機能 - ✅ **複数のhostsプロファイル管理** - 開発、ステージング、本番用など - 💾 **自動バックアップ** - 切り替え前に現在のhostsを保存 - 🎨 **カラフルな出力** - 状態が一目でわかる - ⚡ **シンプルなCLI** - 覚えやすいコマンド - 🔒 **安全な操作** - sudo権限が必要な操作を明示 - 🎯 **対話形式モード** - 引数なしで実行すると使いやすいプロンプト表示 ## 要件 - Node.js 20.0.0以上 - macOS / Linux / Windows (WSL推奨) - sudo権限(hostsファイル切り替え時) ## インストール ### npmからインストール(推奨) ```bash # グローバルインストール npm install -g @milkmaccya2/hostswitch # またはnpxで直接実行 npx @milkmaccya2/hostswitch list ``` ### ソースからインストール ```bash # リポジトリをクローン git clone https://github.com/milkmaccya2/hostswitch.git cd hostswitch # 依存関係のインストール npm install # TypeScriptのビルド npm run build # グローバルインストール(オプション) npm link ``` ## 使い方 ### 対話形式モード ```bash # 引数なしで実行すると対話形式モードで起動 hostswitch # 矢印キーで操作、Enterで選択 ? What would you like to do? (Use arrow keys) ❯ Switch profile (current: local) List all profiles Create new profile Edit profile Delete profile Exit ``` ### プロファイル一覧を表示 ```bash hostswitch list # または hostswitch ls ``` ### プロファイルを作成 ```bash # デフォルト内容で作成 hostswitch create development # 現在のhostsファイルから作成 hostswitch create production --from-current ``` ### プロファイルを切り替え(自動sudo) ```bash # sudo を手動で入力する必要なし - 必要に応じて自動的にsudoで再実行される hostswitch switch development # または hostswitch use development ``` ### プロファイルの内容を表示 ```bash hostswitch show development # または hostswitch cat development ``` ### プロファイルを編集 ```bash hostswitch edit development ``` ### プロファイルを削除 ```bash # 安全のため確認フラグが必要 hostswitch delete development --force # または hostswitch rm development --force ``` ## よくある使用例 ### 開発環境のセットアップ ```bash # ローカル開発用 hostswitch create local hostswitch edit local # 127.0.0.1 api.myapp.local # 127.0.0.1 app.myapp.local # Docker環境用 hostswitch create docker hostswitch edit docker # 172.17.0.2 api.myapp.docker # 172.17.0.3 db.myapp.docker # 切り替え(自動sudo hostswitch switch local ``` ### チーム開発での活用 ```bash # チームメンバーの環境を参照 hostswitch create team-dev --from-current # 自分の環境に戻す(自動sudo hostswitch switch local ``` ### 本番環境のテスト ```bash # 本番環境を指すhostsを作成 hostswitch create production hostswitch edit production # 192.168.1.100 api.myapp.com # 192.168.1.101 app.myapp.com # テスト実施(自動sudo hostswitch switch production # テスト完了後(自動sudo hostswitch switch local ``` ## 開発 ### ソースからのビルド ```bash # 依存関係のインストール npm install # TypeScriptのビルド npm run build # 開発用のウォッチモード npm run build:watch # 開発モードで実行 npm run dev -- list ``` ### コード品質 プロジェクトでは**Biome**をlintingとフォーマットに使用: ```bash # lintエラーをチェック npm run lint # lintとフォーマットの問題を自動修正 npm run lint:fix # フォーマットのみ実行 npm run format # フォーマットのチェックのみ(修正なし) npm run format:check # linting + フォーマット + テストを一括実行(CI推奨) npm run check ``` ### テスト ```bash # ウォッチモードでテスト実行 npm test # テストを一回実行 npm run test:run # テストUIを開く npm run test:ui # カバレッジレポート生成 npm run test:coverage ``` ### プロジェクト構造 ``` hostswitch/ ├── src/ │ ├── interfaces/ # 型定義と抽象化レイヤー │ ├── core/ # ドメインロジック(ビジネスルール) │ ├── cli/ # CLI専用の実装 │ ├── infrastructure/ # 外部依存の実装 │ ├── config/ # 設定管理 │ └── hostswitch.ts # 依存性注入付きエントリーポイント ├── dist/ # コンパイル済みJavaScript(自動生成) ├── tsconfig.json # TypeScript設定 └── package.json ``` ### アーキテクチャ アプリケーションはクリーンアーキテクチャパターンに従います: #### **ドメイン層** (`core/`) - **HostSwitchService**: ビジネス操作のコーディネーター - **ProfileManager**: プロファイルCRUD操作 - **CurrentProfileManager**: 現在の状態管理 - **BackupManager**: バックアップ機能 #### **CLI層** (`cli/`) - **HostSwitchFacade**: すべてのビジネス操作への統一インターフェース - **CliController**: Command Patternを使用してCLIコマンドをファサード操作にマッピング - **InteractiveUserInterface**: inquirer.jsを使用したユーザーフレンドリーなプロンプトの対話モード - **CliUserInterface**: 非対話操作用のコマンドラインインターフェース - **Command Classes**: Command Patternに従った個別コマンド実装 - ListProfilesCommand、CreateProfileCommand、SwitchProfileCommand - EditProfileCommand、ShowProfileCommand、DeleteProfileCommand #### **インフラ層** (`infrastructure/`) - **FileSystemAdapter**: ファイルシステム操作実装 - **ChalkLogger**: カラー表示とフォーマット付きコンソール出力 - **ProcessManager**: 外部プロセス実行(エディター) #### **依存性注入** アプリケーションは全ての依存関係でコンストラクタ注入を使用: - サービスは具象実装ではなくインターフェースを受け取る - 単体テストでのモック化が容易 - `hostswitch.ts`での明確な依存関係グラフ この設計により以下が可能になります: - モックされた依存関係での包括的な単体テスト - 関心の明確な分離 - プラットフォーム非依存のコアロジック - 将来の拡張性(GUIやAPIインターフェースなど) ## トラブルシューティング ### 権限関連の問題 #### 自動sudo検出 HostSwitchは自動的にsudo権限が必要な場合を検出し、管理者アクセスを要求します: ```bash # ✅ 推奨 - HostSwitchが自動的にsudoを処理 hostswitch switch dev # "Requesting administrative access..."(自動sudoプロンプト) # ✅ 手動sudoも動作します sudo hostswitch switch dev # ❌ 権限が必要な場合は自動sudoプロンプトが表示される hostswitch switch dev # 自動的にsudoをプロンプト ``` #### Permission Deniedエラー ```bash # 自動sudoが失敗した場合、手動sudoを試す sudo hostswitch switch dev # Windowsでは管理者として実行 # コマンドプロンプトを右クリック → "管理者として実行" ``` ### プロファイル関連の問題 #### プロファイルが見つからない場合 ```bash # 利用可能なプロファイルを確認 hostswitch list # プロファイル名を確認(大文字小文字を区別) hostswitch show [プロファイル名] # プロファイルディレクトリを確認 ls ~/.hostswitch/profiles/ ``` #### プロファイルの破損 ```bash # 破損したプロファイルを再作成 hostswitch delete 破損プロファイル --force hostswitch create 破損プロファイル --from-current ``` ### Windowsでの使用 WindowsではWSL (Windows Subsystem for Linux)の使用を推奨します。ネイティブWindowsで使用する場合は、管理者権限でコマンドプロンプトを実行してください。 **注意**: ネイティブWindowsサポートが改善されました。Windowsのhostsファイルパス(`C:\Windows\System32\drivers\etc\hosts`)を自動的に検出します。 ## データ保存場所 - プロファイル: `~/.hostswitch/profiles/` - バックアップ: `~/.hostswitch/backups/` - 現在のプロファイル情報: `~/.hostswitch/current.json` ## ライセンス MIT License - 詳細は[LICENSE](LICENSE)ファイルを参照してください。 ## 作者 [milkmaccya2](https://github.com/milkmaccya2) ## 貢献 バグ報告や機能追加のリクエストは[GitHub Issues](https://github.com/milkmaccya2/hostswitch/issues)で受け付けています。