• 検索結果がありません。

OSS モデルカリキュラムの 学 習 ガイダンス 3. IT 知 識 体 系 との 対 応 関 係 4-4- 応 スクリプト 言 語 に 関 する 知 識 と IT 知 識 体 系 との 対 応 関 係 は 以 下 の 通 り 科 目 名 応 用 レベル

N/A
N/A
Protected

Academic year: 2021

シェア "OSS モデルカリキュラムの 学 習 ガイダンス 3. IT 知 識 体 系 との 対 応 関 係 4-4- 応 スクリプト 言 語 に 関 する 知 識 と IT 知 識 体 系 との 対 応 関 係 は 以 下 の 通 り 科 目 名 応 用 レベル"

Copied!
23
0
0

読み込み中.... (全文を見る)

全文

(1)

4-4-応 スクリプト言語に関する知識

1. 科目の概要

スクリプト言語によるシステム構築の応用例として Ruby によるアプリケーション構築

フレームワークであるRuby on Rails (RoR)を取り上げる。RoR の基本的な仕組みを解説し、 RoR を利用したデータベースアプリケーション開発やアプリケーションのカスタマイズ、 開発方法などについて解説する。

2. 習得ポイント

本科目の学習により習得することが期待されるポイントは以下の通り。 習得ポイント 説 明 シラバスの対応コマ 4-4-応-1.文字コードと多言語化 文字データを扱うために必要な文字コードについて解説する。また、Ruby M17Nによる多言語化について説明し、多言語対応によるテキストの変換方法を解説する。 1 4-4-応-2.セキュリティ Webアプリケーション構築の際に必須となるセキュリティ事項を紹介し、問題の原因と解決方法を解説する。 2 4-4-応-3.テストとデバッグ OSSの品質保証活動を支援する、テストとデバッグの手順を解説する。Rubyでの単体テストの手法を説明し、テストの自動化やデバッグの方法について解説する。 3 4-4-応-4.Ruby on Rails とは RoRによるWebアプリケーション開発の概要と作業の流れを解説する。RoRを利用して開発し たWebアプリケーションの構成要素を説明し、データベースの設定方法やWebサーバの起 動、インタラクションの確認方法などについて解説する。 4 4-4-応-5.Ruby on Rails でのデータベース連携 RoRを用いたWebアプリケーション開発ではどのようにデータベースとの連携が行われるかを 解説する。RoRにおけるデータベース連携のコンポーネントであるActiveRecordの概要と構 成について説明し、データベース操作に必要な各種の設定について述べる。 5 4-4-応-6.Ruby on Railsを利用したデータベースアプリケーショ ン開発 データベースアプリケーションの開発方法を、RoRでどのように実現するかについて具体的 な操作手順を交えて説明する。テーブルの定義、テーブル操作、トランザクション処理といっ たそれぞれの手順がRoRでどう実現されるかを解説する。 6

4-4-応-7.Ruby on Rails を使用したWebアプリケーションの作 成 RoRによるWebアプリケーション開発の概要と作業の流れを解説する。RoRを利用して開発し たWebアプリケーションの構成要素を説明し、データベースの設定方法やWebサーバの起 動、インタラクションの確認方法などについて解説する。 7,8 4-4-応-8.Ruby on Railsのプラグイン開発 RoRの機能を拡張するプラグインを新たに開発する方法を説明する。ジェネレータの実行や 機能の実装と実行といったプラグイン作成手順の流れを示し、作成したプラグインをテストす る手法を示す。また新たに作成したプラグインを利用するサンプルプログラムを示し実際の利 用手順を説明する。 9 4-4-応-9.Rubricksのカスタマイズ

典型的なWebアプリケーションであるコンテンツ管理システム(Content Management System; CMS)について説明し、CMSのRubyによる実装例としてRubricksやRadiant CMSなどのアプ リケーションを紹介する。RubricksやRadiant CMSの構成と特徴について述べ、さらに各アプ リケーションの導入と設定方法を解説する。 10 4-4-応-10.コードリーディング オープンソースソフトウェアを読み解くことの意義を説明し、コードリーディングに有効な手法 として、関連するドキュメント類の参照方法や、データ構造と処理の流れを読み解く方法を説 明する。更に解析に有用な統合開発環境やツール類の紹介を行う。 11 ※ 【学習ガイダンスの使い方】 1. 「習得ポイント」により、当該科目で習得することが期待される概念・知識の全体像を把握する。 2. 「シラバス」、「IT 知識体系との対応関係」、「OSS モデルカリキュラム固有知識」をもとに、必要に応じて、

(2)

3. IT 知識体系との対応関係

「4-4-応 スクリプト言語に関する知識」と IT 知識体系との対応関係は以下の通り。 1 2 3 4 5 6 7 8 9 10 11 4-4-応 スクリプト言語 に関する知識 文字コードと多言 語化 セキュリティ テストとデバッグ Ruby on Railsと は データベース連携 データベースアプ リケーション開発 Webアプリケー ションの作成・1 Webアプリケー ションの作成・2 プラグイン導入と 開発 オープンソースシ ステムのカスタマ イズ コードリーディング 科目名 応用レベル <IT 知識体系上の関連部分> 科目名 1 2 3 4 5 6 7 8 9 10 11 12 13 1 IT-IAS 情報保証 と情報セキュリ ティ IT-IAS1.基礎的な 問題 IT-IAS2.情報セ キュリティの仕組 み(対策) IT-IAS3.運用上の 問題 IT-IAS4.ポリシー IT-IAS5.攻撃 IT-IAS6.情報セ キュリティ分野 IT-IAS7.フォレン ジック(情報証拠) IT-IAS8.情報の状 態 IT-IAS9.情報セ キュリティサービ ス IT-IAS10.脅威分 析モデル IT-IAS11.脆弱性 2 IT-SP 社会的な観 点とプロフェッ ショナルとしての 課題 IT-SP1.プロ フェッショナルと してのコミュニ ケーション IT-SP2.コン ピュータの歴史 IT-SP3.コン ピュータを取り巻 く社会環境 IT-SP4.チーム ワーク IT-SP5.知的財産 権 IT-SP6.コン ピュータの法的問 題 IT-SP7.組織の中 のIT IT-SP8.プロ フェッショナルと しての倫理的な問 題と責任 IT-SP9.プライバ シーと個人の自由 3 IT-IM 情報管理 IT-IM1.情報管理 の概念と基礎 IT-IM2.データ ベース問合わせ言 語 IT-IM3.データ アーキテクチャ IT-IM4.データモ デリングとデータ ベース設計 IT-IM5.データと 情報の管理 IT-IM6.データベースの応用分野

