ibm i - 2014 powerruby 入門 1.0 2014 -12 19 ver. · ruby on rails web...

116
Ver. オープンソース協議会 IBM i - 2014 勉強会 PowerRuby 入門 2014-12-19 1.0 ティアンドトラスト株式会社 北原 征夫

Upload: others

Post on 09-Oct-2019

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

Ver.

オープンソース協議会 IBM i - 2014 勉強会

PowerRuby 入門 2014-12-19 1.0

ティアンドトラスト株式会社 北原 征夫

+ =

Page 2: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

はじめに

PHP に代わるのではなく、選択肢の広がり

Java, Perl, PHP, Ruby, Node.js …

TIOBE Index for November 2014 http://www.tiobe.com

トップ15 Apple :1 MS :5 Linux :9

Linux と比較すると

IBM i は 8 言語 の利用が可能

1

Page 3: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

PowerRuby 概説

2

Page 4: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

PowerRuby 概説

ruby

日本人が開発(まつもとゆきひろ氏)

1993 開発開始

オープンソース

インタープリター

Windows, Linux, Unix, Mac

<> php

完全オブジェクト指向

アプリケーション, GUI, iOS, 組み込み

グルー言語

3

Page 5: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

PowerRuby 概説

ruby on rails

Web アプリケーションフレームワーク

オープンソース

MVC

同じ事を繰り返さない:DRY ( Don’t Repeat Your self )

設定より規約:CoC ( Conversion Over Configuration)

Scaffold

4

Page 6: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

PowerRuby 概説

PowerRuby

米国 PowerRuby.com http://powerruby.com

IBM i で稼働する Ruby, Rails を提供

IBM i は DB を OS に統合した強力なプラットフォーム

APサーバーとDBサーバーを分離しなくて良い

無償のコミュニティーバージョンを提供

ibm_db

IBM DB2 for i へのネイティブアクセス

RubyForge でオープンソースとして開発

IBM の支援

XMLSERVICE (XMLTOOLKIT)

IBM i 資産(RPG, オブジェクト)の利用

IBM → YiPs でオープンソースとして開発

5

Page 7: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

PowerRuby 概説

PowerRuby 導入の要件

IBM i : V7R1M0

QCCSID : 5035 or 1399

必須ライセンス

5770-SC1 *BASE IBM Portable Utilities for i

5770-SC1 OPT1 OpenSSH, OpenSSL, zlib

5770-SS1 OPT33 PASE

5770-DG1 *BASE IBM HTTP Server for i

6

Page 8: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

PowerRuby 概説

プロダクト・ライブラリー

POWER_RUBY

利用可能なバージョン(※2014-12-13 現在)

OPT2 : Ruby 2.0.0, rails 4.0.12

OPT3 : Ruby 2.1.5, rails 4.1.8

バージョンの切り替え

SETPOWRBY

XMLService

1.9.1 (1.3.0 GA5 gem)

7

Page 9: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

PowerRuby 導入

PowerRuby の導入手順

8

Page 10: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

PowerRuby 導入

PowerRuby 導入

1. ダウンロード

① http://powerruby.com

② Download をクリック

③ 要ユーザー登録

④ ダウンロードリンクが記載されたメールが届く

⑤ power_ruby_current.tar.bz2 をダウンロードし解凍

⑥ 保管ファイル(SAVF)で提供 (※2014-12-13 現在 v1.0.7)

PRUBY_BASE.SAVF, PRUBY_0002.SAVF, PRUBY_0003.SAVF

9

Hello masao kitahara, Before installing PowerRuby make sure to read the disclaimer and warranty. You can download PowerRuby from the following URL: http://powerruby.com/releases/power_ruby_current.tar.bz2 Click here for install and update instructions. Once installed, click here for how to setup your first RubyOnRails app! Please direct all questions to [email protected]. We'd also love to hear from you concerning your interest. Have you used RubyOnRails before and are considering it for IBM i? Are you interested at a hobby level? Thanks,

Page 11: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

PowerRuby 導入

PowerRuby 導入

2. *.savf を IBM i へ

① 保管ファイルを IBM i に作成

② FTP で BIN(バイナリーモード)で送信

3. インストール

10

CRTSAVF FILE(QGPL/PRUBY_BASE) CRTSAVF FILE(QGPL/PRUBY_0002) CRTSAVF FILE(QGPL/PRUBY_0003)

RSTLICPGM LICPGM(1PRUBY1) DEV(*SAVF) LNG(2924) SAVF(QGPL/PRUBY_BASE) RSTLICPGM LICPGM(1PRUBY1) DEV(*SAVF) LNG(2924) OPTION(2) SAVF(QGPL/PRUBY_0002) RSTLICPGM LICPGM(1PRUBY1) DEV(*SAVF) LNG(2924) OPTION(3) SAVF(QGPL/PRUBY_0003)

Page 12: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

PowerRuby 導入

PowerRuby 導入

4. ライセンス導入の確認

① DSPSFWRSC

11

