IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

スーパーエンジニアの独り言

CTC 教育サービス

 [IT研修]注目キーワード   OpenStack  OpenFlow/SDN  情報セキュリティ  Python  システムトラブルシュート 

第51回 七瀬ふたたび 2015年10月

時が過ぎるのは早いから。

砂時計の砂粒が零れ落ちるままに時間は流れていくから。

「時間だけが流れて星なんか流れないの」

ナンセンスでシニカルなストーリーが得意なSF作家である筒井康隆の著作に「七瀬もの」と呼ばれる三部作シリーズがあります。その第二部がテレパス(遠隔精神感応という超能力を有する)である主人公「火田七瀬(ひたななせ)」が活躍する「七瀬ふたたび」というエスパー(超能力者、Extra Sensory Perception、ESP)の話です。

「七瀬ふたたび」は第一部の「家族八景」とは趣が異なりスリリングなストーリー展開をすることで度々映像化されておりテレビドラマとして放映されていますが、その最初となったのは「NHK少年ドラマシリーズ」として放映されたものだったと思います。
その時に主演の火田七瀬を演じたのは多岐川裕美でした。多岐川裕美はその容姿から来る不可思議でミステリアスな独特の雰囲気を持つ彼女はこの火田七瀬のイメージにぴったりで視聴者の少年だった筆者に強烈な印象を残しました。

幾度となくテレビドラマとなった「七瀬ふたたび」ですが、近年には映画化もされました。映画化に伴いプロモーションの一環として映画のエピソードの前日譚として短編映画が製作され「しょこたん(中川翔子)」がメガホンを撮った「七瀬ふたたび プロローグ」が彼女の初監督作品として映像化されました。これに多岐川裕美が七瀬の母親として登場していました。これはオリジナルとも言えるNHK少年ドラマシリーズのオマージュに他ないのでしょうが、美麗の容貌で魅了した少女を経てアンニュイな大人の女性としての魅力を振り撒いた映像が脳裏に焼き付いている視聴者(筆者)が老けた母親役を演じる彼女を見されられると時の流れは早いものだと改めて思い知らされます。

当時、筒井康隆の「七瀬ふたたび」は平井和正や豊田有恒などの超能力ものが旬(ブーム)であった少年を「ふたたび」夢中にさせたものですが、現在に至るまで何度も取り上げられていることは良いものは良いということに他ありません。以前のコラム(「第42回 ミラーマンの時間 」)も併せてご参照下さい。

ところで「ふたたび」繋がりなのですが、過去コラム(「第19回 銀河鉄道の夜」)では宮澤賢治の童話「銀河鉄道の夜」をモチーフにしたコラムを書きました。今回お届けするのは「銀河鉄道の夜ふたたび」となりえましょう。ご想像に違わず、"Ruby on Rails" について少し書かせて頂きます。

沢山のお土産(新機能)を携えてRails 4が登場したのはつい先日の様な気がしますが、最初のリリースからは早いもので既に二年間の時間が経過しました。Rails 4のベールが剥がされていくことで新たな機能についての認識と理解が進み、それに連れて問題点が露呈し始めた様に思えるこの頃ですが、その傍らで早くも次のリリースであるRails 5の足音が聴こえてきました。どうやら「噂」ではRails 5ではWebSocketを利用可能にするためのAPI(ActionCable)が搭載される様子です。リアルタイムで通信できる仕組みなのでケーブル(Cable)で繋がっているというネーミングなのでしょう、楽しみに待ちたいと思います。

ここでは、次期リリースの前に現行Rails 4で追加された機能で気になる箇所を少しだけおさらいしておきたいと思います。

1.ストロングパラメータ (Strong Parameters)

以前(「第19回 銀河鉄道の夜」)にもご紹介しましたがRails4から必ず必要になる機能です。
Rails4ではフォーム(Form)から入力されたパラメータを取得する際に明示的に「許可します」とpermitメソッドで指示しないとデフォルトでは受け取れない様に変更されています。これは自分で明示したパラメータを使いますという宣言であり、これにより信頼できるパラメータであるということを自覚させるのです。これがストロングパラメータ (Strong Parameters)です。
Rails3ではバックエンドの手前であるモデル層にてattr_accessibleメソッドを用いてアクセスできるモデル属性(レコード)に任意の制限を課すことが出来ましたが、Strong Parametersではパラメータを受け取るフロントであるコントローラ層に機能追加したことで実装の妥当性に加えて、必ず書かないと動かないというデフォルトの仕様に変えたことでマスアサインメント(Mass Assignment)脆弱性などセキュリティ対策が更に強化されたという二点がStrong Parametersの大きな効能となります。以前のRailsに慣れていると忘れてしまいますがエラーが出て気が付く筈です。必ず実装しましょう。

2. ジェービルダー (jbuilder)