4 IT-WS Webシステムとその技術 IT-WS1.Web技術 [1-Ⅰ-7] IT-WS2.情報アー キテクチャ [1-Ⅰ-7] IT-WS3.デジタル メディア IT-WS4.Web開発 IT-WS5.脆弱性 IT-WS6.ソーシャ ルソフトウェア 5 IT-PF プログラミング基礎 IT-PF1.基本データ構造 IT-PF2.プログラ ミングの基本的構 成要素 IT-PF3.オブジェ クト指向プログラ ミング IT-PF4.アルゴリ ズムと問題解決 IT-PF5.イベント 駆動プログラミン グ IT-PF6.再帰 6 IT-IPT 技術を統 合するためのプロ グラミング IT-IPT1.システム 間通信 [1-Ⅰ-3] IT-IPT2.データ割 り当てと交換 IT-IPT3.統合的 コーディング IT-IPT4.スクリプ ティング手法 IT-IPT5.ソフト ウェアセキュリ ティの実現 IT-IPT6.種々の問 題 IT-IPT7.プログラ ミング言語の概要

7 CE-SWE ソフトウェア工学 CE-SWE0.歴史と概要 CE-SWE1.ソフトウェアプロセス CE-SWE2.ソフト ウェアの要求と仕 様 CE-SWE3.ソフト ウェアの設計 CE-SWE4.ソフト ウェアのテストと 検証 CE-SWE5.ソフト ウェアの保守 CE-SWE6.ソフト ウェア開発・保守 ツールと環境 [1-Ⅰ-4] CE-SWE7.ソフト ウェアプロジェク ト管理 CE-SWE8.言語翻訳 CE-SWE9.ソフト ウェアのフォール トトレランス CE-SWE10.ソフト ウェアの構成管理 CE-SWE11.ソフ トェアの標準化 [1-Ⅰ-6] 8 IT-SIA システム インテグレーショ ンとアーキテク チャ IT-SIA1.要求仕様IT-SIA2.調達/手 配 IT-SIA3.インテグ レーション [1-Ⅰ-4] IT-SIA4.プロジェ

クト管理 IT-SIA5.テストと品質保証 IT-SIA6.組織の特性 IT-SIA7.アーキテクチャ

9 IT-NET ネットワーク IT-NET1.ネット ワークの基礎 IT-NET2.ルーティ ングとスイッチン グ IT-NET3.物理層 IT-NET4.セキュリティ IT-NET5.アプリ ケーション分野 [1-Ⅰ-5] IT-NET6.ネット ワーク管理 CE-NWK0.歴史と概 要 CE-NWK1. 通信 ネットワークの アーキテクチャ CE-NWK2.通信ネッ トワークのプロト コル CE-NWK3.LANとWAN CE-NWK4.クライア ントサーバコン ピューティング [1-Ⅰ-3] CE-NWK5.データの セキュリティと整 合性 CE-NWK6.ワイヤレ スコンピューティ ングとモバイルコ ンピューティング CE-NWK7.データ通 信 CE-NWK8.組込み機 器向けネットワー ク CE-NWK9.通信技術 とネットワーク概 要 CE-NWK10.性能評 価 CE-NWK11.ネット ワーク管理 CE-NWK12.圧縮と 伸張 CE-NWK13.クラス タシステム CE-NWK14.イン ターネットアプリ ケーション [1-Ⅰ-5,7] CE-NWK15.次世代 インターネット CE-NWK16.放送 11IT-PT プラット フォーム技術 IT-PT1.オペレー ティングシステム [1-Ⅰ-3] IT-PT2.アーキテ クチャと機構 IT-PT3.コン ピュータインフラ ストラクチャ IT-PT4.デプロイ メントソフトウェ ア [1-Ⅰ-4] IT-PT5.ファーム ウェア IT-PT6.ハードウェア

12CE-OPS オペレーティングシステムCE-OPS0.歴史と概 CE-OPS1.並行性 CE-OPS2.スケ ジューリングと ディスパッチ CE-OPS3.メモリ管 理 CE-OPS4.セキュリ ティと保護 CE-OPS5.ファイル 管理 CE-OPS6.リアルタ イムOS CE-OPS7.OSの概要 CE-OPS8.設計の原 則 CE-OPS9.デバイス 管理 CE-OPS10.システ ム性能評価 コ ン ピュ ー タ ハー ド ウェ ア と アー キ テ ク チャ 13 CE-CAO コン ピュータのアーキ テクチャと構成 CE-CAO0.歴史と概 要 CE-CAO1.コン ピュータアーキテ クチャの基礎 CE-CAO2.メモリシ ステムの構成と アーキテクチャ CE-CAO3.インタ フェースと通信 CE-CAO4.デバイス サブシステム CE-CAO5.CPUアー キテクチャ CE-CAO6.性能・コ スト評価 CE-CAO7.分散・並 列処理 CE-CAO8.コン ピュータによる計 算 CE-CAO9.性能向上 14IT-ITF IT基礎 IT-ITF1.ITの一般 的なテーマ [1-Ⅰ-4] IT-ITF2.組織の問 題 IT-ITF3.ITの歴史 IT-ITF4.IT分野 (学科)とそれに関 連のある分野(学 科) IT-ITF5.応用領域 IT-ITF6.IT分野に おける数学と統計 学の活用 CE-ESY0.歴史と概 要 CE-ESY1.低電力コ ンピューティング CE-ESY2.高信頼性 システムの設計 CE-ESY3.組込み用 アーキテクチャ CE-ESY4.開発環境 CE-ESY5.ライフサ

