SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Silverlight 2で作成する業務アプリケーション入門(AD)

.NET Frameworkの最新技術とSilverlightとの連携

Silverlight 2で作成する業務アプリケーション入門(4)

  • X ポスト
  • このエントリーをはてなブックマークに追加

SilverlightとDLR(Dynamic Language Runtime)

 SilverlightではDLR上でPythonやRuby、JScriptといった言語での開発をサポートしています。本項では、SilverlightにおけるDLRが業務アプリケーションにどのように役立つのかを調べていきたいと思います。

DLRとは

 DLR(Dynamic Language Runtime)とは、.NET Frameworkで動的言語を動作させるための実行基盤です。DLRによって、各動的言語間の型を一貫して提供することで、動的言語間やC#やVisual Basicと言ったCLR(Common Language Runtime)の言語間の会話を可能とします。現在サポートされている動的言語はIronPython、IronRuby、Managed JScriptの3つですが、DLRの登場で.NET Framework上で動的言語を作りやすくする環境が整備されたということになります。

SilverlightとDLRの関係

 DLRは図2のように、.NET Frameworkや.NET Framework for Silverlightの上に実装され、コンソールアプリケーションやASP.NET、Silverlightといった環境にホストされます。

図2:DLRの概要
図2:DLRの概要

 つまり、DLR上に構築された動的言語を使用すれば、コンソールアプリケーション、ASP.NET、Silverlightといったアプリケーションで動的言語を使用したり、C#やVisual Basicといった言語から、動的言語で実装された機能を呼び出すことが可能になるのです。

 また、Silverlightでは、後述するHTML DOMとの統合機能によってSilverlightからクライアントのHTMLを操作することが可能なため、JavaScriptの代わりに動的言語を使用してHTMLの操作を行うことも可能になっています。

SilverlightでDLR対応言語を使用するためには

 SilverlightでDLRを使用するためには、CodePlexで提供されているSilverlight Dynamic Languages SDKを使ってプログラミングを行う必要があります。

 このSDKには、SilverlightでIronPythonやIronRuby、JScriptといった言語を動作させるためのdllと、各言語でSilverlightアプリケーションを作成するためのテンプレート、xapファイルの作成コマンドといった物が含まれます。

 使い方については、同梱されているReadme.txtを確認してください。

動的言語を使うメリット

 .NET Framework上で動的言語を使用できるとして、業務アプリケーションを開発する際のメリットはどのような物があるでしょうか。

 筆者は動的言語を使うことで次のようなメリットがあると考えています。

  • 動的言語の開発経験をそのままSilverlightで使用することが可能
  • 動的言語を「のりしろ」的な役割で使用することで柔軟な対応が可能

 1つ目の利点については説明は不要でしょう。DLRでは、現在正式にサポートされているIronRubyやIronPython、JScriptに加えLispやScalaといった動的言語の開発も進められています。SilverlightとDLRの組み合わせを使用することで、開発者は好きな言語を選んでアプリケーションの開発が可能となります。

 2つ目の利点については、少し説明が必要でしょうか。

 DLR上に作成されたアプリケーションは、CLRから動的に呼び出して実行することができます。つまり、C#やVisual Basicといった言語からIronPythonやIronRubyで作成されたスクリプトを読み出して実行することができるということです。

 この特性を利用して、ユーザーから頻繁に仕様変更が予想される部分や、手軽に変更を行いたい部分を動的言語で実装し、C#やVisual Basicから呼び出します。動的言語を動的な部分と静的な部分をつなぐ「のりしろ」として使用するのです。

 リスト9はC#から動的にPythonのコードを実行している例です。

リスト9 C#からのPythonコードの動的実行
var pythonCode = "1 + 2";

// 1.動的言語の設定
var languageSetup = new LanguageSetup(
    "IronPython.Runtime.PythonContext, IronPython, " +
    "Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
    "IronPython 2.0",
    new string[] { "IronPython", "Python", "py" },
    new string[] { ".py" }
    );
