Webアプリを創る

Umbraco 4 と ASP.NET MVC

2012年7月2日

2012年6月13日に Umbraco 5 の開発が中止することが公表されました。そこでの最大の疑問は、ASP.NET MVC への対応をどうするのかということでした。jQuery のような端末側で動作する UI フレームワークを利用したい場合には、Web Form では対応をしにくいという問題があります。

Umbraco コアチームからの回答は、Umbraco 4 のフロントエンドに MVC を導入するということのようです。正式の発表ではありませんが、コアチームの一員である Shannon Deminick 氏が UmbraMVCo というネイティブ MVC ルーティングを試せるパッケージを公表するとともに、氏のブログページ Shazwazza で「MVC in Umbraco V4」という投稿を行っています。Umbraco 5 の開発での成果を生かせば、Umbraco 4 のフロントエンドにネイティブの MVC を動作させることは、それほど時間がかからないようです。Umbraco 4 の MVC 対応に期待したいと思います。

UbraMVCo を実際に使ってみました。すでに Hijacking routes を使って ASP.NET MVC で機能拡張が可能になっています。Umbraco 5 の開発中止のアナウンスを聞いたときはUmbraco がどうなるかと思った人が多かったと思います。しかし、Umbraco の将来は心配ありません。Umbraco 4 は非常にレスポンスがいい優秀なソフトです。その上で、ASP.NET MVC を使って機能拡張ができるようになるので、今後も十分に期待できます。

現状では UmbraMVCo はプレビュー版なので、インストールはかなりトリッキーです。自分の場合のUmbraMVCo のインストールの手順を以下にメモしておきます。

1. WebMatrix で、「Web ギャラリーからサイトを作成する」を利用して、Umbraco をインストールする。

ギャラリーで Umbraco CMS を選択すると、現時点では Umbraco 4.7.2 がインストールされます。注意点としては、Umbraco 4.7.2 のスターターキットのMacroの一部が Umbraco 4.7.2 用に修正できていないというバグがあって、Web サイトを表示したときにエラー画面が表示されるということです。修正箇所については、Umbraco の5分間インストールのページ を参考にしてください。

2. Visual Studio 2010 又は Visual Web Developer 2010 Express で空の ASP.NET MVC 3 アプリケーションを作成する。

もし、ASP.NET MVC 3 をインストールしていない場合は、ASP.NET MVC 3 RTM Tools Update のページからダウンロードしてインストールしておきます。

・Web サーバーについては、IIS Express を使用するように設定。

・Global.asax を削除する。

3. WebMatrix で作成した Umbraco のファイルを、VS で作成した空の ASP.NET MVC 3 アプリケーションに上書きコピーする。

「デバック開始」又は「デバッグなしで開始」で開始すると、Umbraco が開始されます。ここまでの方法で、Umbraco を VS にインストールしてやると Razor のインテリセンスが効くので便利です。今回だけでなく Razor を使用する場合は、この方法を使ってみてください。

4. UmbraMVCo をインストールする。

UmbraMVCo のページからパッケージファイルをダウンロードしてインストールします。インストールが完了すると下の図のようにエラーが発生します。この画面のことを Readme.txt ではYSOD(Yellow Screen Of Death)といっています。このエラーは、Umbraco のルーティングとMVCのルーティンが競合しているため発生するようで、Web.config から umbracoRequestModule への参照を削除します。

image

5. Razor でテンプレートを作成する。

以上で管理画面には正常にアクセスできるようになります。しかし、Web サイトの方は空白で何も表示されない状態になります。ソースを見ると以下のような内容が表示されますが、WebForm のテンプレートが無効になっているためで、MVC Razor (cshtml)で新たにテンプレートを作成する必要があります。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content="text/html; charset=utf-8" http-equiv=Content-Type></HEAD>
<BODY></BODY></HTML>

現時点では、Razor のテンプレートについては管理ツールで作成することができません。しかし、VS 上にインストールしているので、VS で簡単に作成することができます。~/Viewsフォルダのすぐ下に、DocumentType のエイリアス名.cshtml でテンプレートを作成してやります。StarterKit の場合であれば、Homepage の方は umbHomepage.cshtml 、Textpage の方は umbTextpage.cshtml になります。

Razor に関しては、Umbraco のヘルパー関数、例えば @Umbraco.Field は今のところ使えないようです。各フィールドについては、@CurrentPage.bodyText のように CurrentPage.フィールド名でアクセスできます。また、Recursive に取得したい時には、@CurrentPage._siteName のようにフィールド名の前にアンダースコアをつけます。

6. Hijacking Umbraco Route について

UmbraMVCo は、現時点では、Surface Controller をサポートしていません。Surface Controller をサポートとしようと思えば、BackOffice の修正が必要なので今回は無理だったと思います。そのかわりというのではないのですが Hijacking Umbraco Route がサポートされています。Hijacking Umbraco Route の実装は結構簡単なようです。Hijacking Umbraco Route の使用方法については、詳細はHijacking Umbraco Route に説明がありますが、クラス名が変更になっています。 例えば、StarterKit の場合の Textpage に対して Hijacking Umbraco Route を行う場合には、以下のようになります。コントローラ名を Document type のエイリアス名にして作成して、RenderMvcController を承継させます。ActionResult として Index をオーバーライトすると、そのDocument type の場合には全てが Route されます。特定の テンプレートだけ Route したい場合は、Action 名を、テンプレートのエイリアス名にしてやれば動作します。

    public class umbTextpageController : RenderMvcController
    {
        public override ActionResult Index(RenderModel model)
        {
            ここに処理を書く
            return base.Index(model);
        }
    }