資源 ID オプション 機能 記述 1PRUBY1 *BASE 5001 IBM i PowerRuby (administration utilities) 1PRUBY1 *BASE 2924 IBM i PowerRuby (administration utilities) 1PRUBY1 2 5001 IBM i PowerRuby (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001 IBM i PowerRuby (Ruby 2.1 + Rails 4.1)

Page 13: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

PowerRuby 導入

PowerRuby 導入

5. バージョン確認1

① ADDLIBLE LIB(POWER_RUBY)

② SETPOWRBY VRM(*V20)

③ CALL PGM(QP2TERM)

12

> ruby -v ruby 2.0.0p598 (2014-11-13 revision 48408) [powerpc-aix6.1.0.0] # > rails -v Rails 4.0.12 #

Page 14: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

PowerRuby 導入

PowerRuby 導入

6. バージョン確認2

① ADDLIBLE LIB(POWER_RUBY)

② SETPOWRBY VRM(*V21)

③ CALL PGM(QP2TERM)

13

> ruby -v ruby 2.1.5p273 (2014-11-13 revision 48405) [powerpc-aix6.1] # > rails -v Rails 4.1.8 #

Page 15: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

PowerRuby 導入(参考)

ruby 1.9.3 + rails 3.2.18

PowerRuby v1.0.2 に同梱

最新版には同梱されない

OPT1として提供(PRUBY_0001.SAVF)

インストール方法は OPT2, OPT3 と同様

SETPOWRBY VRM(*V19)

2015年2月でサポート終了(ruby)

14

> ruby -v ruby 1.9.3p547 (2014-05-14 revision 45962) [powerpc-aix6.1.0.0] # > rails -v Rails 3.2.18 #

Page 16: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

ハンズオンの解説

ハンズオンの解説

15

Page 17: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

ハンズオン解説

資料は OSS 協議会よりダウンロード

オープンソース協議会のサイトよりダウンロード

http://i5php.jp/

zip ファイルがダウンロードできます

「RubyでIBM-i-新規アプリケーションを作ってみよう!.zip」

16

Page 18: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

ハンズオン解説

収録内容

テキスト

【概説】RubyでIBM i 新規アプリケーションを….pdf

PowerRuby のインストール方法など

【実習】RubyでIBM i 新規アプリケーションを….pdf

ハンズオンの資料

リソース

IBM i がインターネットで利用できない場合以下を使用

will_paginate-3.0.7.gem

will_paginate のローカル導入方法.txt

スタイルの指定

will_paginate.css

postslist.css

17

Page 19: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

ハンズオン解説

必要なもの

IBM i ネットサーバーを有効にする

5250エミュレーター

CL コマンドライン

QP2TERM or QSHELL

メモ帳

18

Page 20: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

ハンズオン概要

ハンズオン1

データベースの CRUD アプリケーションの作成

ハンズオン2

プラグインの使用

ハンズオン3

スタイルの変更

19

Page 21: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

ハンズオン1

ハンズオン1を題材に解説

20

Page 22: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

ハンズオン1のフロー

ハンズオン1

I. サーバーの構築

II. テーブルの作成

III. アプリケーションの作成

IV. ルーティングの設定

V. 動作確認

21

Page 23: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

Ⅰ. サーバーの構築

22

Page 24: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

構築されるサーバーのイメージ

サーバーの構築

23

(thin) (IHS)

Page 25: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

サーバーの構築

アプリケーションの作成

rails はアプリケーションの雛型作成から始まる

雛型作成時にサーバーも作成される

PowerRuby のアプリケーション作成方法

24

RAILSNEW

他のプラットフォームの場合

rails new <アプリケーション名>

Page 26: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

サーバーの構築

RAILSNEW CL コマンド

VRM :バージョンの指定

*V19

*V20

*V21

RAILSAPP :アプリケーション名

DBUSR :新規 IBM i ユーザープロファイル

DBPASS :パスワード

DBROOT :ライブラリー名のプリフィックス

HTTPSRV :サーバー名

25

Page 27: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

サーバーの構築

RAILSNEW CL コマンド

EXTPATH :Web サーバーの httpd.conf のパス

'' :デフォルトの httpd.conf を使用する場合

EXTPORT :Web サーバー のサーバーポート

INTPATH :RAILS の httpd.conf のパス

'' :デフォルトの httpd.conf を使用する場合

INTPORT :RAILS のサーバーポート

ENV :作成時の環境

開発用(*DEVELOPMENT)

テスト用(*TEST)

製品用(*PRODUCTION)

26

Page 28: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

サーバーの構築

RAILSNEW CL コマンド

PLACE :Webサーバーの作成場所

*HOME :/home/<ユーザープロファイル>/

*WWW :/www/

WEBCON :ブラウザ経由の irb の設定

PID :PIDファイルの名前

LIB :POWER_RUBY ライブラリー名

MSGQ :*MSGQ 名

27

Page 29: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

構築されるサーバーのイメージ

サーバーの構築

28

(thin) (IHS)

例) RAILSNEW VRM(*V20) RAILSAPP(APPNAME) DBUSR(APUSER) DBPASS(APPASS) DBROOT(APLIB) HTTPSRV(APSVR) EXTPATH('') EXTPORT(2222) INTPATH('') INTPORT(2202) PLACE(*WWW)

[IHS サーバー (HTTPSRV)] /www/APSVR [config (EXTPATH)] /www/APSVR/conf/httpd.conf [ポート (EXTPORT)] 2222

[環境 (VRM)] Ruby:2.0.0 Rails :4.0.12 [PLACE] [RAILS サーバー (RAILSAPP)] /www/APSVR/htdocs/APNAME [config (INTPATH)] /www/APSVR/htdocs/APNAME/config/apache.conf [ポート (INTPORT)] 2202

[DBROOT] APLIB_D

[DBROOT] APLIB_P

[DBROOT] APLIB_T

[各ライブラリーのオブジェクト] ジャーナル (*JRN) ジャーナルレシーバー (*JRNRCV) SQLコレクションビュー (*FILE LF)

Page 30: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

サーバーの起動/停止1

Web サーバー:IHS(IBM HTTP Server)

起動:STRTCPSVR CL コマンド

停止:ENDTCPSVR CL コマンド

29

STRTCPSVR SERVER(*HTTP) HTTPSVR(<インスタンス名>)

ENDTCPSVR SERVER(*HTTP) HTTPSVR(<インスタンス名>)

(thin) (IHS)

例)インスタンス名:APSVR STRTCPSVR SERVER(*HTTP) HTTPSVR(APSVR) ENDTCPSVR SERVER(*HTTP) HTTPSVR(APSVR)

Page 31: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

サーバーの起動/停止2

Rails サーバー:thin Server

起動/停止:RAILSVR CL コマンド

30

RAILSSVR

※ 注意:ジョブ名が変わってしまう RAILSNEW で作成した直後、Rails サーバーのジョブ名 :RAILSSRV RAILSSVR で再起動後、Rails サーバーのジョブ名 :RAILASVR

Page 32: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

サーバーの起動/停止2

RAILSSVR CL コマンド

ACTION :開始、終了の指定

*START

*END

APP :アプリケーションのフルパス

VRM :バージョンの指定

*V19

*V20

*V21

PORT :RAILS のサーバーポート

31

Page 33: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

サーバーの起動/停止2

RAILSSVR CL コマンド

ENV :実行時の環境

開発用(*DEVELOPMENT)

テスト用(*TEST)

製品用(*PRODUCTION)

HOST :RAILS サーバーの IP アドレス

PID :PID ファイルの名前

32

(thin) (IHS)

例)アプリケーション名:/www/APSVR/htdocs/APNAME RAILSSVR ACTION(*START) APP('/www/APSVR/htdocs/APNAME') VRM(*V20) PORT(2202) RAILSSVR ACTION(*END) APP('/www/APSVR/htdocs/APNAME')

Page 34: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

サーバー・ジョブの確認

Web サーバー

WRKACTJOB CL コマンド

33

WRKACTJOB JOB(<インスタンス名>)

現行 サブシステム/ジョブ ユーザー タイプ CPU % 機能 状況 APSVR QTMHHTTP BCH .0 PGM-QZHBMAIN SIGW APSVR QTMHHTTP BCI .0 PGM-QZSRLOG SIGW APSVR QTMHHTTP BCI .0 PGM-QZSRHTTP SIGW APSVR QTMHHTTP BCI .0 PGM-QZSRHTTP DEQW

例)インスタンス名:APSVR WRKACTJOB JOB(APSVR)

Page 35: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

サーバー・ジョブの確認

Rails サーバー

WRKACTJOB CL コマンド

ジョブログの表示:OPT5 → 10. ジョブ・ログ表示

34

WRKACTJOB JOB(RAILSSVR) OR WRKACTJOB JOB(RAILSSRV)

現行 サブシステム/ジョブ ユーザー タイプ CPU % 機能 状況 RAILSSVR QSECOFR BCH .0 PGM-ruby SELW

例)アプリケーション名:APNAME WRKACTJOB JOB(RAILSSVR)

ジョブ・ログ表示 POWER_RUBY/RAILSSVR ACTION(*END) APP('/www/APSVR/htdocs/APNAME') PID('server')

Page 36: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

作成されるディレクトリの構成

Rails ディレクトリ構造(抜粋)

例)APNAME アプリケーションを *WWW で作成

35

/www/APSVR/htdocs/APNAME/ ... アプリケーション・ルート

- app/

- assets/ css, js などを配置する

- controllers/ コントローラーを配置する

- models/ モデルを配置する

- views/ ビューを配置する

- config/ ルーティング用の route.rb を配置する

- db/ マイグレーションスクリプトを配置する

- log/ ログが記録される

- public/ 静的コンテンツを配置する

- Gemfile bundler 対象の Gem パッケージを記述する

Page 37: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

Ⅱ. テーブルの作成

36

Page 38: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

モデルの作成1

モデルの規約

Rails MVC の中でデータベースの処理を担当する

app/models に作成

ファイルのエンコードは UTF-8 とする

ファイル名は snake case で表記

単語は全て小文字、単語の区切りは _ ... snake_case

例)model.rb

クラスとして定義

クラス名はモデル名に合わせる

クラス名は Camel Case で表記

単語の区切りは大文字 ... CamelCase

例)Model

37

Page 39: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

モデルの作成1

モデルの規約

基本的に 1 クラス 1 テーブルの処理

O/R マッパーの ActiveRecord::Base を継承

オブジェクト構造とテーブル構造を関連付け、利用する

CRUD(create,read,update,delete) 操作に必要な メソッドが提供される

...

38

Page 40: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

モデルの作成2

generate model

rails の “generate model” で作成

PASE コマンド

アプリケーション・ルートをカレントにして実行

フィールド名や型を同時に指定可能

モデルの規約に則り作成される

テーブル作成用の マイグレーション・スクリプト作成

39

rails generate model モデル名 フィールド名1:データ型 ...

例)title, body フィールドを持つ Post テーブルのモデルを作成 > cd /www/APSVR/htdocs/APNAME > rails generate model Post title:string body:text

Page 41: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

モデルの作成3

モデル作成の実行

1. QP2TERM を起動

2. cd アプリケーション・ルート

3. rails generate model ...

40

/QOpenSys/usr/bin/-sh > cd /www/APSVR/htdocs/APNAME # > rails generate model Post title:string body:text [1m [37m invoke [0m active_record [1m [32m create [0m db/migrate/20141215120206_create_posts.rb [1m [32m create [0m app/models/post.rb [1m [37m invoke [0m test_unit [1m [32m create [0m test/models/post_test.rb [1m [32m create [0m test/fixtures/posts.yml #

Page 42: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

モデルの作成4

