API開発のためのプログラミング言語"Ballerina"の直感的な構文について解説します。認証や承認、OpenAPIツール、可観測性、SQL/NoSQLクライアントライブラリなど、重要な言語機能についても論じます。記事を読み終えれば、Ballerinaが次のバックエンドAPI開発の有力な候補である理由がよく理解できるでしょう。2022年4月InfoQ編集チームが2022年に進化するソフトウェアアーキテクチャと設計のトピックをどのように見ているかの概要です。アーキテクトが今、何を設計しているかに焦点を当てています。Pan氏が、分散データベースシステムにおけるシャーディングアーキテクチャのパターンについて論じます。ShardingSphereプロジェクトがデータシャーディングの課題にいかに対処しているかを説明した上で、DistSQLを使って分散データベースと暗号化テーブルを生成する方法の実例2つを論じています。カルチャー&手法カオステストで、見えない課題からアプリケーションのレジリエンスを改善するこの記事では、Netflixが提唱するカオステストの原則を列挙した。読者は、カオステストが提供するメリットとデメリットを理解できるはずだ。することで、カオステストを行うかどうかの判断材料となる。リスクに対するすべてのメリットを考慮して、カオステストを行うために経営陣を説得すべき理由も説明した。原文(投稿日:2013/11/11)へのリンク近頃、Microsoftの技術スタックにはさまざまな流れがあり、開発者は取り残され、どの技術に注力するべきか迷っています。MicrosoftがSilverlightような技術を公式に非推奨にせずに、ゆっくりとなくなっていくのに任せているため、さらに混乱を引き起こしています。Applications"をひもとくのがひとつの解決方法です。このガイドは今年のはじめにリリースされ、Microsoftの技術の方向性やどのような記述を使うべきでないかを教えてくれます。この記事では読者の皆さんがMicrosoftと関連する技術を探索するための良きスタート地点になるでしょう。Formsのような古い.NETの技術はまだ居場所があります。SilverlightやFlashのようなRIAコンテナはもう終わりです。5の10年のライフサイクルを待ちたいと思っていないようです。2015年の終わりまでに、RIAコンテナを閉め出したいと思っています。(クリックして拡大)ハイエンドのアプリケーションでは、完全なネイティブアプリが好ましいです。ローエンドでは、HTML5の能力が向上すると考えられています。どちらに進めばいいかは明示されていませんが、技術の選択については次のように書かれています。ネイティブアプリケーションへ移行する場合、どのようなWindowsデバイスでもネイティブにXAML/.NETをターゲットにすることで既存のスキルを活用し、さらには既存のコードを再利用できます。移植可能なライブラリを使うことでバイナリを異なるプラットフォームで共有することもできます。ブラウザベースのHTML5アプリ向けには、Microsoftは最新の標準に準拠したデバイス向けにアプリケーションを作成するためのツールやフレームワークを提供します。SilverlightはHTMLと相互運用性があるため、順次移行することができます。8ストアアプリの開発に特定の技術を推奨するのを嫌がっていました。この傾向は今もかわりません。.NET/XAML、C++、JavaScript/HTML5からどの技術を選択するのかは、その開発者の好み次第です。このような状況をふまえた上で、MicrosoftはC++は性能が良いと見なしています。再利用性はあまり考慮されていません。PhoneとWindowsディスクトップでコードとリソースを再利用できるからです。Phoneで推奨されているのは、.NETとC++です。ここでもC++は性能上有利です。開発者が得意な方を選ぶのが良いとされています。Cordovaと互換性がありますが、まったく言及されていません。PhoneGapは小さなデバイスにおいて.NETやC++とくらべ貧弱な性能しか出ないと見なされているからでしょう。2013年のBuildカンファレンスでは、性能は最も重要なトピックであり、ユーザビリティやビジュアルデザイン、OS統合などのトピックを押しのけていました。Forms以外すべてのモバイルデバイスで動作するウェブベースのソリューションの選択肢はたくさんあります。MVCが最も基本的な推奨技術です。SPA)を作るという選択肢もあるでしょう。MicrosoftはSPAを技術というよりデザインパターンだと考えています。KnockoutとBreezeもライブラリとして薦めています。CRUDスタイルのアプリケーションを素早く作るにはLightSwitchも選択肢に入ります。LightSwitchはHTMLの描画をほとんど操作できませんが、開発者はさまざまなスクリーンサイズに合わせて自力でレイアウトする必要がありません。Pagesは4番目の選択肢です。Razorのシンタックスのおかげで、PHPやクラシックASPに似た開発経験を提供してくれます。Formsは言及されていません。Formsは実力を発揮できません。stateは簡単に携帯端末のネットワークコネクションを圧迫してしまいます。サービス多くのアプリケーションは外部のデータストレージや処理に頼っているため、サーバサイドの開発は引き続き重要です。Microsoftがこの分野で現役であると考えている技術は6つあります。APIであるべきです。Level3など"のインターネットキャッシュに互換性があるサービスを開発するときに便利です。APIを使う場合、開発者はODataに着目するといいでしょう。ODataはRESTエンドポイントの公開形式とJSONを標準化します。APIよりも柔軟な選択肢だと考えられています。TCPや名前付きパイプを使ったバイナリメッセージで高い性能を得るという使い方があります。欠点は、WCFは扱いにくいということです。JSONやSOAPベースではないフォーマットの場合は使いにくいでしょう。WCFはRPCスタイルの通信を念頭に置いて、企業で使われるために設計されました。一般公開されるRESTスタイルのデザインパターンも実現可能ですが、その場合は、WCFは望ましい選択肢ではありません。Servicesを使うのがいいでしょう。Frameworkも使えます。WorkflowとWCFの統合です。Workflowを使っている場合にのみ、利用するのが良さそうです。Microsoftはほかの使用理由を示していません。SignalRを使った双方向通信.NETベースのクライアントを使っているなら、WCFはしっかり調整された双方向通信の選択肢を多数提供します。.NETとウェブベースのクライアントの両方をサポートしたいなら、SignalRがいいでしょう。Microsoftによれば、SignalRは"数百万ユーザ"までスケールできるそうです。ウェブクライアントはWebSocketsを使うのが推奨されていますが、必要であれば、自動的にロングポーリングのような古い方式に切り替えます。.NETクライアント向けのライブラリを提供するので、ウェブやネイティブクライアントがサービスを共有できます。LightSwitch、その他のODataプロバイダMicrosoftがどのくらいODataを愛しているかは言い尽くせません。APIのODataについてはすでに言及しましたが、それだけではありません。ODataはLightSwitchクライアントでも使えますし、LightSwitchのサーバサイドでも素早くサービスレイヤを開発するのに使えるかもしれません。MicrosoftによればLightSwitchにはコーディングが必要ないものの、柔軟性を失います。中小規模のビジネスアプリケーション向けガイダンスMicrosoftは中小規模のビジネス向けのガイダンスを次のように書いています。けウェブアプリきれいでないCRUDスタイルのアプリケーションを素早く作る場合は、Microsoftは引き続き、LightSwitchを推奨しています。このツールは非プログラマ向けと説明されていました。多くの人はAccessを置き換えるものととらえていました。この見方は薄れつつあります。いうのはLightSwitchはアプリケーションを素早く作りたいIT部門向けのツールとして提供されているからです。Formsは未だに新しいプロジェクト向けに推されています。MVCの中間に位置すると見なしています。リッチなデータグリッドなどの特徴はまだ企業内部アプリケーションとして適しているのです。Pagesは言及されていますが、わずかです。MVCがいいでしょう。Microsoftは学習曲線が長いことを注意しています。Windowsディスクトップ向けアプリケーションMFCやATL/WTLのようなC++ベースのGUIツールキットはすべてリストから外れています。.NETのオリジナルのUIツールキットであるWinFormsは未だに有効な選択肢と考えられています。両者はデータバインディング、async/await、WCFあるいはSignalRを使った双方向通信などモダンなコンセプトをサポートします。WPFとWinFormsのどちらを使うかについてはいくつか考慮する点があります。熟練の開発者であったとしても、WinFormsはWPFよりも遥かに簡単です。WinFormsはとても単純なデータバインディングを使い、クラシックなMVCやMVPを使って開発できます。WPFを使うには複雑なデータバインディングフレームワークを理解し、MVVPパターンを正確に適用しなければなりません。WPFをうまく使うには、リソースディクショナリ、コンバータ、ICommand、XAMLのテンプレートエンジンの知識が必要です。8ストアをターゲットにしているのなら、XAMLの使い方を学ばなければなりません。したがって、この場合はWPFを使ってプラットフォームをまたがってコードを共有できるようにしておくのがいいでしょう。WPFの柔軟な描画エンジンはWinFormsよりもニッチなアプリケーションを開発できます。場合、WPFアプリケーションはWinFormsアプリケーションよりも性能が悪いです。LightSwitchはおそらくウェブクライアントで利用できるもの以上を提供しません。したがって、選択する理由は特にないでしょう。クライアント-サーバは避けるべきMicrosoftが"クライアント-サーバ"というとき、データベースと直接接続するアプリケーションを指し示しています。これが未だに一般的なパターンであることはMicrosoftも認めていますが、彼らは新しいプロジェクトには3層の設計をして、クライアントとデータベースの間にサービス層を挟むことを推奨しています。することで、拡張性が増し、ファイアウォールやその他の障害物をくぐることができます。データベースドライバが使えないプラットフォームへアプリケーションを移植することもできます。Windowsディスクトップを去るMicrosoftはディスクトップアプリケーションを"モダナイズ"するためアドバイスをたくさん提供しています。ほとんどはアプリケーションをほかのプラットフォームに移植する方法についてのアドバイスですが、中にはWindowsディスクトップを去るつもりのない開発者にも役に立つアドバイスもあります。Microsoftのクライアントプラットフォーム(WPFを含む)はMVVMを使うと簡単にアプリケーションが開発できます。状態と振る舞いを表示からしっかりと分離できるので、きれいでメンテナンスしやすいコードを作成し、簡単に複数のデバイスに共有できます。Phoneアプリのような複数のプラットフォーム間でバイナリを共有できます。ポータブルクラスライブラリを使ってクライアントロジック実装することでマルチプラットフォームのアプリケーションを簡単に実現できます。今日のエンドユーザが要求するコンセプトはデスクトップ向けの.NETのでの最新のイノベーションによって実現できます。less"というようなデザイン原則はXAMLのデザインにモダンなUIを使用し、アニメーションを慎重に使い、非同期プログラミングを活用することで既存のディスクトップアプリケーションに適用できます。2層のアプリケーション(クライアント/サーバ)の場合、新しいデバイスに展開するのは難しいです。ビジネスロジックをサービスへと分離し、ほかのデバイスやフォームでも再利用できるようにしておくのがいいでしょう。Azureはクラウドへビジネスロジックを移行するためのたくさんのソリューションを提供します。クラウドサービスへロジックを移動すると既存のソリューションの弾力性と拡張性が改善し、複数のデバイスで利用できるようになります。AndroidとiOSでの.NETMicrosoftは複数のパートナーとともにモダナイゼーションを実現するべく動いています。Phone、iOS、Androidデバイスで共有できるようにします。基底のAPIへのアクセスを提供し、仕立てられたビューを作成できます。デバイス間でクライアントロジックを再利用できます。ITR-MobilityのiFactrとMonoCrossはC#で企業向けモバイルアプリケーションをメジャーなモバイルプラットフォーム向けに構築するためのソリューションを提供します。Synchronizationのようなサービスを提供し、デバイスをまたがったビジネスアプリケーションを提供します。SoftのMobilize.NETはレガシなアプリケーションをウェブやモバイル、クラウドといったモダンなプラットフォームへ移行するソリューションとサービスを提供します。ランタイムなしで既存のソースコードを新しいコードへ変換します。Receiverを使ってモバイルでバイスからアクセスできるようにします。MicrosoftがXamarinとMonoCrossを積極的に推しているという事実は、MicrosoftがMonoの作者たちを訴えるのではないかという長く言われてきた噂が噂に過ぎないことを明らかにしているでしょう。大規模なミッションクリティカルアプリケーション向けのガイダンス大企業のミッションクリティカルアプリケーションの場合は、コストや生産性ではなく複雑さの管理とサービスの品質にフォーカスが移ります。これらのガイドラインはデータ駆動アプリケーションやCRUDアプリケーション向けではありません。そのようなアプリケーションを作る開発者は小規模/中規模向けのビジネスガイドラインを使うほうがいいでしょう。大規模なミッションクリティカルアプリケーション向けのガイドラインは多くの連携部分とサブシステムで構成されているシステム向けです。企業でのウェブアプリケーションこの点ではMicrosoftの態度ははっきりしています。MVCを使うべきだということです。Applicationデザインパターンを使うかどうかです。Pagesは使うべきではありません。コントロールがきかず、MVCスタックがテストできないからです。その結果、クオリティ・オブ・サービスに制限がかかります。企業向けディスクトップアプリケーションより小規模のアプリケーションと同様、Microsoftは推薦する技術としてWPFとWinFormsを挙げています。Win32やMFCを使ったC++も選択肢に挙げています。Officeに匹敵するような大規模で工期の長いプロジェクトで推奨されています。Phoneこの分野の推奨事項についてMicrosoftは"‘新興のアプリケーションパターン'の章で記載されている推奨内容と同様"ということ以上は何も語っていません。自信があるという状態ではなさそうですが、これらのプラットフォームを完全に捨てているというわけでもなさそうです。Practicesに着目しています。control)の説明に費やしています。9つの異なる制御の反転のコンテナを示しています。このうちの大部分はMicrosoftが関係していない、コミュニティプロジェクトです。示されているフレームワークの多くは実際はIoCのコンテナであり、依存関係の挿入のフレームワークではありません。Microsoftがコンポジットルート(DIパターン)を推奨しているのか、サービスロケータ(IoCコンテナパターン)を推奨しているのか判然としないため、依存関係の挿入と制御の反転の間で混乱が起きており、フラストレーションがたまります。Seemann氏が言うとおり、両者は根本的には正反対のものだからです。Principle,SRP)"を使って依存関係の挿入を正当化します。彼らによればSRPによって、たとえば、コンストラクタに15の依存があるクラスが出来上がります。これらの依存を"分離する"ため、コンストラクタから依存を引き離し、IoCコンテナを使って依存を注入することを推奨します。Microsoftはアスペクト指向プログラミングを使って、間接化のためのレイヤを追加し、依存性を注入することを推奨しています。複雑さを管理するために、Microsoftは数ページを使って、"境界のあるコンテキスト"とはどのような概念なのか説明しています。Evans氏の著書に基づいています。アプリケーションを小さなパーツに分けて共有する部分を限定的にするというのが基本的な考え方です。下図は、異なるバックエンドと共通のUIを持った4つの分離されたスタックで構成されているアプリケーションの例です。(クリックして拡大)この分野でのMicrosoftの推奨事項は多くの点で合理的です。境界のあるコンテキストを使うことで、ミッションクリティカルな部分を特定し、その部分にコマンドクエリ責務分離(CQRS)やドメイン駆動設計(DDD)のようなよりコストがかかるパターンを自動テスト付きで導入する一方、付随的な部分はより軽量なCRUDスタイルのアプリケーションにします。レガシコードもひとつのパーツにして分離し、ゆっくりと置き換えを行います。境界のあるコンテキストの間で情報を共有する場合、Microsoftは可能な限り、非同期メッセージングを使うことを推奨しています。別のパーツが動作不良を起こしたとしても、各パーツが独立して動作できるからです。Queuesは簡単な選択肢です。複雑なシステムの場合はサービスバスが必要でしょう。Bus、NServiceBusに言及していますが、どれかを特別に推奨してはいません。境界のあるコンテキストが公開するサービスは防腐レイヤで守られている必要があります。パブリックな関数を守るパラメータチェックと同様に、防腐レイヤは不正なメッセージから基底にあるデータストアを守ります。やってくるメッセージを検証し、必要な変換を行い、不正なデータが処理され保存されるようにします。このような一連の処理は普通の.NETのコードで実現できます。ビジネスルールが頻繁に変わる複雑なシナリオの場合は、MicrosoftはルールエンジンとBizTalkのような統合プラットフォームを使うことを推奨しています。レガシコードの移行レガシコードを処理する第一歩はファザードを作ることです。このファザードは永続的でスケーラブルなキャッシュのようなモダンな技術を使い、古いコードがどのようなパターンを作っていても隠蔽します。ガシなコードは回避され、ファザードは新しいサービスレイヤにリダイレクトします。Remoting以外の.NET向けのすべてのネイティブ、ウェブ、通信フレームワークを支持しています。いくつかのシナリオにおいてはC++とJavaScriptも奨めています。6やクラシックASPのような古いプラットフォームはもはや言及されていません。古い技術を使っている企業は可能な限り早く移行したほうがいいでしょう。予想通り、引き続き依存関係の挿入の重要さを強調しています。Frameworkで顕著です。BizTalkは一度は死んだ技術だと思われていましたが、オンサイトとクラウドを統合しようとする企業が現れたために新しい命が吹き込まれました。Allenは2006年より、InfoQで記事を書き、現在は.NETのリードエディタ。ニュースや記事の執筆に興味のある方はjonathan@infoq.comへ連絡してほしい。毎週火曜日に前週のまとめコンテンツをお送りいたします。(日本語版は不定期リリース)25万人のシニアな開発者コミュニティーにぜひご参加ください。サンプルを見るあなたのメールアドレスはこちら国を選んでください。プライバシーポリシーに従って私の個人情報を扱うことに同意します。登録するとさまざまなことができます。アカウント登録をしてInfoQをお楽しみください。あなたの意見をお聞かせください。毎週火曜日に前週のまとめコンテンツをお送りいたします。(日本語版は不定期リリース)25万人のシニアな開発者コミュニティーにぜひご参加ください。サンプルを見る様々なイノベーターとアーリーアダプターがお送りするテクノロジーの概要を見る。自分がまだ知らないことに気づいていないと知るあなたが興味のあるトピックスをいつでも最新な情報に。あなたのメールアドレスはこちら国を選んでください。プライバシーポリシーに従って私の個人情報を扱うことに同意します。Inc.プライバシーBT。