DOA VS DDD

DOA(ものこと分析)とDDD(ドメインモデル)について一言
DOAはシンプルな分析方法で失敗がすくない。でも表現力の幅が小さい。
DDDは抽象化など俗人的な面もあり、だれでも使える方法ではないが、表現力が豊か。

どっちがいいかは状況によるが、僕は、DOAの表現力では満足しないのでDDDでモデル化する。
無難なモデルよりよりベストなモデルを目指す。だからDDDを使う。

以上

SharePoint AddinもReactがいいですね

TypeScript + React Loveの開発者なので、フロントエンドは基本この組み合わせを選択します。
SharePointの開発でも Visual Stuido Codeを利用するSharePoint frameworkではReactがノーマルに使えるのですが、 Visual Studio 2017 のSharepointアドインでも少し工夫すると使えるので、この方式で開発しています。
npmで環境を作ってWebPackでビルドするような感じですね。インテリセンスや、エディターのガイドなどはC#の生産性とほぼ変わらないです。リファクタリングは少し落ちますが、名前の変更は複数ファイル・複数プロジェクトでも問題なく動くで従来のJavaScriptの開発に比べたら天国です。

ただこの開発方法で満足できていなかったのが、デバッグの時にTypeScriptのコード上でデバックを直接できなかった点でした。いろいろトライしていたのですが、わからず諦めていました。
最近、調べものをしていて以下の記事をみつけました。灯台下暗しです。TypeScriptのサイトにこんな記事がありました。

React & Webpack

この記事を参考にWebPackでMapを吐き出すと無事TypeScriptのままデバッグできました。_thisのウォッチなど若干気になる点もありますが、デバッグの効率は凄く上がる予感です。

IoTレファレンスアーキテクチャの比較

なんかIoT関連の仕事がくるかもしれないので酒を飲みながら調査。4・5年前にhadoopとか少しかじっていたけど、最近はPaaSが充実してそうですね、
AWS、Azure、GCPでのアーキテクチャを見ていきます。

AWS

AWS IoT プラットフォームの仕組み
https://d0.awsstatic.com/IoT/assets/awsiot_how_it_works_diagram.png

データを集めるところは「デバイスゲートウェイ」という仕組みで「10 億台以上のデバイスにも対応できるよう自動的にスケール」ということでマネージドなサービスがあります。MQTT、WebSocket、HTTP 1.1 がサポート。認証と認可は「X.509 証明書ベース」で個別デバイスで可能。デバイスの状態管理は「シャドウ」という仕組みが用意されている。受信したデータをベースにした処理や変換の仕組みも用意されていて永続化(S3)やストリーム処理(Kinesis)もある。
スケールアウトする仕組みとして、クラウド側に一通り用意されていて、あとはアプリを乗っける感じですね。

Azure

Azure とモノのインターネット
https://docs.microsoft.com/ja-jp/azure/includes/media/iot-azure-and-iot/iot-reference-architecture.png

データを集めるところはIoT Hubで、マネージドなサービスがあります。プロトコルはMQTT v3.1.1、HTTP 1.1、または AMQP 1.0をサポート、カスタムプロトコルも拡張可能なようです。認証はデバイスごとにX.509 証明書やセキュリティ キー(SAS)が用意されている。デバイスの状態管理は、デバイスツインという仕組みで管理するようです。メッセージのルーティングも受信データに基づいて可能になっているようで、永続化(Azure Storage)やストリーム処理( Stream Analytics)も用意されています。
AWSに比べてよりアプリケーション寄りの機能が用意されているようで、デバイス周りのSDKなども充実していそうです。IaaSよりのAWS、PaaSよりのAzureのポジションがここでも表れています。

GCP

Googleは企業向けに力を入れているのかいないのかいまいちわからないのですが、IoT関連は出しています。
モノのインターネットの概要
https://cloud.google.com/solutions/images/iot-overview-architecture.png

データを集めるところは「Cloud Pub/Sub」という仕組みでバッファリングなど大量データを受信するための仕組みになっています。プロトコルは、 HTTPS REST API とgRPC です。受信したデータの処理は「Cloud Dataflow」で行うようで、そのデータをBigQuery とかに保存できそうです。デバイス管理とかはどこまであるかパッと見た感じでは分からないです。
AWSやAzureに比べると、GoogleGoogle独自な世界観なような感じです。好き嫌いは分かれるかもしれません。

さてどれになるやら

Build 2017

Buildのビデオが上がっていたので、今日は昼から酒を飲みながら、見てます。
Kyenoteの2目のビデオ編集は凄いな。9月のWindows10のアップデートが楽しみです。
あとは最近使っているMicrosoft Graph関連とCNTK関連を見る予定です。

Reactはエンタープライズ向きだね

Reactにはいくつかのお作法があるが、これがプログラムの堅牢性を高めてくれている。
大規模なエンタープライズ向けの開発では、生産性は落とさずにある程度開発者の自由度を束縛して品質を安定させる必要がある。
この加減がReactは非常にいい!!

今度Webの大規模開発はで必ずReactを使いたい。

モダンエンタープライズJavaScript

それなりにWeb関連の知識はあると思っていましたが、なにかこの2・3年で大きくWebの開発技術が変わったように感じていました。
なので情報収集しながら最近キャッチアップを開始しました。まだいろいろ試してみたいものはりますがいろいろ分かってきたので感想を書いておきます。

まずはtypescript。typescriptは以前から使っていましたが本当に広く浸透しており完全にテイクオフしている技術ですね。モジュール管理やパッケージ管理はcommonJS&npmで今までjavascriptで苦労してモジュール開発を非常に楽にしてくれます。nugetでは探すのに苦労していたtypescriptの型定義は@typesが便利です。
あと、reactのコンポーネントも堅牢なjavascriptを作るうえではかなり使えます。CSSとHTML泣き別れを上手く融合できそうです。
いや、javascriptの開発がこんなにサクサクできるなんて素敵です。やっぱり新しい技術はいいですね。
だれかこのあたりをエンタープライズ向けの開発ストーリーにしてまとめてほしいですね。

ちなみにツールはVisual Studio + webpackでビルドしています。おおむね満足していますが、webpackでバンドルしたあとにtypescriptのままデバッグできるようにしたいだが、できていません。