作成されたモデル

app/models/post.rb

41

class Post < ActiveRecord::Base end

01 02

Page 43: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

テーブルの作成1

マイグレーション・スクリプトから作成

テーブルを SQL 等で直接作成しない

マイグレーション・スクリプトを使用する

スクリプトは db/migrate に作成される

ruby のビルドツール rake を使用

アプリケーション・ルートをカレントにして実行

利点

テーブルに関する処理を記録、ロールバック

別の環境でも同じものが作成できる

データベースの種類に依存しない

42

rake db:migrate

Page 44: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

テーブルの作成2

作成された マイグレーション・スクリプト

db/migrate/20141215120206_create_posts.rb

命名規則:<タイムスタンプ>_create_<モデル名>.rb

43

class CreatePosts < ActiveRecord::Migration def change create_table :posts do |t| t.string :title t.text :body t.timestamps end end end

01 02 03 04 05 06 07 08 09

Page 45: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

テーブルの作成3

テーブル作成の実行

1. QP2TERM を起動

2. cd アプリケーション・ルート

3. rake db:migrate

44

/QOpenSys/usr/bin/-sh > cd /www/APSVR/htdocs/APNAME # > rake db:migrate == 20141215120206 CreatePosts: migrating ================== -- create_table(:posts) -> 0.8807s == 20141215120206 CreatePosts: migrated (0.8809s) ============ #

Page 46: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

テーブルの確認1

作成されたテーブルの確認:DSPFD

指定された ENV ライブラリーに作成

例)ENV(*DEVELOPMENT) → APNAME_D (*LIB)

通常の物理ファイル (*FILE PF-DTA)

ファイル名は <モデル名>+S (モデル名の複数形)

ジャーナル済み

IMAGES(*IMMED)

OMTJRNE(*OPNCLO)

メンバーサイズ:*NOMAX

固有キーが必要(UNIQUE):YES

キーフィールド:ID

45

例)DSPFD FILE(APNAME_D/POSTS)

Page 47: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

テーブルの確認2

作成されたテーブルの確認:DSPFFD

キーフィールド、作成日時、更新日時 は自動作成

46

ファイル・フィールド記述表示 データ フィールド バッファー バッファー フィールド カラムの フィールド タイプ 長 長 位置 使用法 見出し ID BINARY 9 0 4 1 共用 ID TITLE 混用 255 257 5 共用 TITLE 可変長フィールド -- 割り振られた長さ : なし ヌル値使用可能 コード化文字セット ID. . . . . . . . . : 5035 BODY CLOB 1048576 43 262 共用 BODY キーボード・シフト . . . . . . . . . . . : O 割り振られた長さ . . . . . . . . . . . . : 0 ヌル値使用可能 コード化文字セット ID. . . . . . . . . : 5035 CREATED_AT TIMESTAMP 26 26 305 共用 CREATED_A ヌル値使用可能 コード化文字セット ID. . . . . . . . . : 1027 UPDATED_AT TIMESTAMP 26 26 331 共用 UPDATED_A ヌル値使用可能 コード化文字セット ID. . . . . . . . . : 1027

> rails generate model Post title:string body:text

例)DSPFFD FILE(APNAME_D/POSTS)

172.29.144.105

Page 48: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

参考:日本語対応

フィールドの CCSID を UTF-8 に変更

現時点では 5035 の対応が中途半端

SQL の ALTER TABLE

47

例)POSTS 作成した TITLE, BODY フィールドを UTF-8 に変更 ALTER TABLE APLIB_D/POSTS ALTER COLUMN TITLE SET DATA TYPE VARCHAR(255) CCSID(1208) ALTER TABLE APLIB_D/POSTS ALTER COLUMN BODY SET DATA TYPE CLOB CCSID(1208)

ALTER TABLE <ライブラリー名/ファイル名> ALTER COLUMN <フィールド名> SET DATA TYPE <データタイプ(桁数)> CCSID 1208

Page 49: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

参考:日本語対応

変更後のテーブルの確認:DSPFFD

48

ファイル・フィールド記述表示 データ フィールド バッファー バッファー フィールド カラムの フィールド タイプ 長 長 位置 使用法 見出し ID BINARY 9 0 4 1 共用 ID TITLE 混用 255 257 5 共用 TITLE 可変長フィールド -- 割り振られた長さ : なし ヌル値使用可能 コード化文字セット ID. . . . . . . . . : 1208 UCS2 またはユニコード変換 . . . . . . . : *CONVERT データの正規化 . . . . . . . . . . . . . : NO BODY CLOB 1048576 43 262 共用 BODY キーボード・シフト . . . . . . . . . . . : O 割り振られた長さ . . . . . . . . . . . . : 0 ヌル値使用可能 コード化文字セット ID. . . . . . . . . : 1208 UCS2 またはユニコード変換 . . . . . . . : *CONVERT データの正規化 . . . . . . . . . . . . . : NO CREATED_AT TIMESTAMP 26 26 305 共用 CREATED_A ヌル値使用可能 コード化文字セット ID. . . . . . . . . : 1027 UPDATED_AT TIMESTAMP 26 26 331 共用 UPDATED_A ヌル値使用可能 コード化文字セット ID. . . . . . . . . : 1027

例)DSPFFD FILE(APNAME_D/POSTS)

Page 50: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

Ⅲ. アプリケーションの作成

49

Page 51: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

コントローラー, ビューの作成

コントローラーの規約1

Rails MVC の中でモデルと画面の制御を担当する

app/conrollers に作成

ファイルのエンコードは UTF-8 とする

基本的に 1 モデル 1 コントローラーの処理

