![]() |
PLAINセンターニュース第158号 |
村田 健史 (前々々号, 前々号, 前号 から続く) 3.3 STARS 1 & STARS 2:オブジェクト指向とオブジェクト指向開発技法 前節で述べたとおり、STARS1 および STARS2では、オブジェクト指向開発技法とオブジェクト指向言語に基づいた衛星観測データ解析アプリケーションを開発した。開発のためのオブジェクト指向言語としては、C++を採用した。(C++が完全なオブジェクト指向言語ではないなどという細かい議論は、ここではしない。) C++を採択した理由は、Level-2(L2)データフォーマットの問題を解決するためである。当時の太陽系プラズマ観測衛星データの L2 データファイルは、SDB(Science DataBase)形式と呼ばれる独自フォーマットで記述されるのが主流であった。独自フォーマットであるため、データを作成した者以外は、データファイルを読み出すことができない。そのため、L2 データの多くは読み出しプログラムとセットで公開されていた。利用者は、用意されたプログラムを使ってのみデータを取り出すことができた。その独自プログラムの多くは C言語で記述されていたため、このプログラムをカプセル化かできるオブジェクト指向言語となると、C++言語しか選択の余地がなかったというのが理由である。 現在の多くの衛星観測分野では、自己記述型のデータフォーマットが一般的になりつつある。たとえば天文学では FITS (the Flexible Image Transport System) という有名なデータフォーマットがある。気象学の分野では、netCDF (network Common Data Form) というデータ形式が一般に利用されている。自己記述型データファイルは、 (1)データフォーマット・データ構造はあらかじめいくつかのパターンに決まっている、 などが特徴である。 インターネット上で検索すればわかることであるが、FITS にしても netCDF にしても、データフォーマットやライブラリに関する日本語ドキュメントがきちんと整備されており、多くのユーザにより利用されている。それらのドキュメントの維持・運営は、熱心なボランティアにより行われているようである。特徴的なのは、それらのボランティアは必ずしも宇宙科学研究本部や国立天文台の研究者ではなく、全国の大学の教員が積極的に参加してサポートしていることである。これは、(詳しいことは知らないが)ボランティアが整備したサービスを全国規模の利用者が積極的に利用し、利用者がいるからボランティアはそれを励みにさらに熱心にサポートするという正のスパイラルとなっているように思われる。
さて、私が関わっている太陽系プラズマ観測(または STP:太陽地球系物理観測)分野ではどうかと言うと、CDF(Common Data Format)という立派な名前の標準データフォーマットがある。これは、NASA/Goddard Space Flight CenterのNSSDC (the National Space Science Data Center) のグループが提案した STP 観測データ向けのデータフォーマットである。現在、最新版は 3.1 であり、NSSDC のグループは継続的にこのデータフォーマットをサポートしている。CDF フォーマットは netCDF とやや似たタイプのデータフォーマットであるが、netCDF よりも柔軟性が高い。netCDF では記述できない複雑なデータ構造も CDF では定義することができる。これは、CDF が netCDF より優れているということではなく、対象となるデータ構造の定義によるものである。netCDF が対象とする分野のひとつである気象学と比較すると、科学衛星観測データは観測機器やモードが複雑である。衛星観測は時空間の制約が大きいため、少しでも効果的に情報(物理現象)を観測しようとするがため、いきおい観測モードを切り替えながら観測をするなど、出力される時系列データが単純ではなくなることが多いためである。CDF はこれらに対応しようとするがあまり、構造が複雑でわかりにくくなってしまった傾向がある。 CDF は、このように、他のデータフォーマットと比較して構造が複雑であったため、利用者にはなかなか理解しにくかったようである。筆者も、CDF のバージョンが 2.xのころは「CDF は難しくてわからない」と思っていた。バージョンが 2.x から 3.0 に変わるころに、NSSDC が提供する CDF マニュアルが改訂され、CDF がどのようなデータ構造であるのかの説明が追加された。このマニュアルの改訂により、筆者もやっと CDF の構造や設計理念を理解することができた。 (この項 次号に続く)
|
|
||||||||||||||||
![]() |