2015/03/28

google-ime-skkをWindowsのサービスに登録してeskk.vimで使う

google-ime-skkをeskk.vimで利用するようにした際のメモ。


google-ime-skkを動かすにはRubyが必要です。
私がインストールしたRubyは下記サイトから取得したRuby 1.9.3-p551です。
http://rubyinstaller.org/downloads/

最初は上記のサイトにあるRuby 2.2.1を使用したのですが、サービスの起動がいくらやってもうまくできませんでした。
発生したエラーは下記「(5)余談」の通りです。

Ruby 1.9.3-p551に変えてみたところあっさりとうまくいきました。


google-ime-skkをサービスに登録する際には下記のサイトを参考にしました。
google-ime-skkのWindowsサービス化 - 海色日報
Rubyのスクリプトをサービスとして常駐させる答えを知りたい | 答えを知りたい


(1)Ruby 1.9.3-p551のインストール
http://rubyinstaller.org/downloads/からRuby 1.9.3-p551をダウンロードしてインストールします。
途中、「Rubyの実行ファイルへ環境変数PATHを設定する」と「.rbと.rbwファイルをRubyに関連付ける」のチェックボックスをオンにしました。


以下ではコマンドプロンプトは管理者として実行しています。


(2)google-ime-skkのインストール
コマンドプロンプトから下記のコマンドを実行します。
C:\WINDOWS\syste>gem install google-ime-skk



(3)google-ime-skkをWindowsのサービスとして登録する
コマンドプロンプトから下記のコマンドを実行します。
C:\WINDOWS\system32>gem install win32-service

次の内容のRubyスクリプトを作成します。
私はC:\Users\xxx\Documents\Apps\google-ime-skk.rbを作成しました。
#!C:/Ruby193/bin/ruby.exe -Ku
#
# This file was generated by RubyGems.
#
# The application 'google-ime-skk' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'rubygems'
require 'win32/daemon'
include Win32

class Daemon
  def service_main
 version = ">= 0"

 gem 'google-ime-skk', version
 load Gem.bin_path('google-ime-skk', 'google-ime-skk', version)
  end

  def service_stop
    exit!
  end
end

Daemon.mainloop

コマンドプロンプトから下記のコマンドを実行してサービスに登録し実行します。
実行した後STATEがRUNNINGになっていることを確認します。
C:\WINDOWS\system32>sc create google-ime-skk 
    binPath="C:\Ruby193\bin\ruby.exe 
    C: \Users\xxx\Documents\Apps\google-ime-skk.rb" type=own start=auto
(実際は1行)
C:\WINDOWS\system32>sc start google-ime-skk

SERVICE_NAME: google-ime-skk
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 2  START_PENDING
                                (NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x7d0
        PID                : 3864
        FLAGS              :
C:\WINDOWS\system32>sc query google-ime-skk

SERVICE_NAME: google-ime-skk
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 4  RUNNING
                                (STOPPABLE, PAUSABLE, ACCEPTS_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0



(4)eskk.vimでgoogle-ime-skkを利用する
vimrcに下記の内容を記述しました。
 let g:eskk#enable_completion = 1
 let g:eskk#server = {
 \   'host': 'localhost',
 \   'port': 55100,
 \   'type': 'notfound',
 \}


(5)余談
ちなみにRuby 2.2.1だと下記のようなエラーになりました。
C:\WINDOWS\system32>sc create google-ime-skk 
   binPath="C:\Ruby22-x64\bin\ruby.exe
   C:\Users\xxx\Documents\Apps\google-ime-skk.rb" type=own start=auto
(実際は1行)

[SC] CreateService SUCCESS

C:\WINDOWS\system32>sc start google-ime-skk
[SC] StartService FAILED 1053:

そのサービスは指定時間内に開始要求または制御要求に応答しませんでした。

試しに直接スクリプトを実行すると下記のようなエラーになりました。
C:\WINDOWS\system32>ruby.exe C:\Users\xxx\Documents\Apps\google-ime-skk.rb

C:/Ruby22-x64/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- ffi_c (LoadError)
 from C:/Ruby22-x64/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
 from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/ffi-1.9.8-x64-mingw32/lib/ffi.rb:18:in `rescue in '
 from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/ffi-1.9.8-x64-mingw32/lib/ffi.rb:3:in `'
 from C:/Ruby22-x64/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
 from C:/Ruby22-x64/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
 from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/win32-service-0.8.6/lib/win32/windows/helper.rb:1:in `'
 from C:/Ruby22-x64/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
 from C:/Ruby22-x64/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
 from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/win32-service-0.8.6/lib/win32/daemon.rb:1:in `'
 from C:/Ruby22-x64/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:128:in `require'
 from C:/Ruby22-x64/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:128:in `rescue in require'
 from C:/Ruby22-x64/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:39:in `require'
 from C:/Users/xxx/Documents/Apps/google-ime-skk.rb:10:in `



なお、うちのCygwin環境ではVimをLANG=C /usr/local/bin/vimというようにLANGをja_JP.UTF-8から変えないとうまく漢字変換できません。large_dictionaryで設定した辞書ファイルをうまく読み込めていない感じです。

0 件のコメント: