福野泰介の一日一創 - create every day

マイクロソフトのWebサーバーは、1996年、ASP(Active Server Pages)という技術からスタート。 Windows Script Host として、VBScriptというスクリプト言語でサーバーアプリケーションが作れます。

なんと、VBScriptの互換でマルチプラットフォームな「OpenVBS」がナチュラルスタイルから登場!
さすが、ZOZOを支える福井の企業!
ZOZO / NaturalStyle ~ZOZOを作っています~ | Natural Style

早速動かしてみます。

cat > test.obs WScript.ECho "HELLO!"

そして、実行

penb test.obs HELLO!

なんと、ASP風も動きます。

cat > webserver.obs osp = new OpenASP osp()

webサーバーアプリケーション用のコードはこれだけ

penb webserver.obs bindto: 0.0.0.0:8000. Press ENTER to stop server.

http://localhost:8000/test.osp を開けば、wwwroot/test.osp がサーバーで実行され、ブラウザで表示されます。
WebSocketでつながりサーバーとのリアルタイム通信もできる test.osk のシンプルなコードがすごい!
Windows, Mac, Linux で動きます!

ASPはC++で簡単に拡張できるのがポイント。COMコンポーネントを作って、CreateObjectで生成する仕組みもちゃんとあります!

懐かしついでに、かつてよく作ったアクセスカウンターをOpenVBS用COMコンポーネントとして作ってみました。

COM-COUNTER (src on GitHub)

C++との接続部分の COUNTER.cpp の一部はこんな感じ。必要な部品はサクッとつくって、BASICをグルー言語、のりのように使うのもいいですね。 久々に使った、iostreamとオーバーライドされたアロー演算子!

HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId){ if (_wcsicmp(*rgszNames, L"Inc") == 0){ *rgDispId = 0; } else if(_wcsicmp(*rgszNames, L"Dec") == 0){ *rgDispId = 1; } else if(_wcsicmp(*rgszNames, L"Get") == 0){ *rgDispId = 2; } else if(_wcsicmp(*rgszNames, L"Reset") == 0){ *rgDispId = 3; } else { wprintf(L"###%s: Implement here '%s' line %d. (%ls)\n", __func__, __FILE__, __LINE__, *rgszNames); return DISP_E_MEMBERNOTFOUND; } return S_OK; } HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) { if (dispIdMember == 0) { n++; save(); } else if(dispIdMember == 1) { n--; save(); } else if (dispIdMember == 2){ pVarResult->vt = VT_I8; pVarResult->llVal = n; } else if (dispIdMember == 3){ n = 0; save(); } else { return DISP_E_MEMBERNOTFOUND; } return S_OK; }

VBScriptは、MSXでも使われた Microsoft BASIC、Windows用に広く使われる Visual Basic の血を受け継ぐBASIC系言語。 BASICならいける!という方、サーバー側プログラムにもチャレンジしやすい環境が誕生しそうです!

WScript.Echo という文字が懐かしく、昔書いたVBScriptのプログラム探してみましたが見つからず。合わせて使えた ほぼJavaScriptな JScript の方を使っていたようです。 後のHTML5となるマイクロソフト提唱 dynamic HTML と後にJavaScriptに取って代わられた Java Appletを使って、サーバーとのリアルタイム通信であれこれ遊んでいた90年代、webの世界は広がりましたが、ベース技術は変わってませんね。

ソースコードがコンパクトかつCC BYのオープンライセンスなので、プログラミング言語の学習、web技術の学習、オレオレ言語、オレオレプラットフォームづくり、C++を使った限界までパフォーマンスを引き出したい人にもオススメです!

Let's start OpenVBS!

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY 福野泰介 - Taisuke Fukuno / @taisukef / アイコン画像 / プロフィール画像