.NET開発者のアンケート

中々興味深いアンケートがあったので、ご紹介。


.NET開発者の方々に、現状と今後をいろんな項目別に
アンケートを集計している。


以外にも、開発言語は「VB.NET」が主流なのは驚きでした。


まぁ、このアンケート結果から覗えたのは、アンケート対象の
人達が、既存システムの保守だったり、工数(予算)が制限
されている中で開発しなければいけない状況にあるために、
既存技術で開発しているなぁといった印象を受けた。
VBが主流、既存テクノロジ:Windowsフォーム、ASP.NETが主流)


たしかに、新テクノロジ「WPF」、「Silverlight」、「LINQ」等は、
これまでのノウハウを活かせない部分も結構あるので、手を出し辛い
印象はある。


正月休みに、新しい(今や新しくないような・・)技術を勉強せねば。
(Azureも含め) 


詳細は参考文献のリンクをご参照。
参考文献:第1回 「.NET開発者中心」コーナー開設アンケート結果(2009年9月実施)

SharePoint on Windows Server 2008 R2

SharePoint2007は、元々Windows Server 2003上での構築を
前提に開発されたが、「Windows Server 2008」の登場により、
対応を余儀なくされた。
(しかもアーキテクチャ上結構変わってるし。)


SharePoint 2007のWindows Server 2008対応だが、
通常のWindows Server 2008上に構築する場合、SharePoint2007に
SP1を適用する必要がある。


それで、今回はWindows Server 2008 R2上の構築条件が公開されていた。


結論から言うと、SharePoint2007にSP2を適用する必要がある。
(SP2と言えば、以前不具合があったよな。)


詳細は参考文献のリンクをご参照。


参考文献:
http://blogs.msdn.com/sharepoint/archive/2009/10/02/install-sharepoint-server-2007-on-windows-server-2008-r2.aspx

SharePointのマスタページ作成(雛形)

SharePointは、ASP.NET上で実行されているとは言え、結構癖が強いので、
従来のASP.NETの開発と同じようにとは行かない。


例えば、ASP.NET2.0から利用できる「マスタページ」も、その1つだ。
SharePointのマスタページは、ASP.NETのマスタページ機能をそのまま
利用しているとは言え、環境面が若干異なることにより、VisualStudioに
よる、デザインビューによるレイアウトカスタマイズができない。
(色々と変更すればできますが。)


そういった経緯もあり、SharePointのマスタページを1から作ることは少なく、
デフォルトでインストールされているマスタページをカスタマイズする人の
方が多いと思う。


ただ、画面レイアウトが全然異なる場合では、かなり不効率に感じる。
そういった場合の最低限のコードだけを含むマスタページの作成方法が
MSDNで提供されている。
(知りませんでした。。。)


作成は結構簡単で、SharePoint Designerでマスタページを作成し、
下記のタグを貼り付けるだけ。

<%-- Identifies this page as a .master page written in Microsoft Visual C# and registers tag prefixes, namespaces, assemblies, and controls. --%>
<%@ Master language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Register Tagprefix="SPSWC" Namespace="Microsoft.SharePoint.Portal.WebControls" Assembly="Microsoft.SharePoint.Portal, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="PublishingWebControls" Namespace="Microsoft.SharePoint.Publishing.WebControls" Assembly="Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="PublishingNavigation" Namespace="Microsoft.SharePoint.Publishing.Navigation" Assembly="Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="wssuc" TagName="Welcome" src="~/_controltemplates/Welcome.ascx" %>
<%@ Register TagPrefix="wssuc" TagName="DesignModeConsole" src="~/_controltemplates/DesignModeConsole.ascx" %>
<%@ Register TagPrefix="PublishingVariations" TagName="VariationsLabelMenu" src="~/_controltemplates/VariationsLabelMenu.ascx" %>
<%@ Register Tagprefix="PublishingConsole" TagName="Console" src="~/_controltemplates/PublishingConsole.ascx" %>
<%@ Register TagPrefix="PublishingSiteAction" TagName="SiteActionMenu" src="~/_controltemplates/PublishingActionMenu.ascx" %>
<%-- Uses the Microsoft Office namespace and schema. --%>
<html>
  <WebPartPages:SPWebPartManager runat="server"/>
  <SharePoint:RobotsMetaTag runat="server"/>

  <%-- The head section includes a content placeholder for the page title and links to CSS and ECMAScript (JScript, JavaScript) files that run on the server. --%>
  <head runat="server">
    <asp:ContentPlaceHolder runat="server" id="head">
      <title>
        <asp:ContentPlaceHolder id="PlaceHolderPageTitle" runat="server" />
      </title>
    </asp:ContentPlaceHolder>
    <Sharepoint:CssLink runat="server"/>
    <asp:ContentPlaceHolder id="PlaceHolderAdditionalPageHead" runat="server" />
  </head>
  
  <%-- When loading the body of the .master page, SharePoint Server 2007 also loads the SpBodyOnLoadWrapper class. This class handles .js calls for the master page. --%>
  <body onload="javascript:_spBodyOnLoadWrapper();">
    <%-- The SPWebPartManager manages all of the Web part controls, functionality, and events that occur on a Web page. --%>
    <form runat="server" onsubmit="return _spFormOnSubmitWrapper();">
      <wssuc:Welcome id="explitLogout" runat="server"/>
      <PublishingSiteAction:SiteActionMenu runat="server"/>  
      <PublishingWebControls:AuthoringContainer id="authoringcontrols" runat="server">
        <PublishingConsole:Console runat="server" />
      </PublishingWebControls:AuthoringContainer>
      <%-- The PlaceHolderMain content placeholder defines where to place the page content for all the content from the page layout. The page layout can overwrite any content placeholder from the master page. Example: The PlaceHolderLeftNavBar can overwrite the left navigation bar. --%>
      <asp:ContentPlaceHolder id="PlaceHolderMain" runat="server" />
        <asp:Panel visible="false" runat="server">
        <%-- These ContentPlaceHolders ensure all default SharePoint Server pages render with this master page. If the system master page is set to any default master page, the only content placeholders required are those that are overridden by your page layouts. --%>