イクル CE-ESY6.要件分析 CE-ESY7.仕様定義 CE-ESY8.構造設計 CE-ESY9.テスト CE-ESY10.プロ ジェクト管理 CE-ESY11.並行設 計(ハードウェ ア、ソフトウェアCE-ESY12.実装 CE-ESY13.リアル タイムシステム設 計 CE-ESY14.組込み マイクロコント ローラ CE-ESY15.組込み プログラム CE-ESY16.設計手法 CE-ESY17.ツールによるサポート CE-ESY18.ネット ワーク型組込みシ ステム CE-ESY19.インタ フェースシステム と混合信号システ ム CE-ESY20.センサ

技術 CE-ESY21.デバイスドライバ CE-ESY22.メンテナンス CE-ESY23.専門システム CE-ESY24.信頼性 とフォールトトレ ランス 複 数 領 域 に ま た が る も の 15CE-ESY 組込みシステム シ ス テ ム 基 盤 10CE-NWK テレコミュニケーション 分野 組 織 関 連 事 項 と 情 報 シ ス テ ム 応 用 技 術 ソ フ ト ウェ ア の 方 法 と 技 術

(3)

4. OSS モデルカリキュラム固有の知識

OSS モデルカリキュラム固有の知識として、Ruby on Rails(RoR)に関する知識が挙げら

れる。RoR の仕組み、開発手順、プラグイン開発、RoR アプリケーションの仕組みを Linux

上での作業を通して習得する。 科目名 第1回 第2回 第3回 第4回 第5回 第6回 第7回 (1) 文字コード (1) 脆弱性の種類 (1) テスト (1) Ruby on Railsの 仕組み (1) データベースの仕 組み (1) Model開発 (1) RailsによるWebア プリケーション開発の 説明 (2) 多言語化 (2) 対策 (2) デバッグ (2) コードジェネレート の説明 (2) ActiveRecordの 説明 (2) データベースアプ リケーション開発 (2) scaffoldによるア プリケーション生成 (3) Ruby-GetText (3) MVCアーキテク チャ (3) データベースとの 連携 (3) サンプルプログラ ム 第8回 第9回 第10回 第11回 (1) ルーティング(URL マッピング) (1) プラグインとは (1) Rubricksとは (1) ソースコードリー ディング (2) 表示内容の変更 (2) 新規プラグインの 開発 (2) 新規コンポーネン トの開発 (2) コード解析手法 (3) リダイレクト処理 (3) オープンソースシ ステムのカスタマイズ 例 (3) 解析手順 (4) 読みやすいコード 4-4-応 スクリプト言語 に関する知識 (網掛け部分はIT 知識体系で学習できる知識を示し、それ以外は OSS モデルカリキュラム固有の知識を示している)

(4)

プログラミング分野 4-4-応 スクリプト言語に関する知識 応用 習得ポイント 4-4-応-1. 文字コードと多言語化 対応する コースウェア 第 1 回 文字コードと多言語化

4-4-応-1. 文字コードと多言語化

文字データを扱うために必要な文字コードについて解説する。また、Ruby M17N による多言語化に ついて説明し、多言語対応によるテキストの変換方法を解説する。 【学習の要点】 * コンピュータ上で文字を扱うためには文字コードを設定する必要がある。 * Ruby は多言語化に対応しており、複数の文字コードを同時に扱うことができる。 図 4-4-応-1 文字コードと文字化け

(5)

1) 文字コード 文字や記号をコンピュータ上で扱うために関連付けられた値のこと、もしくは、その体系を文字コー ドと呼ぶ。英数字は 1 バイトで表わされ、ASCII がほぼ世界標準である。日本語や中国語、韓国語 などは独自に定めた文字コードを使用するが、異なる文字コードで書かれた文字を表示すると正 常に表示されないなど、互換性に問題が残る。日本で主に使われている文字コードは以下の通り である。 * Shift-JIS 日本語の文字コードの一つ。Windows や Mac OS で使われる。 * EUC(Extended Unix Code)

Unix や Linux で使われる文字コード。 * Unicode

世界中の言語の文字を単一のコードで扱うための文字コード。 * UTF-8

Unicode の符号化方式の一つ。Linux のディストリビューションによっては UTF-8 を OS 標準の 文字コードとしている。Mac OS X で使われる。 2) Ruby と文字コード Ruby 実行時に「-K」オプションで使用する文字コードを指定することができる。また、プログラム中 でマルチバイト文字を扱うために、jcode ライブラリが用意されている。 3) 多言語化 Ruby はバージョン 1.9 から M17N(multilingualization)に対応した。多言語化とは、スクリプト中で同 時に複数の言語を扱えるようにすることである。Ruby M17N はエンコーディングに CSI(Code Set Independent)方式を採用しており、内部で扱う文字コードを特定の 1 つの文字コードに制限しない。 これにより、複数のエンコーディングを同時に混在させることができる。また、外部と内部の文字コ ードを同じにすることで、変換によるオーバヘッドをなくしている。 4) Ruby-GetText 国際化された Ruby スクリプトの作成を手助けするツールとして、Ruby-GetText がある。これは、ロ ケールの設定により、対応付けられた文字列を切り替える機能を提供する。 * po ファイル Ruby スクリプトファイルより抽出された翻訳可能な文字列ファイル。テンプレートファイルが pot ファイルで、言語ごとに翻訳したものが po ファイルである。 * mo ファイル po ファイルから作成されるバイナリファイル。適切なディレクトリ(bindtextdomain()で指定)に配 置することで、Ruby スクリプト実行時に読み込まれ、対応する言語の文字列が表示されるように なる。

(6)

プログラミング分野 4-4-応 スクリプト言語に関する知識 応用 習得ポイント 4-4-応-2. セキュリティ 対応する コースウェア 第 2 回 セキュリティ

4-4-応-2. セキュリティ

Webアプリケーション構築の際に必須となるセキュリティ事項を紹介し、問題の原因と解決方法を解 説する。 【学習の要点】 * Web サイトにおける脆弱性の主要なものとして、不正なリクエストを送ることによってサーバに対 して悪意ある操作を行うことができる、SQL インジェクションや OS コマンドインジェクションがあ る。 * ユーザに意図しないアクセスを行わせる攻撃として、クロスサイトスクリプティング(XSS)やクロス サイトリクエストフォージェリ(CSRF)がある。 * 脆弱性を含まない Web サイトを作るためには、バリデート、サニタイズといった対策や、信頼性 の高いライブラリを使用するなどの方法が必要。 図 4-4-応-2 XSS と CSRF の仕組み

