Microsoft Visual FoxPro

Visual FoxPro は、マイクロソフトが開発販売しているデータ中心型オブジェクト指向/手続き型プログラミング言語である。1984年、Fox Softwareが開発した FoxPro（当初の名称は FoxBASE）から発展した製品である（Fox社は1992年にマイクロソフトに吸収合併された）。

 歴史 
 FoxPro 
FoxPro はテキストベースの手続き型プログラミング言語でありDBMSである。当初 Fox Software が開発販売し、後にマイクロソフトに引き継がれた。対応プラットフォームとしては、DOS、Microsoft Windows、Macintosh、UNIX があった。

FoxPro は一般に「xBase言語」と呼ばれる言語の一種であり、その文法はdBASEプログラミング言語に基づいている。xBase言語とされるものには他に Clipper がある。xBase言語の初期の歴史については、dBASEを参照。

FoxProはデータベース管理システムだが、表間の関係をサポートしていない。つまり、関係データベースではないし、トランザクション処理能力もない。

最終版はFoxPro 2.6で、それ以降はVisual FoxProに引き継がれた。既に販売終了していてマイクロソフトもサポートしていないが、FoxProユーザーのコミュニティは現在も活動中である。FoxPro 2.6 for UNIX (FPU26)はIntel Binary Compatibility Standard (ibcs2) サポートライブラリを使ってLinuxやFreeBSDにインストール可能である。

FoxPro 2では、"Rushmore" という最適化エンジンが搭載され、データ検索や更新が高速化されている。Rushmoreは全てのデータ関係文を調べてフィルタ式を探し出す。フィルタ式が使われると、同じ式にマッチするインデックスを探す。また、FoxPro 2は当初WatCOM C++で書かれており、これには自前のメモリ拡張機能（当時の最新技術）があった。FoxPro 2は拡張メモリにアクセスでき、DOSが管理可能なほぼ全てのメモリを使うことができた。HIMEM.SYSがロードされていない場合、FoxPro 2は自前の拡張機構を起動するようになっていた。

 Visual FoxPro 
Visual FoxProとしての最初のバージョンは3.0で、対応プラットフォームはMacintoshとWindowsのみに限定され、さらに後のバージョンではWindowsのみとなった。現在のVisual FoxProはCOMベースであり、マイクロソフトはMicrosoft .NET版を開発する予定はないとしている。

Visual FoxPro（VFPと略記されることが多い）は関係データベースエンジンと密に結合されている。この関係データベースはFoxProのxBase機能を拡張し、SQLクエリ/データ操作を追加サポートしている。多くのデータベース管理システムとは異なり、Visual FoxProは完全な動的プログラミング言語であり、追加の汎用プログラミング環境を必要としない。ファットクライアントのアプリケーション開発だけでなく、ミドルウェアやウェブアプリケーションも開発可能である。

 最近の動向 
2002年末、Visual FoxProをWineを使って Linuxで利用可能であることが示された。2003年、これを受けてマイクロソフトはWindows以外の上でFoxProを動作させることはライセンス契約に違反していると指摘したVFP and Linux - Visual FoxPro Wiki。

2005年12月、TIOBEのProgramming Community IndexにVFP（正確にはFoxPro/xBase）が初めて上位20位以内にランキングされた。2007年3月には19位、2007年8月には22位、2008年4月には17位と推移している。

2007年3月、マイクロソフトはVFP 10は開発されないことを発表したA Message to the Community。従って、2004年12月17日にリリースされたVFP 9が最後の商用バージョンとなる。VFP 9 のサポートはサービスパックの形式で行われている（2005年12月と2007年10月にリリース）。

その発表と同時に、開発されていた次期バージョンSedna（コード名）が発表された。これはVFP 9へのアドオンであり、SQL Server 2005、.NET Framework、Windows Vista、Office 2007、Windows Search、Team Foundation Server (TFS) などとの連携機能をサポートしている。マイクロソフトはこれをシェアードソースライセンスでCodePlex上でリリースした。ただし、VFPの中核部分は依然としてクローズドソースである。Sednaのリリースは2008年1月25日に行われたMicrosoft SEDNA download。2008年3月現在、VFP 9 SP2（Sednaを含む）のXBaseコンポーネントは全てCodePlexから開発用に利用可能である。

2007年3月、FoxProのスペイン語コミュニティMasFoxProで草の根運動が始まり、マイクロソフトに対してVisual FoxProの開発継続か全ソースのオープンソース化を求める活動を展開した。2007年4月3日、この運動は業界メディアでも報道されたDevelopers petition Microsoft to reconsider FoxPro phase out ZDNet.com、2007年4月3日。これに対してマイクロソフトは2007年4月3日、声明を発表した。それによると、新たなバージョンは開発せず、2015年までサポートを継続するとのこと。また、オープンソース化については最善の選択としているが、中核部のオープンソース化の具体的な予定は発表されていない。

 バージョン情報 
 FoxPro 
+Extant Versions by OSVersionFP 2.0FP 2.5FP 2.6 MS-DOS Yes Yes Yes Windows 3.1 to XP Yes Yes Yes Macintosh No Yes Yes SCO UNIX No No Yes Linux & FreeBSD No No YesSourceForge.net 上のLinux ABIプロジェクトからIBCSファイルを使う。 Windows 2000 No No Yes

 Visual FoxPro 
