気象庁数値予報ルーチンにおける
Ruby 活用事例
気象庁予報部数値予報課 プログラム班
豊田英司
(page 1)
きょうの話題
	
	- まずは数値予報ルーチンのご紹介
		
		- 天気予報の中での数値予報システム
		
- データベース NuSDaS とデータサーバ Pandora
		
 
- こんな所でもう Ruby
		
	
- これからはこんな所で Ruby?
		
		- 国内二進・GRIB電文エンコード
		
- Pandora サーバ
		
 
(page 2)
天気予報と数値予報
	
	- 気象観測
		
	
- 数値予報
		
		- デコード
		
- データ同化
		
- 数値予報モデル
		
- ガイダンス
		
- エンコード: 電報として集配信
		
 
- 予報作業 → 発表
	
(page 3)
数値予報の歴史 = コンピュータの歴史
 
(page 4)
現行計算機システム
 
(page 5)
数値予報システム
	
	- 長期
		
		- 暖候季・寒候季予報 (年2回)
		
- エルニーニョ予測、季節予報 (月1回)
		
- 1か月予報 (週1回)、週間予報 (日1回)
		
 
- 中核 = 全球解析予報サイクル
		
		- サイクル解析 (日4回)、速報解析・予報 (日2回)
		
 
- 高解像度
		
		- 領域モデル (日2回)
		
- メソモデル (日4回)
		
- 降水短時間予報 (日24回→日48回)
		
 
(page 6)
「プログラム」に関する仕事
	
	- 運用ソフトウェアの設定
		
		- JNOS: ジョブスケジューラ
		
- AQUA: CPU割当て管理
		
- バッチジョブの作成
		
 
- プログラムの整備
		
		- 電文デコード
		
- 格子データ入出力 NuSDaS, Pandora
		
- FAX 図作成等の可視化、電文エンコード
		
 
- その他
		
	
(page 7)
NuSDaS ツールでの Ruby 利用
NuSDaS とは
	
	- 気象GPV用データベース
		
		- データ圧縮
		
- 複数ファイルに分割配置/探索
		
- 定義ファイル
		
 
- 構造は固定的7次元
		
		- 基準時刻・メンバ・対象時刻・高度・要素・X・Y
		
- API はこれらに依存
		
- ファイル型式等の具体層にも....
		
 
- ライブラリは C で書かれている
		
	
(page 8)
NuSDaS ツール in Ruby
	
	- 入出力API Ruby/NuSDaS
		
		- 拡張ライブラリ NArray, NWPTime 使用
		
 
- 定義ファイルエディタ
		
	
- データ操作ツール
		
		- = 複数ディレクトリの併合
		
- ハードリンクで済む版
		
- データファイルのマージ版
		
 
(page 9)
Ruby の嬉しい所 = 既存スタイルの隙間を補う
	
	- C
		
	
- シェル
		
	
- Ruby
		
		- 開発が速い
		
- プログラム動作も結構速い、チューン可能
		
- 保守性よし
		
- GUI もばっちり
		
 
(page 10)
バッチジョブ生成ツール
半端じゃない世界
	
	- 量的すごさ
		
		- スクリプトの数: 1,877
		
- 投入頻度: 4000/day
		
- ロードモジュール数: 2,567
		
- バッチジョブ: プログラムコード行数の1/3
		
 
- 質的すごさ
		
		- 可変データ取り回し
			
			- プログラム起動毎にシンボリックリンク
			
- テスト用作業ディレクトリ
			
 
- その他変な書法 (明文規則なし、チェック大変)
			
		
 
(page 11)
バッチジョブ生成ツール
	
	- 入力言語: JCL
		
		- ディレクトリ名の抽象化
		
- 記述の圧縮:だいたい1/3
		
- 書法チェックの一部を文法チェックとして自動化
		
 
- 出力言語: ボルンシェル
		
		- 可変データ取り回し等、特殊な御作法のコードを自動的に作成
		
 
- 将来: Ruby によるインタープリタへ移行
	
(page 12)
国内二進電文エンコーダ in Ruby
	
	- 入出力API Ruby/NuSDaS の活用
		
	
- ビット圧縮の高速化
		
		- 拡張ライブラリ MultiBitNums
			
		
- 周辺処理の整理とあわせて旧 Fortran コードと同程度の処理速度を達成
		
 
- 動いているものは変えられない
		
	
(page 13)
Pandora サーバ
	
	
	
(page 14)
まとめ
(page 15)