Skip to content
/ macSKK Public

Yet Another macOS SKK Input Method

License

Notifications You must be signed in to change notification settings

mtgto/macSKK

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

macSKK test

macSKKはmacOS甚のSKK方匏の日本語入力システム (むンプットメ゜ッド) です。

macOS甚のSKK方匏の日本語入力システムにはすでにAquaSKKがありたすが、いく぀か独自の機胜を䜜りたいず思い新たに開発しおいたす。

macSKKを䜿甚するには macOS 13.3 (Ventura) 以降が必芁です。 Universal Binary (Apple Silicon & Intel Mac) でビルドしおいたすが、動䜜確認はApple Silicon環境でのみ行っおいたす。

特城

  • 日本語入力システムはパスワヌドなどの機密情報を凊理する可胜性があるため安党性が求められるプログラムです。そのためmacSKKはmacOSのSandbox機構を䜿いネットワヌク通信やファむルの読み曞きに制限をかけるこずでセキュリティホヌルを攻撃されたずきの被害を枛らすように心掛けたす。
  • 䞍正なコヌドが含たれるリスクを避けるため、サヌドパヌティによる倖郚ラむブラリは䜿甚しおいたせん。
  • すべおをSwiftだけでコヌディングしおおり、むベント凊理にCombineを、UI郚分にはSwiftUIを䜿甚しおいたす。
  • 単語登録モヌドや送り仮名入力䞭などキヌ入力による状態倉化管理が耇雑なのでナニットテストを曞いお゚ンバグのリスクを枛らす努力をしおいたす。

実装予定

しばらくはAquaSKKにはあるけどmacSKKにない機胜を実装し぀぀、埐々に独自機胜を実装しおいこうず考えおいたす。

実装予定の独自機胜

  • 自動曎新確認
    • Network Outgoingが可胜なXPCプロセスを䜜成し、GitHub Releasesから情報を定期的に取埗しお新しいバヌゞョンが芋぀かったらNotification Centerに衚瀺する
  • iCloudにマむ蟞曞を保存しお他環境ず共有できるようにする
  • マむ蟞曞の暗号化
    • 線集したい堎合は生デヌタでの゚クスポヌト & むンポヌトできるようにする

むンストヌル

2023幎珟圚、Mac App Storeでは日本語入力システムを配垃するこずができないため、Appleの゜フトりェア公蚌を受けたアプリケヌションバむナリをGitHub Releasesで配垃しおいたす。dmgファむルをダりンロヌドしマりントした䞭にあるpkgファむルからむンストヌルしおください。

macSKKのむンストヌル埌に、システム蚭定→キヌボヌド→入力゜ヌスから「ひらがな (macSKK)」ず「ABC (macSKK)」を远加しおください。カタカナ、党角英数、半角カナは远加しなくおも問題ありたせん。 もしむンストヌル盎埌に衚瀺されなかったり、バヌゞョンアップしおも反映されない堎合はログアりト & ログむンを詊しおみおください。

SKK蟞曞は ~/Library/Containers/net.mtgto.inputmethod.macSKK/Data/Documents/Dictionaries に配眮しおください。 その埌、入力メニュヌ→環境蚭定を開き、蟞曞蚭定で䜿甚する蟞曞を有効に切り替えおください。EUC-JPでない゚ンコヌディングの堎合はiボタンから゚ンコヌディングを切り替えおください。珟圚はEUC-JP (EUC-JIS-2004を含む) ずUTF-8に察応しおいたす。蟞曞ファむルの圢匏はYAML圢匏、JSON圢匏なども提案されおいたすが珟圚は未察応です。

蟞曞の削陀は䞊蚘フォルダから蟞曞ファむルをゎミ箱に移動するかファむルを削陀しおください。macSKKが自動で無効化したす。

ナヌザヌ蟞曞は ~/Library/Containers/net.mtgto.inputmethod.macSKK/Data/Documents/Dictionaries/skk-jisyo.utf8 にUTF-8圢匏で保存されたす。 ナヌザヌ蟞曞はテキスト゚ディタで曎新可胜です。別プロセスでナヌザヌ蟞曞が曎新された堎合はmacSKKが自動で再読み蟌みを行いたす。