(7)

1) SQL インジェクション

アプリケーションが想定していない SQL 文を実行させ、DB を不正に操作する攻撃。不正な認証を 通したり、DB 内の情報が盗まれたりする可能性がある。

たとえば、ユーザ認証に次のような SQL 文を使用していたとする。

SELECT * FROM user WHERE userid = ' ユーザ id ' AND pwd = ' パスワード '

これに対してユーザ id「abc」、パスワード「' OR '1' = '1」という値を入力すると、 SELECT * FROM user WHERE userid = 'abc' AND pwd = '' OR '1' = '1' となり、パスワードがわからなくても認証されてしまう。 2) OS コマンドインジェクション 外部からサーバの任意の OS コマンドを実行する攻撃。悪意を持って意図していない OS コマンド を実行されることにより、別サイトへの攻撃の踏み台とされたり、サーバ内の情報が盗まれたりする 可能性がある。 3) クロスサイトスクリプティング(XSS) 動的に Web ページを生成するサイトに対し、不正な要素を混入させる攻撃。別サイトの悪意のある スクリプトを混入させることができ、偽ページを表示させてフィッシング詐欺などに使用される可能性 がある。 たとえば、掲示板などの本文に<script>~</script>タグを埋め込まれた場合、適切な処理をしてい なければ、掲示板を表示したときにこのスクリプトが実行されてしまう。 4) クロスサイトリクエストフォージェリ(CSRF) 攻撃用のページにアクセスしてきたユーザに、意図していないサーバに意図していない HTTP リク エストを送信させること。掲示板やブログに書き込みを行わされたり、商品を購入させられたり、パス ワードなどのユーザ情報が変更されたりする可能性がある。HTTP リクエストを行うのはユーザ本人 であるから、Cookie などにユーザ認証情報を保存していた場合にはそのまま処理が行われてしまう 危険性がある。 対策として、HTTP レスポンスに一度だけ使用する任意の情報(ワンタイムトークン)を Web ブラウザ に渡しておき、リクエストを受けたときにこの情報を持っていなければ不正と判断する方法がある。 5) 対策 * バリデート 処理を実行する前に、入力データの型、範囲などの確認を行う。パスワードやメールアドレスの 入力であれば、不正な文字が含まれていないかの確認を行うなど。 * サニタイズ 特別な意味のある記号を無害な形にエスケープする。SQL における「'」→「''」置換、HTML に おける「<」→「&lt;」置換など。 * ライブラリ使用 信頼性のある専用のライブラリを使用する。たとえば、SQL インジェクション対策であれば、SQL 文を直接書かずに O/R マッピングを使用するなど。

(8)

プログラミング分野 4-4-応 スクリプト言語に関する知識 応用 習得ポイント 4-4-応-3. テストとデバッグ 対応する 第 3 回 テストとデバッグ コースウェア

4-4-応-3. テストとデバッグ

OSS の品質保証活動を支援する、テストとデバッグの手順を解説する。Ruby での単体テストの手法 を説明し、テストの自動化やデバッグの方法について解説する。 【学習の要点】 * プログラムやモジュールの仕様に基づいたテストケースを作成し、テストプログラムに実装して動 作を確認することで、正しいプログラムを作成する。 * カバレジ測定ツールでの計測値が要求仕様に満たなければ、品質の向上と保証のためにテス トケースを改修する。 * デバッグでの原因特定でテストケースの不備が表出すれば、テストケースを改修する。 図 4-4-応-3 テストとデバッグ

(9)

1) テスト 品質保証活動のひとつにユニットテストがあり、コーディングの後には必ず行う工程である。 * Ruby において、ユニットテストはクラスやメソッドをテスト対象の単位とする。ユニットテストを行う ためには、テストケースを作成する必要がある。引数に与える値と、その値でメソッドを実行した ときに期待される処理結果の値について、プログラムやモジュールの仕様に基づきテストケース を作成する。これをもとに、実行結果と期待値を比較するコードをテストプログラムに実装し、そ の他スタブやカバレジ測定などのテスト環境を整備する。こうして整った環境下で、テストプログ ラムを実行し、期待通りの結果となるかどうかをテストするのがユニットテストである。結果が期待 値と異なればデバッグを行い、再度ユニットテストを行うために、テストプログラムを実行する。 またカバレジの計測値が要求仕様に満たなければ、テストケースを改修してテストプログラムに 実装し、再度ユニットテストを行う。後にソースコードが改修されれば、それによって既存の機能 に不具合を及ぼしていないか検査するために、再びユニットテストを実行する。このように、一度 使用されたテストプログラムは、後にユニットテストを繰り返す回帰テスト用のテストプログラムとし て再利用される。 * Ruby には標準でユニットテストを自動化するクラスライブラリ Test::Unit があるが、更に機能拡張 するツールに「RSpec」や「FlexMock」などが存在する。また、カバレジ測定ツールとして、「rcov」 などがある。これらのツールを取りそろえたサイトには「Open Source Testing」などがあるが、 Ruby のツールは「github」でも公開されている。 2) デバッグ テストで不具合を検出した場合、デバッグを実施する。 * デバッグは下記の手順で行われる。 - エラー内容認識 - 再現手順明確化 - 発生箇所特定 - 原因特定 - 修正方法考察 - 修正実施 * デバッグでの原因特定でテストケースの不備が表出すれば、テストケースを改修する。 * Ruby には標準でデバッグ機能が存在する。コマンドラインから「-rdebug」オプションを指定して 実行することでデバッグモードになる。

(10)

プログラミング分野 4-4-応 スクリプト言語に関する知識 応用 習得ポイント 4-4-応-4. Ruby on Rails とは 対応する コースウェア 第 4 回 Ruby on Rails とは

4-4-応-4. Ruby on Rails とは

