VSUG DAY 2006 Summer 開催決定!
日時:2006年6月13日(火)10:00~17:00(受付9:30)場所:秋葉原コンベンションホール(東京 秋葉原ダイビル2F)定員:400名参加料:無料イベントは終了しました。多数のご来場ありがとうございました。
セッションプログラム
講演概要・講師紹介
セッションレポート
奥野大介さんのレポート: このセッションには、新しく加わるプレゼンテーション テクノロジをどう使い分けるべきなのかという興味から参加しました。このレポートでは、特にWindowsアプリケーションの使い分けに焦点を絞ってみたいと思います。
現在主流の.Net Framework1.1には、WinFormsと低レベルAPIのManaged DirectX9.0cがあります。.Net Framework3.0(WinFX)では、WPFが加わります。
セッションでは、"Rich"と"Reach"という2つの軸で、各プレゼンテーション テクノロジの位置付けが説明されました。Richとはユーザー エクスペリエンスの豊かさ、Reachとはサポートするプラットフォームの範囲で、この2軸は相反する傾向にあります。 まず、DirectXが最もRichなユーザー エクスペリエンスを実現することは変わりありません。ただし、WPFも3Dグラフィックスをサポートしますから、ゲームなど特に高度な描画と応答性を要求されるアプリケーションがターゲットになります。
WPFは、メインストリームに位置します。WinFormsのユーザー インターフェース機能に加えて、オーディオ、ビデオといったメディア、3Dグラフィックス、ドキュメントが統合されます。ただし、WPFの真価を発揮するには、ハードウェア、ソフトウェアの要件が高くなります。
WinFormsは、下位互換性へ軸足を移して行きます。つまり、高度な表現力よりも、WPFがサポートされないWindows OSで動作することが重要な場合です。
以上、駆け足でWindowsアプリケーションにおけるWPFの位置付けを振り返ってみました。
WPFに関しては名前ばかりが先行している印象で、正直に言えば必要性に疑問を感じていたのですが、デモに触れた上で位置付けをはっきり説明されたことで、期待感が大いに高まりました。
WPFの応用例としては、ショールームなどを仮想空間として構築することが考えられます。空間そのものの演出効果が重要なので、3Dグラフィックスが活かせます。オンライン販売では、個々の商品説明に高度なインタラクションを追加できますチャート コントロールのような統計の視覚化は多くが2軸の分析です。3軸の表示が容易になれば、全く新しい種類のグラフが生まれる可能性もあります。しかし、こうした高度なプレゼンテーションが要求するハードウェア、ソフトウェアの要件は、決して低いとは言えません。コスト、リスクに敏感なエンタープライズ分野、プレゼンテーションの大部分をDirectXで処理するゲームなどは、しばらくWinFormsの世界に留まるのかもしれません。
村田健二さんのレポート:業務システムではデータベースはほぼ100%と必要であると思います。その中でいつも悩むのは、どのデータベースを使用するかということです。データの量にもよりますが、まずは社内での開発者のスキル(質)と、実際にSQLをコーディングできる人数(量)を考えながらデータベースを決定していたのですが、言語による記述の違いにはいつも悩んでおりました。その違いも高度なSQLの作成で悩むのならわかるのですが、[日付を取得する]と言う簡単なSQLでさえも、微妙に記述が違います。統一してくださいよ・・・と思っているのは私だけではないと思います。
このため、今までSQLSERVER使っていたけどやっぱりOracleにしますということになってしまったら、これまで作成したSQLをすべて見直さなければならないという悲惨なことになっていました。さらにSQLは文字列であるのでC#の開発環境にある一括変更などにも対応できません。とにかくシステムを開発する上で、データベースは切っても切り離せないものであるにも関わらず上記に記載したよう数多くの問題が発生していました。
LINQのデータベースの種類に関わらず・・・というのは大変魅力だと思います。言語により異なるSQLの記述から逃れることができるのはもちろんのこと、例えば同じシステムでも顧客のデータ量によってデータベースを変えるということが容易にできるようになります。これは今までやりたくてもやれなかったことになるのではないでしょうか。
また、データベースとは少し違った形で使用されるXMLがあります。私はアプリケーションの初期情報や、バージョンと言ったものを保持するのに使用しております。そういった情報を保持するためにデータベースのテーブルを追加して、フィールドを決めて・・・となりますとデータベース内はごちゃごちゃしてしまいますし、レコードが1件しかないデータを持つのになぜデータベース?と疑問に思っていたためです。XMLの読み込みも少し癖があり、習得するためにはSQLとはまた違った知識が必要になります。
XMLにはXLINQと言うものがきちんと用意されており、こちらも非常に簡単なコードでデータの取得やXMLの作成ができることが判明いたしました。
ただ現在は英語の開発環境を使うほうが良いということで、英語のできる人が増えているとはいえ一般のシステム開発には少し敷居が高いかも知れません。また、LINQを扱うにはやはりSQLやXMLの知識もある程度必要になると思います。SQLを覚え、XLMを覚え、さらにLINQの構文まで覚えるのか・・・と感じる人も多いのではと思いました。ですが、LINQの構文自体は難しくなくコードも少ないためこれから日本語でもガンガン使える環境が整えば使用する人もたくさん出てくると思います。また、速度にも若干問題があると言うことだったのですが、社内で使用するものや小規模なシステムであればほとんど気にすることはないのではないかと思います。
現在開発中のものもありそれがリリースされればもっと便利になるようです。データベース周りの多くの問題がこれで解決していくのではないかと思います。
安田敏行さんのレポート:1月にPASSJ Conference 2006 with VSUGに参加させていただき、無料セミナーにしては規模が大きく、内容の濃い有意義なお話を聞くことが出来ました。今回も予想に違わずプレゼンも楽しく拝聴でき素晴らしい内容でした。次回の開催も是非参加したいと思います。
こだか かおる氏の「WF(Windows Workflow Foundation)って何だろう?」についてレポートします。冒頭からウィットに富んだ話に、おもわず聞き入ってしまいました。最初に感じたのはVisio2003に新しく搭載されたUMLテンプレートに近いなと思いました。あれは図を描けばコードファイルも出来るけれどVisioでプログラム開発するのかよって感じでした。でも こだかさんの話からちょっと違うぞ。ちゃんと話は聞かなくちゃモードに移行しました。ようするにWindows-Vistaで提供される dotNET FrameWork3.0環境下ではVisual Studio2005を利用してVisioのように絵を描くとワークフローアプリケーションが作成出来るらしい。ワークフローというのは、業務や処理の流れを図表示・ルール化したもので、出張決裁書とか稟議書のたぐいのあれです。今回はデモを二つやって頂きました。第1はシーケンシャルワークフローです。UMLのアクティビティ図と同じような感じでワークフローを記述できます。順番に進んでいくような処理、例えばウィザードのようなものに適しているようです。第2はヒューマンワークフロー(ステートマシンワークフロー)です。UMLの状態遷移図のイメージです。データがその状態に応じて遷移していくような処理、例えば稟議書の決済システムのようなものに適しているようです。我々の周囲の業務の効率化のツールとして色々可能性が広がりそうです。これまでは、一部の技術者によるオレオレワークフローや専門企業のパッケージワークフローの技術であったのが、マイクロソフトの基盤技術としてVisualStudioとのシームレスな統合環境が実現出来ることは大きな意義があると思います。
日比谷貴昭さんのレポート:1/25に行われましたPASSJ Conference 2006 with VSUGに続き、今回で2回目の参加になります。
八巻さんの話で、ASP.NETがAjaxと呼ばれる前からAjax的動作をしていること、また、ASP.NET2.0からよりAjaxに近い機能を実装できるということの説明がありました。
ASP.NET1.xでは以下の2つの例を上げて説明がありました。(以下、課題と解決方法を丸番号と矢印で記載致します。)1)更新処理を行うと入力状態を保持するようにしないと入力状態が初期化されてしまう⇒ビューステートにより、入力状態が保持され、初期化されない
2)更新による画面全体のリロード処理のため、スクロールが初期状態に戻ってしまう⇒SmartNavigationプロパティにより、スクロール状態保持ができる ※ASP.NET2.0ではMaintainScrollPositionOnPostBackプロパティとなり、 SetFocusメソッドにより、Redirect後のFocusを指定することが可能になった
(1)(2)などからASP.NET1.xではAjax的実装に近い形で実装ができるようになったのですが、よりAjax的実装をするということで問題提起と解決方法をデモ見ながら説明がありました。3)更新に対し、ボタンクリックなどによるユーザーの操作が必要⇒クライアントコールバックの実装により、非同期通信をとりながら、 入力のKeyUpまたはKeyDownから入力文字をサーバーに返し、 必要な情報を返し、その情報分のみ更新できることにより、 ユーザー操作の手段が以前のTextChangeのみといった方法にプラスされる
4)一部分の更新のために、画面全体の更新処理を行っているため、 サーバー負荷の軽減と速度が課題⇒ASP.NET2.0ではDataGridView,DetailsView,TreeViewの標準コントロールにより、 非同期通信でソートとページング処理での更新が可能になり、 View内のみ情報を更新することができる
5)画面全体をリロードしているため、画面にちらつきが残る⇒(3)(4)から非同期通信により、ページのリロードを行わないことで ページのちらつきがなくなる
これ以外にもAtlasを利用したデモやグレープシティのコンポーネントの、LiveControls1.0の紹介がありました。
今回のセッションでAjax的実装がいかに便利であるかを知ることができました。Ajaxを利用することで入力支援をすることができたり、また、画像の再描画なしに変更することなどが実現できるのではないでしょうか。その一方で、非同期通信を行うことにより、httpレスポンスが増え、それに伴って、入力支援ではよりDBアクセスが増えることになります。処理によってはDBをデータ・キャッシングするなどの対応を考慮するなど、サーバー負荷の面で検討すべき点もかかえているのではないではないかと思いました。
村田健二さんのレポート:私のこれまでの開発経験では、Eclipseが最も使いやすい開発環境でした。今回の開発から、初めてVisual Studio 2005を使いはじめたのですが今までで最も使いやすいのではないかと思っております。
Visual Studio 2005で私が最も気に入っているところはデータバインディングという考え方が実現されたからです。これにより、簡単な業務アプリケーションやプロトタイプは本当に短期間で作ることができます。
実際に現在の開発で、プロトタイプとして2種類の画面を作成したのですが、2つあわせて1日もかかりませんでした。もちろん、バインディングを行っていますので、データの追加、更新、削除の機能も実装されております。後はこれに、機能を付加していけばよいわけです。
本来であればDBに接続して、SQLを作成して、SQLを発行して、それからデータセットをもらって、テキストボックスやコンボボックスに、データベースの値を入れて・・・などの処理を記述する必要があるのですが、バインディングをすることによりこれらすべてのコードから開放されます。
このバインディングを使用しているときに以前から気になっていたのがSQLを動的に作成する場合についてです。なにしろSQLも自動で作成してくれるため、Where句を条件によって変更するなんてことは不可能かと思っておりました。デザイナークラスを時間をかけて修正したら、一瞬で元に戻ってしまったり、select * from test where @where と書いて、@whereの部分をプログラムで変更しようとしてみたり・・・。(わかる人にはわかると思うのですが・・・)
結局それは今回のセミナーにもありましたPartialクラスを使用することにより解決いたしました。これが今回のセミナーでの一番の収穫でした。社内に持ち帰って報告したら大変喜ばれ早速実装いたしました。
その他にもJAVAと同様の機能としてイテレータやGenerics等の説明もありましたが、これについての使い方は従来どおりという感じでした。
バインディングに関して一つだけ、改善して欲しい点を上げますと、バインディングするたびにBindingSorceとTableAdapterができてしまい、どれがどれだかわからなくなります。作成時には余り気にする必要はないのですが、なにかまとまった形で表示されるなどの工夫があればよいかと思います。
井上 章さんのレポート:このセッションでは、インテル社製のソフトウェア開発製品を使ったマルチスレッドアプリケーション開発におけるパフォーマンスチューニングと最適化手法について、インテルの菅原氏よりデモを交えての解説が行われました。
ソフトウェア開発サイクルで軽視されがちなパフォーマンスチューニングですが、デュアルコアからマルチコアへと進化するプロセッサ環境で、その能力を生かすにはアプリケーションのマルチスレッド化とパフォーマンスチューニングが大変重要になってくるでしょう。
その第1段階として、まずアプリケーションのパフォーマンス解析を行いボトルネックがどこにあるかを調べることが重要となります。ここで紹介されたのが「VTune パフォーマンス・アナライザー」です。このパフォーマンス・アナライザーでは、コードビュー、タイムラインビュー、コールグラフなどの各種解析結果の表示が Visual Studio に統合され、アプリケーションのボトルネックを簡単に検出することが出来ます。豊富なグラフ表示で解析結果を表示してくれますので、デモを見ていても視覚的に分かりやすくアプリケーションを解析できると感じました。
第2段階として、パフォーマンス解析結果からどこをスレッド化するべきかを判断し、最適なスレッド化方法を検討することになります。マルチスレッド化の方法として API を使用して直接ソースコードを修正する方法も可能ですが、ここでは自動並列化としてコンパイラに任せてしまう方法と、OpenMP を使う方法が紹介されました。
まず、自動並列化による方法は、インテルコンパイラのオプションとして -Qparallel と指定することで有効になります。この方法は至って簡単ですが完全にコンパイラ任せになるため、並列化箇所を細かく制御したい場合には不向きになります。一方、OpenMP を使った並列化では、プラグマで OpenMP ディレクティブを指定することで明示的に並列化を行う部分を指定できます。この OpenMP は http://www.openmp.org/ で規格化されている手法で、今後の普及に期待が持てるでしょう。インテルコンパイラで OpenMP を有効にするには、オプションで -Qopenmp を指定しますが、この OpenMP は Visual C++ 2005 でも完全サポートされているとのことで、この場合のコンパイラオプションは -openmp となります。
以上の手法でマルチスレッド化が終わった後、第3段階としてそれらスレッド化によるプログラムの正当性の検証が必要になります。ここでは「インテル デバッガー」と「インテル スレッド・チェッカー」が紹介されました。インテル デバッガーは同時実行されているスレッドのうち任意のスレッドを指定してデバッグが出来るため、マルチスレッドアプリケーションのデバッグが行いやすくなります。また、インテル スレッド・チェッカーはスレッド間の同期に関する問題点などの検出が可能で、マルチスレッド化による複雑なバグの検出を容易にしてくれるでしょう。
一連のマルチスレッド化とそのデバッグが終わった後、それらのチューニングによるパフォーマンスが最適かどうかを確認することも大切な作業となります。ここで紹介されたのが「インテル スレッド・プロファイラー」です。これは、スレッド間の同期によるボトルネックなどを素早く検出し、グラフィカルに表示してくれるツールで、これを使ってパフォーマンスに問題がある箇所を検出して再度チューニングを行い、これらの繰り返しで最適なパフォーマンスを発揮するアプリケーションを開発することが出来るのは魅力です。
インテル社製のソフトウェア開発製品には、もう一つアプリケーションのパフォーマンスチューニングに便利な「インテル パフォーマンス・ライブラリー」とよばれる各種の数学関数群やマルチメディア処理に適したライブラリがあります。このライブラリは全てスレッドセーフな設計となっており、最も高速で簡単にパフォーマンスチューニングを行うことができるとのことで、実際のデモでも最も高速な結果を示していました。
また、これら一連のパフォーマンスチューニングと最適化の中心となる「Windows 版 インテル コンパイラ 9.1」では、VS6/2002/2003/2005 の全ての Visual Studio の C++ 開発環境に完全統合され互換性も保たれている上、豊富な最適化オプションを備えており、インテル製プロセッサ環境でのアプリケーションが最大限の性能を発揮できるようになっているところにも魅力を感じました。
今後、アプリケーションのパフォーマンス向上には、いかにプロセッサのリソースを効率よく利用するかが重要となってくると思われます。特にデュアルコアそしてマルチコア化へと進むプロセッサ環境では、マルチスレッド化はアプリケーションのパフォーマンスチューニングに最も有効な手段となるでしょう。しかしながら残念なことに、シングルスレッドでのみ動作するアプリケーションがまだまだ多いのは事実ですし、マルチスレッドアプリケーションを開発するための環境も十分整っているとは言えないのが現状です。このような中で、今回のセッションで紹介されたインテル社製のソフトウェア開発製品は、使用して決して損はない開発ツールであると言えるでしょう。
最後になりますが、「VSUG DAY 2006 Summer」全体を通して、とても楽しませていただきました。今後も VSUG の活動をオンライン、オフラインともに楽しみにしております。また、私も VSUG の会員として積極的に活動に参加させていただきたいと思います。
金野清隆さんのレポート:障害発生時に、原因の分析を行うために、多方面でログを取っておいて、その分析ができると言う「AppSight」という製品の紹介でした。実はしばらく前に、類似製品のデモを見たことがありましたが、そちらに比べるとより開発者向けを意識しているように感じられました。デモで障害を発生させて、その原因分析を本製品の機能を使いながら見ていくというセッションでしたが、自分でも経験したことがあるような障害を題材としていたので、興味を惹かれました。基本的には、色々な観点から集めたログを見ていくという形ですが、フィルタリングも強力そうです。また、実際に障害が起きたときの画面動作を再現させることもできるので、オフショア開発におけるコミュニケーション齟齬をなくすためにも使える、というお話もありましたが、それは面白い視点だなと思います。オフショアでは、ドキュメントよりもユニットテストの力が大きくなるのではないかと思っていましたが、このような製品の力も使えるのかなと思いました。VSTSとの連携についても期待していたのですが、その点あまりお話がなかったのがちょっと残念でした。デモは面白かったですし、こういう製品がどういうログを収集するか、というのを意識しておくと普段の開発においても危険ポイントを意識できるのでは、と言う面でも大変勉強になりました。
内容多岐に渡り、楽しい一日でした。