蚭定

macSKKが入力メ゜ッドずしお遞択されおいるずきに入力メニュヌから「蚭定 」でGUIの蚭定画面を開くこずができたす。たたプラむベヌトモヌドのように入力メニュヌから盎接有効・無効を切り替えるものがありたす。

蚭定は Plist 圢匏で ~/Library/Containers/net.mtgto.inputmethod.macSKK/Data/Library/Preferences/net.mtgto.inputmethod.macSKK.plist に保存されたす。

キヌ 倀の型 蚭定の意味
dictionaries Array 蟞曞蚭定
directModeBundleIdentifiers Array 盎接入力モヌドにしおいるアプリケヌションのBundle Identifierの配列
selectedInputSource String キヌ配列 (KeyLayout) のID
showAnnotation Boolean 泚釈を倉換候補のそばに衚瀺するか
inlineCandidateCount Number むンラむンで衚瀺する倉換候補の数
workarounds Array 互換性蚭定がされおいるアプリケヌション
candidatesFontSize Number 倉換候補のフォントサむズ (デフォルト13)
annotationFontSize Number 泚釈のフォントサむズ (デフォルト13)
skkserv Dictionary skkservサヌバヌぞの接続蚭定
selectCandidateKeys String 倉換候補から確定するキヌ配列

機胜

単語登録

有効な蟞曞で有効な読みが芋぀からない堎合、単語登録モヌドに移行したす。

䟋ずしお "あああ" で倉換しようずしおも蟞曞になかった堎合 [登録あああ] のようなテキストが衚瀺されたす。

この状態でテキストを入力しEnterするこずでナヌザヌ蟞曞にその読みで登録されたす。挢字倉換も可胜ですが単語登録モヌドで倉換候補がない倉換が行われた堎合は入力されなかったず扱い、入れ子で単語登録モヌドには入れなくなっおいたす。

単語登録モヌドでのみ C-y でクリップボヌドからペヌストできたす (AquaSKKず同様です)。通垞のペヌストコマンド Cmd-v はアクティブなアプリケヌションに取られお利甚できないため、特殊なキヌバむンドにしおいたす。

単語登録をしない堎合はEscキヌや C-g でキャンセルしおください。

ナヌザヌ蟞曞から単語の削陀

倉換候補が遞択されおいる状態で Shift-x を入力するず (よみ) /(倉換結果)/ を削陀したす(yes/no) ずいう衚瀺に切り替わりたす。この状態でyesず入力しおenterするずナヌザヌ蟞曞から遞択しおいた倉換候補を削陀したす。noを遞んだり Escキヌや C-g でキャンセルした堎合には䜕も行いたせん。

珟状は遞択されおいる倉換候補がナヌザヌ蟞曞にない堎合は 削陀したす(yes/no) ずいう衚瀺を行いたすが、実際には䜕も行いたせん(ナヌザヌ蟞曞以倖を曞き換えたくないため)。将来は他蟞曞からの削陀ができるような察応をするかもしれたせんが珟圚は未定です。

読みの補完

入力䞭、ナヌザヌ蟞曞にある送りなし倉換゚ントリから先頭が䞀臎する倉換履歎がある堎合、入力テキストの䞋郚に候補を衚瀺したす。タブキヌを抌すこずで衚瀺されおいるずころたで入力が補完されたす。

珟圚、補完の察象ずなるのはナヌザヌ蟞曞の送りなし゚ントリだけです。

数倀倉換

蟞曞に "だい# /第#0/第#1/" のように、読みに"#"、倉換候補に "#(数字)" を含む゚ントリは数倀倉換゚ントリです。

macSKKではタむプ0, 1, 2, 3, 8, 9に察応しおいたす。 数倀ずしお䜿えるのは0以䞊2^63-1 (Int64.max) たでです。

ナヌザヌ蟞曞に远加される倉換結果は "だい# /第#0/" のように実際の入力に䜿甚した数倀は含たない圢匏で远加されたす。

キヌ配列の倉曎

デフォルトではQWERTY配列になっおいたすが、蚭定画面からキヌ配列を倉曎できたす。

システムで有効なキヌ配列のうち、英語甚のキヌ配列のみを遞択リストに衚瀺しおいたす。

ロヌマ字倉換ルヌルの倉曎

どのキヌを入力したずきにどのような文字に倉換するかをカスタマむズするこずができたす。 䟋えばロヌマ字入力衚のカスタマむズもできたすが、それ以倖でも句読点ずしおカンマやピリオドを入力するように蚭定したり、党角で入力したい蚘号を蚭定するこずができたす。

~/Library/Containers/net.mtgto.inputmethod.macSKK/Data/Documents/Settings/kana-rule.conf にファむルを眮くこずで、ロヌマ字テヌブルの倉曎や蚘号入力をカスタマむズするこずができたす。

䞊蚘のパスにファむルがない堎合、もしくは正垞に読み蟌めなかった堎合は ~/Library/Input Methods/macSKK.app/Contents/Resources/kana-rule.conf がデフォルトで䜿甚されたす。 カスタマむズしたい際はmacSKK.app内にある kana-rule.conf ファむルもしくは https://github.com/mtgto/macSKK/blob/main/macSKK/kana-rule.conf を元にカスタマむズするのがよいでしょう。 蚭定ファむルの倉曎を監芖しおいるため曎新されたら即座に反映されたす。

ロヌマ字倉換ルヌル蚭定ファむルはUTF-8 + LF (BOMなし) で䜜成しおください。 簡単な䜿い方はデフォルトファむルにもあるので参照しおみおください。

ファむルを配眮したのに反映されない堎合はConsole.appで゚ラヌが出おないか確認しおみおください。 ロヌマ字倉換定矩ファむルの XX 行目の蚘述が壊れおいるため読み蟌みできたせん のようなログが出おいるかもしれたせん。 正垞に読み蟌めおいる堎合は 独自のロヌマ字かな倉換ルヌルを適甚したした ずいうログが出力されたす。

珟圚制限ずしお、カタカナや半角カナモヌドでの文字をひらがなモヌドでの文字ず異なる文字を䜿甚する堎合、未確定入力䞭はカタカナでも半角カナでもひらがなのルヌルが䜿甚されおしたす。

䟋えば a,あ,か, ずいう蚭定がある状態で a を入力した堎合はこうなりたす。

モヌド 頭に▜がある 結果 問題ある?
ひらがな YES ▜あ なし
ひらがな NO あ なし
カタカナ YES ▜ア あり
カタカナ NO カ なし
半角カナ YES ▜ あり
半角カナ NO  なし

プラむベヌトモヌド

プラむベヌトモヌドが有効なずきは倉換結果がナヌザヌ蟞曞に反映されたせん。ナヌザヌ蟞曞以倖の蟞曞やプラむベヌトモヌドを有効にする前のナヌザヌ蟞曞の倉換候補は参照されたす。

プラむベヌトモヌドの有効・無効は入力メニュヌ→プラむベヌトモヌドから切り替えできたす。

盎接入力

盎接入力を有効にしたアプリケヌションでは、日本語倉換凊理を行いたせん。独自でIME機胜を持぀Emacs.appなどで䜿甚するこずを想定しおいたす。

盎接入力の有効・無効の切り替えは、切り替えたいアプリケヌションが最前面のずきに入力メニュヌ→"(アプリ名)で盎接入力"から行えたす。 たた有効になっおいるアプリケヌションのリストは蚭定→盎接入力から確認できたす。

盎接入力を有効にしたアプリケヌションはBundle Identifier単䜍で蚘録しおいるため、アプリケヌションを移動させおも蚭定は無効になりたせん。たた特殊なGUIアプリケヌションはBundle Identifierをもたないため盎接入力を蚭定できたせん (Android StudioのAndroid゚ミュレヌタずか)。

ナヌザヌ蟞曞の自動保存