RoR(Ruby on Rails)による Web アプリケーション開発の概要と作業の流れを解説する。RoR を利用し て開発した Web アプリケーションの構成要素を説明し、データベースの設定方法や Web サーバの 起動、インタラクションの確認方法などについて解説する。

【学習の要点】

* RoR は Ruby 言語による Web アプリケーション開発フレームワークである。

* RoR では、「設定より規約」「Don't Repeat Yourself」の方針がフレームワーク全体に適用されて おり、開発に要する作業量を大幅に減らすことが可能である。 * RoR のインストール方法には、各 LinuxOS に付属するパッケージマネージャを用いる方法や Ruby 独自のパッケージ管理システムである RubyGems を用いる方法などがある。 * RoR ではアプリケーションに必要なファイルの雛形を自動生成する仕組みが充実しており、開 発の効率化を図ることができる。 図 4-4-応-5 RoR による MVC

(11)

【解説】 1) RoR における MVC の配置 RoR では MVC アーキテクチャを採用している。 app/controllers/ app/models/ app/views/ に対応するモジュールが置かれる。 2) RoR における MVC の役割 * Model 通常の MVC では、Model はデータとビジネスロジックをカプセル化したものである。データベー スとの関連は実装に任せられている。

RoR では Model を ActiveRecord::Base クラスを継承した Ruby クラスとして記述する。Model は ActiveRecord の機能ににより自動的にデータベーステーブルと関連付けられる。 RoR においても、ビジネスロジックは通常の MVC と同様に Model に記述することが一般的であ る。異なる意見として、RoR では Controller が 3 層アーキテクチャにおけるビジネスロジック層、 Model がデータアクセス層にあたる、という考え方があり、この場合、ビジネスロジックは Controller に記述する。 * View

View はユーザインタフェースを提供する。RoR でも View の役割は通常の MVC と同様である。 RoR における View はテンプレートと呼ばれる。テンプレートに対し、builder、ERb、rjs、haml とい ったテンプレートエンジンを適用することで、クライアントへのレスポンスを動的に生成することが できる。

RoR では View と Controller の結びつきが強い。そのため、RoR における View と Controller は Action Pack という単一のコンポーネントにまとめられている。 RoR では、View にプログラム要素が入り過ぎるのを防ぐために、ヘルパーを利用することができ る。ヘルパーとは、表示の整形など、View 用のプログラム要素を、View から簡単に呼び出せる Ruby メソッドとして記述したものである。 * Controller 通常の MVC では、Controller はリクエストの内容を解析し、適した Model、View へ処理を委譲 する。

RoR における Controller は ApplicationController クラス継承した Ruby クラスとして記述する。 一つのアプリケーション内に複数の Controller が存在することが一般的である。

リクエストはまず RoR 内蔵のルータによって受け付けられる。ルータは、開発者が記述した Controller クラスのオブジェクトの内、リクエストに対応するオブジェクトのメソッドを呼び出す。 RoR のルータと Controller の役割を合わせたものが、通常の MVC における Controller であると 言える。

(12)

プログラミング分野 4-4-応 スクリプト言語に関する知識 応用 習得ポイント 4-4-応-5. Ruby on Rails でのデータベース連携 対応する 第 5 回 データベース連携 コースウェア

4-4-応-5. Ruby on Rails でのデータベース連携

RoR を用いた Web アプリケーション開発ではどのようにデータベースとの連携が行われるかを解説 する。RoR におけるデータベース連携のコンポーネントである ActiveRecord の概要と構成について 説明し、データベース操作に必要な各種の設定について述べる。 【学習の要点】

* Active Record は RoR に用意された O/R マッピング層である。

* Active Record を利用した場合、データベーススキーマの情報は動的に取得されるため、Ruby ソースコード中にデータベーススキーマの情報を記述する必要はない。

* RoR ではアプリケーションのデータベーススキーマの変更を管理するために、マイグレーション 機能を利用することができる。

* データベースの接続に関する設定は config/database.yml で行う。

(13)

1) ActiveRecord

Active Record は RoR に用意された O/R マッピングの層である。通常の Ruby プログラム内で利用 することも可能である。 2) ActiveRecord による O/R マッピング * ActiveRecored::Base クラスを継承したクラスは、クラス名を元にデータベーステーブルと結び付 けられる。 * データベースの行は、Model クラスのオブジェクトにマッピングされる。 * データベースの列は、Model クラスのオブジェクトの属性にマッピングされる。このとき、SQL の型 は Ruby のクラスに変換される。 * データベーステーブルの列に関する情報は、ActiveRecord によって動的に取得されるため、ソ ースコードや設定ファイル内に記述する必要はない。 * ActiveRecord は Model オブジェクトに対し、値の検証を行う機能を提供する。定型的な検証に ついては、あらかじめ用意されているヘルパーメソッドを利用することができる。 * ActiveRecord は、1 対 1、1 対多、多対多のテーブル間の関連をサポートする。 3) データベースへの接続 * ActiveRecord では、データベース操作は共通のインタフェースによって抽象化されている。 * データベース接続処理の詳細は、データベース毎の固有のアダプタによって行われる。 * 各種データベースへの接続に用いるアダプタの多くは、RubyGems によりインストールすることが できる。

* RoR 内で ActiveRecord を利用する場合は、config/database.yml にデータベース接続情報を指 定する。 * ActiveRecord を単体で用いる場合、データベース接続は ActiveRecord::Base.establish_connection クラスメソッドによって行う。データベース接続情報は メソッドの引数として渡す。 4) マイグレーション Web アプリケーションをインクリメンタルに開発する場合、開発が進むにつれてデータベーススキー マが変化していく場合が考えられる。RoR では、このようなデータベーススキーマの変更を管理する 仕組みとして、マイグレーションを利用することができる。 * マイグレーションは db/migrate ディレクトリに配置される Ruby コードである。 * マイグレーションにはバージョン番号が割り当てられる。 * マイグレーションは ActiveRecord::Migration のサブクラスであり、データベーススキーマの変更 を行うクラスメソッド up と、データベーススキーマの変更を取り消すクラスメソッド down を含む必 要がある。

(14)

プログラミング分野 4-4-応 スクリプト言語に関する知識 応用 習得ポイント 4-4-応-6. Ruby on Rails を利用したデータベースアプリケーション開発 対応する 第 6 回 データベースアプリケーション開発 コースウェア

