ヘルプの歩き方

 「○○という機能の実現方法を教えてください。×××という関数を使えばいいことは分かったのですが、英語で書かれているためよく分かりません。よろしくお願いいたします」

 メーリングリストやニュースグループでよく見かけるこの質問形式。不幸にもDelphiやVBを買わずにVCを買ってしまい、チュートリアルを見ながらMFCを勉強して「私って結構いけてる?」と思ったのもつかの間、一歩飛び出たプログラミングをしようと思って突き当たる壁。あまりにも膨大なドキュメント数、しかも英文。これを読むのはあまりにも大変と思ったために前述した文を安易に投稿したら……おそらくあまりにも素っ気ない説明とともに、「英語が読めないってくらいで人に頼るんじゃねーよ、バーカ」と暗に罵った丁寧なおしかりの言葉が返ってくることでしょう。

 しかし、これはどちらも当然の行動を取ったまでだと、そう筆者は考えます。
 VCのパッケージを見ても、「プログラミング情報は非常に豊富ですが、代わりに目的の情報を見つけるのにコツが要ります」だとか「基本的な情報はすべて英文です」だとか「初歩的なプログラミングは一朝一夕でできますが、そこから先は茨の道です」だとかとは書かれていません。もしくは、仕事や授業の関係で仕方なくプログラミングをする羽目になった方もいるでしょう。そういった方々にとって、このあまりに異質なドキュメント群にとまどいを覚えるのも当然です。
 しかし、そういったブレイクスルーを突破した方々、つまりある程度能力のあるプログラマーにとってみれば、そういった苦労から逃げたいと思う人達というのは「あまちゃん」でしかないのかもしれません。また、そういったプログラマーの方々は多くのニュースグループやメーリングリストを読んでいるため、最初に上げた質問を読むこと自体「時間を浪費させられた」と感じるのでしょう。

 筆者は、今この両者の間にいると感じています。そこで、これからVCプログラミングを始める上で、変な質問をしないためのヘルプファイルの読み方というのを書いていこうと思います。
(注:筆者がこういう質問を受け取ったために怒ってこういう文章を書いた、というわけでは決してありません。ってゆーか、こういう質問は大歓迎です。質問は「鏑矢の憂鬱」 にてお待ちしてます。じゃんじゃんお寄せください)

