Ajax/Railsを用いた大規模 シミュレーションコードの Web化

25
Ajax/Railsを用いた大規模 シミュレーションコードの Web江本雅彦@核融合科学研究所

Transcript of Ajax/Railsを用いた大規模 シミュレーションコードの Web化

Page 1: Ajax/Railsを用いた大規模 シミュレーションコードの Web化

Ajax/Railsを用いた大規模

シミュレーションコードのWeb化

江本雅彦@核融合科学研究所

Page 2: Ajax/Railsを用いた大規模 シミュレーションコードの Web化

共同研究のための環境整備

Page 3: Ajax/Railsを用いた大規模 シミュレーションコードの Web化

共同研究者の為の基盤整備

共同研究者が、遠隔地からLHD実験に参加しやすいように、環境整備を進めてきた。

計算サーバ

データーベース

生データ表示

Page 4: Ajax/Railsを用いた大規模 シミュレーションコードの Web化

基本設計

対象ユーザ = 短期滞在の共同研究者 LHDの実験システムを常時使用していないため、データの参照の方法や、解析ツールの使い方に不慣れ

必須項目 ユーザーフレンドリーなGUIの提供

状況に応じたメニュー表示で直感的に必要なデータを入力することができる。

インストールが不要 短期滞在者には、インストールする手間も惜しい。

メンテナンスが容易

Page 5: Ajax/Railsを用いた大規模 シミュレーションコードの Web化

WEBアプリケーション

WEBブラウザは今日のOSでは、基本的なアプリケーションであり、個別にインストールする必要がない。

ソフトウェアはWEBサーバ上に置いてあり、接続の度にダウンロードされるため、インストールに必要がなく、バグフィックスやバージョンアップに伴うアプリケーションの再配布が必要ない。

Page 6: Ajax/Railsを用いた大規模 シミュレーションコードの Web化

公開中のWEBサービス

解析データ取得・表示 (Java アプレット)

長時間リアルタイム表示 (Javaアプレット)

制御室大画面表示 (Java アプレット)

磁気面可視化 ( HTML + FORTRAN(CGI) )

実験データ検索 (PHP + JavaScript)

生データ表示 (Ruby on Rails + FORTRAN )

磁気面計算(Ruby on Rails + FORTRAN )

Page 7: Ajax/Railsを用いた大規模 シミュレーションコードの Web化

シミュレーションコードのWEBインタフェイスの開発

Page 8: Ajax/Railsを用いた大規模 シミュレーションコードの Web化

既存のシミュレーションコード

多くが大型計算機で動作するFORTRANコードであるため、普段GUIベースのOSを使っている人には使い辛い

実験データから必要な入力形式への変換が必要

(PC用のコードの場合)各自の環境で実行されることを前提に作られており、他の環境や不特定多数の人が同時に実行されることを考慮されていない。

WEB化によりユーザビリティを向上させ、多くの研究者に使ってもらう。

Page 9: Ajax/Railsを用いた大規模 シミュレーションコードの Web化

比較

Java アプレット HTML +

CGI

JavaScript

+ α

ブラウザ以外に必要なソフトウェア

JVM なし なし

柔軟性 高 高 低

ダウンロードファイルサイズ 大 最小 小

プラットフォーム間の互換性 中 高 中

GUIの操作性 高 低 中

Page 10: Ajax/Railsを用いた大規模 シミュレーションコードの Web化

各WEBアプリケーションの特徴

Javaアプレット

クライアント側で複雑な処理を必要とする場合

HTTP以外のプロトコルを必要とする場合

HTML+ CGI

処理の大部分はサーバで行う。

HTMLの提供するGUI(フォーム)のみのため、高度なGUIアプリケーションを作成するには向いていない。

JavaScript + α

軽量アプリケーション(クライアント側では、比較的単純な処理)

主たる処理はサーバ側で行い、よりインタラクティブな処理を提供する。

Page 11: Ajax/Railsを用いた大規模 シミュレーションコードの Web化

シミュレーションコードのGUIインタフェイス

FITコード(デポジション計算)のWEB化

計算は既存のFORTRANコードを利用

GUIにはRuby on Railsを利用し、インタラクティブに必要なパラメタを入力できるようにする。

大型計算機とはSSHでコマンドを発行

中間ファイル、計算結果等はデータベースにRubyのオブジェクトを永続化

Page 12: Ajax/Railsを用いた大規模 シミュレーションコードの Web化
Page 13: Ajax/Railsを用いた大規模 シミュレーションコードの Web化