4-4-応-6. Ruby on Rails を利用したデータベースアプリケーション開発

データベースアプリケーションの開発方法を、RoR でどのように実現するかについて具体的な操作 手順を交えて説明する。テーブルの定義、テーブル操作、トランザクション処理といったそれぞれの 手順が RoR でどう実現されるかを解説する。 【学習の要点】 * テーブルの作成、スキーマの変更はマイグレーションに記述する。 * テーブルに対する新たな行の追加は、対応する Model クラスの new メソッドを利用してオブジェ クトを作成し、save メソッドで保存することで実現できる。 * テーブルからのデータの取得は、対応する Model クラスの find メソッドで実現できる。取得した データは Model クラスのオブジェクトとして返却される。 * 既存の行の更新は、取得した Model クラスのオブジェクトの属性を更新し、save メソッドで保存 することによって実現できる。 * テーブルの既存の行の削除は、対応する Model クラスのクラスメソッド、もしくはインスタンスメソ ッドにより実現できる。 * トランザクションは、Model クラスの transaction メソッドにより実現できる。 図 4-4-応-6 ActiveRecord を利用したデータベース操作

(15)

1) Model 開発の手順

* config/database.yml ファイルに、データベース接続に関する設定を記述する。database.yml は 3 つのセクションに分かれており、それぞれ開発用データベース、テスト用データベース、本番用 データベースの情報を記述する。

* rake タスク「rake db:create」を実行することにより、データベースを作成する。

* スクリプト「ruby script/generate model [Model 名]」を実行することにより、Model クラスとマイグレ ーションの雛形を生成する。

- Model クラスの雛形は app/models/ディレクトリに生成される。

- マイグレーションの雛形は、db/migrate/ディレクトリに生成される。

* マイグレーションにデータベーステーブルの作成処理、および削除処理を記述する。

* rake タスク「rake db:migrate」により、マイグレーションに記述したテーブルの作成処理を実行す る。

* アプリケーション仕様に基いて、Model クラスに検証メソッド、およびビジネスロジックを行うメソッ ドを追加する。

2) ActiveRecord を利用したデータベース操作 * テーブルに対する新たな行の追加

テーブルに対応する Model クラスの new メソッドを利用してオブジェクトを作成し、save メソッドを 呼ぶことでデータベースに新たな行が追加される。また、Model クラスの create メソッドを利用す ることで、オブジェクトの作成と、データベースへの保存を同時に行うことができる。

* テーブルからのデータの取得

テーブルに対応する Model クラスの find メソッドによって既存の行データを Model クラスのオブ ジェクトとして取得することができる。find メソッドには主キーのほか、検索条件やソート条件など、 SQL で指定できる検索条件の多くを引数の形で指定できる。

* 既存の行の更新

取得した Model オブジェクトの属性の値を変更し、save メソッドを呼ぶことで、既存の行を更新で きる。また、Model クラスの update、および update_all メソッドを利用することで、行データの取得 と更新を一度に行うことができる。

* 既存の行の削除

テーブルに対応する Model クラスの destroy、および destroy_all メソッドを利用することで、テー ブルレベルの行の削除を行うことができる。また、取得した Model オブジェクトの destroy メソッド を利用することで、そのオブジェクトに対応する行を削除することができる。

* トランザクション

Model クラスの transaction メソッドを利用することで、トランザクション処理を実現できる。トランザ クションとして実行される一連の処理はブロックとして渡される。

(16)

プログラミング分野 4-4-応 スクリプト言語に関する知識 応用 習得ポイント 4-4-応-7. Ruby on Rails を使用した Web アプリケーションの作成

対応する 第 7 回 Web アプリケーションの作成・2 コースウェア 第 8 回 Web アプリケーションの作成・3

4-4-応-7. Ruby on Rails を使用した Web アプリケーションの作成

RoR による Web アプリケーション開発の概要と作業の流れを解説する。RoR を利用して開発した Web アプリケーションの構成要素を説明し、データベースの設定方法や Web サーバの起動、インタ ラクションの確認方法などについて解説する。

【学習の要点】

* RoR を利用した Web アプリケーション開発は、Model、View、Controller に該当する各要素の作 成を通じて行われる。

* RoR では Model、View、Controller の各要素を、scaffold と呼ばれる仕組みにより一挙に自動生 成することができ、開発を開始するにあたっての雛形とすることができる。

* scaffold を利用して生成したアプリケーションは、データベースの設定、Web サーバの起動を行 うことで即座に動作させることが可能である。

(17)

1) RoR による Web アプリケーション開発 * Model の作成

「4-4-応-6. RoR を利用したデータベースアプリケーション開発」を参照のこと。 * Controller の作成

スクリプト「ruby script/generate controller [Controller 名]」を実行することにより、Controller の 雛形を生成することができる。生成される要素は以下のとおり。 - app/controller/[Controller 名]_controller.rb Controller の本体となるクラスを記述するソースコードファイル。初期状態では Controller ク ラスが、メソッドを持たない状態で記述されている。Controller クラスにアクションメソッドを追 加することによって Contoroller の開発を行う。 - test/functional/[Controller 名] _controller_test.rb Controller の機能テストを記述するソースコードファイル。 - app/views/[Controller 名]/ Controller に対応した View を配置するためのディレクトリ。このディレクトリにテンプレートフ ァイルを置くことで、規約により Controller と View が関連付けられる。 - app/helpers/[Controller 名]_helper.rb

Controller、および Controller に関連付けられた View 内から呼び出し可能なヘルパーメソ ッドを記述するソースコードファイル。 * View の作成 View はテンプレートによって表現される。動的なレスポンスを実現するテンプレートを記述する 際には、テンプレートエンジンとして以下のようなライブラリを利用できる。 - builder : 主に、XML レスポンスの構築に用いられる。 - erb : 主に、動的な HTML ページの構築に用いられる。 - rjs : JavaScript の生成に用いられる。 テンプレートの配置ディレクトリ、およびファイル名は規約によって定められている。 テンプレートは、それを呼び出す Controller と規約によって関連付けられる。テンプレートは、 「app/views/[関連 Controller 名]/」ディレクトリに配置する。 テンプレートのファイル名は「[アクションメソッド名].[フォーマット].[テンプレートエンジン名]」と する。 2) scaffold によるアプリケーション生成 RoR では、scaffold と呼ばれる仕組みにより、簡単なアプリケーションを一挙に作成することができる。 scaffold を利用した場合の、アプリケーションの動作を確認するまでの手順は以下のとおり。 A) rails コマンドによってアプリケーションのディレクトリ構造を生成する。

