拡張のためのアイデア
このコマンドラインのコードは非常に短く、わずか100行ほどしかありません。これは、必要最小限の機能しか実装していないからです。ここでは、コードをより実用的なものにするためのアイデアをいくつか示します。
Unixスタイルのオプション
このコマンドライン構文では、"g i"のような連続する単語を使って特定のコマンドを実装できるようになっています。このコマンドを"g -i"のように指定できれば、よりUnix風になって便利かもしれません。これを実装するには次のような方法があります。
- オプションからダッシュ(-)を取り除き、
g_i()関数を呼び出す。 g()という1つの関数を定義し、オプションを解釈する機能を持たせる。
関数の明確化
このコードでは、アラート(alert)コマンドにal()という名前を付けました。コマンドを「alert」という名前にしたければ、alert()という名前のハンドラを実装することになりますが、これは許されません。JavaScriptには既にalert()という関数があり、これを再定義してはならないからです。
この問題を解決する1つの方法は、bcl_g()やbcl_g_i()のようにハンドラ名に接頭辞を使うことです。この規則は必須にすることも任意にすることもできます。任意にする場合は、bcl_g()が存在するかどうかをコードで確認する必要があります。存在しない場合は、次にg()が存在するかどうかを確認します。
セキュリティ
ブラウザコマンドラインでは、自分で特に定義したハンドラだけでなく、任意のJavaScript関数を呼び出すことができます。ハンドラもしょせんは通常の関数にすぎません。ですから、alert helloコマンドを実行し、警告ウィンドウを開いて「hello」という単語を表示することもできます。しかし、誰でもアクセスできる場所にこのようなスクリプトを置くとトラブルを招きかねません。
関数の明確化のための解決策は、このセキュリティの問題の解決策にもなります。つまり、ハンドラの名前を「bcl_」で始めるように義務付けて、ハンドラだけを呼び出せるように指定することです。もう1つの解決策は、すべてのハンドラ関数を配列またはオブジェクト内に閉じこめて、システムがその配列/オブジェクト内でのみハンドラを検索できるようにすることです。ただし、どちらの解決策も完全ではありません。ハッカーがブラウザのバグやその他の脆弱性を悪用し、「bcl_」で始まる関数を定義したり、ハンドラが含まれるオブジェクトを変更したりするJavaScriptコードを作成する可能性があるからです。
個別のファイルへのコマンドの分離
ブラウザコマンドラインの便利さを実感すると、おそらく役に立つコマンドハンドラをたくさんため込むようになるでしょう。それらすべてをコマンドラインコードと共に同じファイルに保存すると、混乱を招くおそれがあります。例えばハンドラを機能別にまとめて、個別のファイルに保存すると便利です。ただし、非同期読み込みの問題のせいで、JavaScriptコードの読み込みに注意を要することがあります。そのため、コードの読み込みにAjaxの手法やAjaxフレームワークを使うことを検討してください。
解析の改良
パーサーは、コマンドをスペースで分割して単語に分けるだけの非常に単純な仕組みです。しかし、次のコマンドを見てください。
% al "hello world!"
このコマンドは正しく機能しません。本来は警告ボックスが開いて「hello world!」という単語が表示されるはずですが、実際には「hello」という単語しか表示されません(図4を参照)。
パーサーはこのコマンドを次のような単語に分割します。
al "hello world!"
引数は両方ともal()に渡されますが、al()関数は最初の引数しか認識しないため、最初の引数しか表示されません。
この問題は、引用符を認識する、より複雑なパーサーを使うことで解決できます。ただし今度は、引用符をエスケープする構文が必要になります。完全なコマンドラインパーサーを実現するにはさまざまな要素が必要になります。必要な要素を自由に追加してください。
スクリプト言語のためのスクリプト言語
コマンドラインが役に立つ理由はいくつも挙げられます。新しいコードを実行する場合は、ハンドラからコードを呼び出す方が、コードを呼び出すGUIを作成するよりもはるかに簡単です。コマンドラインは、本物のインターフェイスを実装する前に新しいコードを試してみる絶好の方法です。また、コマンドラインはマウスを必要以上に使いたくないせっかちな人にも役立ちます。
今回のコマンドラインの実装は教育用にも適しています。いくつかの基本的なDHTML/JavaScriptの手法に加え、自身のコードを調べて関数を動的に呼び出すJavaScriptプログラムの機能も示しているからです。
ブラウザコマンドラインは、ある意味でスクリプト言語のためのスクリプト言語と言えます。