ファイル名は <コントローラー名>+_controller.rb

ファイル名は snake case で表記

単語は全て小文字、単語の区切りは _ ... snake_case

コントローラー名はモデル名の複数形にする

例)models_controller.rb

50

Page 52: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

コントローラー, ビューの作成

コントローラーの規約2

クラスとして定義

クラス名は Camel Case で表記

単語の区切りは大文字 ... CamelCase

例)ModelsController

ApplicationController クラスを継承

複数のアクション・メソッドを持つ

要求に基づいて具体的な処理を実行するメソッド

アクション・メソッドは public 定義(デフォルト)

...

51

Page 53: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

コントローラー, ビューの作成

ビューの規約

Rails MVC の中で画面を担当する

app/views に作成

ファイルのエンコードは UTF-8 とする

結果として返される文面をテンプレートとして作成

body タグの間に記述する内容のみ(それ以外は自動付与)

処理した結果のデータを埋め込み表示する

ビューファイル名は アクション名 + .html.erb

アクションから自動で呼び出される

呼び出すためのコーディングは不要

アクションと別名で作成し、明示的な呼び出しも可能

...

52

Page 54: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

アプリケーションの作成1

generate scaffold_controller

rails の “generate scaffold_controller” で作成

PASE コマンド

アプリケーション・ルートをカレントにして実行

フィールド名や型を同時に指定可能

コントローラー、ビューを作成

規約に則り作成される

53

rails generate scaffold_controller モデル名 フィールド名1:データ型 ...

例)title, body フィールドを持つ Post テーブルのモデルを作成 > cd /www/APSVR/htdocs/APNAME > rails generate scaffold_controller post title:string body:text

Page 55: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

アプリケーションの作成2

コントローラー

scaffold で作成されるアクションメソッド

index :一覧画面の表示

show :詳細画面の表示

new :新規登録画面の表示

edit :編集画面の表示

create :新規登録を処理し、詳細画面を表示

update :更新を処理し、詳細画面を表示

destroy :削除を処理し、一覧画面を表示

54

Page 56: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

アプリケーションの作成2

ビュー

scaffold で作成されるディレクトリ

app/views/<モデル名>+s

scaffold で作成されるビュー・ファイル(*.html.erb)

index :一覧画面

show :詳細画面

new :新規登録画面

edit :編集画面

_form :登録、更新用のフォーム (new, edit に埋め込み)

55

Page 57: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

アプリケーションの作成2

アプリケーション作成の実行1

1. QP2TERM を起動

2. cd アプリケーション・ルート

3. rails generate scaffold_controller ...

56

Page 58: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

アプリケーションの作成2

アプリケーション作成の実行2

57

/QOpenSys/usr/bin/-sh > cd /www/APSVR/htdocs/APNAME # > rails generate scaffold_controller post title:string body:text [1m [32m create [0m app/controllers/posts_controller.rb [1m [37m invoke [0m erb [1m [32m create [0m app/views/posts [1m [32m create [0m app/views/posts/index.html.erb [1m [32m create [0m app/views/posts/edit.html.erb [1m [32m create [0m app/views/posts/show.html.erb [1m [32m create [0m app/views/posts/new.html.erb [1m [32m create [0m app/views/posts/_form.html.erb [1m [37m invoke [0m test_unit [1m [32m create [0m test/controllers/posts_controller_test.rb [1m [37m invoke [0m helper [1m [32m create [0m app/helpers/posts_helper.rb [1m [37m invoke [0m test_unit [1m [32m create [0m test/helpers/posts_helper_test.rb [1m [37m invoke [0m jbuilder [1m [32m create [0m app/views/posts/index.json.jbuilder [1m [32m create [0m app/views/posts/show.json.jbuilder #

Page 59: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

アプリケーションの作成3

作成されたコントローラー1

app/controllers/posts_controller.rb

58

class PostsController < ApplicationController before_action :set_post, only: [:show, :edit, :update, :destroy] # GET /posts # GET /posts.json def index @posts = Post.all end # GET /posts/1 # GET /posts/1.json def show end # GET /posts/new def new @post = Post.new end # GET /posts/1/edit def edit end

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23

Page 60: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

アプリケーションの作成3

作成されたコントローラー2

app/controllers/posts_controller.rb

59

# POST /posts # POST /posts.json def create @post = Post.new(post_params) respond_to do |format| if @post.save format.html { redirect_to @post, notice: 'Post was successfully created. ' } format.json { render action: 'show', status: :created, location: @post } else format.html { render action: 'new' } format.json { render json: @post.errors, status: :unprocessable_entity } end end end

24 25 26 27 28 29 30 31 32 33 34 35 36 37 38

Page 61: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

アプリケーションの作成3

作成されたコントローラー3

app/controllers/posts_controller.rb

60

# PATCH/PUT /posts/1 # PATCH/PUT /posts/1.json def update respond_to do |format| if @post.update(post_params) format.html { redirect_to @post, notice: 'Post was successfully updated. ' } format.json { head :no_content } else format.html { render action: 'edit' } format.json { render json: @post.errors, status: :unprocessable_entity } end end end

39 40 41 42 43 44 45 46 47 48 49 50 51 52

Page 62: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

アプリケーションの作成3

作成されたコントローラー4

app/controllers/posts_controller.rb

61

# DELETE /posts/1 # DELETE /posts/1.json def destroy @post.destroy respond_to do |format| format.html { redirect_to posts_url } format.json { head :no_content } end end private # Use callbacks to share common setup or constraints between actions. def set_post @post = Post.find(params[:id]) end # Never trust parameters from the scary internet, only allow the white list # through. def post_params params.require(:post).permit(:title, :body) end end

