なぜ今なのか
マイクロソフトは2008年4月8日にVisual Basic 6開発環境のサポートを終了しました。ランタイムは今もWindowsに含まれ、Windows 11を含め、それを収録するWindowsのライフサイクル期間中はサポートされますが、32ビットのコンポーネントとしてのみ、かつ深刻な不具合と重大なセキュリティ問題に限られます。MSCOMCTL.OCX、MSFLXGRD.OCX、そしてほぼすべてのサードパーティー製OCXのように、Windowsに含まれないコントロールはアプリと一緒にインストールする必要があり、マイクロソフトのサポート対象外です。
実際に難しいのは人とツールの面です。マイクロソフトは64ビット版Windowsでの開発環境をサポートしておらず、VB6がわかる開発者は年々減り、パソコンを入れ替えるたびにコンポーネントを手で登録するインストール作業が発生します。
- Visual Basic 6の開発環境マイクロソフトのサポート終了
- Windows 10マイクロソフトのサポート終了
移行する内容
自身のコードの外で依存しているものも含めた、プログラム全体。
フォームとコントロール
テキストボックス、コンボボックス、グリッド、タブ、コントロール配列を持つウィンドウ。MSFlexGrid、ListView、TreeViewも含みます。使い慣れた配置のままのウェブページになります。
モジュールとクラスのロジック
.basや.clsのファイル、フォームのイベントに散らばった計算、チェック、手続き。テストで検証されたサーバー側のサービスに移します。
データアクセス
Access、SQL Server、Oracleなどのデータベースを扱うDAO、RDO、ADOのコード。文字列をつなげて組み立てたSQLも含みます。データはSQL ServerやMySQLへ移すか、他のシステムが依存している場合はそのまま残します。
レポートと印刷
Crystal Reports、DataReport、そして
Printerオブジェクトで1行ずつ描いている印刷。どれも同じ内容のPDF文書になります。COMコンポーネントとDLL
社内で作ったActiveX DLL、サードパーティー製コンポーネント、
DeclareによるWindows APIの呼び出し。一つずつ特定し、置き換えるか、書き直すか、不要になるかを判断します。ファイル、設定、機器
INIファイルやレジストリの設定、テキストファイルからの取り込み、MSCommによる計量器、ラベルプリンター、シリアル機器との接続。そのうちどれが今後もローカルへのインストールを必要とするかを確認します。
ウェブ版の画面
- ダッシュボード
- カレンダー
- 患者
- 治療
- レポート
| 時刻 | Dr Valdrin | Dr Sato | 歯科衛生士 |
|---|---|---|---|
| 08:30 | L. Moreau - 検診 | A. Bianchi - クリーニング | |
| 09:00 | K. Novak - 充填 | ||
| 09:30 | S. Haddad - クラウン | J. Lindqvist - クリーニング | |
| 10:00 | P. Ortega - 根管治療 | ||
| 10:30 | E. Kowalski - 検診 | ||
| 11:00 | N. Ferri - 抜歯 | R. Dimitrov - クリーニング | |
| 11:30 | T. Brennan - 充填 | ||
| 12:00 | C. Duval - 検診 | H. Ito - クリーニング |
受付のパソコンで動くVB6の予約表がこう見えるという例と、同じ週をブラウザで表示したもの。
つまみをドラッグするか、矢印キーを使ってください。
各部分の移行先
- VB6では:フォーム(.frm)とそのイベント
- ウェブアプリでは:ウェブページ(ロジックはサーバー側)
- VB6では:モジュール(.bas)とクラス(.cls)
- ウェブアプリでは:自動テストで検証されたC#のサービス
- VB6では:パソコンごとに登録されたOCXコントロール
- ウェブアプリでは:標準的なウェブ部品(インストール不要)
- VB6では:ADOやDAOのレコードセット
- ウェブアプリでは:SQL ServerやMySQLに対するパラメーター化クエリ
- VB6では:Crystal ReportsやDataReport
- ウェブアプリでは:サーバーが作成するPDF文書
- VB6では:端末ごとのインストーラー
- ウェブアプリでは:ブラウザで開く一つのアドレス
移行の進め方
48時間以内の診断
インストール済みのプログラムとデータベース、お手元にあればソースコード(.vbp、.frm、.bas、.cls)をお送りください。48時間以内に書面の診断書でお答えします。現在のプログラムの働き、リスクのありか、ウェブ版の構成、パイロットモジュールの固定価格、残りの部分の見積もりです。無料で、何の義務も生じません。
パイロットモジュール
実データのコピーを使って、アプリの一部分、通常はいちばんよく使われる部分を作ります。残りを決める前に、社員の方に日々の業務で使っていただきます。
同じデータで、同じ結果
価格、合計、作成される書類など、実際のケースについてVB6プログラムが出す結果を記録し、新しいアプリをその結果と照合します。見つけた業務ルールはすべて自動テストにもし、その後のリリースのたびに改めて確認します。すべての確認結果を記した報告書をお渡しします。
30日間の並行稼働
アプリ全体が完成したら、VB6プログラムも30日間並行して使います。違いがあれば旧プログラムが残っているうちに見つかり、合意した価格の範囲内で修正します。
よくある落とし穴と、その対処
OCXとActiveXへの依存
多くのVB6プログラムはWindowsに付属しないコントロールに依存しており、中にはすでに存在しない会社の製品もあります。マイクロソフトは
GRID32.OCXやTHREED32.OCXなどをサポート対象外としています。診断書では、依存するものそれぞれについて、プログラム内での役割と置き換え先を挙げます。Variant、既定プロパティ、暗黙の型変換
VB6は文字列、数値、日付の間で黙って変換を行い、
Text1 = rs!Totalのような行は既定プロパティに頼っています。C#やVB.NETに直訳すると、空のフィールドや別の地域形式の日付など、境界的なケースで動作が変わります。こうした箇所は意図を持って書き直し、テストで確認します。On Error Resume NextVB6のコードによく見られ、エラーを隠して、書きかけのデータのままプログラムを続行させます。見つけた箇所では、元の作者が何を避けようとしたのかを突き止め、そのケースを明示的に処理します。そうしなければ、新しいアプリはエラーで止まるか、同じ見えない誤りを繰り返すことになります。
16ビットの
Integerと端数処理VB6の
Integerは32,767までで、テーブルが大きくなるとオーバーフローエラーの原因になりがちです。Currencyは小数点以下4桁を保持し、Roundは銀行型丸めを使います。業務で求められる端数処理を再現し、旧プログラムが誤っていた箇所は記録します。文字列をつなげて組み立てたSQL
利用者の入力を
&でつなげたクエリはSQLインジェクションに弱く、アポストロフィを含む名前でエラーになります。新しいアプリでは、すべてのクエリでパラメーターを使います。ないソースコード、古いソースコード
ソースコードが失われていたり、保管されているものが使用中のプログラムと一致しなかったりすることがあります。コンパイル済みのVB6プログラムを信頼できるソースコードに戻すことはできないため、動いているプログラム、データベース、画面をもとに作業し、不確実性の大きい部分は診断書に明記します。
価格とお支払い
診断
無料
書面で、48時間以内
パイロットモジュール
€1,000–1,500
通常。着手時50%、検収時50%
お支払い条件
着手時に50%、検収時に50%をお願いしています。残金は本番稼働とソースコードの引き渡しの前にお支払いいただきます。大きなプロジェクトは、合意したフェーズごとのお支払いになります。
診断は無料です。先に進まないと決めた場合も、診断書はお手元に残り、費用は一切かかりません。
価格は固定で、作業開始前に書面で合意します。作業内容が変わる場合は新しい見積書をお送りし、ご承認をいただいてから追加作業に入ります。
全面移行の場合、一般的な開発会社の見積もりより40〜60%低い価格を目標にしています。オフィス費用も営業部門もない小さなスタジオだからこそ可能です。
価格は税抜です。
テストで裏付けた、実際の移行
NorthwindはマイクロソフトがAccessに同梱していたサンプルデータベースで、当方の顧客ではありません。公開されているコピーをSQLiteとPostgreSQLに移行し、すべてのテーブルとクエリを自動テストで元データと比較したうえで、その結果をもとに動くウェブアプリを構築しました。事例には数値を、同等性報告書にはすべての確認項目を掲載しています。
NorthwindはAccessのデータベースですが、Visual Basic 6でも同じ方法で進めます。移行し、同じデータで元のプログラムと結果を比べ、新旧を並行して動かします。