ジェービルダーといっても旧ボーランド (Borland)社が提供していたJavaのIDE(統合開発環境)ではありません。そういえばシマンテックのカフェ(Symantec Visual Cafe)というのもありましたね。良く利用させて頂いたので懐かしいのですが、JBuilderじゃなくてjbuilderです。
Rails4のjbuilderとはJSON(JavaScript Object Notation)のテンプレートエンジンです。該当するテンプレート(例えば、index.json.jbuilder)を用意してDSLを書くとJSONを生成してくれる便利な機能です。JSONを扱う頻度はこれから益々増えるかとも思いますが、Rails4からはデフォルトで使えます。このjbuilderがデフォルトで利用可能なことによる副次的な効果としてscaffoldジェネレータが生成するコントローラのソースコードからrespond_toが消え去ってスッキリしました。これは嬉しいものです。

3. ターボリンク (turbolinks)

ターボリンクは画面の遷移を高速化(ターボチャージャー)するために投入された機能(ライブラリ)です。
画面遷移を伴うページのレンダリングにて一部の処理をスキップすることで高速化します。これはリンクをクリックした際にHTMLヘッダー部分で指定されているアセット(CSS, JavaScript)の取得を省略しキャッシュを利用します。つまり遷移先の画面が前の画面と同じアセットが利用されているのが前提ではありますが、かなり速くなる訳です。
但し、turbolinksの仕組ではJavaScriptのイベントを内部でフックする(Ajaxリクエストに変換する)ためにその弊害も報告されています。それはJavaScriptを多用しているようなページでは画面が切り替わったイベントが横取りされてしまうために当初意図した通りの表示が行われなくなってしまう場合もあるのです。ですから現行では状況によっては局所的、或いは、全体的にターボリンクを無効化するなどの対策も施されています。ご自身が開発されているアプリケーションを鑑みてご利用になるか否かの判断も必要となるでしょう。

4. アセットパイプライン (Assets Pipeline)

アセットパイプラインはRails3.1から登用された機能です。HTMLの中で利用されているアセット(Asset)であるスタイルシート(CSS)やJavaScriptなどのリソースを効率的にクライアントに配送するために一つにまとめてお届けする仕組みです。これによりサーバーとブラウザ間で何度も通信が発生することを抑制できることでスムースに閲覧することが可能になります。また単にアセットをひとつに纏めるのに留まらずアセット自身の生成方法(CoffeeScriptやSASS)やその纏め方(連結や圧縮、minify)などいった様々な機能を利用可能にしてくれています。
Rails4に於いてもアセットパイプラインはデフォルト(sprockets-railsというライブラリ)でお使いになれます。また前述のターボリンクのご使用の際には、アセットパイプラインと併せて上手く利用することで効果を発揮することになるのですから再度確認しておく必要があると思います。

5. アクティブレコードのイーナム (ActiveRecord Enums)

細部の話にはなりますが、Rails4.1から追加された便利な機能にEnumクラスがあります。
モデルを定義する際にレコードにステータスなどの数値を格納するような場合がよくありますが、それら格納された数値に意味(言葉)を持たせる際に便利です。
例えば、「音声ファイルフォーマット(Audio File Format)」を表現したいと思うと下記のように記載できます。

  class AudioFileFormat < ActiveRecord::Base
    enum formattype: { au: 0, mp3: 1, wma: 2, ogg:3, wav:4, atrac:5, aac: 6, flac: 7 }
  end
  pellicule = AudioFileFormat.new
  pellicule.mp3!            #=> "formattype" set to "mp3"
  pellicule.formattype      #=> "mp3"
  pellicule.mp3?            #=> true
  pellicule.flac?           #=> false

Rails3までは単にレコードに数値を格納しデータを取り出した後でビューのヘルパーメソッドなどで解釈を加える実装などの工夫をしていましたが、Enumの登場でモデルにてちゃんと数値の意味を設定できることに加えて利用可能なメソッドも使いされるのでとても便利ですね。Enumはとても重宝しますが、使用上の際には留意点があります。例えば、前述のコードは下記に書き換えしたとしましょう。

  class AudioFileFormat < ActiveRecord::Base
    enum formattype: [:au, :mp3, :wma, :ogg, :wav, :atrac, :aac, :flac ]
  end

この場合には要素と対応する値は配列の添字になりますし、このようにenumを配列で書いた方がすっきりとします。ですが後で要素を追加する必要が出てくるかもしれません。その際には注意が必要になってきます。もし既存の配列の順番に新たな要素を追加してしまうと、対応する既存レコードのデータの意味が変わってしまうからです。下記の如く後で変更を加えたとしましょう。

    enum formattype: [:au, :mp3, :m4a, :wma, :ogg, :wav, :atrac, :aac, :flac ]

既存レコードのデータがあると、元々は「2」に対応するフォーマットタイプは、"wma" でしたが "m4a" に変わってしまうのです。もしこの問題を避けるとすれば、後で変更を加える必要がある場合には配列の最後の要素としてに追加することが必要となるのでしょう。更には、最初に例示したようにenumの要素を列挙する際に配列ではなく最初からハッシュで記述することが得策かもしれません。