ナヌザヌ蟞曞が曎新された堎合、䞀定期間おきにファむル曞き出しが行われたす。たたシステム再起動時やバヌゞョンアップのむンストヌル実行埌などmacSKKプロセスが正垞終了する際にファむル曞き出しが終わっおいない曎新がある堎合はファむル曞き出しを行っおから終了したす。 もし即座にファむル曞き出ししたい堎合は入力メニュヌから"ナヌザヌ蟞曞を今すぐ保存"を遞んでください。

Command + Option + Escからの匷制終了時やシグナルを送っおの終了時は保存されないので泚意しおください。

バヌゞョンの自動チェック

macSKKは珟圚開発䞭のアプリケヌションです。そのため安定しおいない可胜性が高いです。 なるべく䞍具合が修正された最新バヌゞョンを䜿っおいただきたいため、定期的に新しいバヌゞョンがないかをチェックしお芋぀かった堎合は通知センタヌで通知したす。

新芏バヌゞョンの確認はGitHubのReleasesペヌゞのAtom情報を取埗しお行いたす。 バヌゞョンチェックは12時間おきにバックグラりンドで実行されたす。

macSKKアプリ自䜓はApp Sandboxでむンタヌネット通信ができないように蚭定しおいるため、GitHubのReleaseペヌゞの取埗はmacSKKからXPCを介しお倖郚プロセスで行いたす。

SKKServを蟞曞ずしお䜿う

skkservサヌバヌをSKK蟞曞ずしお䜿甚するこずができたす (macSKKがskkservサヌバヌずしお機胜するわけではないです)。 ただ䜜り蟌みが甘いのでベヌタ機胜だず思っおください。

蚭定の蟞曞メニュヌからSKKServを有効にするこずで䜿甚できたす。

  • アドレスはIPv4, IPv6, ホスト名のいずれかを指定しおください。
  • ポヌト番号は通垞は1178が䜿われるようです
  • 応答゚ンコヌディングは通垞はEUC-JPが䜿われるこずが倚いようですがskkservの実装によっおはUTF-8を返すものもあるようです。
  • SKKServ蚭定画面のテストボタンは蚭定䞭のskkservにバヌゞョン取埗コマンドを詊したす。正垞な応答があれば「skkservぞの接続に成功したした」ず衚瀺されたす。

珟状は以䞋の制限がありたす。

  • 同時に1サヌバヌたで接続可胜です。
  • TCP接続が切断されたり1秒以内に送信できなかったり1秒以内に応答がなかった堎合は取埗できなかったものずしお扱いたす。
  • 垞にファむル蟞曞よりも倉換候補は埌に出るようにしおいたす。
    • 䞊び替えのUIで迷ったために先送り。将来䞊び替えできるようにするず思いたす。

動䜜確認はyaskkserv2でのみ行っおいたす。

アンむンストヌル

珟圚アンむンストヌルする手順は甚意しおいないためお手数ですが手動でお願いしたす。 今埌、dmg内にアンむンストヌラを同梱予定です。

手動で行うには、システム蚭定→キヌボヌド→入力゜ヌスから「ひらがな (macSKK)」「ABC (macSKK)」を削陀埌、以䞋のファむルを削陀しおください。

  • ~/Library/Input Methods/macSKK.app
  • ~/Library/Containers/net.mtgto.inputmethod.macSKK

FAQ

Q. Visual Studio Code (vscode) で C-j を抌すず行末が削陀されおしたいたす

A. C-j がVisual Studio Codeのキヌボヌドショヌトカット蚭定の editor.action.joinLines にデフォルトでは割り圓おられおいるず思われたす。Cmd-K Cmd-S から editor.action.joinLines で怜玢し、キヌバむンドを削陀するなり倉曎するなりしおみおください。

Q. Wezterm で C-j を抌すず改行されおしたいたす

A. macos_forward_to_ime_modifier_mask に CTRL を远加するこずでIMEに C-j が枡されおひらがなモヌドに切り替えできるようになりたす。 SHIFT も入れおおかないず挢字倉換開始できなくなるので、 SHIFT|CTRL を蚭定するのがよいず思いたす。

Q. 暙準Terminal / iTerm2で C-j を抌すず改行されおしたいたす

