misima Microsoft Word クライアント

これまで懸案であった misima Microsoft Word クライアントが完成した(大げさ)。Microsoft Word 2003 で文書を作成しながら,旧仮名遣い・旧字体に変換したいテキスト領域を選択して変換指示をすると,ネットワーク越しに私のサイトの misima SOAP Web Service サーバに接続し,一方サーバは対象のテキストを旧仮名・旧字に変換して Word に送り返し,受け取った Word は選択テキスト領域を変換結果で置き換えるというもの。VBA (Visual Basic for Applications) コードと変換メニューとからなる Word 文書テンプレート misimaTemplate.dot が成った。

これを含む misima-2.3i.tar.gz パッケージ,misimaSoapService-2.3i.zip クライアントパッケージを公開するとともに,インストール方法/使い方を記した『Microsoft Word から『misima 旧仮名遣い・旧字変換』を使う』という記事もサイトに追加した。ドキュメントにも詳細な説明を追加した。

先日の試み,すなわち Perl Win32::Clipboard 方式だと Unicode が化けてしまったので,別の方式を考えていた。結局,Microsoft Office XP Web Services Toolkit 2.0 を利用することにした。オライリー本『Word Hacks』にある Google WebService の例を参考にした。Toolkit を Microsoft サイトからダウンロードしてインストールし,misima SOAP サーバの WSDL を取得して SOAP スタブクラスを自動生成した。そのクラスとメソッドを利用して VBA Word マクロを作成したら,あっと驚くくらい簡単にクライアントができてしまった。

基本的には,次のようなごく短い VBA マクロコードを追加するだけで,選択範囲文字列の misima 変換が実現できた。実際はエラー処理,パラメータ処理などの付随コードがあるわけだけど。clsws_misimaSoapConnectorSe のインスタンスを生成して,wsm_misimaConvert メソッドで変換要求を行うのがコードの核心部である。

Sub misimaWebServiceConvert()
    ' 変換結果
    Dim sConvertResult As String
    ' 第一引数: misima 変換オプション
    Dim sArgument As String
    ' 第二引数: misima 変換対象テキスト(Unicode)
    Dim sTargetText As String
    ' misima SOAP サービス・インスタンスの生成
    Dim misimaWebService As New clsws_misimaSoapConnectorSe
    ' misima 変換オプションのセット
    sArgument = "-kyitq -s c"
    ' 選択範囲の取得
    sTargetText = Selection.Text
    ' SOAP misima 変換サーバ呼び出し
    sConvertResult = misimaWebService.wsm_misimaConvert( _
    sArgument, sTargetText)
    ' 変換結果で選択文字列を置換
    Selection.Text = sConvertResult
End Sub

クリップボードに選択文字列を書き出して,Java アプリでそれを読み取って misima SOAP サーバと通信し,結果を再度クリップボードにストアして,... などと考えていたのが馬鹿らしくなってしまった。やはり正攻法を採るべきなのだ。Excel 用を作るのも雑作ないはずである。

Word 2003 以降でないと動作しないと思う。今回は Word 用ということもあり,TeX 変換機能は入れなかった。Mac OS 用の Word で使えるかは分らない。変換前後のスクリーンショットを掲載しておく。

wordpre.png
misima Word 変換前
 
wordpost.png
misima Word 変換後
 

これまで UNIX Emacs,TeX ユーザ向けにしこしこやってきたが,矛盾を感じてもいた。歴史的仮名遣い・旧字に関心をもつひとたちは UNIX のシェル,コマンドライン,Emacs,TeX にはほぼ無縁の Windows か Mac ユーザであり,一方 UNIX ユーザはたいてい理科であって,歴史的仮名遣い・旧字の門外漢であろう。それでも少数派のための渋いソフトを目指してやってきたのだ。これで Windows ユーザも使いやすくなったはずである。

Windows Office 用ソフトはシェアウェアが多いので,こいつもケチなシェアウェアにしてやろうかとも思ったが,つまらない色気を出すのはやめにして,フリーソフトウェア精神,要するに無責任に徹することにした。シェアウェアなんかにしてユーザから金をとりはじめた瞬間に,自分の作ったソフトの奴隷になってしまう。バグが見つかれば直さなければ許されないし,疲れてもサポートし続けなければならない。そんなの御免こうむる。

それにしても,この Word クライアントを作るために,使いもしない Office 2003 アップグレードパッケージを購入しただけでなく,Office InfoPath やら Web サービスやらの書籍をたくさん研究し,金と労力と時間とを消費した。得られたものがどれくらいかは疑問ではある。この歳になって,誰のために,何のためにやっているのかも分らない。仕事ではプログラム・コードを一行も書かないのに。旧仮名遣いにしろ,旧字にしろ,私にとってそれを自ら使うのは日常生活では全く無縁であって,実はどうでもよいことである (旧字・旧仮名遣いの信奉者で,misima を使ってくれる方,ゴメンナサイ)。アホらしくなったらすぐにでも手を引いてしまうかも知れない。

Java や Web フレームワーク,Perl,自然言語処理を実作で勉強するという職業意識もないわけではないが,要するに道楽以外の何ものでもない。でもやっと,SOAP や XML の意義が身をもって理解できるようになったことだけが私の本業における収穫である。

Word Hacks―プロが教える文書活用テクニック
アンドリュー・サビカス Andrew Savikas, 日向 あおい[訳]
オライリージャパン (2005/07)

[ 2014.03.14 付記 ]
最近の Web Service 事情では SOAP よりも REST が一般的になった。Micorsoft はその後 SOAP Toolkit をサポートしなくなってしまった。よって,いまは MSXML2.XMLHTTP で RESTful Web Service にアクセスするほうがよいと思う。misima RESTful Web Service のための Microsoft Word クライアントについて「misima RESTful Web Service Microsoft Word クライアント」に記したので,そちらも参照いただきたい。