TOP>企業情報>コラム>技術情報>Electronが呼びこむJSONの存在感

Electronが呼びこむJSONの存在感

Electronが呼びこむJSONの存在感


Electronというフレームワークが流行の兆しを見せています。このフレームワークはHTML/CSSやJavaScriptといったWebアプリケーションで使用されていた技術でのデスクトップアプリケーション作成を実現します。エンタープライズでの利用ケースはあまりありませんでしたが、Microsoft等の大企業で採用されるケースが出始め、今後はエンタープライズ向けツールでの要素技術としての採用も期待されます。



HTML5の仕様確定でWeb分野はますますの盛り上がりを見せています。今回は、HTML/CSSとJavaScriptを使用してデスクトップアプリケーションを作成するフレームワークであるElectronと既存RDBMSの関わりについて記述します。

Electronは日本国内での知名度は現時点でそれほど高くはありませんが、Electron関連の紹介記事を目にする機会も増えてきています。

Electronとは


Electronは元々Atom-shellと呼ばれていたフレームワークで、GitHub社が次世代エディターとしてAtom開発時に作成した基盤をフレームワーク化したものです。

フレームワークの目的はHTML/CSSやJavaScriptを使ってデスクトップアプリケーションを作ることであり、登場したのは比較的最近ですが、SlackやDockerクライアント等、すでに多くのアプリケーションで利用されています。

Atom Editor、Slack、Visual Studio Code等

http://electron.atom.io/ より引用
左からAtom Editor、Slack、Visual Studio Code等

最近ではMicrosoft社が公開したVisual Studio Codeに採用されたことが話題になりました。利用されるようになった要因は様々ですが、主に以下が挙げられます。

  • HTML/CSSやJavaScriptといったオープンな技術でアプリケーションを作成できる
  • 単体で配布可能なバイナリを生成できる
  • 単一ソースでWindows、Mac、Linuxで動作するアプリケーションを作成できる

これらの利点がどのように実現されているのかをまずは見ていきます。

Electronのアーキテクチャ


Electronの実装を簡単に言えば、Webアプリケーションと、それにアクセスするブラウザを1つにまとめてデスクトップアプリケーションとして動作させるもので、大まかな構成要素はNode.jsとGoogle Chromeのオープンソース(OSS)版であるChromiumです。

一般的なNodeアプリケーションの構成とElectronアプリケーションの構成


アプリケーションは一般にプレゼンテーション部分(GUI)、ロジック部分、データアクセス部分の3つにわかれています。Node.jsがアプリケーションのロジックを、ChromiumがGUI部分を担当します。Chromiumは、プラットフォーム間の差異を吸収する役割も担っています。これは作成したアプリケーションに同梱するChromiumをプラットフォームごとに変更することで、単一ソースでのクロスプラットフォームを実現しています。

単一ソースでクロスプラットフォームを実現


Node.jsは数年前から名前を聞くようになったサーバサイドJavaScriptの実行環境です。Google社が開発したJavaScriptエンジン「V8」を搭載し、シングルスレッドでのイベントドリブンモデルや非同期I/O処理を採用し、大量のリクエストを高速に処理することが可能です。

当初は頻繁な仕様変更や安定に欠く等の理由で、エンタープライズ分野での利用は難しいと言われていましたが、バージョンアップを重ねるにつれ安定性が高まり、採用事例も増えています。

Node.jsはHeroku等の主なPaaSベンダーで利用できる他、Oracle CorporationもクラウドサービスでNode.jsのPaaSを提供すると発表しており、アプリケーションの実行環境としての地位を固めてきています。

Electronのメリット


前述のようにElectronはWebアプリケーションとブラウザのセットです。実際、Visual Studio CodeはVisual Studio Online MonacoというWebサービスとして提供されていたIDEを、Electronを使ってデスクトップアプリケーションに作り替えたものです。このように、Webアプリケーションを、わずかな変更でデスクトップアプリケーションとして動作させることができます。

これはWebアプリケーションベンダーに1つの可能性を与えます。一口にアプリケーションといってもWebアプリケーションとデスクトップアプリケーションでは求められる技術が大きく異なります。

例えば既存のWebアプリケーションと同じ機能を持ったデスクトップアプリケーションを提供しようとしても、ほとんどの箇所が流用できず、ゼロからの作成に近い状況にありました。

しかし、ElectronであればWebアプリケーション作成時と同じ流れでデスクトップアプリケーションを開発できるため、これまでWebアプリケーションしか提供していなかったベンダーがデスクトップ版を提供できるようになります。

また、D3.jsを始めとして数多く存在するJavaScriptのデータ可視化ライブラリもそのまま利用可能なため、従来のデスクトップアプリケーションと同等の表現力を低コストで実現できるようになります。

Electronで作られるアプリケーション


Electronで作られたアプリケーションは様々ですが、エディタやIDEといったアプリケーションが多いです。これは、Electronがまだ技術的に若く、開発者が自分で使うことを目的として作成したケースが多いためと考えられます。

一方で、今後技術が習熟するにつれてアプリケーションベンダーがBIツール開発にElectronを採用するケースが出てくるものと考えられます。

現在、Internet of Things(IoT)が注目を集めています。IoTが広まると各種センサー類から大量のデータ流入が発生し、BIツールが取り扱うデータは以前とは比べ物にならないほど増加します。

