Gleyzer両氏によって共同開発されました。2019で、同言語の発表を行いました。InfoQはPurdy氏に言語と、氏らが解決を目指した問題について聞きました。設計/アーキテクチャアジャイルマニュフェスト:ソフトウェアアーキテクトの視点ソフトウェアアーキテクトの役割と責任はアジャイルソフトウェア開発のためのマニフェストの価値と矛盾していると見えますが、優れたアーキテクトはアジャイル開発チームをサポートするテクニックを見つけています。Streamingは、ストリーミングデータのためのSQLライクなインターフェースを提供します。Streamsによって、Redisがストリーミングデータを複数のプロデューサとコンシューマの間で消費、保持、配信することができるようになります。ソフトウェア開発のマニフェストたゆまず息もつかずに市場に突進することで、会社を静かに消滅の崖っぷちへと追い込みます。それは設計してコードを書く方法を再考する時です。簡単さへの投資は、速さへの投資です。簡単さは知的財産の主鉱脈でもあります。競争上の優位性は、一度失ったら、もう一度手に入れることはほとんど不可能です。Buytaerts氏が過去10年間にわたって、企業がDevOps採用のハイプサイクルをくぐり抜け、変革に対する誤解を解消する過程を支援してきた経験について語ります。編集部N原文(投稿日:2012/09/18)へのリンクもしあなたがエンドユーザーの携帯性への要求を抑えることができる、と考えているなら次のことを思い出して欲しい。PCが最初に導入された時に、IT部門はそれらをよせつけないようにした。それが上手く行ったか?モバイルデバイスの急増によって、IT部門は変わることを強いられている。今や彼らは、モバイルデバイスをサポートしなければならないし、更にそれは、モバイルフレンドリなアプリケーションの開発を必要とする程に広がっている。ユーザーが益々精通してくると、単に既存のアプリケーションをモバイルブラウザーでアクセスできるだけでは、満足できない。JavaScriptを使ってもできる。ネイティブアプリケーションは、リッチなユーザー体験を提供できるが、複数のデバイスOS向けにネイティブアプリケーションを作成するのは、時間がかかるし、高く付く。JavaScriptがデバイス非依存のユーザーインタフェースにチャンスを与えている。HTML5要素を使って対話式のユーザーインターフェース部品をレンダリングするJavaScriptコンポーネントライブラリを使うことで、ユーザーインターフェースを作ることができる。HTML5には、移植性とリッチユーザーインターフェース開発をサポートする多くの新しいフィーチャがある。HTML5ベースのモバイルアプリケーションを実装するのに使われるフレームワークと構造を見ていくことにする。ユーザーインターフェースとナビゲーション要素は、全てブラウザ常駐の要素であり、一方アプリケーションが提供する唯一の役割は、ユーザーインターフェースへのJSONによるデータアクセスを提供することである。フレームワークとアプリケーション構造を提供するのが意図なので、例は基本的な機能しか実装していない。モバイル開発の考慮事項デスクトップブラウザ用のアプリケーション開発に取られる多くのアプローチは、モバイルブラウザーベースのアプリケーションにも適用できる。モバイルアプリケーションには、デスクトップブラウザがいつも要求するわけではない、いくつかの追加の考慮と挑戦が存在する。スクリーン解像度を考慮する。小さなサイズであることで、アプリケーションとの最適なユーザーインタラクションのために異なるユーザーインターフェースが必要になる。MobileのようなモバイルUIウィジットライブラリと一体になることでJavaScriptを使ってモバイル特有のユーザーインターフェースを作るクロスデバイスな手段を提供できる。このモバイルUIは、HTML5のロール識別子とCSSを使ってレンダリングされる。以下はリストビュー用のHTMLタグの抜粋である。データ-ロール属性に注目して欲しい。Mobileによって使われる。接続性は、もう一つの大きな考慮事項である。ネットワークやWIFIが広く使用されているが、いつも接続性を想定できるわけではない。幸運にも、HTML5には、キャッシュ機能があるので、サイトリソースをローカルに「キャッシュ」でき、非接続モードで動く。キャッシングは、下に示すようにルートレベルのHTML要素に以下のものを追加することで、動作する。</html>マニフェストファイルはテキストファイルで、キャッシュをバイパスできるリソースやリソースが無い時に表示すべきものをコントロールする他のディレクティブと一緒にキャッシュされるリソースを定義する。ファイルが変更された時やJavaScriptAPIによって、キャッシュの更新や通知もコントロールされる。キャッシュマニフェストファイルの例をいかに示す。/static.html更に、HTML5はパフォーマンスと非接続動作のために、サーバーサイドデータをローカルにキャッシュできる機構を提供する。5メガのキー/値用のローカルストレージ機構が利用でき、文字列や文字列化されたJSONオブジェクトを保存できる。localStorageオブジェクトを使ってJavaScriptからアクセスできる。どのようにJSON文字列としてローカルに保存され、呼び出すことができるかを示している。JSON.parse(d);アプリケーションは、またユーザーに「非接続」を奥ゆかしく通知するように作ることもできる。HTML5対応ブラウザーでキー/値のローカルストレージ標準にキューイングされる。接続性が回復した時に、ローカルに保存されたオブジェクトがサーバーにアップロードされる。帯域幅は、また別の問題である。使ってデータアクセスだけにサーバーを当てにする。JSONは、XMLすなわちSOAPベースのプロトコルのような従来の統合プロトコルよりも遥かに効率的で、簡潔である。HTML5のアプリケーションアーキテクチャJavaScriptは汎用のアプリケーション開発言語であることを意図していなかった。その当初の意図は、ダイナミックHTMLがリモートサーバーにアクセスしなくてもレンダリングされ、変更することができるようにすることで、ブラウザでのユーザーエクスペリエンスを向上させることだった。これは、体感できると本当のパフォーマンス向上を提供している。モバイルデバイスには、デスクトップ/ラップトップ常駐ブラウザが持つような処理する馬力も帯域幅のあるアクセス能力も、無い。HTML5要素でできるだけ実装して、サーバーとのやり取りを最小限にする。この新しい形態では、サーバー側の要素は、認証およびデータアクセス要求、およびユーザとのやり取りをサポートしており、ほとんどのアプリケーション・ロジックがクライアントのブラウザに存在する。このことは、下の図で見ることができる。弱い型づけの動的言語(クロージャーやコードブロックをデータタイプとして扱える能力が可能である)がプログラミング上の柔軟性を提供している。それは、保守不能のコードに繋がりが得る。従って、JavaScriptベースのアプリケーションには、厳密さが適用されなければならない。下記のリストは、実現の必要がある一般的なメカニズムの幾つかである。同様に、JavaScriptの世界でも、階層アプリケーションアーキテクチャをサポートするためにフレームワークが利用できる。JavaScriptアプリケーションにモデル、ビュー、コントローラー(MVC)を分離して、MVCパターンを適用できる。HTML5ユーザーインタフェースは、コントローラーとオブジェクトモデルの実装から分離される。ユーザーインターフェースフィーチャ間の標準的なナビゲーション機構が提供されている。Require.jsJavaScriptファイルとモジュールローダフレームワーク。"必要である"というときに依存するJavaスクリプトが読み込まれ、検証されるようになる。フレームワークは、依存性情報を通信しており、JavaScriptモジュール/ライブラリが読み込まれていない場合、開発者にエラーをアサートする。_Underscore.jsUnderscore.jsは、関数型プログラミングメカニズムをオブジェクトの集合に適用できるにするユーティリティメソッドを提供するライブラリである。HTMLをテンプレート化するフィーチャも提供している。DOM要素にアクセスし、操作するために使われるライブラリ。MobileHTML5のユーザーインターフェイスコンポーネントライブラリ。HTML5でレンダリングされるUIコントロールのスイートを提供する。ルックアンドフィールと同様に、イベント処理のためのメカニズムを提供する。khsSherpaリモートJavaオブジェクトがHTTP要求を介してアクセスすることを可能にするJavaアプリケーション・サーバー・フレームワーク。それは自動でJSONオブジェクトにJava型のマーシャリングと一緒にトークンベースの認証をサポートしている。オプション:JSONPクロスドメインのサポートが有効になっている。JavaScriptのフォルダ構造JavaScriptは、プログラミング要素を構造化する標準的な方法を提供していない、単なるテキストベースの.jsファイルである。他の言語は構造化するメカニズムを持っている、例えばJavaのpackageやC#の名前空間である。一つの大きなファイルにある全てのJavaScript関数やオブジェクトを定義しょうとするのは、保守するのが厄介である。アプリケーションの大部分がJavaScriptで定義されている場合である。JavaScriptソースコードを責任別に分割するのに役立つように定義することができる。JavaScript要素が入っている。サンプル・アプリケーションの例では、フォルダ構造は以下の通りだ。これらのフォルダは、webサーバー/アプリケーションサーバーのドキュメントルートに配置されていると仮定する。モジュール化のサポートJavaScriptには、ソースコード要素を分割する組込みのメカニズムは無い。他の言語にはこのメカニズムが備わっている。JavaのpackageやC#の名前空間。アプリケーションは、依存モジュールを持ち込むためにディレクティブをインポートするか、含むことができる。これによって、アプリケーションとフレームワークは、コードをモジュール化して、保守性と再利用性を改善できる。フレームワークは、効率的にJavaScriptファイルを分割して、モジュールとして扱うメカニズムを提供し、依存モジュールを定義し、インポートし、アクセスできる機能がある。フレームワークを使っている。require/AMD関数を以下に示す。function);各モジュールは、JavaScriptオブジェクトを定義している個々のJavaScriptファイルだ。呼び出されると、モジュールがロードされ、オブジェクトのインスタンスが作成され、開発者が使用するファクトリ関数に渡される。define()関数のロード・ユーティリティー依存関係を使っているJavaScriptモジュールを示す。フレームワークは、ファイルの読み込みを最小限に抑え、パフォーマンスを向上させるために、最適化機能を備えている。MVCこのフレームワークによって、人気のあるMVCデザインパターンがJavaScriptを使用して実装することができる。ASPまたはある種のHTMLテンプレートエンジンのような動的なHTML生成技術を使用して、サーバ側の汎用言語でこのパターンを実装している。フレームワークは、ユーザの入力を処理し、動的なHTMLメカニズムへのアプリケーションのオブジェクトモデルを適用するためのコンポーネントや抽象化を提供しる。フレームワークは、サーバー上でHTMLタグを生成するのではなく、JavaScriptでこれらのメカニズムを適用する方法を提供する。roleが適用されている、単なる静的なHTMLファイルである。テンプレートメカニズムを提供しているので、ビューがビュー/コントローラによってレンダリングされる時に、モデルアトリビュートは、HTMLに適用できる。リストビューを定義しているが、リストビューはHTML5のroleアトリビュートを使って定義されている。HTML5ビューを以下に示す。data-filter="true"></ul></div>リストビュー中の株式商品は、stock-list-item.htmlに定義されている。それは、Backboneテンプレートメカニズムを株式モデルJSONオブジェクトの詳細表示に適用する。テンプレート要素を持つHTMLを以下に示す。JSP/ASPページに似ていることに気づくだろう。それらは、モデルのJSONオブジェクトからの特性値で置き換える場所に印を付けるために使われる。templateフォルダーにある。/コントローラーHTMLビューは、Backboneコントローラーの実装にナビゲートすることでレンダリングされる。コントローラーは、JavaScriptオブジェクトをHTMLビューにバインドし、イベントの定義と処理と共に、フレームワークにビューをレンダリングするように言う。オブジェクトを拡張することによって実現される。フレームワークを使ってロードする。JavaScript関数を呼び出す。オブジェクトを拡張しているか注目して欲しい。Define関数の素晴らしいことは、それがビューコントローラーの実装が必要な依存しているモジュールをロードすることである。モデルとHTMLテンプレートモジュールもビュー/コントローラーモジュールオブジェクトに提供されているかも注意して欲しい。呼ばれ、イベントを定義し、コントローラーモデルを初期化する方法を提供する。モデルは、個々のオブジェクトかオブジェクトのコレクションの場合もある。StockListCollectionオブジェクトが生成されることに気づくだろう。コレクションもBackboneが提供するオブジェクトで、ビュー用のJavaScriptオブジェクトモデルの「コレクション」を管理する方法を提供する。このコントローラーが呼び出されると、initialize()メソッドが実行される。jQueryセレクターを使う。functionのコード片を以下に示す。jQueryセレクターをメソッド名と関連付けることで実現される。以下の例が示しているのは、アプリケーション例と株のリストページ上のaddボタン用のイベントとハンドリングメソッドである。navigationコマンドに注意して欲しい。それは、次のセクションで議論される。HTMLテンプレートがレンダリングされるのは、render()メソッドがインスタンスに送られる時である。functionを下に示す。それがどのようにテンプレートをコンパイルし、次にコントローラーのelアトリビュートに適用されるHTMLテンプレートを表示するかがわかるだろう。this.elアトリビュートは、HTMLが挿入される時、DOM中のコントローラーのロケーションである。次に、どのようにまた別のビュー/コントローラーがインスタンス化され、レンダリングされるかに注目して欲しい。JQueryMobileのリストビュー(listview)をレンダリングする。提供するまた別のメカニズムである。"ルーティング"と呼んでおり、ナビゲーションルートを定義するように拡張することができるBackbone.Routerオブジェクトが用意されている。関数/メソッドに提供するために使われている。Routerインスタンスが生成される時に、routeはIDと"route"がナビゲートされる時に実行される関数名を使って初期化される。#stockDetailがある。関数はこれらのルート用に定義されているのに注意。ルーターオブジェクトは、以下の式で定義されたビュー/コントローラにナビゲートするために呼び出すことができる。インスタンスを生成して、レンダリング関数を呼び出す。Mobileのリストビューにレンダリングする拡張されたBackBone.Router関数の例である。JQueryを使って、ページアトリビュートを飾り、それをレンダリングする、のかがわかる。},コレクション/モデルBackboneは、Backbone.Modelオブジェクトのリストを管理するコレクションオブジェクトを提供する。View/Controllerオブジェクトは、リストあるいは1つのJavaScriptオブジェクトを参照するアトリビュートを持っている。モデルオブジェクトのためのBackbone.Collectionオブジェクトを下に示す。AJAXメカニズムを使って、サーバー側のJSONPエンドポイントを呼び出す。エンドポイントは、JSON株オブジェクトを返すが、これは自動的にコレクションのstockListItemモデルにマップされる。Backbone.Model定義は、以下に示すようになる。});});強く型付けされた言語に馴染んでいる読者には、JSON形式の文字列をJavaScriptモデルオブジェクトに変換するJavaScriptの機能は、魔法のように思えるだろう。Backbone.Modelには、保存に役立ったり、サーバーと同期を取る幾つものメソッドが備わっている。Backbone.Collectionにも、サーバーと同期を取り、保存するためのメッソドの他に、関数型プログラミングタイプの操作を実行するためのメソッドがある。追加された他のメソッドは、HTML5ローカルストレージ機構にオブジェクトを保存したり、復元する機能を提供する。株オブジェクトをサーバーから一度入手すれば、HTML5アプリケーションは、接続がなくても操作できる。この例は、キー/値ローカルセッションストレージ機構を使っている。webSQLとして参照できるローカルなリレーショナルストレージ機構を提供する。この仕様に向けた開発は停滞しており、それは完全にサポートされていない。その存在に依存するのは危険かもしれない。キー/値セッションストレージは、充分サポートされている。webSQL仕様に関するより詳しい情報は、ここにある。物事を起動するのは、ロードされたスタイルシートが以下のタグと一緒に定義された時である。関数を呼び出し、この関数がサポートしているJavaScriptライブラリを設定し、ロードする。Requireフレームワークは、JavaScriptライブラリを簡単な名前やベースのURLロケーションパスに関連付けられる素晴らしい機構を持っている。libフォルダーは、docルートから外れているので、ベースURLパスは不要である。以下のコード片に例を示す。ルートにナビゲートする。App.jsを以下に示す。ページにナビゲートする。JSONのフレームワークを使用するように構成されたアプリケーション・サーバーは、リストと個々のストックオブジェクトを生成、読み込み、アップデート、消去するメソッドを提供するエンドポイントにURLを提供する。フレームワークは、HTTPリクエストパラメータをJavaエンドポイントのメソッドコールにマーシャリングし、JavaオブジェクトをJSON文字列にシリアライズしたり、逆にデシリアライズする。WARコンポーネントとして定義され、デプロイされることを意図している。Javaアプリケーション・サーバーエンドポイントの両方を持っている。JSON形式で株価JSONオブジェクトを提供するJavaサーバーエンドポイントの定義を示す。getを使って呼びだされる。この例のアプリケーションは、株オブジェクトのコレクションを取得するのにエンドポイントが必要なだけだ。現実的なアプリケーションは、CRUD操作をサポートするのに認証ともっとエンドポイントが必要になるだろう。このフレームワークは、これらの要求をサポートしている。フィーチャを記述したものが欲しいなら、Githubにあるフレームワークを確認して欲しい。結論これ例は機能的には単純化されているが、目的はブラウザ常駐のアプリケーション用のMVCアプリケーションを紹介することだった。アプリケーションインタフェースの動的HTMLをレンダリングするのに必要なアプリケーション・サーバーの必要性を排除することが、この論文で提示されたアプリケーションアーキテクチャの主要なフィーチャである。JavaScriptは自然な汎用目的のプログラミング言語ではないが、モバイルデバイスの爆発、HTML5の大々的な採用、ブラウザプラグイン技術への抵抗と非サポートによって、HTML5とJavaScriptがモバイルデバイスにリッチなブラウザベースのアプリケーションを提供する実現可能な方法になる。例題アプリケーションの完全なソースは、GitHubにある。Partnerである。25年近いIT経験があり、最後の15年間は、企業のIT部門がオブジェクト技術を導入する助けをしてきた。(C#)ベースの技術を使ってソフトウェア開発している、開発チームを率いてきており、そして指導もしてきた。WebSphereの本の共著者でもある。毎週火曜日に前週のまとめコンテンツがお送りいたします。25万人ものシニアデベロッパーのコミュニティーにぜひご参加ください。サンプルを見るあなたのメールアドレスはこちら国を選んでください。プライバシーポリシーに従って私の個人情報を扱うことに同意します。登録するとさまざまなことができます。アカウント登録をしてInfoQをお楽しみください。あなたの意見をお聞かせください。毎週火曜日に前週のまとめコンテンツがお送りいたします。25万人ものシニアデベロッパーのコミュニティーにぜひご参加ください。サンプルを見る様々なイノベーターとアーリーアダプターがお送りするテクノロジーの概要を見る。自分がまだ知らないことに気づいていないと知るあなたが興味のあるトピックスをいつでも最新な情報に。あなたのメールアドレスはこちら国を選んでください。プライバシーポリシーに従って私の個人情報を扱うことに同意します。よい世界へ私たちが暮らす世界を大切に思い、よりよいものにしたいと考えています。人のためのソフトウェア開発を加速し私たちのミッションを実現することで、この思いを成し遂げようとしています。私たちは利益の1%をさまざまな慈善団体に寄付しています。会社として、また従業員として、そうしたことの価値を強く信じているからです。with.プライバシーBTあなたのプロファイルは最新ですか?プロフィールを確認してアップデートしてください。アドレス*Eメールを変更すると確認のメールが配信されます。会社名:現在の会社名をご入力ください。Other組織規模:現在の組織規模をご入力ください。2,501+国:現在の国を設定してください。Zimbabwe都道府県:現在の都道府県に設定してください。次の都道府県にアップデートする:ニュースレターを購読しますか?インダストリーメールを購読しますか?本Eメールに登録すると、以前より関心のあったトピックの関連情報をお送りする場合がございます。詳細はこちらのプライバシーポリシーをご覧ください。newsletter?新しいメールアドレスに確認用のメールを送信します。このポップアップ画面は自動的に閉じられます。