ふたつの検索方法
 「ヘルプ」−「検索」(もしくは「双眼鏡の左上に?」ボタン)を選択すると、検索ダイアログが表示されます。このダイアログにはふたつのページがあります。ひとつは「索引」、もうひとつは「クエリー」です。

 何か分からないことがあった場合、まず「索引」を使います。まずキーワードを入力します。例えば「メニュー」と入れてみましょう。そうすると、下の「トピック」に、キーワードと関連したトピックが表示されます。ここでは「メニュー」とか「メニュー エディタ」とか表示されていると思います。各トピックをダブルクリックすると、そのトピックに関連したページが一番下に表示されます。「メニュー」をダブルクリックすれば、「メニューエディタの使用」とか「ポップアップメニュー」とかがあると思います。そこで、各ページをダブルクリックすれば、そのページが晴れて表示されるというわけです。
 この索引は「単語は分かるけれどもどういう内容か分からない関数」などを引くときに便利です。例えばAppendMenuとキーワードに入れれば一発で検索できます。
 それ以外の、普通の検索としても使えますし、あとで説明するクエリーの前にこちらでまず検索しておくことをお奨めします。ここで注意することは、まず日本語でキーワードを入力すること、です。キーワードが日本語なら、出てくるページはすべて日本語です。また、キーワードが日本語でなくても、ページが日本語っぽいものを選ぶ方がいいでしょう。まず日本語の解説を読み、それから英語を、という順番で構いません。

 さて、もうひとつの検索方法「クエリー」です。クエリーは、いわゆる「全文検索」というもので、ヘルプファイルすべての文章から特定の単語を検索することができます。ダブルクォーテーション(")で囲めば複数の単語からなる文字列でも検索できますし、アスタリスク(*)を使えば先頭だけしか分からない文字等も検索できます(ただし、この場合非常に時間が掛かります)。また、ある英単語を入れたときには、自動的にその形容詞形など変形させて検索してくれます。
 ただし、このクエリー、初めて使うとあまりにも膨大な情報量に戸惑うことでしょう。そこで「サブセット」というものを使います。

サブセット
 サブセットとは、検索するページを限定することです。MSDNをインストールしている場合、検索項目の中には「Excel」や「Access」といった他のアプリケーションの情報も大量に入っています。また、プログラミングの情報でもVBやVJといった他の開発環境も入っています。こういったページすべてから検索するのはなんの意味もありません。そこでサブセットが必要になってくるわけです。

 クエリーのページで「サブセットの定義」ボタンを押します。まず「サブセット名」を書き込んでおきます(好きな名前にしましょう)。次に、検索したいページを追加します。ツリーを開いたあとそのページを選択し追加を選択を選択すれば、選択したページより下のすべてのページが加わります。
 例えば、「日本語情報のみ」ということで、「Microsoft Developer Network - Visual Studio Edition」−「Developer 製品」−「Visual C/C++」を選択して「追加」ボタンを押します。そうすれば、下の「サブセット内のノード」にVisual C++のページが加わり、上の「選択するノード」から削除されます。
 追加ができたら、右上の「保存」ボタンを押します。保存したら「閉じる」ボタンを押して、一度戻ってみましょう。「検索する範囲」の中に先ほど付けた名前があるはずです。これを選択してから「menu」とでも検索すれば、かなり絞り込まれるはずです。

主要英語ページ
 さて、今度は英語ページのサブセットを作製することになりますが、そのために、膨大な量のページの中から特に必要なページを先に挙げておきます。また、それらのページの見方も説明します。
(注:以下「Microsoft Developer Network - Visual Studio Edition」を「MSDN」と略します)

・MSDN/SDK Documentation/Platform SDK
 ウィンドウズプログラミングの初歩的な説明。MFCを使わずにプログラミングする場合にはこのドキュメントを熟読することが必要ということです。ウィンドウズプログラミングの仕組みを知りたいときには読みましょう。ただし、あまりにも広範な情報が載せられている(OpenGLなんてものも入っている)ため、その中でも必要なものだけをサブセットに加えておくといいかもしれません。
 特に、User Interface ServicesWindows Base Serviceには普通のウィンドウズプログラミングに欠かせない情報が入っています。また、Referenceにはマクロや関数などがすべて書かれています。特にSHなになにという関数は普通の本にはなかなか載っていないので、このリファレンスで検索することは大きな意味を持つでしょう。
 ちなみに関数リファレンスには「Quick Info」「Overview」「Group」のみっつのボタンが付いています。「Quick Info」にはどのOSで使用できるかとか、どのヘッダーファイルをインクルードすればいいのかとかが書かれています。「Overview」はそのAPIが属するグループの説明が書かれたページへと移動します。「Group」は、同系列の関数が一覧表示されているページへと移動します。

・MSDN/Knowledge Base/Knowledge Base/Microsoft Win32 Software Development Kit
・MSDN/Knowledge Base/Knowledge Base/Visual C++
 Knowledge Baseというのは、すでに分かっているバグやその解決方法などが書かれている文章です(米ホームページにもあります。日本にも同名のものはあるのですが、中身が違います)。「もしかして、バグ?」と思ったらこのページをクエリー。特に、このKnowledge Baseには、多くのページにサンプルコードが付いています。英語が分からないときにはまずこのコードを試してみて、プログラムを理解してから英文を読んでみましょう。

・MSDN/Product Samples
 とにかく大量のソースコードが入っています。逆に大量にありすぎて困ってしまう部分もありますが……とにかくサンプルが欲しい場合には重宝します。

 ざっとみっつ上げてみました。もちろん、これ以外にも有用なドキュメントはあるでしょう。タイトルだけ見てとりあえずサブセットに追加してみるのもいいかもしれません。

英語の読み方
 英文ドキュメントはヒジョーに読みづらいです。とりあえず次のようなことを試してみて、何とかしましょう。

和訳ソフトに掛ける
 今流行?の、インターネットブラウザ用和訳ソフトを使用して、とりあえず無理矢理変換してみましょう。ただし、当然のごとく、専門用語が非常に多く含まれているため、かなりたどたどしいものになるのは確実です。ま、その残った専門用語を検索してつぎはぎすれば結構分かる文章になるのではないでしょうか。

日本語ドキュメントと照らし合わせる
 知っての通り、MFCというのはAPIをオーバーラップしているものです。ということは、多くのAPIはMFCの中にあるということです。MFCドキュメントとAPIを照らし合わせてみましょう。もちろん、MFCにないAPIも多数あります。
 そのためにも、MFCとAPIの照らしあわせで、APIの英文に慣れておくのがいいでしょう。特に、APIの方は使用が難しいのに、MFCでは簡単になっているというものは参考になるのではないでしょうか。このときにはサンプルも利用するといいでしょう。

サンプルコードと照らし合わせる
 サンプルコードと照らし合わせるのは非常に有益です。なんといっても、まず利用して実行し、動くことが試せるという利点があります。最終的には、英文が読めなくてもAPIが使えるということになります。
 コードは、どのAPIでもひとつかふたつはあると思います。また、MFCコードも調べてみましょう。MFCの中には、MFCではオーバーラップしてないAPIを内部で大量に使用しています。いいサンプルになるでしょう。もちろん、オーバーラップしているAPIも参考になります。

 以上、簡単にですがヘルプの検索方法を見ていきました。ちなみにMSDNというのはMicrosoft Developer Networkの略で、マイクロソフトから年4回発行されているCD−ROMドキュメントです。年間購読すると3ヶ月に1回送られてくるそうです。MSDNにはレベルというものがあり、レベルが高くなるに連れて様々な特典があります(もちろん値段も高くなります)。レベル1には、普通の年間購読とは別に、パッケージソフトとして1回分のCD−ROMが販売されています。このパッケージ版が、今回VC5.0を初めとする開発環境におまけとして付いてきたというわけです。
 ある程度英文ドキュメントに慣れ、もっと最先端の情報が欲しいという場合には定期購読をしてみるのもいいかもしれません。また、近々多くのドキュメントが日本語化されるともいいます。いずれにせよ、プログラマー必須の情報源となるのではないでしょうか。筆者は購読してませんが

おまけ:コードの歩き方
 MFCにはそのソースコードが付いています。ドキュメントを見ても分からない部分も、コードを見れば一発で分かる部分も多くあります。そういった「ソースコードの見方」を紹介します。

 コードには大まかにみっつの種類があります。
 ひとつはWindows.hのような、SDKに付属しているヘッダーファイルです。例えば「MF_STRINGにはどういう値が割り付けられているのだろう」ということを知りたいときにはこのファイルを調べます。これらのファイルはQ:\devstudio\vc\INCLUDE(CD−ROMドライブがQの場合)にあります。
 MFCにもインクルードファイルがあります。これはQ:\devstudio\vc\MFC\INCLUDEにあります。MFCのインクルードファイルにはあまりお世話になる機会がありませんが、マクロの定義やインライン関数を調べるときにはこちらのファイルを検索します。
 そして、MFCのソースコードです。これはQ:\devstudio\vc\MFC\SRCにあります。ソースコード内では非常に多くのAPIを使用しています。MFCはクラスウィザードやメッセージハンドラなどの関係でかなり複雑な内容になっていますが、意外とシンプルな面もありますし、コード自体は読みにくくない丁寧な造りになっていると思います。結構参考になる部分があるのではないでしょうか。

 さて、では実際の検索方法を見ていきましょう。「編集」−「ファイルから検索」を選択します。ダイアログの「検索する文字列」に見つけたい文字列を、「検索するフォルダ」に先ほど書いたフォルダを選択して「検索」ボタンを押してください。そうすると、アウトプットに検索結果がどんどん表示されていきます。検索が終了したら、適当なものをダブルクリックしてください。ソースウィンドウにそのソースファイルの指定された行が表示されます。違ったら他の結果をダブルクリックすればいいのです。
 この検索は通称grepと呼ばれ(なぜ呼ばれるのかは知りません)、他のテキストエディタ等でも装備していることが多いので、そちらでも試してみるといいでしょう。
 最後に注意をひとつ。MFCのインクルードファイルの中には拡張子がinlのファイルが多数存在します。この中には「インライン関数」というものがまとめて書かれています(インライン関数についてはC++のヘルプを参照してください)。デフォルトではこれらのファイルは検索しないので、先ほどのダイアログの「ファイルの種類」「;*.inl」を追加しておきましょう。

(C)KAB-studio 1997, 1998 ALL RIGHTS RESERVED.