+Supported Windows VersionsVersionVFP 3.0VFP 5.0VFP 6.0VFP 7.0VFP 8.0VFP 9.0 Windows 3.x Yes No No No No No Windows NT 4.0 Yes Yes Yes Yes No - VFP8 アプリケーションはサポートされていないが、Windows NT 4.0で動作する。 No - German FoxPro User Group (dFPUG) が開発したパッチがある。マイクロソフトによれば、VFP 9.0 SP1で対処されるとのこと。 Windows 95 Yes Yes Yes ランタイムのみ No - Windows 95ではセカンドレベルのメニューが機能しない。 No Windows 98 Yes Yes Yes Yes ランタイムのみ ランタイムのみ Windows Me Yes Yes Yes Yes ランタイムのみ ランタイムのみ Windows 2000 Yes Yes Yes Yes Yes Yes Windows XP Yes Yes Yes Yes Yes Yes Windows Server 2003 ? ? Yes Yes Yes Yes Windows Vista ? Yes Yes Yes Yes Yes

 コード例 
Hello World の例:
MESSAGEBOX("Hello World")

 オブジェクト 
loForm = CREATEOBJECT("HiForm")
loForm.Show(1)

DEFINE CLASS HiForm AS Form
  AutoCenter = .T.
  Caption = "Hello, World"

  ADD OBJECT lblHi as Label WITH ;
    Caption = "Hello, World!"
ENDDEFINE

loMine = CREATEOBJECT("MyClass")
? loMine.cProp1   && これは動作する（'&'が2つで行末までコメント）
? loMine.cProp2   && プログラムエラー: Property CPROP2 is not found.

? loMine.MyMethod1()  && これは動作する。
? loMine.MyMethod2()  && プログラムエラー: Property MYMETHOD2 is not found.

DEFINE CLASS MyClass AS Custom
  cProp1 = "My Property"    && パブリック・プロパティ
  HIDDEN cProp2     && プライベート・プロパティ

  PROCEDURE Init()    && クラス・コンストラクタ
    This.cProp2 = "This is a hidden property."
  ENDPROC

  PROCEDURE MyMethod1()
    * This is a public method, calling a hidden method that returns
    * the value of a hidden property.
    RETURN This.MyMethod2()
  ENDPROC

  HIDDEN PROCEDURE MyMethod2()  && プライベート・メソッド
    RETURN This.cProp2
  ENDPROC
ENDDEFINE

 データハンドリング 
&& テーブル生成
CREATE TABLE randData (iData I)

&& xBase と SQL DML コマンドを使ってランダムなデータを格納
FOR i = 1 TO 50
    APPEND BLANK
    REPLACE iData WITH (RAND() * 100)

    INSERT INTO randData (iData) VALUES (RAND() * 100)
ENDFOR

&& データ上に構造化インデックスを配置
INDEX ON iData TAG iData
CLOSE ALL

&& xBase風コマンドでソートしたデータを表示
USE randData
SET ORDER TO iData
GO TOP
LIST NEXT 10  && First 10 
SKIP 81
LIST NEXT 10  && Last 10
CLOSE ALL

&& SQL DML コマンドでソート済みデータをブラウズ
SELECT * ;
  FROM randData ;
  ORDER BY iData DESCENDING

 SQLパススルーを使ったODBCアクセス 
&& ODBCデータソースに接続
LOCAL nHnd
nHnd = SQLCONNECT ("ODBCDSN", "user", "pwd")

&& SQL コマンドを実行
LOCAL nResult
nResult = SQLEXEC (nHnd, "USE master")
IF nResult < 0
  MESSAGEBOX ("MASTER database does not exist!")
  RETURN
ENDIF

&& リモートサーバからデータを検索し
&& ローカルなデータカーソルにそれを格納
nResult = SQLEXEC (nHnd, "SELECT * FROM authors", "QAUTHORS")

&& リモートのテーブルにあるレコードを更新
LOCAL cAuthorID, cAuthorName
cAuthorID = "1001"
cAuthorName = "New name"
nResult = SQLEXEC (nHnd, "UPDATE authors SET auth_name = ?cAuthorName WHERE auth_id = ?cAuthorID")

&& 切断
SQLDISCONNECT(nHnd)

 脚注 

 外部リンク 
 マイクロソフト 
 Main Visual FoxPro Microsoft page
 MSDN FoxPro support board
 VFP's online help file
 Microsoft VFP 9 support
 Visual FoxPro Essential Downloads page

 その他 
 Visual FoxPro Wiki 
 A site devoted to the history of FoxPro
 History of FoxPro - Timeline
 Using Win32 (WinAPI) functions in Visual FoxPro
 User-defined functions Visual FoxPro (written in C)
 VFPx VFP 9.0 のオープンソースのアドオンを開発しようとしているコミュニティ
 ProFox VFP関連のメーリングリスト
 Virtual FoxPro User Group
 Microsoft: FoxPro (old versions 1 to 2.6) Forum
 FoxPro FAQs

Category:オブジェクト指向言語
Category:データベース管理システム
Category:デスクトップデータベースアプリケーション開発ツール
Visual FoxPro
Category:廃止されたマイクロソフトの開発ツール