53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75

Page 63: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

アプリケーションの作成4

作成されたビュー1

app/views/posts/index.html.erb

62

<h1>Listing posts</h1> <table> <thead> <tr> <th>Title</th> <th>Body</th> <th></th> <th></th> <th></th> </tr> </thead> <tbody> <% @posts.each do |post| %> <tr> <td><%= post.title %></td> <td><%= post.body %></td> <td><%= link_to 'Show', post %></td> <td><%= link_to 'Edit', edit_post_path(post) %></td> <td> <%= link_to 'Destroy', post, method: :delete, data: { confirm: 'Are you sure?' } %> </td> </tr> <% end %> </tbody> </table> <br> <%= link_to 'New Post', new_post_path %>

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

Page 64: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

アプリケーションの作成4

作成されたビュー2

app/views/posts/show.html.erb

63

<p id="notice"><%= notice %></p> <p> <strong>Title:</strong> <%= @post.title %> </p> <p> <strong>Body:</strong> <%= @post.body %> </p> <%= link_to 'Edit', edit_post_path(@post) %> | <%= link_to 'Back', posts_path %>

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15

Page 65: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

アプリケーションの作成4

作成されたビュー3

app/views/posts/new.html.erb

64

<h1>New post</h1> <%= render 'form' %> <%= link_to 'Back', posts_path %>

01 02 03 04 05 06

Page 66: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

アプリケーションの作成4

作成されたビュー4

app/views/posts/edit.html.erb

65

<h1>Editing post</h1> <%= render 'form' %> <%= link_to 'Show', @post %> | <%= link_to 'Back', posts_path %>

01 02 03 04 05 06 07

Page 67: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

アプリケーションの作成4

作成されたビュー5

app/views/posts/_form.html.erb

66

<%= form_for(@post) do |f| %> <% if @post.errors.any? %> <div id="error_explanation"> <h2> <%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved: </h2> <ul> <% @post.errors.full_messages.each do |msg| %> <li><%= msg %></li> <% end %> </ul> </div> <% end %> <div class="field"> <div class="field"> <%= f.label :title %><br> <%= f.text_field :title %> </div> <div class="field"> <%= f.label :body %><br> <%= f.text_area :body %> </div> <div class="actions"> <%= f.submit %> </div> <% end %>

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

Page 68: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

Ⅳ. ルーティングの設定

67

Page 69: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

ルーティング

ルーティングについて

要求とコントローラーのアクションを関連付ける

config/routes.rb に作成

68

routes.rb

controller1

actionA

actionB

controller2

actionA

actionB 例) c1acta の要求は、 controller1 コントローラーの actionB へ

http://~/c1acta

Page 70: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

ルーティングの設定1

scaffold_controller で作成された状態

config/routes.rb

ルーティングの設定を行う

resources:<リソース名>

リソース名:コントローラーの名前 (_controller は含まない)

69

APNAME::Application.routes.draw do end

01 02 03

APNAME::Application.routes.draw do resources:posts end

01 02 03

resources:posts

Page 71: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

ルーティングの設定2

resources について

resources により以下の経路が内部的に設定される

RESTFull な呼び出しに対応

70

リソース名 new_リソース名 edit_リソース名 リソース名 リソース名

GET POST GET GET GET PUT DELETE

/リソース名(.:format) /リソース名(.:format) /リソース名/new(.:format) /リソース名/:id/edit(.:format) /リソース名/:id(.:format) /リソース名/:id(.:format) /リソース名/:id(.:format)

リソース名#index リソース名#create リソース名#new リソース名#edit リソース名#show リソース名#update リソース名#destroy

プリフィックス メソッド URIパターン コントローラー#アクション

Page 72: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

ルーティングの設定2

ルーティングの確認方法

rake routes による確認

PASE コマンド

アプリケーション・ルートをカレントにして実行

71

/QOpenSys/usr/bin/-sh > rake routes #

Verb GET POST GET GET GET PATCH PUT DELETE

URI Pattern /posts(.:format) /posts(.:format) /posts/new(.:format) /posts/:id/edit(.:format) /posts/:id(.:format) /posts/:id(.:format) /posts/:id(.:format) /posts/:id(.:format)

Controller#Action posts#index posts#create posts#new posts#edit posts#show posts#update posts#update posts#destroy

Prefix posts new_post edit_post post

rake routes

Page 73: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

Ⅴ. 動作確認

72

Page 74: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

ブラウザから実行

URL の指定

設定したルーティングに基づきURLを指定する

最初に一覧ページを表示するので以下のルーティングに準ずる

73

http://<サーバー名>:<IHS ポート番号>/<prefix>

例)サーバー名:www.tat.co.jp, ポート番号:2222 http://www.tat.co.jp:2222/posts

Page 75: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

全体のイメージ

作成したアプリケーションの画面遷移

74

一覧画面 (index.html.erb)

登録画面 (new.html.erb)

編集画面 (edit.html.erb)

詳細画面 (show.html.erb)

index

destroy

new

create

edit

update edit show

index

Page 76: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

画面イメージ

75

New Post

create Post

Edit

Show

Destroy

update Post

Edit

Back

index

Page 77: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

まとめ

ハンズオン1

Ⅰ. サーバーの構築

RAILSNEW

RAILSSVR

Ⅱ. テーブルの作成

rails generate model

rake db:migrate

Ⅲ. アプリケーションの作成

rails generate scaffold_controller

Ⅳ. ルーティングの設定

route.rb (メモ帳:1行)

Ⅴ. 動作確認

76

Page 78: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

