scoopでWindowsの環境構築を目論んでいるのでいて、プログラミング用のフォントファイルもScoop経由でインストールしたかったのですが、公式のBucketには日本語をサポートしているコーディング向け等幅フォントSource Han code JPがありません。
そこでGitHubで公開されている非公式Bucketなどを見ていたのですが、フォントのインストールについては、どれも管理者権限が必要なものばかりでした。今回は、管理者権限なしでフォントをインストールしたかったので、自分でbucketを作ることにしました。
なお、本記事ではbucketの作り方については、詳しく説明しないので、App Manifests · lukesampson/scoop Wiki · GitHub等を参考にしてください。
TL;DR
- フォントファイルは、
C:\Users\<Username>\AppData\Local\Microsoft\Windows\Fonts
に置く - レジストリは、
HKCU:\Software\Microsoft\Windows NT\CurrentVersion\Fonts
に上記フォントファイルのパスを追加する
フォントファイルのコピー先
Windowsでフォントをインストールする場合、全ユーザで使えるフォントファイルはC:\Windows\Fonts
に置く必要がありますが、その時に管理者権限が必要です。ログインユーザのみで、使用できれば良い場合は、インストール先にC:\Users\<Username>\AppData\Local\Microsoft\Windows\Fonts
が使えます。こちらの場合は管理者権限が不要なので、Scoopでminifestを作る時に、installer
でフォントファイルをこちらにコピーするよう記載します。
なので、今回の注意点としては、scoopの実行ユーザしかインストールしたフォントが使えません。
レジストリの登録
フォントファイルを、C:\Users\<Username>\AppData\Local\Microsoft\Windows\Fonts
に置いただけでは、フォントは使えません。レジストリに登録する必要があります。よく見るHKLM:\Software\Microsoft\Windows NT\CurrentVersion\Fonts
では、管理者権限が必要になりつかえません。代わりにHKCU:\Software\Microsoft\Windows NT\CurrentVersion\Fonts
に書き込みます。**HKEY_LOCAL_MACHINE(HKLM)
ではなく、HKEY_CURRENT_USER(HKCU)
**を使うのです。こちらは、管理者権限なしで書き込みが可能でした。
また、レジストリに登録する際の値(Value)は、フォントファイル名ではうまくいかず、インストール先のパスを指定することで上手くいきました。
作ったmanifestファイル
ということで、上記フォントファイルのコピー先とレジストリの登録に注意して作ったSource Han code JPのmanifestがこちらになります。uninstaller
では、installer
で実施したことの反対をしているだけで、C:\Users\<Username>\AppData\Local\Microsoft\Windows\Fonts
からフォントファイルを削除し、レジストリからも削除しています。
{
"homepage": "https://github.com/adobe-fonts/source-han-code-jp",
"license": "OFL-1.1",
"version": "2.011",
"url": "https://github.com/adobe-fonts/source-han-code-jp/archive/2.011R.zip",
"hash": "0f98beb0a381d9d19067f9b58f65d2dd65c808a3012ac9cb9866e575ad6d2e7f",
"extract_dir": "source-han-code-jp-2.011R",
"installer": {
"script": [
"Get-ChildItem $dir\\OTF -filter '*.otf' | ForEach-Object {",
" $fontdir = \"$env:LocalAppData\\Microsoft\\Windows\\Fonts\"",
" New-ItemProperty -Path 'HKCU:\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Fonts' -Name $_.Name.Replace($_.Extension, ' (TrueType)') -Value \"$fontdir\\$($_.Name)\" -Force | Out-Null",
" Copy-Item $_.Fullname -destination \"$fontdir\"",
"}"
]
},
"uninstaller": {
"script": [
"Get-ChildItem $dir\\OTF -filter '*.otf' | ForEach-Object {",
" $fontdir = \"$env:LocalAppData\\Microsoft\\Windows\\Fonts\"",
" Remove-ItemProperty -Path 'HKCU:\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Fonts' -Name $_.Name.Replace($_.Extension, ' (TrueType)') -Force -ErrorAction SilentlyContinue",
" Remove-Item \"$fontdir\\$($_.Name)\" -Force -ErrorAction SilentlyContinue",
"}"
]
}
}
Scoopでインストールする
あとは、作ったmanifestがあるリポジトリを
> scoop bucket add my-bucket <location of git repo>
で、バケットとして登録し、
> scoop install my-source-han-code-jp
で、インストールが出来るとおもいます。