var scriptSetup = new ScriptRuntimeSetup();
scriptSetup.DebugMode = true;
scriptSetup.LanguageSetups.Add(languageSetup);

// 2.動的言語のエンジンを取得
var runtime = new ScriptRuntime(scriptSetup);
var scope = runtime.CreateScope();
var engine = runtime.GetEngine("py");

// 3.コードの実行
var sum = engine.Execute(pythonCode, scope);

 動的言語をC#などから呼び出す場合は、次の手順で動的言語を読み込む必要があります。

  1. 動的言語の設定
  2. 動的言語のエンジンを取得
  3. コードの実行

 例えばコード中の pythonCode は IronPython のソースコードを格納した文字列です。プログラム中でソースコードをサーバーからダウンロードして実行することで、C# や Visual Basic で記述された既存のSilverlightプログラムをコンパイルすることなく動作を変更することもできますし、Excelの計算式のようにユーザーにプログラムの動作を定義してもらうといった使い方もできます。

 C#やVisual Basicで業務アプリケーションを作成している場合は、C#やVisual Basicといった強い型付け言語をメインにプログラムを作成し、動的に変更したい一部を動的言語で作成するというシナリオが思い浮かびます。

SilverlightとHTML DOMの連携

 Silverlightでは、SilverlightをホストしているHTMLの要素を操作したり、HTML(JavaScript)からSilverlightの要素を操作することができます。つまりJavaScriptの代わりにPythonやRubyといった言語からSilverlightを通じてHTML DOMを操作することもできるということです。

 少し例を見てみましょう。リスト10はSilverlight Dynamic Languages SDKに含まれるslコマンドで生成したHTMLに、textBox1とbutton1というオブジェクトを追加した例です。

リスト10 IronPythonからHTMLを操作する例(HTML)
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Silverlight Template</title>
      略
</head>
<body>
  <input type="text" id="textBox1" />
  <input type="button" id="button1" />

      略

    <object data="data:application/x-silverlight," type="application/x-silverlight-2" width="100%" height="100%">
      <param name="source" value="python.xap"/>

      略

</body>
</html>

 HTMLがロードされたときに、textBox1にメッセージを表示し、ボタンがクリックされたときにメッセージボックスを表示するコードをIronPythonを使って作成したいと思います。コードの例はリスト11のようになります。

リスト11 IronPythonからHTMLを操作する例(IronPython)
from System.Windows import Application
from System import EventHandler
from System.Windows.Browser import HtmlPage
from System.Windows.Browser.HtmlPage import Document

def Button1_Click(sender, event):
  HtmlPage.Window.Alert("ボタンクリック");

class App:
  def __init__(self):
    Document.textBox1.value = "Hello Python";

    handler = EventHandler(Button1_Click)
    Document.Button1.AttachEvent("onclick", handler)

App()

 Silverlightでは、System.Windows.Browser名前空間のクラスを使うことでHTML DOMにアクセスすることができます。IronPythonの初期化処理ではtextBox1にHello Pythonという文字列を表示し、ボタンがクリックされたときにメッセージボックスを表示するため、Button1_Clickというイベントハンドラが呼び出されるように設定します。

まとめ

 こうみると、インタラクティブな要素以外にも、現在の業務アプリケーションを作成する上で必須と言える機能が多く含まれる開発基盤としてSilverlightは大きな役割を持っていることが分かります。

 特に大きいのは、C#やVisual BasicといったCLRの言語を使用してアプリケーションを作成することでCLRによるコンパイル時の型解決の恩恵を享受しつつ、動的言語との連携で柔軟にアプリケーションの動作を変更できるということです。

 ぜひ一度Silverlightによるアプリケーションの開発を試してみてください。その開発生産性の高さに驚くかもしれませんよ。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Silverlight 2で作成する業務アプリケーション入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト かるあ (杉山 洋一)(カルア(スギヤマ ヨウイチ))

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3496 2009/01/26 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング