2005年10月の過去ログ

 

ブログのボディが大きくなると不都合が生じてアップロードするときにエラーが出たりして四苦八苦でした。同じのが二つもアップされて申し訳なかったです。不都合といえばMixiの写真がいつの間にか消えてる・・・おかしいなあ。


KazzさんのところにXSLTのデバッグ方法が詳しく紹介されています。メモメモ。


Windows Vistaに多くの新しいフォントが追加されているようだが、その中でも我々プログラマにとって新しいスタンダードになりそうなのがConsolasだ。スコットハンセルマンさんのブログでも紹介されていて、以前から実際使ってみたいと思っていました。VS2005で使ってみた。こんな感じである。



個人的にとても好きなフォントだ。英語の環境だと今までは多くの人がNew Courier、日本語だとMSゴシックがプログラミングで多く使われてきたと思う。Consolasの中に日本語を混ぜてもVS2005では結構違和感なく表示してくれるのである。



ドッグフードマシンにWindows Vistaベータ2をインストールしてみた。このブログはそのマシンから書いている。


インストールは嫌というほど簡単だった。何の問題もなしに気がつかないうちにインストールが終わっていた。それにしても気になるのが、ユーザインターフェースの変化だ。贅沢にメモリやCPUを使っているなあというのが正直な感想だ。下の画像はマイコンピュータを開いたところ。



FileやEditのメニューだって最初は隠されていてなかった。「クラシック」な機能らしい。初心者にはいいかもしれないが、何年かWindowを使ってきた人なら面倒で仕方がないと思う。インストール時にデフォルトの設定をどういう風にするか聞いてほしいものだ。


更新:ちなみにWindows Vistaベータ2に入っている.NET Frameworkはバージョン2でつい最近リリースされたビルド番号(v2.0.50727)と同じです。


更新2:Vistaのベータ2は出ていないはずとのご指摘がありましたが、私がインストールしたVistaのビルドがこんなになっています。つまりCTPのビルド5231はベータ2とみなされるということでしょうか?それとも間違い?



更新3:Windows Vista Beta 2でググってみるとリリースは11月と出てきます。やっぱり間違い?


今日、MSのVSSの担当の方にメールで質問したところ、以外にも即効で返事が返ってきた。質問は・・・


「MSのSourceSafeのベストプラクティスについてある記事にSourceSafeのデータベースのサイズは3ギガから5ギガが適当でそれ以上に大きくならないようにするといいと書いてありますが、新しいバージョンでも同じですか?」でした。


すると回答は「6.0も2005もデータベースのフォーマットは変わっていないのでベストプラクティスは今度のバージョンにも当てはまります。」ということでした。どうりで6.0cのクライアントでも2005のクライアントでも同じデータベースに問題なく接続できるわけだ。


ちなみに5ギガよりももっと大きなデータベースのサイズを使用している例も見たことがあるとおっしゃっていました。


さて準備ができたところで.NETからどうやってMySQLに接続するのだろうといろいろ見てみたところ、MySQLのウェブサイト上にMySQL Connector/Netというのがありました。ADO .NET用のMySQLのDriverだそうです。それがないとMySQLに接続はできないでしょう。他にもいろいろプロバイダがあるようだが、今回はこれでやってみることにします。526kbと非常に軽い。インストールは簡単すぎて説明することがありません。


それをインストールするとC:\Program Files\MySQL\MySQL Connector Net 1.0.6\binにアセンブリが書くフレームワーク用に存在しています。うーむ・・・2.0用はまだないのか。仕方がないので1.1用で試してみることにします。早速MySqlGuiLibからMySql.Data.dllに参照を設定することにしよう。今の時点ではクラスを設計するよりも、とにかく接続してみたいのでTestClass.csをMySqlGuiLibに作ってそこにコードを書くことにします。コードを書く前にちょっと見ていただきたいのがこの間MySQL内のtestデータベースに作ったtbl_customerです。そのテーブルにNavicatを使って3つのデータをサンプル用に追加しました。下のテーブルをクエリーしてデータを取り出すコードを書くことにしましょう。



コードサンプル。


using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;

namespace MySqlGuiLib
{
public class TestClass
{
public void ConnectToMySql()
{
//とりあえずConnectionStringを決める。
string ConnStr = “database=test;User ID=root;Password=whatever;Host=localhost;Port=3306;”;
//MySqlconnectionのインスタンスを作成。
MySqlConnection Conn = new MySqlConnection(ConnStr);

//MySqlDataAdapterのインスタンスを作成。コンストラクタにSQLとMySqlConnectionを入れてやる。
MySqlDataAdapter da = new MySqlDataAdapter(“SELECT * FROM tbl_customer”, Conn);

//CommandTypeはText。
da.SelectCommand.CommandType = CommandType.Text;

//上のMySqlDataAdapterを利用してDataSetオブジェクトをデータで埋める。
DataSet ds = new DataSet(“顧客”);

//SQLを実行する前にMySqlconnectionを開く。
Conn.Open();

//SQLを実行してデータセットを埋める。
da.Fill(ds);

//Connectionを閉じる。
Conn.Close();
}
}
}


早速上のコードをテストするコードをUnitTestプロジェクト内に作ってみよう。テストのファイルはTestClassTest.vbと名前をつけました。



上のテストメソッドを右クリックして今度はTest With… ->Debuggerとし、Test.ConnectToMySql()にブレークポイントを置くと今度はユニットテストがデバッグモードでできてしまいます。da.Fill(ds);が実行した時点でdsの上にマウスを持っていって虫メガネアイコンをクリックするとDataSet Visualizerなるものが現れて、データセットの内容をグリッドに表示してくれます。これはありがたい!ただしVS2003でもXML Visualizer for Visual Studio .NET 2003というアドインを使用すると可能になります。



てな感じでVS2005(.NET Framework 2.0)からMySQL5.0への接続、クエリーが成功しました。これから徐々にいろいろなことをMySQL+VS2005で試して行こうと思います。もし「こんなこと試してほしい」ということがありましたらコメントいただければうれしいです。コメントに直接書いてくださってもかまいません。


このサンプルに用いたソースコードを下にアップしておきました。

MySqlGUI.zip (113.17 KB)


前に.NETからMySQLに接続してみたいとこのブログに書きました。昨日NAgileの記事を読んだのでNUnitTest Driven .NETを用いてMySQLへの接続コードをテストしてみようと思います。


初めにNUnitとTest Driven .NETはVS2005上でもきちんと動作しますので安心してインストールしていただいてかまいません。ここではNUnit2.2とTest Driven .NET 1.0はすでにインストールしてあるものとします。


とりあえず二つのクラスライブラリプロジェクトを用意します。一つはMySqlGuiLibでC#プロジェクトとします。このプロジェクトは実際MySQLへの接続をするライブラリプロジェクトです。もう一つはそれをテストするプロジェクトで単純にUnitTestと名前をつけましょう。このプロジェクトはVB.NETにしておきます。別々の言語を使うのには特に意味はありません。単にバラエティを楽しみたいだけです。(笑)VB.NETのプロジェクト作成するときはOption StrictをOnにしておきましょう



プロジェクトを作成するときには常にClass1.cs/vbというファイルがデフォルトで作成されるのでそれは消しておきました。次にしなければいけないのはUnitTestプロジェクトの参照設定です。NUnitのフレームワークをUnitTestに使用しますので、それを参照しなくてはいけません。C:\Program Files\NUnit 2.2\binにあるnunit.framework.dllをUnitTestプロジェクトにコピーします。nunit.framework.dllがあるフォルダをWindows Explorerで開いてそこから一気にソリューションエクスプローラにドラッグアンドドロップ(日本語にすると引きずり落す?)をしてしまいましょう。ちなみにコピペでもOKです。



次はそのアセンブリ(nunit.framework.dll)に対してUnitTestプロジェクトから参照をしてやります。それにはUnitTestを右クリックして参照の追加(Add Reference)を選択してやります。*ここの説明はVS初心者用です。



My Projectをダブルクリックするか、すべてのファイルを表示するにしてやると下の画像のように参照を確認することができます。デフォルトで参照が見えないのはVB.NETプロジェクトに特有でC#では常に表示されています。



NUnit Frameworkに参照を追加したのでそれが実際ちゃんと動くかどうか確かめてみましょう。UnitTestプロジェクトにSampleTest.vbというクラスファイルを追加して、次のようにコードを書きます。



このサンプルテストはMySqlLibにあるコードを試すものでも何でもなくて、単にNUnitとTest Driven .NETがきちんと動作するかどうかを確かめるものです。MyTestのあたりを右クリックしてRun Test(s)を選択してやるとTest Driven .NETがNUnitを通してMyTestを実行してくれます。Outputに下の画像のような結果が出たら成功です。



いずれはUnitTestプロジェクトに今度はMySqlLibにプロジェクト参照を追加してやり、UnitTestプロジェクトからあらゆるコードをテストできるということです。NUnitについては@ITにおいて記事がありますのでこちらを参考にしてみてください。


こんな感じでテストをする環境ができました。次のブログでは実際にMySQLに接続するコードを書いてみます。


あまり話題になることがないSourceSafeであるが、VS2005の製品群の中に混じってひそかに新バージョンがリリースされている。会社ではSourceSafeのアドミン役をしているのでこの製品については少々思い入れがある。VPN経由では非常に遅いという弱点もあるが、今まで開発者の「命」を救ってきてくれた製品といって間違いないだろう。ただしTeam Systemのソースコントロールの登場によってより個人や少人数用のソースコントロール製品として遷移していくことは考えられる。VSS2005の新機能とロードマップはここから


そのVSS2005を使用してみて早速気がついたのが、VS2005のプロジェクトがVSSによってコントロールされている状態でプロジェクト内のファイルを削除しようとするとこんなダイアローグボックスが表示されます。



つまりこのファイルを削除するのはローカルハードドライブとVSSからとローカルだけを選択することができるようになったのだ。今まではファイルをVSから削除してもSourceSafeには残っていたのでそれを手動で消さなければいけなかったのだ。特にシステムの大規模なリファクタリングをするときは前のファイルがSourceSafeに残っていていちいち削除するのが面倒だったのでこれはうれしい。


ちなみにVisual Studio 2003からでもこの新しいSourceSafeは使えるようだ。また、前のバージョンのSourceSafeクライアントからSourceSafe2005で作成したデータベースにもアクセスできる。その反対もできる。ということはデータベースに関しては完全に互換性があるということなのだろう。


うちの開発現場でもNUnitやTest Driven .NETを使ってます。NAntは使っていませんが自動ビルドのシステムは開発してデータベースの作成、.NETコードのコンパイル、ユニットテスト、インストーラの作成まですべて自動化しています。そういった意味でこの記事は興味深く読みました。



Dim Vss As New Vss()


このようにクラスのインスタンスを作成するときにパラメータのないコンストラクタに括弧をつけても今度のバージョンは勝手に括弧を取り除いたりしないようですね。2002ではそのまま残しててくれてて、2003では勝手に取り除いて、今度はまた元に戻りました。私は括弧はあったほうがいいと思います。明確にこのコンストラクタにはパラメータがないですよと表現できますからね。C#ではすべてが明確に表現しないとコンパイルさえしてくれないので、そういうところがC#のいいところだと思います。