ハンズオン2

ハンズオン2を題材に解説

77

Page 79: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

ハンズオン2のフロー

ハンズオン2

I. 追加するプラグインの設定

II. プラグインのインストール

III. アプリケーションの修正

IV. Rails サーバーの再起動

V. 動作確認

78

Page 80: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

Ⅰ. 追加するプラグインの設定

79

Page 81: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

プラグインの設定

プラグイン

汎用性の高い機能を再利用可能な形でまとめたもの

「ライブラリ」や「ツール」とも呼ばれる

サードパーティーより多数提供されている

各言語、それぞれの形式がある

Perl:CPAN

PHP:Pear、Pecl

Ruby:Gem

Page 82: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

プラグインの設定

Gem

Ruby で利用するプラグインの形式

Gem 形式の提供により統一された利用ができる

作成、公開、インストールが簡素化されている

主として RubyGems.org で公開

gem コマンドによりインストール等ができる

gem install <ライブラリ名>

Page 83: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

プラグインの設定

Bundler

環境単位で RubyGems を管理するプラグイン

複数の Gem の導入を管理できる

依存関係の解決が容易

環境の再構築が容易

導入/利用する Gem のバージョン指定可能

/Gemfile ファイルに設定を記述し管理する

bundler install でインストールを実行

bundler install

Page 84: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

プラグインの設定

Gemfile の記述方法1

source:Bundler に Gem の取得先を指定する

gem:使用する Gem を指定する

source ‘<場所を指すURL>’

gem ”<プラグイン名>”, “<バージョン情報>”

Page 85: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

プラグインの設定

Gemfile の記述方法2

バージョンの指定方法

指定なし:最新のバージョンが導入される

バージョン番号:特定のバージョンが導入される

>=バージョン番号:指定されたバージョン以降が導入される

~=バージョン番号:指定されたバージョンの範囲内

例) gem “will_paginate”

例) gem “will_paginate”, “3.0”

例) gem “will_paginate”, “>=3.0”

例) gem “will_paginate”, “~>3.0” ※ 4.0 > Version >= 3.0

Page 86: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

プラグインの設定

Gemfile の修正

修正前

修正後(最後に追記)

source 'https://rubygems.org' … 省略… # Use debugger # gem 'debugger', group: [:development, :test] gem 'thin' group :development do gem 'web-console' end

01 ・・・ 45 46 47 48 49 50

source 'https://rubygems.org' … 省略… # Use debugger # gem 'debugger', group: [:development, :test] gem 'thin' group :development do gem 'web-console' end gem 'will_paginate', ‘~> 3.0'

01 ・・・ 45 46 47 48 49 50 51 52 53

gem 'will_paginate', ‘~> 3.0'

Page 87: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

参考:will_paginate

will_paginate

文章を複数のページに分割し、各ページへのリンクを並べアクセスし易くするプラグイン

GitHub

https://github.com/mislav/will_paginate

CSS 紹介サイト

Samples of pagination styles for will_paginate

http://mislav.uniqpath.com/will_paginate/

Page 88: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

Ⅱ. プラグインのインストール

87

Page 89: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

インストールの準備

インターネットに接続できない場合

1. ローカル・インストールのため、添付の「will_paginate-3.0.7.gem」をアプリケーション・ルートに配置する(FTP バイナリーモード)

2. QP2TERM を起動

3. cd アプリケーション・ルート

4. gem install will_paginate -l

88

Page 90: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

インストールの準備

インターネットに接続できる場合

Gemfile の source を修正する

現状の soruce は https が記述されているためエラーになる

修正前

修正後

89

source 'https://rubygems.org' … 省略…

01 ・・・

source 'http://rubygems.org' … 省略…

01 ・・・

https → http

Page 91: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

インストール

ローカル・インストールの実行

1. QP2TERM を起動

2. cd アプリケーション・ルート

3. bundle install --local

90

/QOpenSys/usr/bin/-sh > cd /www/APSVR/htdocs/APNAME # > bundle install [33mDon't run Bundler as root. Bundler can ask for sudo if it is needed, and installing your bundle as root will break this application for all non-root users on this machine. [0m Fetching gem metadata from https://rubygems.org/........... Resolving dependencies... Using rake 0.9.6 Using i18n 0.7.0.beta1 ・・・ <省略> ・・・ [32mYour bundle is complete! [0m [32mUse `bundle show [gemname]` to see where a bundled gem is installed. [0m #

インターネットに接続できる場合、--local は不要

Page 92: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

Ⅲ. アプリケーションの修正

91

Page 93: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

アプリケーションの修正

コントローラーの修正1

ページネーション用のデータを準備する

対象

app/controllers/posts_controller.rb

index アクション・メソッド

paginate メソッドにより実現

92

<インスタンス変数> = <モデル>.paginate(:page => params[:page])

Page 94: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

アプリケーションの修正

コントローラーの修正2

修正前

修正後

93

class PostsController < ApplicationController before_action :set_post, only: [:show, :edit, :update, :destroy] # GET /posts # GET /posts.json def index @posts = Post.all end ・・・省略・・・

01 02 03 04 05 06 07 08

class PostsController < ApplicationController before_action :set_post, only: [:show, :edit, :update, :destroy] # GET /posts # GET /posts.json def index @posts = Post.paginate(:page => params[:page]) end ・・・省略・・・

01 02 03 04 05 06 07 08

Page 95: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

アプリケーションの修正

モデルの修正1

1ページに表示するレコード数を設定する

対象

app/models/post.rb

per_page 変数に設定

94

self.per_page = <ぺージ数>

Page 96: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

アプリケーションの修正

