http://ceo.sourcelab.jp/archives/97

ちょうどRubricksのユーザやグループの読み仮名の仕様を見直している際にこの記事がホッテントリにあったので興味を持った。着眼点はとても素晴らしい。ギミックはありがちと謙遜されているが、自分は今までWEBアプリでは見たことがなかった。しかし、導入も視野に入れてコードを読んでみたらこれが実にいただけない。

1. 編集候補の切換時、平仮名を含む候補が出る度にカナが追加されていく

2. 名前用、カナ用のテキストボックスを各1つしか指定できないため複数設置が不可能

3. 設定のためにJSファイルを編集しなければならない

4. ライセンスが記述されていないので開発者としては使いにくい

5. グローバル領域の関数・変数で構成されているので変数名衝突の可能性が高い

6. タイマー流しっぱなし(その割にsetIntervalじゃなくてsetTimeout)

7. 'name'と'ruby'というDOM-IDがハードコーディングされている (バグなのですぐ修正されると思う)

番号が少ないほど導入の障壁になると個人的には感じる。少なくとも4以下はどうにかしたい。というわけで、これらを解消するものをスクラッチで書いてみた。

▼ ソースコード

autoKana.js

▼ サンプルサイト

AutoKanaサンプル

▼ ライセンス

MIT

(近いうちにSpinelzに格納)

▼ 動作確認済の環境

WindowsXP-Fx3

WindowsXP-IE7

▼ 使用法

1. 任意の場所で「prototype.js」及び「autoKana.js」を読み込む

2. new AutoKana(name_id, kana_id, options);

name_id : 名前を入力するテキストボックスのID

kana_id : かなを入力するテキストボックスのID

options : オプション

katakana => true/false (カタカナで表示する/ひらがなで表示する)

toggle => true/false (かな補完機能の切換を可能にする/しない) ※ 2008/07/04追加

▼ HTMLコード例



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"

"http://www.w3.org/TR/html4/strict.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>AutoKanaサンプル</title>

<script src="./javascripts/prototype.js" type="text/javascript"></script>

<script src="./javascripts/autoKana.js" type="text/javascript"></script>

<style type="text/css">

dl dt {

clear: left;

float: left;

width: 5em;

}

dl dd {

margin: 0 0 0 5em;

}

</style>

</head>

<body>

<form id="auto_kana_form_1" method="POST">

<dl>

<dt>名前</dt>

<dd><input type="text" id="auto_kana_name_1" size="48" /></dd>

<dt>かな</dt>

<dd><input type="text" id="auto_kana_kana_1" size="48" /></dd>

</dl>

</form>

<form id="auto_kana_form_2" method="POST">

<dl>

<dt>名前</dt>

<dd><input type="text" id="auto_kana_name_2" size="48" /></dd>

<dt>カナ</dt>

<dd><input type="text" id="auto_kana_kana_2" size="48" /></dd>

</dl>

</form>

<form id="auto_kana_form_3" method="POST">

<dl>

<dt>名前</dt>

<dd><input type="text" id="auto_kana_name_3" size="48" /><input type="checkbox" id="auto_kana_toggle_3" onclick="auto_kana_3.toggle(event);" checked="checked" /><label for="auto_kana_toggle_3">On/Offのスイッチを直接記述したい場合</label></dd>

<dt>かな</dt>

<dd><input type="text" id="auto_kana_kana_3" size="48" /></dd>

</dl>

</form>

<script type="text/javascript">

var auto_kana_1 = new AutoKana('auto_kana_name_1', 'auto_kana_kana_1');

var auto_kana_2 = new AutoKana('auto_kana_name_2', 'auto_kana_kana_2', {katakana:true, toggle:false});

var auto_kana_3 = new AutoKana('auto_kana_name_3', 'auto_kana_kana_3', {toggle:false});

</script>

</body>

</html>

▼ 残課題

1. 一発変換できない名前の場合、逆に入力の邪魔になる可能性がある

⇒ 補完機能をOn/Off可能にしてみた ※ 2008/07/04追加

2. オートコンプリートでの入力に対応できていない

3. ロジックがまだまだ不完全、というかすっきりしてない

▼ 一部修正

夜のDiscoveryにて指摘頂いた件に対応。prototype-1.6だとIE6で動かなかった模様。※ 2008/08/13追加

▼ 関係各所

・Kuwa.net

2005/05/08 autoRuby.jsの原型を公開

・小柄な人

2005/10/27 「Kuwa.net」さんのコードを改良したものを公開

・ホームページ制作・運営のヒント

2008/07/01 「小柄な人」さん等を参考にautoRuby.jsを公開

・a_horuruの適当なJSジャンクプログラム日記

2008/07/02 autoRuby.jsを改良したものを公開

2008/07/04 autoRuby.jsに形態素解析を合わせたものを公開

2008/07/11 形態素解析＋人名DBで類似の機能を実現するものを公開

・memo wiki +

2008/07/03 autoKana.jsをjQuery版にしたものを公開

・tech.kayac.com

2008/07/07 イベントドリブンな読み仮名自動入力JSを公開