Google日本語入力の辞書ツールを複数台のPCで同期(共有)する方法

2017.2.23 Inoue 作業効率化

先日、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.dbuser_dictionary.dbの2つを、Dropbox内に任意のディレクトリを作ってその中にコピーしておきます。(例:C:\Users\inoue\Dropbox\Sync\GoogleIME
ディレクトリ「Google Japanese Input」の中身

Dropbox側のディレクトリにコピーする
config1.dbに関しては、もし無ければスルーしてください。

そして元々ローカルにあったディレクトリGoogle Japanese Input内にあるファイルconfig1.dbuser_dictionary.dbをリネームします。名前は何でも良いですが元々のファイルだとわかるように「config1_original.db」と「user_dictionary_original.db」のような感じにしておけば良いかと思います。Dropboxにコピーしているので別に削除しても良いファイルではありますが、念のためリネームという形でバックアップとして取っておいたほうが良いでしょう。

ファイルをリネーム/削除できない場合は、IMEをMicrosoft IMEなどに変更しておいて(変更方法はWindows10でIMEを変更する方法にて解説しています)、タスクマネージャで「Google日本語入力キャッシュサービス」「Google日本語入力コンバーター」「Google日本語入力レンダラー」の3つを強制終了させます。すると削除できるかと思います。

念のため強制終了の方法を記載しておきますと、タスクマネージャをCtrl + Shift + Escで呼び出し、以下の項目を1つずつ選択して「タスクの終了」をクリックし順番に終了させていきます。
タスクマネージャーでGoogle日本語入力関連のプロセスを強制終了させる

その後はコマンドプロンプト(管理者権限)を開きます。
※管理者権限でのコマンドプロンプトは、左下の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によってはCtrlVで貼り付けられない場合があったような気がしますが、その場合はコマンドプロンプト上で右クリックをすると「貼り付け」を選択することができたと思います。
コマンドプロンプトでシンボリックリンクを貼る方法

これで、ローカルのGoogle Japanese Input内にシンボリックリンクが生成されました。ファイルの種類が元々はData Base Fileになっていたものが.symlinkになっているかと思います。
ファイルの種類が「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内に保存し、定期的にこのバッチファイルを管理者権限で実行してあげます。
コマンドをバッチファイル(.bat)として保存する

バッチファイルを管理者として実行する方法

何をしているかというと、最初の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で共有しているので、どちらのマシンによりバッチファイル(またはシェル)が実行されたのかを識別できるようにしています。
GoogleIMEディレクトリにバックアップファイルが保存される

コピーの後は、ローカルのuser_dictionary.dbuser_dictionary_compare.dbdelで削除し、mklinkでシンボリックリンクの貼り直し、という流れです。

2回目のFCでは、ファイルがuser_dictionary.dbからconfig1.dbに変わっただけで同じ処理をしています。

定期処理による同期

ここまでの作業により、バッチファイルを管理者権限で実行することでシンボリックリンクの貼り直しを簡単に行うことができるようになりました。

  • 辞書ツールを更新するたびに毎回このバッチファイルを実行しなきゃいけないの?

  • そうだね、毎回するのは少し面倒だね。なのでこれからバッチファイルを定期的に実行して、自動的に同期させてあげる設定をするよ。

  • わーい!

タスクスケジューラでログオン時にバッチファイルを実行

IMEを更新するたびに手動でバッチファイルを実行するのは面倒…ということで、タスクスケジューラーに登録したいと思います。

タイミングは、「ログオン時」「1時間ごと」「指定時刻」など色々考えられますが、私は「ログオン時」にしています。

Windows10の場合は画面左下の検索窓に「タスク」と入力(Win8であれば左下のWindowsアイコンを右クリックして「検索」をクリックし、検索窓に「タスク」と入力)して検索します。「タスクスケジューラ」または「タスクのスケジュール」という項目が表示されるため、それをクリックします。
タスクスケジューラを開く方法

するとタスクスケジューラが立ち上がるので、右側にある「タスクの作成」をクリック。
バッチファイルを実行するためのタスクを作成する画面

タスクの「名前」に「SyncIME」と入力し、「説明」に「Google日本語入力の辞書ツール共有タスク」と入力し、「最上位の特権で実行する」にチェックを入れます。
グーグル日本語入力に関する情報を入力

次に「トリガー」タブに移動し、「新規」をクリックします。
タスクを実行するタイミング(トリガー)の設定画面を開く

「タスクの開始」を「ログオン時」にして「OK」をクリックします。
トリガーを「ログオン時」に設定する

次に「操作」タブに移動し、「新規」をクリックします。
実行内容を設定する画面を開く

「参照」をクリックした後、DropboxのGoogleIMEディレクトリ内に保存しているバッチファイル「SyncIME.bat」を選択して「開く」をクリックします。
プログラム(バッチファイル)の保存場所を開く

Google日本語入力の辞書ツールを共有(同期)するバッチファイルを選択

「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」を管理者権限で実行すれば、僕の好きなタイミングで共有することもできるんだよね?

  • 珍しくちゃんと読んでるね。そうだよ、めったに辞書ツールを更新しない場合や自動でバッチファイルが実行されるのが嫌な場合には、毎回手動で実行してもいいね。

  • わーい!


  • 上手く動作しない場合、もしくは記事内に誤った内容等があった場合にはコメントで教えてね。


制作実績を見る 無料見積・お問い合わせ


新着記事一覧

Facebookでブログの更新情報を受け取る

コメント一覧

  1. オーフェン

    Google日本語入力の辞書共有って出来るのか?とふと思って検索してみたら・・・
    公式なやり方じゃないのに、凄く詳しく載せてますねΣ(゚Д゚)スゲー
    ありがとうございます。
    是非参考にして設定させていただきます。

    • Inoue

      コメントありがとうございます。もしも何かエラーなどが発生してうまく設定することができなかった場合には、症状などお知らせいただけますと幸いです。

      逆に、スムーズに設定できた際にもお知らせいただけると嬉しく思います(^-^)

  2. けめ

    rsync使えないかな

    • Inoue

      コメントありがとうございます。今度試してみたいと思います。

コメントを書き込む

スクロールしてページトップへ戻る

Loading...