![見出し画像](https://assets.st-note.com/production/uploads/images/99297270/rectangle_large_type_2_bac84eb370bd2d2e6e9ec1fa97261ec2.png?width=1200)
Pocochaアイテム名変換
ユーザ辞書に一括登録
背景と目的
Pocochaアプリには「アイテム予測変換」機能がある。
ユーザがコメント欄にアイテム名の先頭文字の一部を入力すると、Pocochaアプリがアイテム候補を一覧し、そこからユーザが選択しアイテムを投稿できる。
一方、ユーザはコメント欄でメッセージにアイテム名を使いたい場合がある。しかし、ユーザがアイテム名を入力するには相当の時間を要する。
そこで、スマートフォン(iphone)の「ユーザ辞書」に短い読みガナでアイテム名を予め登録することで、ユーザが入力に要する時間を短縮する。
なお、「ユーザ辞書」を操作するアプリは既にあるため、非アプリの方法で解決する。
目標と方法
ユーザは予め短い読みガナとアイテム名の組みを単位とした一覧を作成する。
この一覧を元データ(ソースデータ)として、ユーザの操作によりスマートフォン(iphone)の「ユーザ辞書」に単語を登録する。
この前提は、次の通りである。
Apple IDで既にmacOSおよびiphoneの紐付け済み
macOSが稼働しているPC機器がある
Microsoft Excelを使用できる
留意事項は、次の通りである。
「ユーザ辞書」に一括登録した単語の更新や削除は手動とする
Apple IDによるデータ連携を利用する
phraseとshortcutが完全に一致すれば、同じ単語と識別される。つまり、重複して登録されない。
ユーザ辞書への一括登録手順
添付Excelファイル(シート【単語データ】)の編集(Windows)
添付Excelファイルは、ActiveXを使ってファイルに出力する
読みカナの算出やXMLの作成にマクロを使用する
ユーザ辞書への一括登録用ファイル(plist)の出力(Windows)
一括登録用ファイル(plist)をmacOSへコピー(Windows→macOS)
一括登録ファイルのドラッグ&ドロップ(macOS)
スマートフォンのユーザ辞書への反映確認(iphone)
![](https://assets.st-note.com/img/1677554047522-MqLtQU1VOP.jpg?width=1200)
1.添付Excelファイル(シート【単語データ】)の編集
①背景が黄色のセル内容を確認し、必要なら変更する。
ナイテム👍%%✨ %%部分がアイテム名称に置き換わる
わ 読みガナの先頭文字(アイテム名称の変換で共通)
②追加が必要なら行(背景が橙色のセルを含まない)を複製した上で編集する。
③アイテム名称に英数記号字が含む場合は、カタカナ名称(例:背景が橙色のセルを含む行)を手動入力する。
![](https://assets.st-note.com/img/1677554287158-3b1uH8AA15.png?width=1200)
2.ユーザ辞書への一括登録用ファイル(plist)の出力
①ボタン「macOS辞書登録用ファイル出力(ファイル名拡張子.plist)」を押す。
![](https://assets.st-note.com/img/1677554661167-Z9MSSA0cd8.png?width=1200)
②出力ファイル名がダイアログ表示されるので、確認しボタン「OK」を押す。
![](https://assets.st-note.com/img/1677555951398-zpNQvTmXsm.png)
③単語データの単語数がダイアログ表示されるので、確認しボタン「OK」を押す。
![](https://assets.st-note.com/img/1677556022346-qBuKfMQVKd.png)
④ユーザ辞書への一括登録のためのファイルが作成されると、書込み完了のダイアログ表示されるので、確認しボタン「OK」を押す。
![](https://assets.st-note.com/img/1677556102189-5E5qO64uOW.png)
⑤Excelファイルと同じ名で拡張子がplistのファイルが作成される。このファイルを使ってmacOSのユーザ辞書に一括登録する。
![](https://assets.st-note.com/img/1677556207495-XFGuVIBUqM.png?width=1200)
3.一括登録用ファイル(plist)のmacOSへのコピー
Windows PC上で作成したplistファイルをコピーするなどして、macOSから参照できるようにする。
4.一括登録ファイルのドラッグ&ドロップ
①Appleマークからシステムメニューを表示し、「システム環境設定」を選択する。
![](https://assets.st-note.com/img/1677557743828-nJ30v19XCr.png?width=1200)
②「システム環境設定」からキーボードを選択する。
![](https://assets.st-note.com/img/1677561078251-Hf18kxe2Ad.png?width=1200)
③「キーボード」からタブ「ユーザ辞書」を選択する。
![](https://assets.st-note.com/img/1677557771049-sdoYv1n84F.png?width=1200)
④タブ「ユーザ辞書」を選択すると次のような画面が表示される。
![](https://assets.st-note.com/img/1677557798882-19Y8jt09r3.png?width=1200)
⑤タブ「ユーザ辞書」画面で一括登録用ファイル(plist)をドラッグ&ドロップする。
![](https://assets.st-note.com/img/1677558041994-7XZkBMFpr4.png?width=1200)
⑥登録された単語を確認する。不備がある場合は、エラーがmacOSのシステムメッセージに記録される。
![](https://assets.st-note.com/img/1677557919590-OBS4Eh578X.png?width=1200)
5.スマートフォン(iphone)のユーザ辞書への反映確認
しばらくするとiphone側(設定⇒一般⇒キーボード⇒)ユーザ辞書に反映される。
終わり。
添付Excelファイル
ExcelのマクロおよびVBA(ActiveX)を使用しておりウィルス感染の懸念から、フル機能のExcelファイルはアプロ―ドはしておりません。それらを削除したExcelファイルをアップロード(解凍パスワードPMLZagRmq6tJ)しています。フル機能のExcelファイルが入用な方はご連絡ください。
XML書き出しVBAスクリプト
plist形式でXMLデータをファイル出力するためのVBAスクリプトです。
Const RowStartIndex As Integer = 2 ' 2行目から書き出す
Const ColStartIndex As Integer = 4 ' 列Dを書き出す
Sub XML書き出し()
Dim objFSO As Object: Set objFSO = CreateObject("Scripting.FileSystemObject")
'出力先のファイル名
Dim oFullName As String
extensionName = objFSO.GetExtensionName(ActiveWorkbook.FullName)
extensionIndex = InStrRev(ActiveWorkbook.FullName, extensionName)
oFullName = Mid(ActiveWorkbook.FullName, 1, extensionIndex - 2) & ".plist"
'OneDrive上ファイルのパス変換
Dim keyword As String: keyword = "https://" 'OneDriveコラボレーションの識別文字列
Dim pos As Integer
pos = InStr(1, oFullName, keyword)
If 0 < pos Then
'コラボレーション時(https://d.docs.onedrive.net/xxxxxxx/実パス)
pos = InStr(pos + Len(keyword), oFullName, "/") 'ホスト名(d.docs.onedrive.net)を除外
pos = InStr(pos + 1, oFullName, "/") 'xxxxxxの部分を除外
oFullName = objFSO.BuildPath(Environ("OneDrive"), Mid(oFullName, pos)) 'ローカルのパスに変換
Else
'ローカルのパス
'何もしない
End If
MsgBox "出力先:" & oFullName
'XMLデータの書き出し
Dim objADODB As Object: Set objADODB = CreateObject("ADODB.Stream")
With objADODB
.Type = 2 'adTypeText
.Charset = "UTF-8"
.LineSeparator = 10 'adLF
.Open
End With
Dim rowIndex As Integer: rowIndex = RowStartIndex
With ThisWorkbook.Worksheets(1)
Do While .Cells(rowIndex, ColStartIndex).Value <> ""
objADODB.WriteText .Cells(rowIndex, ColStartIndex).Value, 1 'adWriteLine
rowIndex = rowIndex + 1
Loop
End With
Dim words As Integer: words = rowIndex - RowStartIndex - 2 '先頭行と最後行に単語は含まれない
MsgBox "抽出単語数:" & words
'BOMコードの排除(ファイルの先頭3バイトを削除)
Dim byteData() As Byte
With objADODB
.Position = 0
.Type = 1 'adTypeBinary
.Position = 3
byteData = .Read
.Close
.Open
.Write byteData
.SaveToFile oFullName, 2 ',adCreateOverWrite
.Close
End With
Set objFSO = Nothing
Set objADODB = Nothing
MsgBox oFullName & "に書込み完了 (" & words & ")"
End Sub
Private Sub CommandButton1_Click()
Call XML書き出し
End Sub