WEB

browserRuby on

Rails

FORTRAN

Code

RDB

HTTP

SSH

SFTP

Persistent

Object

Object

LighttpdFast CGI

SX-8

GFS

Job

Control

Web Server

(Linux)

Gateway

Server

(Linux)

Client

HTTP

Page 14: Ajax/Railsを用いた大規模 シミュレーションコードの Web化

AJAX

Page 15: Ajax/Railsを用いた大規模 シミュレーションコードの Web化

HTTP

HTTPはSynchronous (同期)で呼び出されるため、CGIを使った旧来のWEBアプリケーションでは、サーバから結果を取得するまで待ち合わせる必要があり、スムーズな画面書き換えを行うユーザインタフェイスを実現の障害となっていた。

Page 16: Ajax/Railsを用いた大規模 シミュレーションコードの Web化

AJAX

Google map

WEBブラウザだけで、地図の滑らかな移動・拡大を行うことができる。

Asynchronous JavaScript + XML

それ以前の既存に技術の組み合わせであるが、AJAXという名前をつけられて紹介されたことで注目を浴びる。

一般に使用されているWEBブラウザの標準機能だけで、滑らかなユーザインタフェイスを実現

Page 17: Ajax/Railsを用いた大規模 シミュレーションコードの Web化
Page 18: Ajax/Railsを用いた大規模 シミュレーションコードの Web化

JavaScript の問題点

HTMLのコード(表現)とJavaScriptのコード(ロジック)が混在し、ソースコードが読み辛く、開発・メンテナンスが難しい。

クライアント・サーバ間のデータ送受信には定まった方法がないため、複雑なデータの受け渡しにはプログラマが責任を持つ必要がある。

Page 19: Ajax/Railsを用いた大規模 シミュレーションコードの Web化

Ruby on Rails

Rubyを用いたアプリケーションフレームワーク

CGIはRubyのメソッドとして実装されている

Webのページは動的に生成される

MVCアーキテクチャ

JavaScriptをラッピング

ActiveRecord によるデータベース操作の抽象化

Page 20: Ajax/Railsを用いた大規模 シミュレーションコードの Web化

CoC

Convention over Configuration = 設定よりも規約

Ruby on Rails が提供する名前の規則に沿うことで、個別の設定をしなくてもデフォルトの動作でプログラムを記述することができ、大幅にコード量を減らすことができる。

テーブルやクラスのネーミングルール等

テーブル名:クラス名の複数形 (Cars, Trains, etc.)

Page 21: Ajax/Railsを用いた大規模 シミュレーションコードの Web化

DRY

Do not Repeat Yourself = 同じことの繰り返しを避ける

Ruby on Rails のAcriveDirectory では、クラス定義をSQLのスキーマから動的に取得するため、データベース、クラスのそれぞれで定義する必要がない。

Page 22: Ajax/Railsを用いた大規模 シミュレーションコードの Web化

Using AJAX by Ruby on Rails

AJAXの実現に必要なJavaScriptのコード(Protocol.js)はRubyのメソッドでラッピングされているため、JavaScriptのコードを(基本的には)一切書かずに、AJAXを実現することが可能である。

Page 23: Ajax/Railsを用いた大規模 シミュレーションコードの Web化

AcriveRecord

リレーショナルデータベース上のテーブルとクラスのマッピングが自動的に行われるため、変換のためのコードを書く必要がない。

テーブル間のリレーション、検索キュエリが抽象化され、Rubyのメソッドとして実現されている。

実現するためには、Ruby on Railsのネーミングルールに沿った名前付けが必要

Ruby の Class : Car, Train

テーブル名 (Class の複数形) : Cars, Trains

Page 24: Ajax/Railsを用いた大規模 シミュレーションコードの Web化

問題点

リクエスト毎にコネクションが張られるため、同一クライアントからのリクエストに対しても、初期化処理が行われる。

解析データのようにデータの取得、ファイルの解析が毎回行われる。

Marshal.dump / load による永続化

Page 25: Ajax/Railsを用いた大規模 シミュレーションコードの Web化

まとめ

共同研究者の利便性を高めるため、WEBを利用したアプリケーションを開発中である。

AJAXは、軽量かつインタラクティブなアプリケーションの作成に向いている。

JavaScriptを直接使用したアプリケーション開発は困難であるが、Ruby on Railsを利用することで、開発効率が大幅に向上する。