Umbraco 5 の開発中止について

2012年6月15日

6月13日に「Umbraco 5 の開発を中止する」という決定が Umbraco の Web ページに掲載(v5 RIP)されました。簡単に要約すると、Umbraco 5  の開発を中止して、今後は、Umbraco 4 をベースとして開発をおこなうということです。

個人的にいうと、U5 の開発が中止されたことは非常に残念です。しかし、U5が重くてU4を超えるには労力も時間も必要だということになれば、U4をベースとして開発をやり直すというのは賢明な判断です。U4 は優秀なCMSで、競争力も十分あります。Umbraco 日本語 Wiki も、対象を U4 に変更して継続していきたいと思っています。協力をお願いします。

Umbraco 5.2 Beta を使ってみた

2012年6月10日

Umbraco 5.2 Beta が6月7日に公開されたので、特に問題となっているパフォーマンスを中心に Web Page Performance Test を使ってテストしてみました。

結論からいうと、Umbraco 4 は優秀な CMS であり、Umbraco 5 が Umbraco 4 に追いつくにはもう少し時間がかかりそうだということです。Umbraco 5.1 と比較すると  Umbraco 5.2 はファーストビューの時間が改善されてはいますが依然として約10秒かかり、そのうえアプリケーションプールのメモリが300MB以上も必要です。一方、Umbraco 4 は、ファーストビューが2秒で、メモリーも30MB程度です。アプリケーションプールのメモリの使用量が多いとリサイクルされることが多くなるので、特に共用サーバーを使用している場合には体感速度には相当な差が出ることになります。

こういう結果から判断すると、現時点で Umbraco 5 の利用を勧めることができるのは、ASP.NET MVC の開発者がメモリーに余裕のある Web サーバーを利用する場合です。それ以外の場合は Umbraco 4 を利用した方がいいと思います。Umbraco 5 は、カスタマイズの容易さということでは優れたものがあります。今後の改善に期待したいと思います。

Umbraco 5.2
image

Umbraco 5.0
image

Umbraco 4.7
image

mojoPortal
image

Windows 8 RP の最大ユーザー数と IIS 8

2012年6月2日

Windows 8 RP が公開されたので、インストールしてネットワーク機能を調べてみました。

Windows 7 では、同時利用可能なセッション数(同時接続可能なユーザー数)が最大20セッション(ユーザー)に緩和されました。Windows 8 でどうなっているか?ということで、まず使用許諾契約書があるかどうかDVDの中を探してみたのですが見つかりませんでした。コマンドプロンプトで net config server コマンドをたたいて調べたところ、Windows 7 と同じく「最大ユーザー数 20」となっていました。家庭やスモールオフィスでネットワーク接続される機器が増加している現状からすれば、Windows 7 での緩和は、Windows 8 でも継続されるものと考えられます。

次に、IIS をインストールしてみました。Windows 8 RP 付属の IIS のバージョンは、Windows 7 の IIS 7.5 から IIS 8.0 になってバージョンがあがっていました。image機能面を見てみると、デスクトップ版付属のIIS 8 の機能制限については、資料を探してみたのですが、まだ見つかっていません。正確な所はわかりませんが、触っている限りでは、IIS 7.5 と特に変更はないように感じています。

次に、機能面をみてみると、左の図のように、「Windows の機能の有効化または無効化」の画面では、ASP.NET 3.5 と 4.5 の双方に対応しているのがわかります。それ以外に、3つの機能が増加しています。アプリケーション開発機能の「Application Initialization」と「WebSocket プロトコル」、セキュリティの「SSL 証明書の集中サポート」です。

Application Initialization の機能というのは、長時間アクセスのない Web アプリケーションにアクセスすると表示がなかなかされずにいらいらしたとう経験があると思います。Web アプリケーションの起動にはかなりの時間がかかるので、その初期化中については別の画面を表示させて初期化中であるということをユーザーに伝えることによりユーザー エクスペリエンスを改善しようとするものです。

WebSocket は、もともとはHTML5仕様の一部として策定が進められていたもので、サーバーとブラウザーの間で双方向通信を実現するための技術です。現在は、HTML5とは独立した仕様に切り離され規格の制定作業が進められており、プロトコル仕様は「RFC 6455」のproposed standard となっています。現在広く使われている類似の技術である Ajax と比較すると、WebSocket は、最初から双方向通信を前提として設計されているため、シンプルで効率よく双方向通信を行うことが可能なため、今後の Web アプリケーション開発において欠かせない機能になると思われます。WebSocket は、時間ができたら是非使って見たいと思っています。

Umbraco 日本語 Wiki を公開しました

2012年2月12日

Umbraco 5 が1月末に公開されました。これを機会に Umbraco の日本語情報を増やしたいと思って Umbraco 日本語 Wiki を始めました。Umbraco についての日本語の情報を蓄積・整理して、日本のユーザで共有したいと思っていますので協力をお願いします。

個人的には、Umbraco 5 を使って Web サイトを作成しながら、そのメモを Wiki の方に書いていこうと思っています。Umbraco 5 は、拡張性が非常に高いので、いろんな面で活用できると思っています。