そのデータ量の多さは、DBに貯めて分析するという従来のBIとは異なり、流れてくる大量のデータをリアルタイムに分析するという新たなニーズを生み出しつつあります。ストリーミングされるデータをリアルタイムに分析するツールには、これまで以上にリッチな表現力とリアルタイムに再描画する能力が求められます。

現時点で、このリアルタイム分析の基盤はWebアプリケーションが中心ですが、先述のようにElectronはWebアプリケーションを容易にデスクトップアプリケーションに変身させます。特に、常時起動が想定されるアプリケーションで、描画自体に多くのリソースを要求するストリーミングデータの可視化であれば、Webアプリケーションよりも、クライアントのリソースを利用するデスクトップアプリケーションのほうが適切なケースが想定されるため、Electronは選択肢の1つになってくると予想されます。

JSONとRDBMS


データアクセス部分について見ていきましょう。リアルタイム分析では流入データの扱いが中心ですが、それでもマスターデータ等を格納する既存のRDBMSとの連携が必要なケースは多くあります。

Electronで既存RDBMSのデータとの連携を考えた時に1つ課題があります。それは、多くのJavaScriptのライブラリがJSONでデータが渡ってくることを期待していることです。

しかし、JSONと従来のRDBMSでの表データの親和性はそれほど高くありません。従来のRDBMSの表データをJSONとして扱うには、アプリケーション側でJSONに変換する処理が別途必要であり、この点からネイティブにJSONを扱うMongo DB等の非RDBMSの人気が高まりました。

しかし、現在はRDBMSでもJSON形式への対応が進んでいます。弊社取扱製品の中ではOracle Databaseが最新の12c R1から、PostgreSQLは9.2よりJSONに対応しています。

両DBはJSONデータをそのまま格納できるデータ型を備えているだけでなく、従来の表データとJSONの相互変換を行う関数群も提供しているため、既存のRDBMSをElectronで作成したBIツールで利用することは容易になっていると言えます。

ElectronとRDBMSの連携


ElectronからRDBMSに接続する場合は、Node.js用のドライバを使用します。すでに、多くの主要なDBへの接続用ドライバが公開されています。

Oracle Databaseであれば、Oracle社がOSSとして公開しているnode-oracledbモジュールを利用することができます。node-oracledbモジュールは2015年1月に公開されてから、月に約1度のペースでバージョンアップが行われ、執筆時点では初の正式版であるバージョン1.0がリリースされています。スピード感のある開発速度からもOracle社が積極的にNode.jsの利用を進めていることが伺えます。

また、PostgreSQLであればnode-postgresモジュールを利用することでPostgreSQLへ簡単に接続することができます。node-postgresモジュールは、JavaScriptだけで実装されており、別途C言語のライブラリ等を必要としないため導入が容易であることから人気が高いモジュールです。

node-postgresモジュールは、導入だけでなく利用も容易です。例えば、node-postgresを使用してPostgreSQLのJSON型の列をフェッチした場合、追加の処理を行うことなく、JSONオブジェクトとして受け取ることができるため、ストレスなくJSONを利用することができます。

このように、RDBMS側のサポート、接続用ドライバの両観点からもJSONを多用するアプリケーションのバックエンドとしてRDBMSを利用する敷居はかなり下がっています。

最後に


Node.jsの躍進、Electronの登場でJSONの扱いはより重要度を増しています。

今秋リリースされる予定のPostgreSQL 9.5では、JSONの部分更新をPostgreSQL側だけで実現できるようになる機能拡張やJSON用の新しい演算子の追加が予定されています。特にJSONの部分更新は、これまではアプリケーション側で処理する必要があったため、実現された場合はPostgreSQLで完結してJSONを利用することが可能になります。これはストアドプロシージャでのJSON利用等、JSONの利用ケースを広げることができます。

アシストは、今後増えてくるであろうJavaScriptベース、JSONベースのアプリケーションとJSONをネイティブに処理できるOracle DatabaseやPostgreSQLの活用を強力に支援して参ります。


※JSONとは
JavaScriptは、null、真偽値、数値、文字列、配列、オブジェクト(連想配列)のデータをJSON(JavaScript Object Notation)というテキストフォーマットで処理します。その表現力の高さとシンプルさから、今日ではJavaScript以外でも頻繁に利用されるようになっています。


執筆者紹介

山田 聡

山田 聡(Satoshi Yamada)

株式会社アシスト サービス事業部 サポートセンター

アシスト入社当時からサポートセンターでOracle DatabaseやPostgreSQLといったデータベース製品を担当、個人的にJavaやNode.js、Python等にも触れながらアプリケーションを作成し、システム全体の視野をもったサポートを実現すべく日々邁進する5年目。

最近の悩みは昨年から急増した体重。DBにcommitするより結果にcommitしたいとCMを眺める日々。

株式会社アシスト ソフトウェア・リサーチ・センターについて

ソフトウェア・リサーチ・センターはアシストの組織を横断するメンバーから構成され、アシストの特長を活かした中立的な立場でのソフトウェア製品や市場動向の調査を行っています。

※本稿は弊社が信頼できると判断した情報源に基づいて執筆していますがその情報の正確性、完全性を保証する
 ものではありません。また本稿に記載された、弊社意見、予測などは本稿作成時点における弊社の判断であり
 今後予告なく変更されることがあります。
※記載した製品名および社名は、各社の商標または登録商標です。



Facebookで情報をお届けしています

Facebookでは、アシストの「今」を週3回のペースでお届けしています。「めげない、逃げない、あまり儲けない」を合言葉に日々頑張っておりますので、応援よろしくお願いします。



ページの先頭へ戻る