Gleyzer両氏によって共同開発されました。2019で、同言語の発表を行いました。InfoQはPurdy氏に言語と、氏らが解決を目指した問題について聞きました。設計/アーキテクチャアジャイルマニュフェスト:ソフトウェアアーキテクトの視点ソフトウェアアーキテクトの役割と責任はアジャイルソフトウェア開発のためのマニフェストの価値と矛盾していると見えますが、優れたアーキテクトはアジャイル開発チームをサポートするテクニックを見つけています。Streamingは、ストリーミングデータのためのSQLライクなインターフェースを提供します。Streamsによって、Redisがストリーミングデータを複数のプロデューサとコンシューマの間で消費、保持、配信することができるようになります。ソフトウェア開発のマニフェストたゆまず息もつかずに市場に突進することで、会社を静かに消滅の崖っぷちへと追い込みます。それは設計してコードを書く方法を再考する時です。簡単さへの投資は、速さへの投資です。簡単さは知的財産の主鉱脈でもあります。競争上の優位性は、一度失ったら、もう一度手に入れることはほとんど不可能です。Buytaerts氏が過去10年間にわたって、企業がDevOps採用のハイプサイクルをくぐり抜け、変革に対する誤解を解消する過程を支援してきた経験について語ります。原文(投稿日:2019/05/30へのリンク2019年4月中旬にMicrosoftは、「なんでもできる」実験フェーズから「これを実現することを約束している」プレビューに若いフレームワークを前に進めた。フレームワークはBlazorと名付けられ、ブラウザーで実行され、Razorと呼ばれるテンプレートシステムまたは「Viewエンジン」を利用するため、.NET開発者がほとんど諦めていたシナリオを可能にする。DLLをブラウザで実行できる。関連スポンサーコンテンツ2つのBlazorブランドのホスティングモデルがあります。この記事ではクライアントサイドバージョンに焦点を当てます。サーバーサイドの詳細についてはBlazorサーバーサイドホスティングモデルを参照してください。(WPF/E)」というコードネームのフレームワークで、Silverlightとして公開された。LanguageまたはXAMLと呼ばれる宣言型ユーザーインターフェイスをサポートしていた。(DOM)を表面化させた。(CLR)をブラウザープラグインとして実装して、完全な.NETをサポートしており、導入が加速した。これにより.NET開発者はJavaScriptのホコリを払い、クロスブラウザーのテストを心配することなく、共通のコードベースを持つひとつのプラットフォームに集中してアプリを配信できるようになった。Silverlightは気づいていないが、2007年はこのプラットフォームにとって厳しい年であった。関係なさそうな出来事が2つ起こり、最終的には終焉に向かうことになった。(W3C)の共同作業が始まり、HTML5仕様の最初のドラフトが2008年に公開された。2つ目が2007年6月29日に、AppleがiPhoneをリリースした。革新的な製品が登場し、それがすべてを変えることがある。Jobsレースは始まった。携帯電話はほぼ一晩で連絡先リスト付きの折りたたみ式電話から、ゲームや組み込みWebブラウザーを持つポータブルコンピューターに進化した。短期的にはSilverlightの未来は有望に見えた。Chromeがサポートした。MicrosoftがSilverlightをiPhonesやAndroid電話に搭載することを考えれば、「一度書けばどこでも実行できる」という聖杯がついに発見されていただろう。「ブラウザー上の仮想マシン」は実行中のセキュリティの問題、実用上の目的、そして潜在的なバッテリーの消耗など多くの理由により、特にモバイルデバイス上のブラウザープラグインへの扉は閉じらることとなった。業界はモバイルのエクスペリエンスを構築するのにHTML5に注目し始めた。5がリリースされた2011年には、多くの開発者は、もう新しいバージョンがないという前兆を見ていた。HTML5とJavaScriptはWeb開発者の心と精神を勝ち取り続けた。jQueryのようなツールはDOMを正規化し、マルチブラウザーアプリケーションを構築しやすくしたのと同時に、ブラウザーエンジンは一度ビルドすればどこでも実行できるようにする一般的なDOM標準を採用し始めた。(SPA)は主流になり、ブラウザーのオペレーティングシステムに最適な言語としてJavaScriptが採用された。プラットフォームとしてのJavaScript2013年3月、asm.jsが世界に紹介された。ドキュメンテーションでは、コンパイラのターゲット言語として使用できる低レベルに利用できるJavaScriptの厳密なサブセットとしてそれを説明している。この仕様では基本的に一連のJavaScript規則を定義しており、事前コンパイルでコードの最適化を可能にし、(JavaScript自身を動的言語にした)厳格な型付けとヒープベースのメモリモデルを提供する。asm.jsの導入により、C/C++コードをJavaScriptにコンパイルできるようになり、新たな可能性が広がった。規約の制限により「asm.js-aware」エンジンは、JavaScriptを高パフォーマンスのネイティブコードに効率的にコンパイルできるようになった。buf);}このコードは文字列からテスト文字か、その終わりを示すゼロバイトを効率的にスキャンして、オフセットを計算する。C++は、Clangと呼ばれるツールを使ってLLVMツールチェインでバイトコードに準拠したコンパイルができる。LLVMは高速にクロスプラットフォームのコードにコンパイルできる一連の技術である。Emscriptenと呼ばれるプロジェクトは、ツールチェインを利用してasm.jsを生成する。C++コードをEmscriptenでコンパイルすると非常に最適化された数十行のJavaScriptが生成される。result|0;}生成されたJavaScriptはすべてのブラウザーで正しく実行される互換性がある。ゼロ付きの排他的論理和(|0)は、単に任意の数値を符号付き整数に変換するだけである。古いブラウザーでは、小数部分を持たない数値であることを保証する。モダンなブラウザでは、この規約により事前コンパイラは32ビット整数を使用され、デフォルトの64ビット浮動小数点数と比べて結果としてより高速な算術演算が可能になる。ゼロの右シフト(>>0)は、オーバーフローを防ぎ、「インデックス」の型を整数型として宣言するとともに、asm.jsで利用できるHEAP8という繰り返し利用できる型付きのバイトのバッファを宣言する。asm.jsではforによる繰り返しは定義されていない。全てwhile(1)ループに変換される。これによりコンパイラ最適化が簡単に適用できる。4エンジンに移植され、ブラウザーの中で、ネイティブに近いパフォーマンスで3D一人称ゲームを実行できた。新しい希望2017年の早くスタックベースの仮想マシンにおけるバイナリ命令フォーマットのWebAssemblyがリリースされた。WebAssemblyはいくつかの点でasm.jsよりも優れた移植可能なコンパイルターゲット(略してWasmと呼ばれる)を提供する:バイトコードフォーマットとして、スクリプトを解析して、最適化のためにプリコンパイルする必要がない。コードは直接、ネイティブ命令に変換できる。ロードとコードの実行を開始する起動時間は、asm.jsと比べて桁違いに早い。バイトコードフォーマットはコードを配信するためによりコンパクトである。Wasmは独自の命令セットを実装しており、JavaScript言語による成約を受けない。コンパイルするすべてのコードはWebAssemblyをターゲットにできる。前の例では、単純にコンパイラフラグを変更すると、拡張子.wasmが生成される。ファイルはたった116バイトしかない。ファイルにはバイトコードが含まれているが、標準化されたテキスト表現がWebAssemblyテキストフォーマットという名前で存在している。select)コードサイズは最適化されているため、関数名はaに変更されている。WebAssemblyは現在1.xが安定版としてリリースされており、モバイルを含むすべてのモダンブラウザーでサポートされている。いくつかの言語は有効なコンパイルターゲットとしてWasmを採用している。TypeScriptなど多数の言語を使用してWebAssemblyをビルドできる。シミュレーション、暗号化、圧縮などのソリューションで実装されている。FrameworkをWebAssemblyに移植する作業が始まった。Sanderson氏は、2017年の年末に彼のBlogでBlazorを発表した。それは「単なる実験」であり、正式な製品ではなかった。それは「.NETをWebAssemblyで実行するにはどうしたらよいですか?」という質問から始まった。最初の答えは、彼がたった数時間でWasmバイナリとしてコンパイルしたコンパクトバージョンの.NETランタイムであった。.NET自身はブラウザーではあまり便利ではなく、ユーザーと対話するUIを何かしらの方法で作る必要がある。Webテンプレートを作成するマークアップとC#の組み合わせたRazorファイルの安定した作業を構築し、Blazorはデータバインディングと依存性注入から、再利用可能なコンポーネント、レイアウト、JavaScripttoとfromの呼び出し機能など、多数のサービスが追加された。(SPA)を構築することが可能になった。デフォルトのBlazorアプリケーションなぜ誰を気にする必要がある?Blazorに対する初期の開発者の反応は圧倒的にポジティブであった。その理由はいくつかある:開発者が、以前にJavaScriptが根付いているクライアントサイドのアプリを構築するのに、言語(C#)とフレームワーク(.NET)を使用できるプラグインなしでモバイルブラウザーを含めたすべてのモダンブラウザーで実行できる開発者が.NETエコシステムの既存のライブラリを「そのまま」使用できる。ApplicationであるここまででBlazorの歴史と動機が理解できたと思う。ここからは技術的な詳細を探っていこう。GitHubリポジトリに公開している。Blazorインストールに必要なものはBlazor入門記事にある。Coreバックエンドプロジェクトかを選択できる。このプロジェクトは、既存のサーバーサイドMVCベースのプロジェクトに非常に馴染みがある。生成されたDLLが、ブラウザー上に直接読み込まれて、WebAssemblyバージョンの.NETで実行される。JavaScriptでmono.wasmが動的に読み込まれ、ブラウザー内で.NETが実行される。アプリケーションを構成する残りのDLLが読み込まれる。(依存性注入を含む)ブラウザー内のC#デフォルトテンプレートにはダミーの天気情報をフェッチするページが含まれている。これはクライアントのWasmによって完全にレンダリングされるRazorビューである。FrameworkのHttpClientのコピーを依存性注入で取得している。Http最後にページのコードの一部が@functionsブロックに埋め込まれている。ここで注意することは、コードがすべてC#であることだ。ネットワーク操作は、おなじみのHttpClientとasync/awaitがサポートされている。Http.GetJsonAsync<WeatherForecast[]>("api/SampleData/WeatherForecasts");}ビューテンプレートはページをレンダリングするが、コントロールはどうだろうか?再利用可能なコンポーネントBlazorは階層コンポーネントの構成可能なUIをベースにしている。コンポーネントと他との唯一の違いは、ルートを提供するpageディレクティブである。inputのレンジを補強するLabelSlider.razorと呼ばれるコンポーネント用のテンプレートである。/><span>@CurrentValue</span>バインド構文はbind-{property}-{event}というフォーマットである。eventはオプションで、イベントが発生したらいつでもバインドが更新される。これがない場合、ユーザーがスライダーバーの移動を止めたときにspanのみを更新する。oninput値をフックすることで、スライダーが移動するごとに更新される。関連付けられたコードは、親コンポーネントに最大値と最小値の幅の値をセットでき、現在の値にdata-bindできるようにパラメータを公開する。Actionプロパティは名前でCurrentValueに関連付けられており、規約によりCurrentValueChangedが双方向のデータバインディング(親コンポーネントは変更イベントとバインドされた値を更新するために「listen」できる)を容易にする。}タグ付けされていないParameter属性はコンポーネントでのみ表示される。コンポーネントの再利用は、コンポーネント名のタグをドロップして、必須パラメーターを指定するだけである。bind-CurrentValue="@currentCount"/>この例では、親コンポーネントのcurrentCountプロパティが双方向バインディングとして確立している。既存のライブラリを使用するBlazorの非常に強力な利点は、既存のライブラリを「そのまま」統合でいることである。markdownを使って、ブラウザーでHTMLをプレビューできるBlogエンジンを考えてみよう。Blazorでこれを構築する場合、NuGetパッケージをインストールするだけである。このケースではオープンソースのMarkDigプロセッサーが利用できる。DLLはブラウザーにインポートされ、他のプロジェクトの参照と同様に、クライアントサイドアプリケーションから呼び出すことができる。ブラウザーで変換されたMarkdownJavaScriptにおける対話Blazorが提供する重要なサービスは.NETからJavaScriptを呼び出すことと、その逆である。BlazorからJavaScriptメソッドを呼び出すためにグローバルのwindowオブジェクトにアクセスする必要がある。"Wow!");InvokeAsyncメソッドは、値の受け渡しと受け取りをサポートしており、値はJavaScript/.NET間でBlazorランタイムによってマーシャリングされ、自動的に双方向で変換される。JsInvokable属性を使って、C#メソッドを公開するとJavaScriptから呼び出せる。}}JavaScriptからの呼び出しはDotNet.invokeMethodでアセンブリ名、公開されたメソッド名、すべてのパラメーターを受け渡して呼び出す。JavaScriptから.NETの呼び出しこれにより、従来のアプリケーションの拡張を可能にし、既存のJavaScriptを利用可能にする。Blazorアプリから他のWebAssemblyモジュールを呼び出すこともできる。Blazorは前進しているMicrosoftはBlazorを実験フェーズから正式プレビューに移行させた。Coreロードマップを参照)、クライアントリリースは間もなく続く予定である。最終化までは、まだ作業がある。デバッグエクスペリエンスは非常に制限されており、改善の必要がある。事前コンパイルでネイティブのWasmを生成することによってコードパフォーマンスを最適化する機会がある。全体のサイズは、ブラウザーに送る前に(tree-shakingとして知られているプロセスで)未使用のライブラリのコードを削ることによって削減する必要がある。WebAsssemblyの関心と採用は日々増しており、Blazorは夢にまで見たどこででも実行できるC#と.NETコードを実現した。Liknessは、MicrosoftのAzureクラウドアドボカシーである。Jeremyは1982年に初めてプログラムを書き、25年間エンタープライズアプリケーションを構築してきた。MVPであり、国際的な基調講演スピーカーである。Jeremyは食物ベースの食事をとり、自由時間のほとんどを、北西海岸にある彼の家の近くでランニング、ハイキング、キャンピングをして過ごしている。Jeremyのブログをフォローしよう。毎週火曜日に前週のまとめコンテンツがお送りいたします。25万人ものシニアデベロッパーのコミュニティーにぜひご参加ください。サンプルを見るあなたのメールアドレスはこちら国を選んでください。プライバシーポリシーに従って私の個人情報を扱うことに同意します。登録するとさまざまなことができます。アカウント登録をしてInfoQをお楽しみください。あなたの意見をお聞かせください。毎週火曜日に前週のまとめコンテンツがお送りいたします。25万人ものシニアデベロッパーのコミュニティーにぜひご参加ください。サンプルを見る様々なイノベーターとアーリーアダプターがお送りするテクノロジーの概要を見る。自分がまだ知らないことに気づいていないと知るあなたが興味のあるトピックスをいつでも最新な情報に。あなたのメールアドレスはこちら国を選んでください。プライバシーポリシーに従って私の個人情報を扱うことに同意します。よい世界へ私たちが暮らす世界を大切に思い、よりよいものにしたいと考えています。人のためのソフトウェア開発を加速し私たちのミッションを実現することで、この思いを成し遂げようとしています。私たちは利益の1%をさまざまな慈善団体に寄付しています。会社として、また従業員として、そうしたことの価値を強く信じているからです。with.プライバシーBTあなたのプロファイルは最新ですか?プロフィールを確認してアップデートしてください。アドレス*Eメールを変更すると確認のメールが配信されます。会社名:現在の会社名をご入力ください。Other組織規模:現在の組織規模をご入力ください。2,501+国:現在の国を設定してください。Zimbabwe都道府県:現在の都道府県に設定してください。次の都道府県にアップデートする:ニュースレターを購読しますか?インダストリーメールを購読しますか?本Eメールに登録すると、以前より関心のあったトピックの関連情報をお送りする場合がございます。詳細はこちらのプライバシーポリシーをご覧ください。newsletter?新しいメールアドレスに確認用のメールを送信します。このポップアップ画面は自動的に閉じられます。