さるべーじです。あけましておめでとーございます。
旧年はいろいろかまっていただけ、大変楽しい1年となりました。
今年もまた仕事に趣味にハシりますので、お付き合いのほどをよろしくお願いいたします。
さて、去年の正月にもあけましておめでとうございます2007で、お年玉と称してVB2005のスニペットリストを公開したんですが。
昨年末に新しくVB2008の提供が開始されてしまいました。
ので、今年もお年玉として
VB2008コードスニペットのリスト
SnippetIndexVB2008.zip
をお届けします。
内容はVB2008 Express Edition/Team Suiteのリストです。
VB2005のも同梱してありますので、どう変わったかも比較もできて便利です。
なぜExpress EditionとTeam Suiteだけかというと、私がインストールして手元に持っているのがそれだけだからです。
ほかのエディションについてはたぶんTeam Suiteと同等もしくはそのサブセットだと思われますので、そのつもりで読み換えていただければおっけーなのではないかと。
それだけでは寂しいので、気づいた点をいくつか。
1. 増えた
VB2008のスニペットはExpress Editionで286本、Team Suiteで459本あります。
VB2005の時は233/398本でしたので、ざっと5~60本増えたってことになります。
2. 増えたのは主にLINQとWPF
特にLINQ回りはひと通り目を通しておいた方がいいってな感じで今回のオススメです。
使う局面ごとにグルーピングされてざっとセオリーパターンが並んでいます。LINQの実践的な速習の一助になるかもしれません、ってくらいに。
併せて、VBからのxmlパターンがLINQと合わせてデータ取扱いにグルーピングされ、かなりスニペットも模様替えされています。
前回提供されていたものの多くが今回提供されず、より新しい概念に基づいたパターンが追加されています。
このへんは前回から削除されたスニペットを各シート末にまとめ、新しい(あるいは修正のかかった)スニペットはセルに着色してありますので、見比べてみると概念の変化がわかっておもしろいです。
一方、WPFのスニペットラインアップは意外にしょぼいです。
これは、WPFは単にコード単独でどうこうするってパターンではないのが主な原因のように思っています。
コードテンプレートだけ提供してもどーにもならんのではないでしょうか。
3. 増えなかった方面
個人的に期待外れだったのは、Office制御に関するスニペットがほとんど変化していなかったことです。
VB2005が提供された後で2007Officeが提供され、メニューバー/ツールバーからリボンに(見た目の)概念が変わったんですね。
でもってそれに合わせVSTOも2回ほどバージョンアップしながら提供されてきたわけです。
さたに、VB2008の謳い文句の一つに
VSTO/VSTAとVBAのロジック相互利用(双方向)
ってのがありまして。これ、地味ながらかなり期待していた機能なわけですよ。
なんですが、このへんの最新技術へ対応したスニペットなんか何一つ提供されておりゃしません。
けっこう煩雑なロジックパターンをセオリーとして埋め込まなきゃならん部分ですので、このあたりはぜひスニペットとしての提供がほしかったなー。
4. メニューの構成が大きく変わった
今回、各スニペットの分類やグルーピングが大きく変更になっています。
そのため、スニペットをショートカット呼び出しではなくコンテキストメニューからの選択で使い慣れていた方は、今回のメニュー構成にかなり戸惑うかもしれません。
各スニペットのタイトルやショートカット、ファイル名などは変更されていませんもので、そのあたりをキーに上掲のリストで突き合わせていただくと、「アレはどこに行ったのか」がわかりやすいと思います。
5. 編集ミスが目立つ
今回、VB2008の英語版が提供されてから日本語版のリリースまで、予想をはるかに上回る迅速さでした。
そのせいかどうか、今回のスニペットにはぱっと見で首をかしげるような単純な編集ミスが目立っているような気がします。
以上、リスト作成中に感じた私なりの所感でしたー、と言ってしまうのはたやすいんですが。
せっかく気づいたんですから、スニペットに存在する編集ミスの内容と修正手順もご紹介しておきます。
いや大丈夫、スニペットの構成ファイルは全部テキスト(というかxml)ファイルですので、個々人でいくらでも修正できますから。
a. ショートカットが一部カブっている(Express Edition・Team Suite共通)
- 「コレクションのクエリ」と「配列のクエリ」のショートカットがどちらもqArrayになっている。
- 「クエリ結果を WebForm グリッドに表示」と「クエリ結果を WinForm グリッドに表示」のショートカットがどちらもqWinFormになっている。
同じショートカットが複数登録されていても、とりあえず動作はします。
例えば「qarray」と打ってTabを押すと、「どっちのqarrayですかい?」ってリストが表示されます。
これはそれぞれ「コレクションのクエリ」「配列のクエリ」を指し示しており、
それぞれちゃんと目的のテンプレートが表示されるわけです。
けどまあやっぱわずらわしいですし。
VB2005の時にはきちんと「コレクションのクエリ」(qCollection.snippet)のショートカットは「qCollection」、「クエリ結果を WebForm グリッドに表示」(qWebForm.snippet)は「qWebForm」であり、不要に他のスニペットとカブってはいなかったんですから、タダシク直しておいてもいいと思います。
「コレクションのクエリ」(qCollection.snippet)は、Express Editioonのデフォルトインストールでは「C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\VBExpress\Snippets\1041\data\LINQ Queries\Using Different Sources」、Team Suiteでは「C:\Program Files\Microsoft Visual Studio 9.0\VB\Snippets\1041\data\LINQ Queries\Using Different Sources」にあります。
「クエリ結果を WebForm グリッドに表示」(qWebForm.snippet)はExpress Editionデフォルトインストールでは「C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\VBExpress\Snippets\1041\data\LINQ Queries\Using Query Results」、Team Suiteでは「C:\Program Files\Microsoft Visual Studio 9.0\VB\Snippets\1041\data\LINQ Queries\Using Query Results」にあります。
b. 明らかな誤訳(Team Suiteのみ)
Team Suiteのコードスニペットメニューで[Office開発] > [Word] > [書式設定]と進めていくと、「範囲のフォントの色設定」という選択肢が2つ表示されます。
(クリックで拡大します)
もうひとつの方の選択肢の説明は「Wordドキュメントで範囲のフォントサイズを設定します。」なわけですから、このスニペットのタイトルは「範囲のフォントのサイズ設定」あたりが正しいんではないかと思われます。
(クリックで拡大します)
翻訳作業の際に、色設定スニペットの文章からコピーしたまま修正し忘れたんではないかなーと思っているんですが、これ、VB2005の時からずっとこのままなんですよね。
c. 翻訳されていないスニペットがある(Team Suiteのみ)
同じくTeam Suiteのコードスニペットメニューで[Windowsフォームアプリケーション] > [コントロールとコンポーネント] > [ComboBox]と進めていくと、スニペットの選択肢の中に「Populate a ComboBox from the Column of a Database Table」というのがあります。

(クリックで拡大します)
これはExpress Editionでは「データベースの列からのComboBoxの作成」と表記されています。

(クリックで拡大します)
これはVB2005 - Team Suiteのスニペットでも「データベースの列からのComboBoxの作成」となっていましたので、VB2008での訳し忘れだと考えられます。
このスニペットの実体は「PopulateComboBoxfromColumnofaDatabaseTable.snippet」であり、「C:\Program Files\Microsoft Visual Studio 9.0\VB\Snippets\1041\windowsforms\Controls\ComboBox」の格納されています。
このファイルを、
タイトル:データベース テーブルの列からの ComboBox の作成
説明:DataTable オブジェクトからのデータで ComboBox を埋めます。
と書き直すと、VB2005/VB2008 Express Editionと同じ日本語表記となります。
あと、毒にも薬にもならない情報として。
a. Express EditionとTeam Suiteではメニューの表記が異なる。
Team Suiteではスニペットのメニューを表示する際、「C:\Program Files\Microsoft Visual Studio 9.0\VB\Snippets\1041」にある「SnippetIndex.xml」を参照して表示データを取得しています。
それに対しExpress Editionでは、どうもレジストリの「HKEY_CURRENT_USER\Software\Microsoft\VBExpress\9.0\Languages\CodeExpansions\Visual Basic\Path」から取得したフォルダ名がむき出しで表示されるようです。
Express Editionでもちゃんと「C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\VBExpress\Snippets\1041」に「snippetindexvbexp.xml」って同等の情報を持つファイルが存在しているんですけど、どうもまったく参照していないっぽいんですよね。
実際インストール時点で既にsnippetindexvbexp.xmlとレジストリの登録内容に違いがありますし。
b. Express EditionとTeam Suiteで一部スニペットがカブっている。
ここまで何度もスニペットのファイルの所在を説明する際に、「Express Editionでは~」「Team Suiteでは~」と二重に説明してきました。
Express EditionとTeam Suiteではスニペットの格納フォルダの起点が異なっているんですね。
これは、同一環境にこの2つのエディションの両方をインストールした際に、スニペットを棲み分けさせるための処置なんだと私は解釈していたわけです。
VSTO回りとかcompact Frameworkとか、Express Editionではツカえない機能に対するスニペットもTeam Suiteでは提供されていますので、混ぜこぜにしちゃってExpress Editionでツカえないスニペットを選択できてしまう、なんて状況にならないように考慮されてるんだろうなーと。
ところがどっこい、今回のVB2008ではWPFだけ、Express EditionとTeam Suiteでの配置先がどちらも同じ「C:\Program Files\Microsoft Visual Studio 9.0\VB\Snippets\1041」にあるんです。
ので、今回同一環境にこの2つのエディションをインストールしてしまうと、WPFのスニペットだけ同じファイルを参照するということになります。
いや別に共有したからって現時点で何か困るわけではないんですが。
ただVB2005ではまったく同じスニペットでも別フォルダにインストールし分けていたわけですし、今回もここ以外は同内容のスニペットでもきちんと別々の位置にインストールされていますので、なんだかルールが不徹底になってしまったなあ、と感じています。
今回のリスト作成でどこに何があるのかを探す際に、実はこのあたりでけっこうとまどったりしたんでした。
c. 理解しにくい説明ってのはどうなの。
VB2005の時から感じていたことなんですけれども。
例えば、「アプリケーションの停止」(StopanApplication.snippet)ってスニペットがありまして。
これは、指定したタイトルのウィンドウを持つプロセス(アプリケーション)を停止するロジックのテンプレートなんですね。
しかしこれの説明は、「すべての実行中のメモ帳のインスタンスを終了します。」となっています。

(クリックで拡大します)
なんで「メモ帳」なんて説明になってしまっているかといいますと、このスニペットを張り付けた時の可変領域の初期値が「メモ帳」なんだからではないかと推測するわけなんですが。

(クリックで拡大します)
でもぱっと見、「アプリケーションの停止」が「メモ帳」を閉じるためのスニペットに読めてしまうではないですか。
しかも日本語Windowsではメモ帳のウィンドウタイトルは「Untitled - Notepad」ではなく「無題 - メモ帳」なわけですから、この初期値ではなにも指し示していないのと同じではないですか。
さらにウィンドウタイトル基準での指定ですので、「Untitled」(未保存)なメモ帳しか対象にはなりません。1度保存してファイル名が表示されるようになったメモ帳は対象外になるわけですから、「すべての実行中のメモ帳~」ってちっとも「すべて」ではないではありませんか。
ついでに、初期値が設定されているので表示されていませんが、可変領域のIDが「processName」ってのも違うんではないかと。
つことで、言いたいことややりたいことはわかるんですが、どーもびみょーにズレているような気がしてなりません。
このケースであれば、説明を「指定したタイトルのウィンドウを持つすべてのアプリケーション(プロセス)を終了します。」とし、可変領域も変に特定プログラムの特定状態を初期値にするのではなく、IDを「MainWindowTitle」などもっと適切なものに変えた上でそれをそのまま表示させた方がよかったんではないかなーと。
おまけ。
スニペットファイルは、xmlファイルとして提供されています。
ので、ここまで説明してきた事柄を自分の手元で修正しようとするなら、テキストエディタやxmlエディタでできるわけです。
しかしxmlのデメリットとして、記述エラーがあった際にただコケる、というのがありまして。
タグをどこか1か所でも書き間違えると読み込んでくれませんし、どこにミスがあるのか、どのようなミスなのかはまず表示してくれません。大変デバッグのしにくい類のデータファイルなわけです。
ので、やはりベーシックなエディタではなく、文法チェック機能等のついた専用エディタがあった方が便利です。
VB2005の提供開始と前後して、Microsoft社は「Snippet Editor for Visual Basic 2005」という専用エディタを公開しました。これは、ベータ2の時点ですが、本blogでもSnippet Editor for Visual Basic 2005 Beta 2で紹介しました。
このエディタは正式公開時点でバージョン1.0.0.0、その後オープンソース化され、GotDotNetというMicrosoft社製SourceForgeのようなサイトを拠点として順調に改良され、1.4.0.0まで改版されていきました。
しかし昨年、GotDotNetは閉鎖されてしまいました。
またMicrosoft社のサイトも再編されてしまい、上記エントリで紹介していたページもリンク切れとなってしまいました。
再編後のMicrosoft社サイトではCode Snippet Editor for Visual Basic 2005として提供されるようになりましたが、これは正式提供開始時の1.0.0.0のまま、しかもバイナリのみ。
最新版である1.4.0.0やそのソースは入手できなくなってしまったんですね。
私はGotDotNetがアクティブだった頃に1.4.0.0のソースもバイナリも保存してあったので実害はありませんでしたが、msdnForumなどでは「最新はどこ?」「ソースはどうやったら入手できるの?」と困っているスレッドなどもあり、困ったもんだなーと思っていたんですが。
GotDotNetを追い出された(?)Snippet Editor開発スタッフ(VB MVPがメインで活動していたようです…初めて知ったよ)は独自のサイトをオープン、.NET Framework3.5上で動作する最新バージョン2.0.0.0の提供を開始しました!
VB Snippet Editor
ほどなくMicrosoft社のサイトでもCode Snippet Editor for Visual Basic 2008として紹介が開始されましたが、そのリンク先は上記サイトです。
最新Snippet EditorのAboutからボトルメールの中心をマウスでポイントすると、「俺たちはやったぜー」な文章が表示されます。
苦労もしたでしょうし、上記の経緯の中でいろいろ憤りもあっただろうと思うんですが、表示される文章は淡々と客観的に、誇りを持って、再び提供できる喜びが経緯と共に語られています。ちょいとおじさんは泣きましたよ。
Microsoft社のサイトでは「Code Snippet Editor for Visual Basic 2008」と紹介されていますが、これは間違いです。
「VB用」ではなく「VB製」なんですね。Visual Studio 2008で提供されているすべてのスニペットを対象としたエディタですので、C#/J#/XML用のスニペットも編集できます。
また動作には.NET Framework3.5が必須ですが、修正自体はVS2005のスニペットにも対応しています。
2005と2008でスニペットの記述文法自体は変わっていないようですが、このエディタはVS2005のスニペットも対象として選択できるようになっているんですね。
また、Ver.1からUIが変更になっています。
Ver.1の時は要素をタブで表示切り替えしながら表示/修正していたので全体を俯瞰できず、リストを作る際もsnippyと併用していたんですが、今回のUIでは全体表示(項目ごとの折りたたみ)に変更されており、俯瞰しやすくなっています。
つことで、上記で説明した事柄を修正したり、自分で独自のスニペットをこしらえたりしてやろうかなどという方には、この「VB Snippet Editor」を強くお勧めします。
そういや個々のスニペットの解説情報って見たことがないなー。
Webでも書籍でも構いませんが、どこかで提供されていないのかなー。