B) 「ruby script/generate scaffold」スクリプトによってアプリケーションの雛形を生成する。 C) config/database.yml ファイルの編集によってデータベース接続設定を行う。

D) 「rake db:create」タスクにより、データベースの作成を行う。

(18)

プログラミング分野 4-4-応 スクリプト言語に関する知識 応用 習得ポイント 4-4-応-8. Ruby on Rails のプラグイン開発 対応する 第 9 回 プラグイン導入と開発 コースウェア

4-4-応-8. Ruby on Rails のプラグイン開発

RoR の機能を拡張するプラグインを新たに開発する方法を説明する。ジェネレータの実行や機能の 実装と実行といったプラグイン作成手順の流れを示し、作成したプラグインをテストする手法を示 す。また新たに作成したプラグインを利用するサンプルプログラムを示し実際の利用手順を説明す る。 【学習の要点】 * プラグインの雛形はスクリプトにより自動生成することができる。 * プラグインの実装は vender/plugins/[プラグイン名]/lib/[プラグイン名].rb ファイルに記述する。 * プラグインのテストは vender/plugins/[プラグイン名]/test/[プラグイン名]_test.rb ファイルに記述 する。 * プラグインのテストは rake test:plugins コマンドによって実行する。 図 4-4-応-8 プラグインの開発例

(19)

1) プラグインの種類 RoR のほとんどの機能はプラグインとして開発可能である。以下に拡張例をあげる。 * ActiveRecord::Base クラスに新たなメソッドを追加することで、Model クラスに新たな機能を加え る。多くの場合、Model クラス内で「acts_as_」で始まるメソッドを呼び出すことで、機能が有効にな るように作成される。 * View テンプレート内で利用可能なヘルパーを追加する。View テンプレート内でメソッドとして呼 び出すことで利用することができる。 2) プラグインの開発

プラグインの開発にあたっては、「ruby script/generate plugin [プラグイン名]」スクリプトにより、雛形 を生成することができる。生成されるファイルについて以下に説明する。 * vendor/plugins/[プラグイン名]/README プラグインの利用者向けに、プラグインのインストール方法、使い方などを記述する。 * vendor/plugins/[プラグイン名]/init.rb プラグインの初期化処理を記述する。プラグインのモジュールを RoR に組み込む処理などが該 当する。init.rb で一般的に行われる処理を以下にあげる。 - ActiveRecord::Base.send(:include, [モジュール名]) Model クラスに対し、モジュール内のメソッドを追加する。 - ActionController::Base.send(:include, [モジュール名]) Controller クラスに対し、モジュール内のメソッドを追加する。 - ActionView::Base.send(:include, [モジュール名]) モジュール内のメソッドを View テンプレート内で利用可能なヘルパーとして登録する。 * vendor/plugins/[プラグイン名]/install.rb プラグインのインストール処理を記述する。JavaScript やスタイルシートを展開する処理などを記 述する。 * vendor/plugins/[プラグイン名]/uninstall.rb プラグインのアンインストール処理を記述する。 * vendor/plugins/[プラグイン名]/lib/[プラグイン名].rb プラグインの本体となるソースコードを記述する。「vendor/plugins/[プラグイン名]/lib/」ディレク トリは、RoR の起動時にロードパスに追加される。記述の仕方としては、プラグイン独自のモジュ ールを定義してその中にメソッドとして処理を記述し、init.rb 内で RoR に組み込む方法が一般 的である。 * vendor/plugins/[プラグイン名]/tasks/[プラグイン名]_tasks.rake プラグイン用の rake タスクを記述する。 * vendor/plugins/[プラグイン名]/test/[プラグイン名]_test.rb Test::Unit モジュールを利用してプラグイン用のテストを記述する。 3) プラグインのテスト

(20)

プログラミング分野 4-4-応 スクリプト言語に関する知識 応用 習得ポイント 4-4-応-9. Rubricks のカスタマイズ

対応する 第 10 回 オープンソースシステムのカスタマイズ コースウェア

4-4-応-9. Rubricks のカスタマイズ

典型的な Web アプリケーションであるコンテンツ管理システム(Content Management System; CMS) について説明し、CMS の Ruby による実装例として Rubricks や Radiant CMS などのアプリケーショ ンを紹介する。Rubricks や Radiant CMS の構成と特徴について述べ、さらに各アプリケーションの導 入と設定方法を解説する。

【学習の要点】

* CMS とは Web ページや画像データといったコンテンツを作成、編集、管理する機能を提供する ソフトウェアである。

* RoR を用いて開発された OSS の CMS として Rubricks や Radiant CMS がある。

* Rubricks、Radiant CMS 共に拡張性が重視されており、拡張機能をプラグインとして開発、ある いは導入するための仕組みが提供されている。

(21)