<asp:ContentPlaceHolder id="PlaceHolderSearchArea" runat="server"/>
<asp:ContentPlaceHolder id="PlaceHolderTitleBreadcrumb" runat="server"/>
<asp:ContentPlaceHolder id="PlaceHolderPageTitleInTitleArea"  runat="server"/>
<asp:ContentPlaceHolder id="PlaceHolderLeftNavBar" runat="server"/>
<asp:ContentPlaceHolder ID="PlaceHolderPageImage" runat="server"/>
<asp:ContentPlaceHolder ID="PlaceHolderBodyLeftBorder" runat="server"/>
<asp:ContentPlaceHolder ID="PlaceHolderNavSpacer" runat="server"/>
<asp:ContentPlaceHolder ID="PlaceHolderTitleLeftBorder" runat="server"/>
<asp:ContentPlaceHolder ID="PlaceHolderTitleAreaSeparator" runat="server"/>
<asp:ContentPlaceHolder ID="PlaceHolderMiniConsole" runat="server"/>
<asp:ContentPlaceHolder id="PlaceHolderCalendarNavigator" runat ="server" />
<asp:ContentPlaceHolder id="PlaceHolderLeftActions" runat ="server"/>
<asp:ContentPlaceHolder id="PlaceHolderPageDescription" runat ="server"/>
<asp:ContentPlaceHolder id="PlaceHolderBodyAreaClass" runat ="server"/>
<asp:ContentPlaceHolder id="PlaceHolderTitleAreaClass" runat ="server"/>
<asp:ContentPlaceHolder id="PlaceHolderBodyRightMargin" runat="server" />
</asp:Panel>
    </form>
  </body>
</html>


参考文献:
http://www.microsoft.com/japan/powerpro/TF/column/tm_02_3.mspx
最低限のマスタ ページを作成する

ASP.NET キャッシュ

ASP.NETにおいて、パフォーマンスのボトルネックとなるのは
以下の要素。

  1. データアクセス(DBやメインフレームへのアクセス)
  2. SOAアクセス(他Webサービスへのアクセス)
  3. セッションステートアクセス(セッションステートサーバーやDBへのアクセス)

これらは、すべて低速な(メモリに比べて)ディスク等にアクセス
するために発生しており、対策が必要となることが多い。


そこで、ASP.NETにもキャッシュ機能が提供されている。
ただし、使用する上での注意点もある。

  1. 内部コードで明示的に記述が必要
  2. データがワーカープロセスごとにキャッシュされる


実際の運用現場なんかでは、リバースプロキシによるキャッシュを
利用するところも多いです。
ただ、適切に設定しないと、ユーザーに古い情報を表示すると
いったこともよくあります。


Microsoftは、リバースプロキシを利用したキャッシュを
推奨しているだとか。(Webサーバー5台に対して1台が目安)
特に地理的に分散している状況では効果が大きいらしい。

※参考文献「パフォーマンスとスケーラビリティを向上させる ASP.NET Web キャッシュ」から引用


まぁ、ASP.NETのキャッシュ機能を利用する場合は、ASP.NET
キャッシュ機能とネットワーク構成の把握は必須ですな。
(SqlCacheDependencyとかは個人的に興味ありますが。)


参考文献:
パフォーマンスとスケーラビリティを向上させる ASP.NET Web キャッシュ
ASP.NET 2.0が変えるWebアプリ開発の世界 第8回 新キャッシュ&コールバック機能でパフォーマンス改善(1/3) - @IT

Microsoft AJAX CDN

CDNって知ってます?
「Content Delivery Network」の略なんですが、
ネットワーク経由で色々なコンテンツを提供するサービスです。


最近、MicrosoftがこのCDNでJSファイルやCSSファイルを
提供しているようです。


使用するのは至って簡単で、自分の作成したページに下記のタグを
埋め込むだけ。

<script src="http://ajax.microsoft.com/ajax/jquery/jquery-1.3.2.min.js" type="text/javascript"></script>  


参考文献:
ScottGu's Blog - Announcing the Microsoft AJAX CDN

ASP.NET4 オートスタート機能

ASP.NET4からは、これまで煩わしかった
初回アクセスの遅延がなくなりそうです。


ASP.NET4より「オートスタート機能」が提供されており、
Application_Startイベント等で記述していた処理を事前に
処理することが可能となっています。


この機能で、初回アクセス時のコンパイルのために、
別途スクリプトを使用して、態々アクセスする必要も無くなりそうです。


参考文献:
オートスタートするASP.NETアプリケーション(VS 2010&.NET 4シリーズ) - @IT
ScottGu's Blog - Auto-Start ASP.NET Applications (VS 2010 and .NET 4.0 Series)

Visual Studio 2010

5ヶ月ぶりにブログをアップ!


知らぬ間に月日は流れ、「Visual Studio 2010」の内容も
具体的に分かってきました。


今回の主な内容は、こんなもん。

  1. jQueryのサポート
  2. MOSS構築機能の強化
  3. C++の強化(Windows7対応)


jQueryのサポートは、いろんな意味で大きい変化ですね。
Microsoftオープンソースを無視できない状況に置かれている表れでしょう。


他にも話題の「Windows Azure」に対応する機能がリリースされるはず。


なんにせよ、.NET Frameworkもとうとう4.0まで来ましたね〜。