モデルの修正2

修正前

修正後

95

class Post < ActiveRecord::Base end

01 02

class Post < ActiveRecord::Base self.per_page = 3 end

01 02 03

Page 97: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

アプリケーションの修正

ビューの修正1

ページネーションを実際に表示する

対象

app/views/index.html.erb

will_paginate ヘルパーメソッドを使用

96

<%= will_paginate <インスタンス変数> %>

Page 98: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

アプリケーションの修正

ビューの修正2

修正前

修正後

97

<h1>Listing posts</h1> <table> <thead> <tr> <th>Title</th> ・・・省略・・・

01 02 03 04 05 ・・・

<h1>Listing posts</h1> <%= will_paginate @posts %> <table> <thead> <tr> <th>Title</th> ・・・省略・・・

01 02 03 04 05 06 ・・・

Page 99: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

Ⅳ. Rails サーバーの再起動

98

Page 100: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

サーバーの起動/停止

Rails サーバー:thin Server

起動/停止:RAILSVR CL コマンド

99

RAILSSVR

例)アプリケーション名:/www/APSVR/htdocs/APNAME RAILSSVR ACTION(*END) APP('/www/APSVR/htdocs/APNAME') RAILSSVR ACTION(*START) APP('/www/APSVR/htdocs/APNAME') VRM(*V20) PORT(2202)

Page 101: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

Ⅴ. 動作確認

100

Page 102: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

画面イメージ

will_paginate を追加した結果

101

Page 103: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

まとめ

ハンズオン2

Ⅰ. 追加するプラグインの設定

Gemfile(メモ帳:1行)

will_paginate

Ⅱ. プラグインのインストール

bundle install [--local]

Ⅲ. アプリケーションの修正

controller (メモ帳:1行)

model (メモ帳:1行)

view (メモ帳:1行)

Ⅳ. Rails サーバーの再起動

RAILSSVR

Ⅴ. 動作確認

102

Page 104: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

ハンズオン3

ハンズオン3を題材に解説

103

Page 105: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

ハンズオン3のフロー

ハンズオン3

I. スタイルシートの準備

II. スタイルシートの配置

III. アプリケーションの修正

IV. 動作確認

104

Page 106: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

スタイルシートの準備

添付のスタイルシートを使用(本来は作成する)

postslist.css

一覧画面を整形するスタイルシート

will_paginate.css

ページネイションを整形するスタイルシート

105

Page 107: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

スタイルシートの配置

スタイルシートの規約

/app/assets/stylesheets に配置

106

Page 108: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

アプリケーションの修正

ビューの修正1

使用する CSS を設定する

対象

app/views/index.html.erb

stylesheet_link_tag ヘルパーメソッドを使用

107

<%= stylesheet_link_tag <スタイルシート名> %>

Page 109: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

アプリケーションの修正

ビューの修正2

修正前

修正後

108

<h1>Listing posts</h1> <%= will_paginate @posts %> <table> <thead> <tr> <th>Title</th> ・・・省略・・・

01 02 03 04 05 06 ・・・

<%= stylesheet_link_tag "postslist" %> <%= stylesheet_link_tag "will_paginate" %> <h1>Listing posts</h1> <%= will_paginate @posts %> <table> <thead> <tr> <th>Title</th> ・・・省略・・・

01 02 03 04 05 06 ・・・

Page 110: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

まとめ

ハンズオン3

Ⅰ. スタイルシートの準備

postslist.css

will_paginate.css

Ⅱ. スタイルシートの配置

決められた場所へ

Ⅲ. アプリケーションの修正

view (メモ帳:2行)

Ⅴ. 動作確認

109

Page 111: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

Ⅴ. 動作確認

110

Page 112: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

画面イメージ

スタイルシートを適用した結果

111

Page 113: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

PowerRuby 削除

PowerRuby の削除手順

112

Page 114: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

PowerRuby 削除

PowerRuby 削除

1. ライセンスの削除

① DLTLIB LIB(POWER_RUBY)

② RMVDIR DIR('/PowerRuby') SUBTREE(*ALL)

2. アプリケーションの削除

① RMVDIR DIR(‘/www/<インスタンス名>’) SUBTREE(*ALL)

② RMVM FILE(QUSRSYS/QATMHINSTC) MBR(<インスタンス名>)

③ DLTLIB LIB(<ライブラリー名>_D)

DLTLIB LIB(<ライブラリー名>_T)

DLTLIB LIB(<ライブラリー名>_P)

113

Page 115: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

とにかく触る事が大切です。 是非お役立てください。

114

Page 116: IBM i - 2014 PowerRuby 入門 1.0 2014 -12 19 Ver. · ruby on rails Web アプリケーションフレームワーク オープンソース ... (Ruby 2.0 + Rails 4.0) 1PRUBY1 3 5001

最後に・・・ 会社紹介

「優しさ」と「信頼」で お客様のビジネスに “Goode Cycle” を。

受託開発 顧客研修 技術開発

信頼性においては定評のある IBM i をメインとしたアプリケーション開発を行います。お客様とのコミュニケーションを第一に考え、最適なソリューションをご提案しています。

外部研修にて IBM i コースを担当する専任のインストラクターがいます。また、お客様のご要望に応じたオーダーメイドの研修コースの提供も行います。

IBM i の最新技術だけでなく、お客様にとって必要になるであろうコンピュータ技術を日々蓄積しています。

ティアンドトラスト株式会社 〒111-0053 東京都台東区浅草橋4-16-4 ウィングエイトビル6F 03-5821-3666 / 03-5821-3668 https://tat.co.jp

最後に... 会社紹介

+ = α