1) CMS(Content Management System) CMS とは、コンテンツの作成、編集、管理を容易にすると共に、一貫した形式で公開することを可 能にするソフトウェアである。Web サイトの構築に広く利用されており、ブラウザ経由で Web ページ の追加や編集を行う機能や、ユーザの権限を管理する機能などが提供される。Blog や Wiki も CMS の一種であると考えることができる。 2) Rubricks Rubricks は日本人の開発グループにより開発されている CMS である。 * RoR 上に構築されており、MIT ライセンスで公開されている。 * BBS やニュース配信の機能が用意されており、コミュニティポータルの作成を容易にする。 * Rubricks はコンポーネントアーキテクチャと呼ばれる機構を採用しており、必要な機能はコンポ ーネントの単位で管理され、自由に組み合わせることが可能になっている。 3) Rubricks のインストール * Rubricks の推奨環境は開発 Web ページ (http://dev.rubricks.org/wiki/RubricksSystemRequirementJa)を参照のこと。注意点としては 2008 年 8 月の段階で、RoR のバージョン 1.x 系のみの対応となっている。

* Rubricks のインストール手順については Windows 向け、および CentOS 向けの手順が公開され ている。詳細は開発 Web ページ(http://dev.rubricks.org/wiki/RubricksInstallationGuideJa)を 参照のこと。

4) Radiant CMS

Radiant CMS はシンプルでわかりやすいインタフェースを特徴とした CMS である。 * Rubricks 同様、RoR 上に構築されており、MIT ライセンスで公開されている。

* Ruby 言語の公式ページ(http://www.ruby-lang.org)で採用されるなど、Web サイト構築用の CMS として比較的多くの実績をもつ。 * Web サイトのツリー構造を柔軟に構築できる機能や、個々のページを統一的なレイアウトで表示 する機能など、一般的な Web サイトを構築するための基本的な機能が提供されている。 * Rubricks と同様に拡張機能を管理する機能を持つ。拡張機能は Extension という単位で管理さ れ、様々な機能がサードパーティから提供されている。 5) Radiant CMS のインストール

Radiant CMS は RubyGems パッケージとして提供されており、gem コマンドを利用してインストール することができる。詳細な手順は Web サイト(http://wiki.radiantcms.org/Installation)を参照のこと。 インストールの流れを以下に示す。 * Ruby、および RubyGems のインストール * gem コマンドによる radiant パッケージのインストール * Radiant プロジェクトの作成 * データベースの接続設定と初期化

(22)

プログラミング分野 4-4-応 スクリプト言語に関する知識 応用 習得ポイント 4-4-応-10. コードリーディング 対応する コースウェア 第 11 回 コードリーディング

4-4-応-10. コードリーディング

オープンソースソフトウェアを読み解くことの意義を説明し、コードリーディングに有効な手法として、 関連するドキュメント類の参照方法や、データ構造と処理の流れを読み解く方法を説明する。更に 解析に有用な統合開発環境やツール類の紹介を行う。 【学習の要点】 * OSS 開発コミュニティの様々な資料を参考に、データ構造と処理の流れをソースコードから解析 することで、開発者の意図する動作を理解し、改善策を講じられるようになる。 * OSS 市場で実際に使用されている多数のソースコードが入手可能であり、個人の目的に合わせ てリーディングすることで実践的な技能を修得できる。 * OSS の統合開発環境が充実し、その豊富な機能を利用することにより、効率的にコードを読む ことができる。 * コーディング規約とは、ソースコードを記述する際の決め事であり、可読性や保守性などが向上 する。 図 4-4-応-10. コードリーディング

(23)

1) ソースコードリーディング オープンソースソフトウェアの市場が拡大した現在、SourceForge や github を代表とするホスティン グサイトから、実際に市場で使用されている、あらゆる種類のソースコードを入手することができる。 ソースコードリーディングの目的は様々あるが、個人の目的に合わせて、ソースコードが示す内容 を理解することで、実践的な技能を修得することができる。更に、解析したソースコードをもとに、改 善策を講じられるようになる。 2) コード解析手法 ソースコードを解析するには、ただ漠然とコードを目で追うだけでなく、解析ポイントにあわせた的 確な手法を用いる必要がある。 * Ruby 標準機能による動的解析 動的解析は、実際にプログラムを動かして解析する手法であり、Ruby ではデバッガやプロファイ ラなどの機能を利用して行う。 - デバッガ コマンドラインから「-rdebug」オプションを指定して実行するとデバッグモードとなる。デバッ グの作業に限らず、コードリーディングの動的解析でも効力を発揮する。 - プロファイラ コマンドラインから「-rprofile」オプションを指定して実行すると、標準エラー出力にプロファ イル結果を出力する。プログラムの実行結果として、メソッドごとの実行回数や実行時間な どを分析する。 * 解析手順 初めに全体像をつかむために、入手したプログラムを実際に実行してみて、プログラム全体の 動作を概観することは有効な方法である。また、ソースファイルがどのような意味合いで分割さ れ、フォルダに配置されているか、フォルダ構成の概要を把握しておくことも有効な手段である。 更に、オープンソース開発コミュニティにある開発者ドキュメント、変更履歴、バージョン管理シス テム、バグトラッキングシステムなどを参考にして、開発者の意図を理解することはとても重要で ある。 詳細分析では、実際にソースコードを読み、クラスの継承階層やメソッドの呼び出し関係を明ら かにし、検索やトレースを行いながら、データ構造の変化と処理の流れを解析する。このとき、 動作を予測し、問題点の仮説を立てて解析することが有効な手法である。 3) 読みやすいコード 読み手が理解しやすいソースコードを記述するには、命名規則やコメントのルールといった、ソース コードを記述する際の決め事を定めた、コーディング規約に則って記述する必要がある。ソースコ ードリーディングを行った結果、問題があるソースにパッチ(修正プログラム)を当てる場合は、コー ディング規約に則って記述すれば、可読性や保守性といったソースコードの品質を向上することが できる。

図 4-4-応-3    ActiveRecord による O/R マッピング
図 4-4-応-7    Scaffold を利用したアプリケーションの生成例
図 4-4-応-9.    Radiant CMS の管理画面

参照

関連したドキュメント

を占めている。そのうち 75 歳以上の後期高齢者は 1,872 万人(14.9%)、80 歳以上は 1,125 万

2021] .さらに対応するプログラミング言語も作

が前スライドの (i)-(iii) を満たすとする.このとき,以下の3つの公理を 満たす整数を に対する degree ( 次数 ) といい, と書く..

9.事故のほとんどは、知識不足と不注意に起因することを忘れない。実験

 英語の関学の伝統を継承するのが「子どもと英 語」です。初等教育における英語教育に対応でき

 本計画では、子どもの頃から食に関する正確な知識を提供することで、健全な食生活

は,医師による生命に対する犯罪が問題である。医師の職責から派生する このような関係は,それ自体としては

□ ゼミに関することですが、ゼ ミシンポの説明ではプレゼ ンの練習を主にするとのこ とで、教授もプレゼンの練習