{"id":46047712,"url":"https://github.com/barewalker/koyubi","last_synced_at":"2026-03-01T08:02:45.833Z","repository":{"id":340123039,"uuid":"1163189756","full_name":"barewalker/koyubi","owner":"barewalker","description":null,"archived":false,"fork":false,"pushed_at":"2026-03-01T06:42:41.000Z","size":183,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-01T06:46:58.699Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/barewalker.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-21T08:28:53.000Z","updated_at":"2026-03-01T06:42:45.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/barewalker/koyubi","commit_stats":null,"previous_names":["m-takeuchi/koyubi","barewalker/koyubi"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/barewalker/koyubi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barewalker%2Fkoyubi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barewalker%2Fkoyubi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barewalker%2Fkoyubi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barewalker%2Fkoyubi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/barewalker","download_url":"https://codeload.github.com/barewalker/koyubi/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barewalker%2Fkoyubi/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29964203,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-01T06:55:38.174Z","status":"ssl_error","status_checked_at":"2026-03-01T06:53:04.810Z","response_time":124,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-03-01T08:02:43.563Z","updated_at":"2026-03-01T08:02:45.818Z","avatar_url":"https://github.com/barewalker.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Koyubi - 小指 🤙\n\n**英語配列キーボードユーザーのための Windows SKK 実装**\n\n\u003e SKKユーザーの小指に捧ぐ\n\n## コンセプト\n\nKoyubi は、HHKB をはじめとする英語配列キーボードで SKK を快適に使うことに特化した Windows 向け日本語入力システム（IME）です。\n\nWindows 上の既存 SKK 実装（CorvusSKK, SKK日本語入力FEP 等）は優れたソフトウェアですが、英語配列キーボードでの利用において以下のような痒い点が残ります：\n\n- 半角/全角キーに依存した IME ON/OFF の切り替え\n- 英語配列に最適化されたキーバインド設定の不足\n- Ctrl-J, Ctrl-G 等の Emacs 由来キーバインドの不完全な対応\n\nKoyubi はこれらの課題を解決し、英語配列 + SKK という組み合わせにおける最高の入力体験を目指します。\n\n## 特徴\n\n- **英語配列ファースト**: 半角/全角キーなしで完結する IME 切り替え（Ctrl-J, Ctrl-Space 等をネイティブサポート）\n- **正統派 SKK**: Shift による変換開始、送り仮名処理、辞書引きなど SKK の基本動作を忠実に実装\n- **Rust 製**: メモリ安全性とパフォーマンスを両立。TSF (Text Services Framework) による全 Windows アプリ対応\n- **SandS (Space and Shift)**: Space 長押しで Shift として機能。SKK の Shift 多用を小指から親指に移行\n- **Emacs キーバインド**: Ctrl+F/B/A/E/N/P/D/K によるカーソル移動・編集\n- **CapsLock → Ctrl**: CapsLock を Ctrl として使用。Ctrl+J/G/Space 等が押しやすくなる\n- **Thumb Shift**: 無変換/変換/カナキーを Shift として使用\n- **設定の柔軟性**: TOML ベースの設定ファイルでカスタマイズ\n\n## アーキテクチャ\n\n```\n┌─────────────────────────────────────┐\n│  Windows アプリケーション            │\n└──────────┬──────────────────────────┘\n           │ TSF (Text Services Framework)\n┌──────────▼──────────────────────────┐\n│  koyubi-tsf (COM DLL)               │\n│  ├── ITfTextInputProcessor          │\n│  ├── ITfKeyEventSink                │\n│  ├── 候補ウィンドウ                  │\n│  └── 入力モードインジケーター         │\n└──────────┬──────────────────────────┘\n           │ Rust 関数呼び出し\n┌──────────▼──────────────────────────┐\n│  koyubi-engine (ライブラリ)          │\n│  ├── ローマ字 → かな変換             │\n│  ├── SKK 辞書管理                    │\n│  │   ├── システム辞書 (SKK-JISYO.L)  │\n│  │   └── ユーザー辞書                │\n│  ├── 変換エンジン                    │\n│  │   ├── ▽モード（未変換）           │\n│  │   ├── ▼モード（変換候補選択）      │\n│  │   └── 送り仮名処理                │\n│  └── 設定管理 (TOML)                │\n└─────────────────────────────────────┘\n```\n\n### クレート構成\n\n```\nkoyubi/\n├── Cargo.toml              # ワークスペース定義\n├── crates/\n│   ├── engine/             # koyubi-engine: SKK 変換エンジン（プラットフォーム非依存）\n│   │   ├── Cargo.toml\n│   │   └── src/\n│   │       ├── lib.rs\n│   │       ├── romaji.rs       # ローマ字 → かな変換テーブル・ステートマシン\n│   │       ├── dict.rs         # SKK 辞書の読み込み・検索\n│   │       ├── candidate.rs    # 変換候補管理\n│   │       ├── composer.rs     # 入力状態管理（▽/▼モード遷移）\n│   │       ├── okuri.rs        # 送り仮名処理\n│   │       └── config.rs       # 設定ファイル管理\n│   │\n│   └── tsf/                # koyubi-tsf: Windows TSF 統合（COM DLL）\n│       ├── Cargo.toml\n│       └── src/\n│           ├── lib.rs          # DLL エントリポイント (DllGetClassObject 等)\n│           ├── text_service.rs # ITfTextInputProcessor / ITfKeyEventSink 実装\n│           ├── key_event.rs    # VK → KeyEvent 変換\n│           ├── edit_session.rs # テキスト編集セッション\n│           ├── candidate_ui.rs # 候補ウィンドウ\n│           ├── lang_bar.rs     # 言語バーボタン\n│           └── register.rs     # COM 登録/解除\n│\n├── dict/                   # デフォルト辞書ファイル\n├── docs/                   # 設計ドキュメント\n│   ├── ARCHITECTURE.md\n│   ├── KEYMAP.md\n│   └── DEVELOPMENT.md\n└── installer/              # Inno Setup スクリプト・winget マニフェスト\n```\n\n## SKK の基本動作\n\n```\n入力例: 「ここで履物を脱いでください」\n\nキー入力: kokodeHakimono woNuIdekudasai\n                ^               ^^\n                Shift で変換開始  送り仮名\n\n状態遷移:\n  [直接入力] → k → ko → kok → koko → kokod → kokode\n  [Shift] → H → ▽は → ▽はk → ▽はki → ▽はkim → ...\n  [Space] → ▼履物 → 確定\n  ...\n```\n\n## 英語配列キーボード向けの設計\n\n### IME ON/OFF（デフォルト設定）\n\n| キー | 動作 |\n|------|------|\n| Ctrl-J | IME ON（かなモードへ） |\n| Ctrl-; | IME OFF（ASCII モードへ）|\n| Ctrl-Space | IME ON/OFF トグル |\n\n※ 半角/全角キーがなくても完全に動作する\n\n### SKK 操作キー\n\n| キー | 動作 |\n|------|------|\n| Shift + [a-z] | ▽モード開始（変換ポイント設定） |\n| Space | 変換（▽→▼）/ 次候補 |\n| Ctrl-J | 確定 |\n| Ctrl-G | キャンセル |\n| Enter | 確定 |\n| q | カタカナ変換 |\n| l | ASCII モード |\n| L | 全角英数モード |\n| / | Abbrev モード |\n| x | 前候補 |\n\n### SandS (Space and Shift)\n\nSpace キーを Shift キーとして兼用する機能です（デフォルト有効）。\n\n| 操作 | 動作 |\n|------|------|\n| Space 単独タップ | 通常の Space（変換/次候補） |\n| Space + 他キー | Shift + そのキー（▽モード開始等） |\n\nSKK では Shift を多用しますが、SandS により小指の負担を親指に移せます。\n\n### Emacs キーバインド\n\nCtrl を使ったカーソル移動・編集（デフォルト有効）:\n\n| キー | 動作 |\n|------|------|\n| Ctrl-F / Ctrl-B | カーソル右 / 左 |\n| Ctrl-A / Ctrl-E | 行頭 / 行末 |\n| Ctrl-N / Ctrl-P | カーソル下 / 上 |\n| Ctrl-D | Delete |\n| Ctrl-H | Backspace（常に有効） |\n| Ctrl-K | 行末まで削除 |\n\n### CapsLock → Ctrl\n\nCapsLock を Ctrl として使用します（デフォルト無効）。有効にすると:\n\n- CapsLock + J → Ctrl-J（IME ON）\n- CapsLock + Space → Ctrl-Space（トグル）\n- CapsLock + F → Ctrl-F（カーソル右）\n- CapsLock + C → Ctrl-C（コピー等、非 IME コンボもアプリに届く）\n\n\u003e **注意**: CapsLock のトグル動作は OS レベルで発生します。PowerToys やレジストリで CapsLock トグルを無効化することを推奨します。\n\n### 設定\n\n`%APPDATA%\\Koyubi\\config.toml` で設定：\n\n```toml\n# SandS (Space and Shift) — デフォルト: true\nsands_enabled = true\n\n# Emacs キーバインド (Ctrl+F/B/A/E/N/P/D/K) — デフォルト: true\nemacs_bindings_enabled = true\n\n# Thumb Shift（無変換/変換/カナキーを Shift として使用）— デフォルト: false\nthumb_shift_enabled = false\n\n# CapsLock → Ctrl — デフォルト: false\ncaps_ctrl_enabled = false\n\n# 起動時の入力モード: ascii, hiragana, katakana\ninitial_mode = \"ascii\"\n\n# SKK 操作キー\ntoggle_kana = \"q\"      # カタカナ変換\nenter_ascii = \"l\"      # ASCII モード\nenter_zenkaku = \"L\"    # 全角英数モード\nprev_candidate = \"x\"   # 前候補\n\n# 辞書パス（省略時は自動検出）\n# system_dict_paths = [\"C:\\\\path\\\\to\\\\SKK-JISYO.L\"]\n# user_dict_path = \"C:\\\\path\\\\to\\\\user-dict.skk\"\n```\n\n## 実装状況\n\n- [x] TSF COM DLL（登録・有効化・キー入力フック・テキスト挿入）\n- [x] ローマ字 → ひらがな変換（ステートマシン、テーブル駆動）\n- [x] SKK 変換エンジン（▽モード / ▼モード / 送り仮名処理）\n- [x] SKK 辞書管理（SKK-JISYO.L、EUC-JP / UTF-8 対応）\n- [x] ユーザー辞書（辞書登録モード）\n- [x] 候補ウィンドウ（数字キー選択、ページ切り替え）\n- [x] カタカナ変換 / 全角英数モード\n- [x] SandS (Space and Shift)\n- [x] Emacs キーバインド（Ctrl+F/B/A/E/N/P/D/K/H）\n- [x] CapsLock → Ctrl リマッピング\n- [x] Thumb Shift（無変換/変換/カナキー）\n- [x] TOML 設定ファイル\n- [x] 言語バーボタン / Win11 入力インジケーター\n- [x] Inno Setup インストーラー\n- [ ] Abbrev モード\n- [ ] 数値変換 / 接頭辞・接尾辞変換\n- [ ] winget-pkgs 登録\n\n## ビルド\n\n### 前提条件\n\n- Rust (stable)\n- Windows 10/11（テスト環境）\n\n### Windows 上でのビルド\n\n```bash\ncargo build --release\n```\n\n### Linux からのクロスコンパイル\n\n```bash\ncargo install cargo-xwin\ncargo xwin build --target x86_64-pc-windows-msvc --release\n```\n\n### インストール（開発用）\n\n```powershell\n# 管理者権限の PowerShell で\nregsvr32.exe \"target\\release\\koyubi_tsf.dll\"\n```\n\n### アンインストール（開発用）\n\n```powershell\nregsvr32.exe /u \"target\\release\\koyubi_tsf.dll\"\n```\n\n## 参考プロジェクト\n\n- [ime-rs](https://github.com/saschanaz/ime-rs) - Microsoft IME サンプルの Rust 移植\n- [azooKey-Windows](https://github.com/fkunn1326/azooKey-Windows) - Rust TSF IME の実装例\n- [windows-chewing-tsf](https://github.com/chewing/windows-chewing-tsf) - Rust TSF IME (注音入力)\n- [cskk](https://github.com/naokiri/cskk) - Rust 製 SKK ライブラリ\n- [CorvusSKK](https://github.com/nathancorvussolis/corvusskk) - Windows 向け SKK 実装 (C)\n\n## 注意事項\n\n- 本プロジェクトは [Claude Code](https://claude.ai/claude-code)（Anthropic の AI コーディングツール）を使って開発されています。\n- 現時点では**英語配列キーボード（US 配列）でのみテスト**しています。日本語配列（JIS 配列）キーボードでの動作は未検証です。\n\n## ライセンス\n\nMIT License\n\n## 名前の由来\n\nSKK ユーザーは Shift キーを多用します。\nその Shift キーを押し続ける小指 (koyubi) に敬意を込めて。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbarewalker%2Fkoyubi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbarewalker%2Fkoyubi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbarewalker%2Fkoyubi/lists"}