6. アデクエートレコード (Adequate Record)

Rails4.2から改善されたActiveRecordの便利な機能がAdequate Record(適切なレコード)です。

これは所謂、プリペアドステートメント (prepared statement) 機能です。ご存じの様にプリペアドステートメントは発行済みのSQLクエリをキャッシュし、それを再利用することで次回以降の性能改善が為されるのです。Adequate Recordはクエリの一部をキャッシュすることが行われ内部で再利用が促進されるために、自前のソースコードを変更することなくパフォーマンスが改善されるのが期待できます。但し、気を付けるべき点も御座います。Adequate RecordではキャッシュされたSQL文が値のプレースホルダーとして値だけが差し替えられることで機能します。ですからプレースホルダーの引数が違う場合などクエリキャッシュが「適用されない場面」があることを認識する必要があるのが注意点です。

変わった箇所はまだまだいっぱいありますが、それはまたの機会にご案内させて頂きます。

 

「銀河鉄道の夜」の話にふたたび戻りましょう。

宮澤賢治の「銀河鉄道の夜」をモチーフにした多くの派生された作品がありますが、そこにもう一つ「銀河鉄道の夜」を冠した同じタイトルの唄があります。「不可思議/wonderboy(不可思議ワンダーボーイ)」というポエトリー・ラッパー(詩人)が唄っている「銀河鉄道の夜」という楽曲です。この不可思議/wonderboyというミュージシャンを筆者に教えてくれたのは、ふたたび(前々回に引き続き)同僚で後輩の「直人」であり、筆者が未踏であった日本のヒップホップ・日本語ラップに惹き込まれる切掛けを創ってくれたのは彼のお蔭なのです。振り返ればいつも未開の地に誘ってくれるのは親しい友達の影響であリました。

不可思議ワンダーボーイ版「銀河鉄道の夜」の物語は、「彼」と「彼女」が交互に想いを語る形式で綴られます。「彼」は地球から遠く離れた宇宙で人類初の「銀河鉄道のレールを敷く」という仕事をしているのです。一方、残された地球では「彼女」は彼と過ごした日々の中で彼の面影を回想しながら夢のために旅立った彼の帰りを待っています。離ればなれになった二人が再開を待ち望み、そして互いに相手を想い焦がれるというリリック(叙情詩)です。

「『ありがとう』とか、『また逢おう』とか、ありふれたことが言いたい」

この物語を聴いて思い出したのは、十年程前に話題なった短編アニメーションがあったことです。新海誠が一人で創り上げた「ほしのこえ」という作品です。ストーリー展開の骨子は宇宙の彼方に向かって遠く離れていく彼女と地球に残る彼が携帯電話のメールでやりとりを交わすものの距離が離れていくにしたがって時間がずれていくことで二人の想いが交錯するという話なのですが、「銀河鉄道の夜」の歌詞は「ほしのこえ」のプロットをも想起させます。幻想的でファンタジーなポエトリーラップといった趣向の曲ですが、是非聴いて下さい。

もう一曲、不可思議/wonderboyで聴いて欲しい言葉があります。「Pellicule(ぺリキュール)」という楽曲です。仏語でフィルム、映画という意味のタイトルですが、久し振りに逢った旧友との会話で綴られた素朴で飾り気のない様子を8mmフィルムに納めたその色褪せた映像を見せられている心地にさせてくれます。優しい気持ちになれる唄です、是非聴いて下さい。

そしてこの「Pellicule(ぺリキュール)」をカバーしたのがワンちゃん(不可思議/wonderboy)の友人だった神門(ごうど)です。不可思議/wonderboyを偲ぶレクイエム(鎮魂歌)として、そしてワンちゃんへのアンサーソングにもなっています。涙なしには聴けませんが是非二人の「Pellicule(ぺリキュール)」を聴いて下さい。二人のリリック(叙情詩)が会話になっているのです。

「こんな風に離ればなれになることは寂しいけれど、決して悪いことばかりじゃないよ」ってワンちゃん(ワンダーボーイ)も言ってますしね。

 

ワンダーボーイはもうここには居ません。彼はカムパネルラなのです。
そしてもう一人神門(ごうど)という友人が居ます。彼がジョバンニとなりました。

 

まるで、銀河鉄道で旅立つ不可思議ワンダーボーイをサウザンクロス(南十字)駅を過ぎて皆が列車を降りていくのに二人だけが車内に取り残されたかの様で、ワンちゃんの旅立ちを神門が見送っているのです。

「俺たちの知る限り時間てやつは止まったり戻ったりはしない、ただ前に進むだけだ」

次回もお楽しみに。

 


 

 [IT研修]注目キーワード   OpenStack  OpenFlow/SDN  情報セキュリティ  Python  システムトラブルシュート