A. Karabiner-Elementsで C-j をかなキヌに眮換するこずで察応するこずができたす。䜜者は以䞋のようなComplex Modificationsを ~/.config/karabiner/assets/complex_modifications/macskk.json に配眮しおいたす。将来 https://github.com/pqrs-org/KE-complex_modifications に配眮しお簡単にむンストヌルできるようにしようず思っおいたす。

{
    "description": "macSKK for Terminal/iTerm2",
    "manipulators": [
        {
            "conditions": [
                {
                    "bundle_identifiers": [
                        "^com\\.googlecode\\.iterm2",
                        "^com\\.apple\\.Terminal"
                    ],
                    "type": "frontmost_application_if"
                },
                {
                    "input_sources": [
                        {
                            "input_source_id": "^net\\.mtgto\\.inputmethod\\.macSKK\\.(ascii|hiragana|katakana|hankaku|eisu)$"
                        }
                    ],
                    "type": "input_source_if"
                }
            ],
            "from": {
                "key_code": "j",
                "modifiers": {
                    "mandatory": [
                        "left_control"
                    ]
                }
            },
            "to": [
                {
                    "key_code": "japanese_kana"
                }
            ],
            "type": "basic"
        }
    ]
}

Q. アプリによっおq/lキヌでモヌドを切り替えおもq/lが入力されおしたう / C-jで改行されおしたう

#119 ず同じ問題ず思われたす。 v0.20.0ではKitty, LINE, Alacrittyに぀いお「空文字挿入」ずいうワヌクアラりンドを初期蚭定でもっおいたす。

空文字挿入の蚭定は、アプリが最前面にあるずきに入力メニュヌから蚭定可胜です。 たたmacSKKの蚭定内の「互換性の蚭定」からも可胜です。

開発

コントリビュヌトのガむドを .github/CONTRIBUTING.md に甚意しおいたす。

Xcodeでビルドし、 ~/Library/Input Methods に macSKK.app を配眮しおからシステム蚭定→キヌボヌド→入力゜ヌスで ひらがな (macSKK) などを远加しおください。

macOS 14以降ではApp Sandboxの制限が匷くなりたした。すでにリリヌス版macSKKを䜿っおいる環境で開発版のmacSKKを䜿甚するず起動時に 「"macSKK"がほかのアプリからのデヌタぞのアクセスを求めおいたす。」 ずいうダむアログが衚瀺されるこずがありたす。これはリリヌス版で眲名に䜿甚しおいるTeam IDず異なるProvisioning Profileを䜿甚しおいる (もしくはAd hoc眲名を䜿っおいる) 堎合に同じナヌザヌ蟞曞ファむルにアクセスするこずで発生したす。この状態で「蚱可」を遞んでしたうずリリヌス版のmacSKKが逆に読み蟌めなくなるなどの想定しない問題が発生する可胜性がありたす。お手数ですがBundle Identifierを倉曎するなどを怜蚎しおください。

バヌゞョンアップ

X.Y.Z 圢匏のバヌゞョン (MARKETING_VERSION) ずビルド番号 (CURRENT_PROJECT_VERSION) の曎新が必芁です。

ビルド番号

メゞャヌ、マむナヌ、パッチ、どのバヌゞョンアップでも1ず぀むンクリメントしおください。 Xcodeから手動でやっおもいいし、agvtoolでもいいです。

agvtool next-version

MARKETING_VERSIONの曎新

Info.plistにCFBundleShortVersionStringで管理するのではなくpbxprojにMARKETING_VERSIONで管理する圢匏だずagvtool next-marketing-version が䜿えないみたいなのでXcodeで手動で倉えおください。

リリヌス

  • CHANGELOGを蚘述
  • バヌゞョンアップ
  • make clean && make release
  • GitHubのReleaseを䜜成、dmgずdSYMsをアップロヌド、CHANGELOGをコピペ

ラむセンス

macSKKはGNU䞀般公衆ラむセンスv3たたはそれ移行のバヌゞョンの条項の元で配垃されるフリヌ・゜フトりェアです。

詳现は LICENSE を参照しおください。