twinBASICの統合環境(IDE)による開発

# はじめに
これは、[Visual Basic Advent Calendar 2022](https://qiita.com/advent-calendar/2022/vb)の13日目の記事となります。

昨年、VB6.0の100%互換性 [twinBASIC](https://twinbasic.com/)を紹介しました。

https://qiita.com/yaju/items/6ed4a4c3fcd7b0c24cab

それから1年経ち、VSCodeを使用しない専用の統合環境(IDE)のよるGUIを使用してフォーム作成が可能になっています。
エディタ部分については、VSCodeのソースをもとにウェブブラウザー上で動くようした[Monaco Editor](https://microsoft.github.io/monaco-editor/index.html)で開発されています。


# ベータ版
下記サイトから、2022/12/13時点の最新版「twinBASIC BETA 201」を今回紹介します。

https://github.com/twinbasic/twinbasic/releases

# 起動画面
twinBASIC_IDE_BETA_201.zipを展開して、C:¥Toolフォルダに入れました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14053/3f29e6d6-3c47-3632-3dbc-523e1c89a28a.png)
twinBASIC.exeをダブルクリックして起動します。

NewタブとSampleタブとRecentタブが表示されます。

## Newタブ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14053/1692f99b-b173-f162-6b55-da1018a3f1f4.png)

* Standard EXE
* ActiveX Control
* ActiveX EXE
* Standard DLL(non-ActiveX)
* Standard EXE(Console App)
* Import from VBP...
* Import from folder...

## Sampleタブ
今回はSampleタブを選択して、先頭の「Sample 0. WebView2　Example」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14053/c8ae351a-db90-7f49-6993-a49337c0cf9b.png)

## 初期画面
フォームデザイン画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14053/2bdde0ca-5bca-8e1a-31b4-b36652a89042.png)

# 実行画面
そのまま実行してみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14053/b0f29a44-06e7-4c76-85a5-a42e5dfa66a4.png)

## Exsample 1
「Web Browser」では、WebView2コントロールを使用しています。
URLは「www.yahoo.co.jp」に変更して表示しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14053/664a6368-a00e-01d2-02d2-b0dec1c93c8f.png)

## Exsample 2
「virtual Folder Mapping」では、WebView2コントロールを使用して、クリックイベントを奪ってメッセージボックスを表示したり、JavaScriptを実行したりすることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14053/4935164e-4dad-aeee-044b-54f3d72b981c.png)

## Exsample 3
「Monaco and multiple WebView」では、VSCodeのソースをもとにウェブブラウザー上で動くようしたMonaco Editorでソースコードを表示しつつ実行結果を別パネルで表示しています。両方ともWebView2コントロールですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14053/ea9d5408-9111-b72d-81fd-3fc44daa1b69.png)

# フォームデザイン画面
Exsample 1の「Web Browser」のフォームデザイン画面になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14053/d27ab9f2-266c-ce66-45a4-5ee95d5a3ebf.png)

## ツールボックス
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14053/8fc7ba10-6f5a-8b76-de43-6152d8ba7a21.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14053/b2990214-aac3-a6db-d699-ea659e13a9a4.png)
右側画像の「[Visual Basic 6.0 入門講座 ボタンを作る](http://rucio.o.oo7.jp/main/nyumon/nyumon2.htm)」にあったコントロールと比較しても揃っています。
ProgressBarとSharpは追加されていますね。WEBVIEWコントロールもパッケージとして使えるようになっています。

## プロパティ
WebViewコントロールのプロパティになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14053/e3029272-d2e2-ae4e-8c71-7f20e0172810.png)

# VBScriptデバッグ
前記事では、VSCode(twinBASIC拡張)でVBScriptのデバッグを確認しました。

https://qiita.com/yaju/items/85acc80dcc9a08b1bc0c

今回は、twinBASICの統合環境で同じことをしてみます。

New　Projectで「Standard EXE(Console App)」を選択しました。

今回はクラスファイルを追加して「WScriptObj」を作成してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14053/043383c6-12a7-7970-2c72-d95174041b03.png)

## ソースコード 
```vb:WScript.twin
Class WScriptObj

    Public Function Echo(ByVal message)
        MsgBox message
    End Function

    Public Sub Sleep(ByVal time)
        Dim tempDate As Date
        time = time / 1000
        tempDate = DateAdd("s", time, Now)
        Do
            DoEvents
        Loop While Now < tempDate
    End Sub

    Public Sub Quit()
        End
    End Sub

End Class
```

```vb:MainModule.twin
Module MainModule
    
	Public Sub Main()
    
        Dim a
        Dim b
        Dim c
        a = 1
        b = 2
        c = a + b
        WScript.Echo c

        Dim WScript As New WScriptObj
        'VBS特有の機能をVBAで使用する
        Dim RetStr, regEx, Match, Matches   ' 変数を作成します。
        Set regEx = CreateObject("VBScript.RegExp")   ' 正規表現を作成します。
        regEx.Pattern = "aiu"   ' パターンを設定します。
        regEx.IgnoreCase = True   ' 大文字と小文字を区別しないように設定します。
        regEx.Global = True   ' 文字列全体を検索するように設定します。
        Set Matches = regEx.Execute("123aiueo")   ' 検索を実行します。
        For Each Match In Matches   ' Matches コレクションに対して繰り返し処理を行います。
           RetStr = RetStr & "一致する文字列が見つかった位置は、"
           RetStr = RetStr & Match.FirstIndex & " です。一致した文字列は、"
           RetStr = RetStr & Match.Value & " です。" & vbCrLf
        Next
        MsgBox RetStr               '正規表現結果を出力する
        WScript.Sleep 3000          ' 3秒待機
        WScript.Echo "テスト"
        WScript.Quit                ' 終了する
        MsgBox "ここは実行されない"
    End Sub

End Module
```

## デバッグ
ブレークポイントで止まるので、ウォッチの値などが見てデバッグすることが出来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14053/dabfd52b-1797-e925-7513-2a51406d2770.png)

## 感想
VSCodeの他の拡張機能は使えなくなりますが、twinBASICの統合環境の方がインストールも簡単だしファイルも分割出来るし便利です。

# 最後に
今更、VB6.0と思うかも知れませんが、VBScriptのデバッグ用途としても使えるしExcelとかのActiveXコントロールとかの開発用途としても使えます。
twinBASICでは、Visual Basic 6.0ランタイムが必要なくビルドしてネイティブEXE(win32 or win64)を作成することも出来ます。
いろいろ可能性はあると思います。