先日、Google日本語入力の単語登録を使用した文字入力の効率化に関する記事を公開しましたが、今回はそれで作成した辞書ツールを複数台のPCで同期(共有)する方法についてご紹介したいと思います。
かなり長くなってしまったので、今回は取り急ぎWindows同士を想定していますが、需要がありそうでしたらMacとの同期についても公開予定です。
はじめに
Google日本語入力 のユーザー辞書ファイルをDropbox で同期するためには、シンボリックリンクを設定してあげる必要があります。
ユーザー辞書は通常だとC:\Users\{自分のユーザー名}\AppData\LocalLow\Google\Google Japanese Inputに保存されています。
なので、例えばWindowsだと以下のようなコマンド、
mklink /D C:\Users\{自分のユーザー名}\AppData\LocalLow\Google\"Google Japanese Input" C:\Users\inoue\Dropbox\Sync\"Google Japanese Input"
Macだと少しコードと場所が変わって以下のようなコマンド
ln -s /Users/{自分のユーザー名}/Dropbox/Sync/Google\ Japanese\ Input /Users/{自分のユーザー名}/Library/Application Support/Google/JapaneseInput
で当該ディレクトリにシンボリックリンクを貼ってあげれば良いように思われました。
がしかし、Windowsでこれをやろうとすると、「変換エンジンプログラムの起動に失敗しました。新しいGoogle日本語入力を利用するためにコンピュータを再起動してください。」というエラーが発生してしまいます。再起動しても、全く問題は解決しません。
詳しい原因はわかりませんが、とりあえずこの問題はディレクトリ単位ではなく、ファイル単位でシンボリックリンクを設定してあげることで解決できます。
辞書ツールを同期(共有)する流れ
辞書ツールを同期(共有)するまでの大まかな流れとしては、以下のようになります。
1. ローカルに保存されているGoogle日本語入力のユーザー辞書を、Dropboxに移動する。
2. ローカルの元々の保存場所からシンボリックリンクを貼る。
3. 辞書ツールを更新するとシンボリックリンクが解除されるため、再度貼り直しの処理をする。
4. ここまでの一連の作業をバッチファイル化する。
5. 特定のタイミングでバッチファイルが実行されるように設定する。
以上です。
結論だけ先に書いておきますと、通常の手順でエクスポート&インポートするよりは大幅に手間を軽減できるけれど、リアルタイムの同期ではないといった内容になっています。
リアルタイムで同期するのが理想でしたが、困難だったので諦めました。
Google Japanese Inputをコピーしシンボリックリンクを設定
コントロールパネルから隠しファイルを表示させるか、エクスプローラーの「表示」から「隠しファイル」にチェックを入れて隠しファイルを表示させます。
エクスプローラーでC:\Users\{自分のユーザー名}\AppData\LocalLow\Google\Google Japanese Inputを開きます。ちなみにUsersはエクスプローラー上だとユーザーになっているかと思います。
開くと4つ~6つ前後のファイルがあるかと思いますが、このうちconfig1.dbとuser_dictionary.dbの2つを、Dropbox内に任意のディレクトリを作ってその中にコピーしておきます。(例:C:\Users\inoue\Dropbox\Sync\GoogleIME)
※config1.dbに関しては、もし無ければスルーしてください。
そして元々ローカルにあったディレクトリGoogle Japanese Input内にあるファイルconfig1.dbとuser_dictionary.dbをリネームします。名前は何でも良いですが元々のファイルだとわかるように「config1_original.db」と「user_dictionary_original.db」のような感じにしておけば良いかと思います。Dropboxにコピーしているので別に削除しても良いファイルではありますが、念のためリネームという形でバックアップとして取っておいたほうが良いでしょう。
ファイルをリネーム/削除できない場合は、IMEをMicrosoft IMEなどに変更しておいて(変更方法はWindows10でIMEを変更する方法にて解説しています)、タスクマネージャで「Google日本語入力キャッシュサービス」「Google日本語入力コンバーター」「Google日本語入力レンダラー」の3つを強制終了させます。すると削除できるかと思います。
念のため強制終了の方法を記載しておきますと、タスクマネージャをCtrl + Shift + Escで呼び出し、以下の項目を1つずつ選択して「タスクの終了」をクリックし順番に終了させていきます。
その後はコマンドプロンプト(管理者権限)を開きます。
※管理者権限でのコマンドプロンプトは、左下のWindowsアイコンを右クリックして「コマンドプロンプト(管理者)」をクリックすればOKです。許可を求めるポップアップが出たら「はい」をクリックしてください。
そして以下のコマンドのDropboxのパス部分を修正して実行し、シンボリックリンクを設定します。
mklink %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\user_dictionary.db {Dropboxのuser_dictionary.dbが保存されているディレクトリのパス}\user_dictionary.db mklink %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\config1.db {Dropboxのuser_dictionary.dbが保存されているディレクトリのパス}\config1.db
1度メモ帳などのテキストエディタにコピーして、そこでパスを修正すると良いでしょう。例えば私の環境であれば以下のような感じのコマンドになります。
mklink %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\user_dictionary.db C:\Users\inoue\Dropbox\Sync\GoogleIME\user_dictionary.db mklink %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\config1.db C:\Users\inoue\Dropbox\Sync\GoogleIME\config1.db
これをコマンドプロンプトに貼り付けて実行(Enter)してあげます。OSによってはCtrl+Vで貼り付けられない場合があったような気がしますが、その場合はコマンドプロンプト上で右クリックをすると「貼り付け」を選択することができたと思います。
これで、ローカルのGoogle Japanese Input内にシンボリックリンクが生成されました。ファイルの種類が元々はData Base Fileになっていたものが.symlinkになっているかと思います。
Google日本語入力の設定や、単語登録/辞書ツールの編集で解除される件の対策
上記の方法でシンボリックリンクを設定しても、辞書ツールの内容などIME(Google日本語入力)の設定を変更すると、シンボリックリンクが解除され強制的に単一ファイルとして上書き保存されてしまいます。
このままだと、IMEの設定を変更するたびに、手動でシンボリックリンクを貼り直す必要があります…これではエクスポート&インポートするのと手間があまり変わりありません。
なので、自動的にシンボリックリンクを貼るように手を加えたいと思います。
以下のスクリプトをバッチファイル(.bat)として保存し定期的に実行させることで、最新の内容にてシンボリックリンクを貼り直すことができます。※ディレクトリ構成をここまでの記事内容と同様にしている場合、下記コードは修正する必要なくそのまま使えます。
@echo off IF NOT EXIST %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\compare ( mkdir %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\compare mklink %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\compare\user_dictionary_compare.db "%~dp0"\user_dictionary.db mklink %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\compare\config1_compare.db "%~dp0"\config1.db ) IF NOT EXIST "%~dp0"\BU ( mkdir "%~dp0"\BU ) FC %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\user_dictionary.db %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\compare\user_dictionary_compare.db if %errorlevel%==0 goto skip set time2=%time: =0% copy %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\user_dictionary.db "%~dp0"\user_dictionary.db copy %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\user_dictionary.db "%~dp0"\BU\BU_%date:~0,4%%date:~5,2%%date:~8,2%_%time2:~0,2%%time2:~3,2%%time2:~6,2%_Win_user_dictionary.db del %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\user_dictionary.db del %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\compare\user_dictionary_compare.db mklink %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\user_dictionary.db "%~dp0"\user_dictionary.db mklink %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\compare\user_dictionary_compare.db "%~dp0"\user_dictionary.db :skip FC %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\config1.db %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\compare\config1_compare.db if %errorlevel%==0 goto skip copy %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\config1.db "%~dp0"\config1.db copy %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\config1.db "%~dp0"\BU\BU_%date:~0,4%%date:~5,2%%date:~8,2%_%time2:~0,2%%time2:~3,2%%time2:~6,2%_Win_config1.db del %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\config1.db del %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\compare\config1_compare.db mklink %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\config1.db "%~dp0"\config1.db mklink %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\compare\config1_compare.db "%~dp0"\config1.db :skip
テキストエディタにて上記のコードをファイル名SyncIME.batなどという名前で、Dropbox側のディレクトリGoogleIME内に保存し、定期的にこのバッチファイルを管理者権限で実行してあげます。
何をしているかというと、最初のIF NOT EXISTにてGoogle Japanese Input内にディレクトリcompareがあるかどうかを判断し、もし無い場合にはディレクトリcompareを作ったうえで、そのなかにシンボリックリンクを2つ生成しています。
“%~dp0”はバッチファイルが置かれているディレクトリ(今回の場合だとGoogleIME)を参照しています。
次のIF NOT EXISTでは、GoogleIME内にBUというディレクトリがあるかどうかを判断し、もし無い場合にはディレクトリBUを作っています。
その後のFCで、Google Japanese Input内にあるuser_dictionary.dbファイルと、compare内にあるuser_dictionary_compare.dbファイルを比較して、もしも相違があれば(ユーザー辞書が変更されているなら)、最新のuser_dictionary.dbをDropbox側のディレクトリGoogleIME内にcopyでコピーしています。念のためBUに毎回バックアップを保存するコマンドも書いています。set time2=%time: =0%
はバックアップファイル名に日時を入れるためのコードです。
バックアップは必要ないかもしれませんが、万が一辞書ファイルが壊れた場合を想定して、バッチファイルが実行されるたびに以下のような感じでバックアップファイルが作成されるようになっています。※私はWindowsとMacBookで共有しているので、どちらのマシンによりバッチファイル(またはシェル)が実行されたのかを識別できるようにしています。
コピーの後は、ローカルのuser_dictionary.dbとuser_dictionary_compare.dbをdelで削除し、mklinkでシンボリックリンクの貼り直し、という流れです。
2回目のFCでは、ファイルがuser_dictionary.dbからconfig1.dbに変わっただけで同じ処理をしています。
定期処理による同期
ここまでの作業により、バッチファイルを管理者権限で実行することでシンボリックリンクの貼り直しを簡単に行うことができるようになりました。
-
辞書ツールを更新するたびに毎回このバッチファイルを実行しなきゃいけないの?
-
そうだね、毎回するのは少し面倒だね。なのでこれからバッチファイルを定期的に実行して、自動的に同期させてあげる設定をするよ。
-
わーい!
タスクスケジューラでログオン時にバッチファイルを実行
IMEを更新するたびに手動でバッチファイルを実行するのは面倒…ということで、タスクスケジューラーに登録したいと思います。
タイミングは、「ログオン時」「1時間ごと」「指定時刻」など色々考えられますが、私は「ログオン時」にしています。
Windows10の場合は画面左下の検索窓に「タスク」と入力(Win8であれば左下のWindowsアイコンを右クリックして「検索」をクリックし、検索窓に「タスク」と入力)して検索します。「タスクスケジューラ」または「タスクのスケジュール」という項目が表示されるため、それをクリックします。
するとタスクスケジューラが立ち上がるので、右側にある「タスクの作成」をクリック。
タスクの「名前」に「SyncIME」と入力し、「説明」に「Google日本語入力の辞書ツール共有タスク」と入力し、「最上位の特権で実行する」にチェックを入れます。
次に「トリガー」タブに移動し、「新規」をクリックします。
「タスクの開始」を「ログオン時」にして「OK」をクリックします。
次に「操作」タブに移動し、「新規」をクリックします。
「参照」をクリックした後、DropboxのGoogleIMEディレクトリ内に保存しているバッチファイル「SyncIME.bat」を選択して「開く」をクリックします。
「OK」をクリックします。
また、必要に応じて「条件」タブの、「コンピューターをAC電源で使用している場合のみタスクを開始する」や「コンピューターの電源をバッテリに切り替える場合は停止する」のチェックを外す方は外しても良いかもしれません。例えばノートPCの方は外しておいたほうが良いように思います。
特に必要なければ、もう1度「OK」をクリックしたら終了です。
試しに辞書ツールを編集してシンボリックリンクが解除されたのを確認後、再起動してみてください。バッチファイルが実行され、シンボリックリンクが新たに設定されているはずです。
タスクを編集したり削除したい場合
Windows10の場合は画面左下の検索窓に「タスク」と入力、Windows8の場合は画面左下のWindowsアイコンを右クリックして「検索」をクリックしてから検索窓に「タスク」と入力します。すると「タスクスケジューラ」または「タスクのスケジュール」という項目が表示されるため、それをクリックします。
するとタスクスケジューラが開かれます。
左側の「タスクスケジューラ(ローカル)」という項目が選択されていない場合は選択し、「タスクスケジューラの概要」「タスクの状態」「アクティブなタスク」などが表示されている画面を出します。そのうち「アクティブなタスク」の下の部分に多くのタスクがずらずらっと並んでいるので、スクロールして「SyncIME」を探しましょう。タスク名などで昇順になっているわけではなかったりもするので、地道に自分が作ったタスク名(今回の場合はSyncIME)を探して、ダブルクリックします。
するとタスクの詳細を確認できる画面が開きます。右側から「プロパティ」をクリックすればタスクの内容を編集できますし、「削除」をクリックすればタスクを削除することもできます。
シャットダウン時にDropboxに共有する方法
上記の方法だと、例えば「デスクトップPCで辞書ツールを編集」→「シャットダウン」→「ノートPCを持って外出」した際に、まだデスクトップPCが辞書ツールを編集後にログオンしていないため、Dropboxには最新の辞書ツールが反映されていません。その状態でノートPC側で辞書ツールを更新してしまうと、2つの新しいファイルができてしまいます。
そういう場合、シャットダウン時に同期しておきたいと思ったり思わなかったりするかもしれません。
タスクスケジューラのイベントトリガーにて個別にイベントログを指定する方法、およびグループポリシーエディターを使う方法なども試しましたが、シャットダウン時に「バッチファイル実行」→「Dropboxで共有」までを自動で行うことはできませんでした。バッチファイルの実行までは行えましたが、その後のDropboxの共有が難しかったです。
そこで解決方法を考えてみましたが、最も簡単なものは、バッチファイルの最後にシャットダウン処理を記述し、シャットダウンはバッチファイルを実行することによって行うというものです。
DropboxのディレクトリGoogleIMEにあるSyncIME.batをコピーして、SyncIME_Shutdown.batというファイル名で保存し、内容を以下のように修正します。※最終行に1行追加しただけ。
@echo off IF NOT EXIST %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\compare ( mkdir %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\compare mklink %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\compare\user_dictionary_compare.db "%~dp0"\user_dictionary.db mklink %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\compare\config1_compare.db "%~dp0"\config1.db ) FC %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\user_dictionary.db %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\compare\user_dictionary_compare.db if %errorlevel%==0 goto skip copy %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\user_dictionary.db "%~dp0"\user_dictionary.db del %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\user_dictionary.db del %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\compare\user_dictionary_compare.db mklink %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\user_dictionary.db "%~dp0"\user_dictionary.db mklink %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\compare\user_dictionary_compare.db "%~dp0"\user_dictionary.db :skip FC %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\config1.db %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\compare\config1_compare.db if %errorlevel%==0 goto skip copy %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\config1.db "%~dp0"\config1.db del %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\config1.db del %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\compare\config1_compare.db mklink %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\config1.db "%~dp0"\config1.db mklink %USERPROFILE%\AppData\LocalLow\Google\"Google Japanese Input"\compare\config1_compare.db "%~dp0"\config1.db :skip shutdown -s -t 20
shutdown -s -t 20
という処理によって、シャットダウンが行われます。20というのは秒数のことで、20秒後にシャットダウンが実行されます。
同期が終わるのを待つために20秒に設定していますが、これは10秒や5秒といった短い秒数でも問題ないと思います。私の場合は現在なんとなく10秒にしていますが、環境に合わせてご自由に変更してみてください。
その後、SyncIME_Shutdown.batを右クリックして「送る > デスクトップ(ショートカットを作成)」をクリックし、デスクトップにショートカットを作ります。ファイル名をわかりやすいように好きな名前に変更しても良いですし、そのままでも良いです。
今度からシャットダウンするときは左下のWindowsアイコンを右クリックしてからシャットダウンするのではなく、このバッチファイルのショートカットをダブルクリックしてシャットダウンするようにします。
そうすることで、シャットダウンするたびにGoogle日本語入力の設定内容がDropbox内のディレクトリに同期されるようになります。が、管理者権限がないと一部のコマンドが正常に動作しないかと思いますので、ショートカットアイコンを右クリックして「プロパティ」をクリック、「ショートカット」タブで「詳細設定」ボタンをクリックし、「管理者として実行」にチェックを入れておきます。チェックしたら「OK」でプロパティは閉じてください。
以上です。
まとめ
-
先生、長すぎて何がなんだかよくわかりません
-
そうだね、先生自身も書いてる内によくわからなくなってきたよ!
-
(え…)。結局どうすればいいの?
-
複数のPCを使うと言っても色々な使い方があると思うけど、バッチファイル(SyncIME_Shutdown.bat)でシャットダウンする方法なら、どんな使い方をしてる人にも合うと思うよ。でもシャットダウンは左下のWindowsアイコンからやる通常の手順が癖になってる…なんていう人は、ログオン時にバッチファイル(SyncIME.bat)を実行でも良いかも。その場合は辞書ツールの編集はメインPCのみで行うほうが無難だよ
-
「SyncIME.bat」を管理者権限で実行すれば、僕の好きなタイミングで共有することもできるんだよね?
-
珍しくちゃんと読んでるね。そうだよ、めったに辞書ツールを更新しない場合や自動でバッチファイルが実行されるのが嫌な場合には、毎回手動で実行してもいいね。
-
わーい!
-
上手く動作しない場合、もしくは記事内に誤った内容等があった場合にはコメントで教えてね。
Google日本語入力の辞書共有って出来るのか?とふと思って検索してみたら・・・
公式なやり方じゃないのに、凄く詳しく載せてますねΣ(゚Д゚)スゲー
ありがとうございます。
是非参考にして設定させていただきます。
コメントありがとうございます。もしも何かエラーなどが発生してうまく設定することができなかった場合には、症状などお知らせいただけますと幸いです。
逆に、スムーズに設定できた際にもお知らせいただけると嬉しく思います(^-^)
rsync使えないかな
コメントありがとうございます。今度試してみたいと思います。
どこよりも丁寧な解説、大変わかりやすく助かりました。
この環境プラス、マックでも同期をする方法の解説記事を
是非お願いいたします。
コメントありがとうございます。Macとの同期についてもいつか書いてみようと思っていたのですが、そのままになっておりました。また時間が取れた際に書いてみたいと思います。