よくある質問
ソースコードがありません。それでも移行できますか?
多くの場合できます。使用中のプログラム、データベース、使い方がわかるスクリーンショットや録画をもとに作業します。確実に再現できる部分と、御社からの情報が必要な部分は診断書に明記します。
コードをVB.NETやC#に自動変換しないのはなぜですか?
変換ツールが出力するコードはコンパイルできても、デスクトップアプリの構造を残し、互換ライブラリに頼ることが多く、古い問題もそのまま持ち込みます。ウェブアプリにする場合は、VB6のコードをプログラムの動きを示す仕様書として使い、画面を作り直してロジックを移します。
VB6のプログラムはWindows 11で動かなくなりますか?
プログラム自体は動きます。マイクロソフトはWindows 11でもVB6のランタイムをサポートしています。問題が起きやすいのは周辺で、登録されていないOCXファイル、紛失したインストーラー、古いデータベースドライバー、そしてマイクロソフトが64ビット版Windowsでサポートしていない開発環境などです。
プログラムが計量器やラベルプリンターとつながっています。ウェブアプリでもできますか?
たいていはできますが、機器をつないだパソコンに小さなプログラムのインストールが必要になるかもしれない唯一の部分です。診断の段階で確認し、価格に含めます。
一部分ずつ移行できますか?
できます。パイロットモジュールが最初の一部分で、残りは段階的に進められます。可能な場合は、移行期間中もVB6のプログラムとウェブアプリが同じデータベースを共有します。
新しいアプリは何の言語で書かれますか?
通常はC#とASP.NET Coreで、.NETの開発者なら誰でも保守できます。御社のIT業者がPHPとMySQLを使っているなら、それも選べます。
その他のサービス
すべてのサービス- 古いソフトウェアの刷新Access、Excel VBA、VB6、Delphi、古い.NETをウェブ向けに作り直す
- Microsoft Accessからウェブアプリへテーブル、クエリ、フォーム、レポート、VBAを、SQL ServerまたはMySQL上のウェブアプリに移行します。
- Excel VBAからウェブアプリへマクロ、ユーザーフォーム、連動するシートを持つブックを、複数人で使えるウェブアプリにします。
- Delphiアプリの移行BDE、Paradox、dBaseを使うDelphiプログラムを、SQLデータベース上のウェブアプリに移行します。
- 古い.NETアプリの刷新WinFormsやASP.NET Web Formsのアプリを、使える部分は活かしながらASP.NET Coreへ移行します。
お問い合わせ
ご都合のよい方法をお選びください。1営業日以内に、日本語でメールにてお返事します。
メールで
riccardo@プログラムとデータベース(テスト用データでも構いません)か、何をしているかの簡単な説明をお送りください。1営業日以内にご返信します。
ファイルをお送りください
Access、Excel、VB6、Delphi、古い.NETで作られたプログラムなら、ファイル送付後48時間以内に無料の診断書をお届けします。
- ファイルのコピーを作成します。テスト用データでもかまいません。
- フォームまたはメールに添付します。パスワード付きの圧縮ファイルにし、パスワードは別送するのがおすすめです。ご希望があれば、先に秘密保持契約を結びます。
- 48時間以内に、診断書とパイロットモジュールの固定価格をお届けします。
イタリアを拠点に活動しています。