...

システム情報科学実習(講義スライド)

by user

on
Category: Documents
3

views

Report

Comments

Transcript

システム情報科学実習(講義スライド)
システム情報科学実習
— OSSに基づくWebシステム開発 —
第1回 インターネット接続の設定方法
目次
インターネット接続に必要な情報
ドメイン名
グローバルIPアドレス
インターネットへの接続方法とセキュリティ
ファイアウォール
IPマスカレード
サーバの設定
DNSの設定
アクセス制限
外部からのアクセス方法
2
インターネット接続に必要な情報
●
IPアドレス関係
グローバルIPアドレス
サブネットマスク
デフォルトゲートウェイ
●
DNS関係
上位DNSサーバ
ドメイン名
3
ドメイン名とは
●
インターネット上で機器を識別する情報
●
重複なし
●
対応するIPアドレスがある
対応付け:hosts,DNS,ブロードキャスト
●
完全修飾ドメイン名(FQDN)
コンピュータ名.ドメイン名
●
IPアドレス 210.225.229.211
●
ドメイン名 www.fun.ac.jp
4
ドメイン名の構造 (1/2)
5
ドメイン名の構造 (2/2)
6
トップレベルドメイン
●
●
分野別トップレベルドメイン (gTLD: generic TLD)
国コードトップレベルドメイン (ccTLD: country code
TLD)
gTLD
用途
ccTLD
国名
com
商業組織用
cn
中国
net
ネットワーク用
de
ドイツ
org
非営利組織用
en
ヨーロッパ連合
edu
教育機関用
fr
フランス
info
制限なし
gb, uk
イギリス
biz
ビジネス用
jp
日本
ru
ロシア
us
アメリカ
7
IPアドレス
●
インターネットにおける住所
ネットワーク上で機器を一意に識別する
●
IPv4は32ビット(約43億通り)
将来的にはIPv6で128ビットに
11010010 11100001 11100101 11010011
コンピュータ内部
11010010.11100001.11100101.11010011
る
8ビットずつ区切
210
.225
.229
.211
10進数で表現
8
IPアドレスの設定
●
自分のIPアドレス
●
サブネットマスク
自分の所属するネットワーク
●
デフォルトゲートウェイ
外のネットワークへの出入り口
9
サブネットマスク
●
IPアドレス
ネットワークアドレス部とホストアドレス部で構成
●
ネットワークアドレス
IPアドレスとサブネットマスクの論理積
所属するサブネットワークを表現
10
ネットワークアドレスの計算 (1/3)
11
ネットワークアドレスの計算 (2/3)
12
ネットワークアドレスの計算 (3/3)
13
デフォルトゲートウェイ
●
ゲートウェイ
外のネットワークへの出入り口
●
パケットの転送・受信・中継(ルータ、ネットワークスイッチ、ブリッジ)
異なるプロトコル同士を相互変換
●
●
IPX<->TCP/IPなど
デフォルトゲートウェイ
ルーティングテーブルで相手先が指定されていない
通信の中継先
14
クラス
1つのネットワークアドレスに対して
●
クラスA:ネットマスク255.0.0.0
約1600万個のホスト
●
クラスB:ネットマスク255.255.0.0
約6500個のホスト
●
クラスC:ネットマスク255.255.255.0
約250個のホスト
1990年代前半までクラス単位でIPアドレスを配布
15
CIDR (1/2)
●
クラスによるIPアドレスの配布
ムダが多い
●
●
●
CIDRが解決
サイダーと読む(CIDERではないので注意)
ネットワークアドレス部の長さが8〜30ビット
16
CIDR
CIDR表記
10進数表記
2進数表記
最大ホスト数
/8
255.0.0.0
11111111.00000000.00000000.00000000
16777214
/9
255.128.0.0
11111111.10000000.00000000.00000000
8388606
...
...
...
...
/15
255.254.0.0
11111111.11111110.00000000.00000000
131070
/16
255.255.00.0
11111111.11111111.00000000.00000000
65534
/17
255.255.128.0
11111111.11111111.10000000.00000000
32766
...
...
...
...
/23
255.255.254.0
11111111.11111111.11111110.00000000
510
/24
255.255.255.0
11111111.11111111.11111111.00000000
254
/25
255.255.255.12
8
...
255.255.255.24
8
255.255.255.25
2
11111111.11111111.11111111.10000000
126
...
...
11111111.11111111.11111111.11111000
6
11111111.11111111.11111111.11111100
2
...
/29
30
17
グローバルIPアドレス
●
インターネット内
グローバルIPアドレス
●
プライベートネットワーク内
プライベートIPアドレス
18
グローバルIPアドレスの取得
●
グローバルIPアドレスはネットワーク上で一意になって
いる必要があるので管理されている
ICANNが管理
日本ではJPNICがIPアドレスを配布
19
インターネットにサーバを繋ぐ際の注意
●
システムを安全に運用する
不正利用させない
●
ファイアウォール
●
スーパーユーザの取り扱い
●
外部からのアクセス法を限定する
見られてはいけない情報を見せない
●
ファイルのアクセス権限の設定
●
サーバから見える情報を限定する:chroot jail
見せている情報を改ざんされない
●
詳しくはセキュリティの回で
20
IPマスカレード
●
●
●
●
●
常時接続しないクライアントのグローバルIPアドレスを
節約
1つのグローバルIPアドレスを共有
ポート番号で変換
プライベートネットワークからインターネットへの接続OK
同様の技術:NAT
21
ファイアウォール
●
●
●
ネットワークのアクセス制限
ネットワークセキュリティの基本
パケットフィルタリング
不正なパケットは破棄
●
アプリケーションゲートウェイ
プロキシサーバで中継
22
ファイルのアクセス制限
●
chmodコマンド
所有者,グループ,ゲスト
それぞれの権限を設定
r:読み w:書き x:実行
●
chownコマンド
ディレクトリ・ファイルの所有者,グループを設定
$ sudo chmod a+x hoge.bin
$ sudo chmod 731 hoge.bin
● $ sudo chown root:group hoge.bin
23
スーパーユーザ
●
root権限は危険がいっぱい
システムを壊す恐れが
●
●
●
●
通常時は一般ユーザで
必要な時だけroot権限
/etc/sudoersに記述
ユーザ名 ALL = (ALL) ALL
24
外部からのアクセス方法
●
telnet
リモートログインのプロトコル
●
ssh
リモートログインのプロトコル
通信はSSLで暗号化
●
sftp
ssh + ftp
安全なファイル転送
●
●
リモートデスクトップ(X Window, VNCなど)
Web管理ツール(Webminなど)
25
エディタ
●
●
設定ファイルの書き換えなどに利用
演習では基本はviを使用
viならたいていインストールされている(Emacsが入っていな
いこともある)
軽いし、インストールも簡単
Emacsが動かなくても、viなら動くときもある?
Emacsがいい人は自己責任でインストール可
インストール方法は自分で調べてね
26
この後の作業
●
●
●
マシンの起動
ユーザ名:test パスワード:test
目標:
ネットワーク関係のコマンドを実際に試してみよう!
サーバにログインしてIPを調べた後は、
各自のPCで作業できる
27
この著作物は、「クリエイティブ・コモンズ・ ライセンス 表示 2.1 日本」により、
公立はこだて未来大学から利用許諾されています。詳しい利用許諾条項は、
http://creativecommons.org/licenses/by/2.1/jp/legalcodeをご覧下さい。
28
システム情報科学実習
— OSSに基づくWebシステム開発 —
第2回 サーバ運用管理の目的と内容
目次
構成管理
運用前の構成管理
運用時の構成管理
ログ管理とセキュリティ管理
障害管理
対策
早期発見・早期解決
バックアップ
バックアップの種類
crontab
2
構成管理
●
運用前の構成管理
マシンのスペックの選定
●
運用時の構成管理
ユーザ管理
アップグレード・アップデート
HDD・メモリの監視
3
スペックの選定
●
CPU
32ビット,64ビット
クロック数
キャッシュ容量
マルチプロセッサ
●
メモリ
ECC機能付レジスタードメモリ
●
OS
プロパライエタリOS
オープンソースOS
4
サーバ運用時の構成管理
●
ユーザの管理
新規ユーザの追加
●
●
adduserコマンド
ホームディレクトリを自動で作成
$ sudo adduser b1007999
5
サーバ運用時の構成管理
●
アップグレード
OSやアプリケーションソフトウェア
テスト環境でテスト
●
●
依存関係の確認
実機で思わぬトラブルが起きないように
6
サーバ運用時の構成管理
●
dfコマンド
ディスクドライブの容量確認
●
freeコマンド
メモリの容量確認
7
運用管理に便利なコマンド
●
find
ファイルやディレクトリの検索
●
grep
文字列のパターンを検索
●
cat
ファイル内容の表示
●
head
ファイルの先頭を表示
●
tail
ファイルの末尾を表示
8
ログ管理
●
ログ取得対象の設定
アクセスサーバ,ファイアウォール,IDS,メールサーバ,Web
サーバ
●
●
ログの取得
ログローテーション
ログの破棄
●
●
ログのスケジューリング
ログの解析
ログ解析ツール
9
セキュリティ管理
●
脅威からサーバを守る
盗聴,改ざん,なりすまし,破壊,ウィルスやワーム
●
セキュリティポリシー
情報セキュリティに関する基本方針
具体的な対応手順
10
障害対策
●
サーバの多重化
部品の多重化
●
●
●
HDD
– RAID
CPU
メモリ
全体の多重化
●
●
コールドスタンバイ
ホットスタンバイ
11
障害の解決の流れ
●
●
●
●
●
●
●
●
障害の発見
障害の切り分け
関係者へ連絡
障害の切り離し
障害の解析
障害への対応
関係者への連絡
障害の記録
手順を決めておくことで
早期解決
12
バックアップの種類
●
フルバックアップ
必要な全てのデータを複製
バックアップに時間がかかる
リストアは1回でOK
●
差分バックアップ
フルバックアップからの追加・変更のみ複製
バックアップに時間がかからない
●
●
土日などにフルバックアップ
平日は差分バックアップ
13
バックアップの自動化
●
●
指定したコマンドを自動で実行するコマンド
Crontab
分 時 日 月 曜日 コマンド
●
atコマンド
絶対時間,相対時間,単語のいずれかで時刻指定
14
シェルスクリプト
●
●
複数のコマンドをまとめたスクリプト
かならず #!/bin/sh から始まる
おまじない
●
実行したいコマンドを順次記述
#!/bin/sh
DATE=`date '+%Y-%m-%d'`
cd /etc
tar zcvf /dev/hdb/backup/backup- $DATE.tar .
15
この著作物は、「クリエイティブ・コモンズ・ ライセンス 表示 2.1 日本」により、
公立はこだて未来大学から利用許諾されています。詳しい利用許諾条項は、
http://creativecommons.org/licenses/by/2.1/jp/legalcodeをご覧下さい。
16
システム情報科学実習
— OSSに基づくWebシステム開発 —
第3回 Webサーバのしくみ・構築・設定方法
目次
Webの概要と歴史
URL
Webサーバ
サーバパス
HTTPとは
Apache (Apache HTTP
Server) の概要
HTTPのアクセス概念
HTTP Request メッセージ
の構成と主なメソッド
Apache2.2によるWebサー
バの構築
HTTP Response メッセージ
の構成と主なステータスコー
ド・応答フレーズ
2
Webの概要と歴史
●
World Wide Webを短縮してWWWやWebと呼ぶ.
●
もともとは欧州原子核研究機構 (CERN) の,研究所内
だけので文章閲覧システムだった.
●
HTTP (HyperText Transfer Protocol) に付加する技
術の発展にともない,様々なサービスが提供されるよう
になった.
3
Webサーバ
●
WebサーバはWebシステムのサービス提供装置.
●
Webはクライアントサーバ方式のシステム.
クライアントの要求に,サーバが答える.
●
サーバの場所・文章の名前はURLが示す.
クライアントは,目的のサーバをURLで特定する.
●
クライアントとサーバの通信にはHTTPが用いられる.
4
HTTPとは
●
Webサーバとクライアント間でのデータ送受信に用い
る,ハイパーテキスト転送用のプロトコル.
プロトコル…通信するときのお約束.
プロトコルを守ってデータを送れば,お互い何を言ってい
るかが解る.プロトコルを守らないと,相手はこちらの言
いたいことを理解できない.
●
HTTP1.1はRFC2616で規定される.
5
HTTPのアクセス概念
●
クライアントからサーバへの要求が,HTTP Request メッセージ.
●
サーバからクライアントへの返答が,HTTP Response メッセージ.
●
Request と Response で,開始行に記載される内容が異なる.
6
HTTP Request メッセージの構成と主なメソッド
GET
/ univoutline / index.html HTTP/1.1
GET
サーバに対してページの取得を要求する.最も一般的に使用されるメソッド.
HEAD
サーバに対してヘッダのみの情報を要求する.
POST
データをサーバに転送する際に使用される.CGI でよく使用されるメソッド.
●
●
●
メソッド: サーバに要求する動作が記載される.
パス: 要求するファイルのパス・またはURLが記載される.
HTTP/バージョン: クライアントが使用できる最も高いHTTPの
バージョンが記載される.
7
HTTP Response メッセージの構成と
主なステータスコード・応答フレーズ
HTTP/1.1
200
分類
ステータス
コード
応答フレーズ
成功
200
OK
クライアント
エラー
404
Not Found
サーバー
エラー
500
OK
説明
成功.
見つかりません.
Internal Server サーバーで予期しないエラーが発生しました.
Error
●
HTTP/バージョン:サーバが使用できる最も高いHTTPのバージョン
●
ステータスコード:クライアントからの要求に対する結果を表す3桁の数字
●
応答フレーズ:ステータスコードの説明
8
URL
●
●
インターネット上のサーバや,ファイルの場所を表す.
コロン(:)の後には接続先のポート番号が記載される
80番の場合は省略可能.
9
サーバパス
●
URLで指定するパスと,サーバ内の実際のパスは異なる.
/univoutline/index.html とあっても,実際にサーバのroot直下に
univoutlineというディレクトリがあるわけではない.
●
サーバは,外部に公開するディレクトリをあらかじめ決めている.
非公開にすべきディレクトリ,ファイルはたくさんある.
●
URLに,公開ディレクトリへのパスを追加して処理している.
10
Apache (Apache HTTP Server) の概要
●
●
●
現在最も利用されているWebサーバソフトウェア
非営利団体 Apacheソフトウェア財団の Apache
HTTP Server Project 主導のもと,開発されている.
無償で公開され,世界中のプログラマによって開発が進
められている.
11
Apache2.2によるWebサーバの構築
●
作業の流れ (詳細はテキストを参照)
1. Apache2.2のインストール
7. アクセスログ確認
2. Apache2.2のバージョン確認
8. PHP5モジュール導入
3. Apache2.2の起動確認
9. PHPの動作確認
4. Apache2.2の設定
10. Peal5導入
5. メインサイトの作成
11. cgiの動作確認
6. index.htmlの作成
12
1.〜3. インストール・バージョン確認・起動確認
演習用PCには,Apache2.2はインストール済み.
バージョン確認は次のコマンドで.
●
●
●
$ apache2 -v
起動確認は次のコマンドで(プロセスを表示).
●
実行中プロセスに/usr/sbin/apache2 -k start と表示されることを確
認.
●
$ ps ax
13
4. Apache2.2の設定
●
各種設定ファイルは,以下のような構成になっている.
apache2.conf
apache2の全体設定用ファイル
ports.conf
待ち受けポート番号の設定用ファイル
modsavailable
modsenabled
sites-available
モジュールファイルが置かれるディレクトリ
sites-enabled
使用するモジュールへのリンクファイルが置かれるディ
レクトリ
ホスト名など,サイト定義ファイルが置かれるディレクト
リ
使用するサイト定義ファイルへのリンクファイルが置か
れるディレクトリ
14
5. メインサイトの作成
●
●
●
Apache2.2のインストール直後には,デフォルトのサイトが登録さ
れている (sites-available/default).
新しいサイト定義ファイル (sites-available/b1007000) を新規
作成する.(b1007000は作りたいドメイン名)
Apache2.2のサイト定義には,Virtual Hostという概念が用いら
れている.
15
VirtualHost の概要
16
6. index.htmlの作成
●
index.htmlを作成して,public_html 以下に配置する.
17
7. アクセスログ確認
●
アクセスログ・エラーログは /var/log/b1007000 以
下に保存される.
18
8. PHP5モジュール導入
●
モジュールとは.
部品の意味.
モジュールが組み合って一つの製品になる-モジュール
構造.
Apache2.2はモジュール構造を採用している.
↑機能追加がモジュールで行える!
●
●
PHPを動作させるため,Apache2.2にPHP5モジュール
を導入する.
演習用PCには,PHP5は導入済み.
19
9. PHPの動作確認
●
●
info.phpへのアクセスで,phpinfo()という関数を動作
させる.
public_html に info.phpを作成.
20
10. Perl5導入
●
●
●
cgiスクリプトを動作させるため,Perl5を導入する.
演習用PCには,Perl5は導入済み.
cgiスクリプトの動作を許可するため,サイト定義ファイ
ルの設定を更新する.
21
11. cgiの動作確認
●
●
test.cgiへのアクセスで,サーバの環境変数を表示させる
public_html にtest.cgiを作成
22
この著作物は、「クリエイティブ・コモンズ・ ライセンス 表示 2.1 日本」により、
公立はこだて未来大学から利用許諾されています。詳しい利用許諾条項は、
http://creativecommons.org/licenses/by/2.1/jp/legalcodeをご覧下さい。
23
システム情報科学実習
— OSSに基づくWebシステム開発 —
第4回 メールサーバのしくみ・
SMTPサーバの構築・設定方法
目次
電子メール
メール送受信のしくみ
IMAP (Internet Messages
Access Protocol)
メール送受信のしくみ
MX (Mail eXchanger)
レコード
メールアドレスのしくみ
Mailコマンド
メール送受信時の動作
メールサーバの構築
SMTP (Simple Mail
Transfer Protocol)
POP3 (Post Office
Protocol Ver.3)
2
電子メール
●
電子メール(以下メール)はネットワーク上で提供される
サービスの一つ
●
メールのサービスを提供する装置をメールサーバと呼ぶ
●
メールの送受信に使われるソフトウェアは大きく分けて
2種類
MTA・・・メールサーバ上で動作
メールの送信・転送・一時保管を扱う
MUA・・・クライアントで動作
メールの読み書き・メールの受信を扱う
3
メール送受信のしくみ
●
メール送受信のしくみは郵便のシステムとほぼ変わらない
4
メールアドレスのしくみ
●
下のメールアドレスからは
アカウント名がb1007000
ドメイン名がexample.jpということが分かる
●
ドメイン名でも送信可能なのはDNSのおかげ
5
メール送受信時の動作
1. メール送信
2. メールアドレスに書かれたドメイン名をDNSに問い合せ
3. DNSからの返答であて先MTAを特定
4. あて先のMTAへ転送
5. 受信者アカウントのメールボックスへ受信したメールを保存
6. メールボックスからメールを受信
6
SMTP(Simple Mail Transfer Protocol)
●
●
●
メールの送信・転送の際に用いられるプロトコル
通常はTCP25番ポートでセッションを張る
コマンドレスポンス型プロトコル
HELO
主なコマンド
セッション接続開始
1xx
正常・レスポンス待ち系
MAIL
メールの送信元
2xx
正常系
RCPT
メールのあて先
3xx
正常・追加のコマンド待ち系
DATA
メールの本文
4xx
一時的なエラー系
QUIT
セッション切断
5xx
恒久的なエラー系
レスポンスコードの系
7
POP3(Post Office Protocol Ver.3)
●
●
●
メールボックスからの受信(取り出し)の際に用いられる
プロトコル
通常はTCP110番ポートでセッションを張る
コマンドレスポンス型プロトコル
USER
主なコマンド
ユーザ名でのセッション開始
PASS
ユーザのパスワード
QUIT
セッション切断
レスポンスコード
+OK
了承
-ERR
拒否
8
IMAP(Internet Messages Access Protocol)
●
●
●
POPの機能拡張版
メールの取り出しだけでなくメールボックスやメールの操作
(編集や削除など)も行える
通常TCP143番ポートでセッションを張る
主なコマンド
LOGIN
LOGOUT
主なレスポンスコード
OK
コマンド正常終了
特別なプロトコルを使用しない
ログイン要求
NO
コマンド異常終了
セッション切断要求
BYE
サーバ側からの切断
STORE
メッセージに指定したフラグを
立てる
CREATE
新しいメールボックスを作成
DELETE
指定したメールボックスを削除
9
MX (Mail eXchanger) レコード
●
●
●
DNSに登録されている情報
メールアドレスの@以降がドメイン名の場合はMXレコードを参照
してあて先の特定を行う
特徴
メールの中継転送を行わずに直接相手先のメールサーバに
送信できる
ドメイン内部の構成を秘密化できる
メールアドレスが短くなる(ドメイン名はホスト名より短い)
10
mailコマンド
コマンドラインからメール送信ができる
-v オプションを付けて実行することでメールの送信過程を
表示できる
動作確認などに利用
●
●
●
●
$ mail
11
メールサーバの構築
●
MTAが動作するサーバを総称してメールサーバと呼ぶ
●
今回の演習で扱うMTA
Postfix
●
●
SMTPによるメールの送信・転送をとり行うソフトウェア
sendmail用設定ファイルの引き継ぎができる
Dovecot
●
●
POP/IMAPによるメールの管理を行うソフトウェア
sendmail, Postfixと安定して連動する
12
この著作物は、「クリエイティブ・コモンズ・ ライセンス 表示 2.1 日本」により、
公立はこだて未来大学から利用許諾されています。詳しい利用許諾条項は、
http://creativecommons.org/licenses/by/2.1/jp/legalcodeをご覧下さい。
13
OSSカリキュラム実証実験プロジェクト
システム情報科学実習
— OSSに基づくWebシステム開発 —
第5回 サーバにおけるログ管理
目次
ログとは
ログの運用管理
ログの収集
ログの種類
ログ制御システム(syslog)とは
syslogの歴史
ログ管理ツールの導入
2
ログとは
●
コンピュータの利用状況やデータ通信の記録
送受信が行われたデータの中身,日時や操作内容など
が記録される
●
以下はサーバで出力されるログの例
●
サーバの異常を示すログ
ユーザのログイン履歴
プログラムの動作ログ
3
ログの運用管理
●
●
●
●
システムのトラブル,ユーザの行動などの情報は問題
解決の重要な手がかりとなる
対象システムが不正行為を受けた場合,システムが
出力するログに痕跡が残ることがある
そのため,定期的にログの監査を行う必要がある
ログは収集するだけだと肥大化するため,ローテーショ
ンさせる必要がある
4
ログの収集
●
以下は主なログ集対象の例
アクセスサーバ
ファイアウォール
IDS(侵入検知システム)
メールサーバ
Webサーバ
5
ログの種類 (1/2)
●
●
Webサーバ構築に用いられるApacheのログについて
解説
アクセスログ
Webブラウザがサーバに何かリクエストし,それにApacheが
応えるごとに記録
●
エラーログ
リクエストの結果がエラーになったものだけを記録
6
ログの種類 (2/2)
●
CGIエラーログ
CGIスクリプトが発行するエラーを記録
●
Cookieログ
リクエストしたWebブラウザに対して,Apacheが発行した
Cookieを記録
主にユーザの行動追跡に利用
7
ログ制御システム(syslog)とは
●
●
●
●
ログメッセージをIPネットワーク上で転送するための
標準規格
ほとんどの場合,ログはsyslogを介して出力
各種プラットフォーム上で広くサポート
そのため,様々なシステムのログデータを一つの集中
リポジトリで管理することも可能
8
syslogの歴史
●
●
●
1980年代にEric Allmanが sendmail プロジェクトの
一部として開発
当初は sendmail だけで使用されていたが,その利便
性から,他のアプリケーションでも用いられるようになっ
た
2001年に RFC 3164としてまとめられた
9
ログ管理ツールの導入
●
logrotate
各種ログをローテーションさせるツール
●
swatch, logwatch
出力されるログを監視するツール
swatch: リアルタイムに重要なログをそのまま確認
logwatch: 一日に一度ログのチェックを行い,比較的見やす
い状態に加工して出力
10
この著作物は、「クリエイティブ・コモンズ・ ライセンス 表示 2.1 日本」により、
公立はこだて未来大学から利用許諾されています。詳しい利用許諾条項は、
http://creativecommons.org/licenses/by/2.1/jp/legalcodeをご覧下さい。
11
システム情報科学実習
— OSSに基づくWebシステム開発 —
第6回 セキュリティ対策と運用方法
目次
セキュリティの概要
セキュリティ上の問題
セキュリティポリシー
セキュリティ対策
セキュリティ対策ツールの導入
2
セキュリティの概要
●
ネットワークサーバにおけるセキュリティは機密性,
完全性および可用性の維持
●
提供するサービスや対象とするユーザを明確にし,
セキュリティを確保することが重要
●
利便性を低下させず,セキュリティを高める方法を
見つけることが目標
3
セキュリティ上の問題
●
以下はセキュリティ上の問題の例
コンピュータへの不正侵入,不正使用
情報の漏えい
コンピュータウイルスへの感染
●
サーバを構築する際に重要となる問題は,テキストを
参照
4
セキュリティポリシー (1/2)
●
セキュリティの確保のために,以下のような項目を策定
した文書が必要
ネットワークサーバで提供するサービスの種類
サービスを提供するユーザ
運用方法
●
このように定めた情報セキュリティに関する基本方針を
セキュリティポリシーという
5
セキュリティポリシー (2/2)
●
セキュリティポリシーを策定し公開するメリット
責任の所在が明らかになる
判断基準や実施すべき対策が明確になる
セキュリティに対する意識の向上
企業等の場合,対外的なイメージや信頼性が向上
6
セキュリティ対策 (1/2)
●
サービス実行状況の確認
chkconfig : サービスの自動起動の確認
service: サービスの稼動状態の確認
●
システムログのチェック
詳しくは第5回の資料を参照
●
ネットワークの監視
SNMPやMRTGで監視可能
●
システムのアップデート
7
セキュリティ対策 (2/2)
●
通信の暗号化
暗号鍵を用いて暗号化する
●
システムパスワードのチェック・保護
パスワードの文字数や有効期限は/etc/login.defsで設定
可能
●
ファイアウォールの設定
不正アクセスを防止
8
セキュリティ対策ツールの導入 (1/2)
●
chkrootkit
システムにrootkitが設置されていないかチェックする
rootkit: 攻撃者がハッキングに成功した後,次に侵入しやすく
するためにバックドアやトロイの木馬プログラムを設置するよ
うなプログラム
ワームなどの攻撃に有効
●
iptables
ファイアウォールとして活用
9
セキュリティ対策ツールの導入 (2/2)
●
Tripwire
ファイルの改ざん防止を目的とするツール
ファイルの書き換えを監視することにより,不正な変更がファイ
ルに加えられた場合にそれを検出
ある時点での設定状態に書き戻すことも可能
10
この著作物は、「クリエイティブ・コモンズ・ ライセンス 表示 2.1 日本」により、
公立はこだて未来大学から利用許諾されています。詳しい利用許諾条項は、
http://creativecommons.org/licenses/by/2.1/jp/legalcodeをご覧下さい。
11
OSSカリキュラム実証実験プロジェクト
システム情報科学実習
— OSSに基づくWebシステム開発 —
第7回 オープンソースの開発ツール
目次
OSSとは
開発ツール
開発ツールの紹介
ソフトウェア品質
2
OSSの定義
1. 自由に再頒布ができること
2. 自由にソースコードを入手できる
こと
3. 自由に派生物を作れ,同じライセ
ンスを適用できること
4. パッチなどの配布には,同一性の
保持を要求しても良い
5. 個人やグループに対する差別の
禁止
6. 利用する分野に対する差別の禁
止
7. 再頒布の際の追加ライセンスを禁
止
8. 特定製品でのみ有効なライセンス
の禁止
9. 他のソフトウェアを制限するライセ
ンスの禁止
10. ライセンスは技術中立的でなけ
ればならない
3
OSSのライセンス
●
修正BSDライセンス(適用例: FreeBSD, PostgreSQL)
無保証・著作権の明示を義務化
●
GPL2
FSFが公開、「自由。でなければ死」で有名
●
GPL3
FSFが公開、Tivo化の禁止などを追加
●
Apache License 2.0(適用例: Apache HTTP Server)
無保証・著作権の明示を義務化、再頒布には謝辞が必要
●
MITLicense(適用例: X11)
無保証・著作権の明示を義務化(修正BSDライセンスと違いはない)
4
開発ツール
●
統合環境開発(IDE)
エディタ・テストツール・デバックツールなどが含まれている
例: Eclipse, JBuilder, Visual Studio, etc...
●
エディタを中心とするもの
エディタの機能開発に必要なツールを追加
例: Vim, Emacs
5
開発ツールの機能紹介(Eclipse) (1/3)
●
オートコンプリート
.(ドット)を入力するか [Ctrl+space]
Ctrl+space
6
開発ツールの機能紹介(Eclipse) (2/3)
●
カラーコーディング
予約語などに標準で色が付く
(ほとんどのエディタは設定を必要とする)
7
開発ツールの機能紹介(Eclipse) (3/3)
●
オートインデント
自動解釈によるインデントを行なうことが可能
Ctrl+i
8
ソフトウェア品質
●
バグ収束曲線
バグはテスト開始時には指数的に増加し、その後収束する
注意1:経験則
注意2:バグ発見数の収束が,
テストケースの減少(終了)に
よるものかもしれない
9
ソフトウェアテストツール
●
xUnit – テスティングフレームワーク
Test Fixtures
●
テストを成功させるための状態や条件
Test Suites
●
同じ条件(Test Fixtures)で行なうテストの集合
Test Execution
●
テスト本体、setup-実行-teardownで構成される
Assertions
●
テスト対象の動作を確認、失敗時はExceptionにスロー
10
JUnit-書式
import junit.framework.TestCase;
public class TestLeap extends TestCase {
public void testisLeap() {
Leap leap = new Leap();
assertEquals(true , leap.isLeap(1996));
assertEquals(false, leap.isLeap(1997));
assertEquals(false, leap.isLeap(1998));
assertEquals(false, leap.isLeap(1999));
assertEquals(true, leap.isLeap(2000));
}
}
Assertionメソッド一覧
junit.framewrk.Assert.{assertFalse, assertTrue,
assertSame, assertNotSame, assertNull,
assretNotNull, fail}
11
JUnit-実行例
●
失敗例
エラー箇所が表示
される
●
成功例
12
この著作物は、「クリエイティブ・コモンズ・ ライセンス 表示 2.1 日本」により、
公立はこだて未来大学から利用許諾されています。詳しい利用許諾条項は、
http://creativecommons.org/licenses/by/2.1/jp/legalcodeをご覧下さい。
13
OSSカリキュラム実証実験プロジェクト
システム情報科学実習
— OSSに基づくWebシステム開発 —
第8回 ドキュメント作成支援
目次
ドキュメンテーションとは
ソフトウェアドキュメンテーション
2
ドキュメンテーションとは 1/2
●
●
大型案件の場合,複数の企業が参画するため,解釈の
齟齬が無いように努める必要がある
ドキュメントによって目標を共有する
3
ドキュメンテーションとは 2/2
●
設計・実装やテストなどのフェーズによる人数の増減が
生じても,ソフトウェアの品質は一定に保つ必要がある
{外部,内部}設計書などのドキュメントによって仕様を
意識し,品質を一定に保つ
4
ソフトウェアドキュメンテーション
●
Doxygen
完成したソースコードの解析を行う
●
nroff
Unixのユーザマニュアルの作成を行う
●
Javadoc
Java言語で書かれたソースコードからドキュメントを
生成する
5
Doxygen
●
●
予約後や変数に色がつく
継承関係のグラフを作成可能
6
nroff
.\" This is a test page of custom command
.TH FUN "1" "July 1985"
.SH NAME
fun \- make you happy
.SH SYNOPSIS
.LP
\fBfun\fP \fB[\fP-ap\fP\fB]
.SH DESCRIPTION
.PP
remove ALL files, so make you happy at least temporarily
.TP
\fB\-a\fR, \fB\-\-all\fR
remove all files, wrap you up in greater happiness
.TP
\fB\-p\fR, \fB\-\-part\fR
remove a part of files, make you happy a little
.SH AUTHOR
Written by GOD
.SH COPYRIGHT
License GPLv3+: GNU GPL version 3 or later
7
Javadoc
●
●
●
Java言語のソースコード内に記述することでドキュメント
の生成が可能
ソースコードとドキュメント(リファレンス)を分離して
管理しないため,ソースコードの修正の際のドキュメント
の変更が容易
出力はHTMLで行われるため,HTMLによる記法が
利用でき,リッチなドキュメントの生成が可能
8
Javadoc-書式
●
Javadocには専用のタグを用いる
@author, @version
作成者(担当者),バージョン
@param name
引数についての説明,ローカル引数名で区別する
@return
戻り値についての説明
@exception, @throws
起こりうるエラーについての説明,2つに違いはない
9
Javadoc-生成例 1/2
注意点
1. 説明はメソッドの直前に記述
●
説明とメソッドを他のコメントなどで分断すると正しく認識
されない場合がある
2. 開始タグ(/**)に注意
開始タグを/*にした場合,Javadocではドキュメントとして
認識されない
3. HTMLの記法を利用可能
ソースコード内で多用した場合,コメントの可読性が著しく
低下する
10
Javadoc-生成例 2/2
/**
*
* @author Mirai Taro
* @version 1.0
*/
public class JavadocTest {
/**
*
* @param year 閏年かどうかを判定する対象年
* @return <b>true</b> 閏年である<br />
* <b>false</b> 閏年ではない
*/
public boolean isLeap(int year) {
return year%4==0 && year%100!=0 || year%400==0;
}
}
11
この著作物は、「クリエイティブ・コモンズ・ ライセンス 表示 2.1 日本」により、
公立はこだて未来大学から利用許諾されています。詳しい利用許諾条項は、
http://creativecommons.org/licenses/by/2.1/jp/legalcodeをご覧下さい。
12
システム情報科学実習
— OSSに基づくWebシステム開発 —
第9回 バージョン管理システムの特徴,
主なツールと利用方法
目次
バージョン管理システムとは
バージョン管理方法
バージョン管理システムの種類
Subversion
2
バージョン管理システムとは
●
ソースコードなどのデータを管理
変更箇所を容易に把握できる
機能追加後に不具合が発見された場合は差分情報を用いて
取り除くことができる
●
リモート環境で利用できるため大規模プロジェクトや
オープン系プロジェクトで採用
Git: Linuxカーネル
Mercurial: Google Code
3
バージョン管理方法 (1/4)
●
集中型管理
データはサーバなどで一元管理
他のメンバがいない場合でも作業は継続できる
ローカル環境がクラッシュしたり,環境の移行を行っても
スムースに作業を続行できる
一元管理しているサーバにアクセスできない場合は作業が
できない(チェックアウト,コミット)
●
●
ローカルにチェックアウトされたファイルの編集は可能
既に古い可能性がある
4
バージョン管理方法 (2/4)
●
分散型管理
作業の変更履歴はローカルに保存
push/popによって他のメンバの管理しているファイルを得る
ネットワークにアクセスできない環境でもバージョンの管理
(コミット)が可能
他のメンバがいない状況ではファイルが更新できない
●
責任者(もしくはサーバ)のリポジトリに集約することで解決可能
5
バージョン管理方法 (3/4)
●
リポジトリ管理
構成ディレクトリ
●
●
●
trunk
– 開発中のソフトウェアの最新版,ビルドおよび実行が可能な安定
版のみ
branches
– 新しい機能の追加や既存システムと整合がとれていないコードの
開発
tags
– リリース直前,またはリリース後のスナップショット
6
バージョン管理方法 (4/4)
●
リポジトリ管理
リリース番号 (Major.Minor.Patch)
●
●
●
Patch
– セキュリティホールやバグの修正など
Minor
– APIや機能の追加など
– 下位互換性は保証されることが多い
Major
– APIの削除などの大幅な仕様変更など
– 下位互換性を保証しないこともしばしば
7
バージョン管理システムの種類
●
CVS
最も初期に開発されたバージョン管理システム
ソースコードなどを対象としたため,バイナリデータをうまく
扱えない
●
Git
分散型のバージョン管理システム
Linuxカーネルなどに利用されていることで注目されている
●
Subversion (svn)
CVSを改良する目的で開発されたバージョン管理システム
CVSの問題点(複数の文字コード,バイナリデータの扱い)を
改善している
8
Subversion (1/2)
●
ワークフロー
1. リポジトリのコピーを作成する
●
●
初回: svn checkout http://example.com/svn/Test
以降: svn update
2. ファイルを編集する
●
●
追加: svn add test.c
削除: svn del test.c
3. リポジトリへ変更を保存する
●
保存: svn commit
9
Subversion (2/2)
●
キーワードアンカーテキスト
ファイルの変更情報を自動で挿入(タグによる置換)
●
キーワードアンカーテキストの種類
●
●
●
●
●
$Date: $
– $LastChangedDate: 2009-07-22 22:00:00 +0900 (水, 22
7 月2009)$
$Revision: $
– $Revision: 17$
$Author: $
– $LastChangedBY: admin$
$HeadURL: $
– $HeadURL: http://example.com/svn/hello.c$
$Id: $
– $Id: hello.c 17 2009-07-22 13:00:00Z admin$
10
この著作物は、「クリエイティブ・コモンズ・ ライセンス 表示 2.1 日本」により、
公立はこだて未来大学から利用許諾されています。詳しい利用許諾条項は、
http://creativecommons.org/licenses/by/2.1/jp/legalcodeをご覧下さい。
11
システム情報科学実習
— OSSに基づくWebシステム開発 —
第10回 バグ追跡システムの目的・機能と
利用方法・Tracの利用
目次
バグ追跡システムとは
バグ追跡システムの種類
Tracの導入と利用方法
2
バグ追跡システムとは (1/3)
●
●
バグ追跡システム(BTS: Bug Tracking System, バグ
管理システムとも)
バグの報告から修正をプロセスを管理する
会議やメーリングリストだけでは不十分な情報を共有できる
相互依存するバグなどに対して,複数の担当者が緊密に連携
することができる
●
発生した(報告された)バグごとに議論の場を提供する
機能
3
バグ追跡システムとは (2/3)
●
特徴
バグ報告の集約
●
複数のテスト担当者からのバグ報告を一元管理
●
HTMLファイル(表計算ソフト et cetra..)などで公開するよりもタイム
ラグが少ない
バグ解決プロセスの明確化
●
担当者を明確に指示できる
●
バグの担当者以外の作業を防ぐことができる
バグのレポート出力
●
すべての作業を可視化することができる
●
発生したバグをプロジェクト終了後にレビューすることができる
4
バグ追跡システムとは (3/3)
●
ワークフロー
1. バグの報告(Open)
●
すべてのメンバに共有され,議論なども行うことが可能
2. 担当者の割り当て(Assigned)
●
プロジェクトリーダなどの責任者が割り当てる
3. バグの修正(Resolved)
4. 担当者以外によるダブルチェック(Verified)
●
修正の完了が確認できなかった場合は最初からやりなおし
(Reopen)
5. 修正の完了(Closed)
5
バグ追跡システムの種類
●
Bugzilla
Netscapeが開発した,最初のバグ追跡システム
長く利用されていたため枯れており,もっとも利用されている
●
Redmine
Ruby on Railsで開発されており,Ruby系の開発に利用される
●
Scarab
問題追跡システム(Issue Tracking System)であり,バグに限らない
●
影舞
日本で開発されているため,文字コードなどに配慮されている
●
Trac
Pythonで開発されており,様々なサードパーティーモジュールと相性が
よい(導入が容易)
6
Tracの導入と利用方法 (1/2)
●
●
設定はサーバ(CUI)で行う
利用者はWebブラウザから利用する
一般利用権限
●
Wiki, Resource, Ticketの閲覧が可能
管理者権限
●
一般利用者権限
●
チケットの登録が可能
●
コンポーネント,マイルストーンの変更が可能
7
Tracの導入と利用方法 (2/2)
●
運用
コンポーネント
●
開発プロジェクトの構成要素
●
(複数の)サブプロジェクトなどを登録
マイルストーン
●
コンポーネントの終了期限
チケット
●
作業単位
●
作業はすべてチケットに基づいて行う
–
–
チケットにない行動は行わない
作業の可視化につながる
8
この著作物は、「クリエイティブ・コモンズ・ ライセンス 表示 2.1 日本」により、
公立はこだて未来大学から利用許諾されています。詳しい利用許諾条項は、
http://creativecommons.org/licenses/by/2.1/jp/legalcodeをご覧下さい。
9
システム情報科学実習
— OSSに基づくWebシステム開発 —
第11回 PHP の特徴と
埋め込みプログラミング
目次
PHP の概要
基本構文
埋め込みプログラミング
2
PHP の概要 (1/3)
●
PHP (Hypertext Preprocessor)
●
オープンソースの汎用スクリプト言語
C言語を使って書かれている
開始タグと終了タグの内部のみを実行する
●
●
さまざまな形式のファイルに記述できる(主に HTML)
多くの基本構文はC言語,Java,Perl が基になっている
これらの言語の経験者は習得しやすい
●
埋め込みプログラミングができる
3
PHP の概要 (2/3)
●
Personal Home Page Tools (1995 年に作成)
Rasmus Lerdof がアクセス解析のために Perl で作成
●
PHP/FI(Personal Home Page / Forms Interpreter)
Personal Home Page Tools に機能を追加して公開
C 言語で書き直された
●
●
●
●
PHP/FI 2.0
PHP 3
PHP 4
PHP 5 (2004 年リリース)
PHP 5.2.11 (2009 年 9 月リリース)
4
PHP の概要 (3/3)
●
PECL (PHP Extension Community Library)
拡張モジュールを蓄積したリポジトリ
C 言語で開発されている
処理が早い
●
PEAR (PHP Extension and Application Repository)
公式リポジトリ
PHP で開発されている
HTML_QuickForm など
5
基本構文 (1/3)
●
開始タグと終了タグ
「<?php」 で始まり,「?>」で終わる
一度終了タグで閉じても,また開始タグの後から続きを記述
できる
●
変数
変数名の前に「$」をつける
●
「$variable = 0;」
型の宣言は必要ない
※ C 言語,Java,Perl が基になっている
6
基本構文 (2/3)
●
演算子
論理演算子,文字列演算子,エラー制御演算子など
●
制御構文
if 構文,foreach 構文,include 構文など
●
関数
abs 関数,fopen 関数,fgetcsv 関数など
7
基本構文 (3/3)
<?php
// PHP のスクリプト開始
for ($i = 0; $i < 10; $i++) { // for 構文
if ($i % 2 == 0) {
// if 構文
print "$i は偶数です.";
} else {
// else 構文
print "$i は奇数です.";
}
print("<br />");
}
// PHP のスクリプト終了
?>
8
埋め込みプログラミング (1/3)
記述することができる
L など
9
埋め込みプログラミング (2/3)
<html>
<head>
<title>埋め込みプログラミング</title>
</head>
<body>
<?php
// 名前を代入した配列
$name = array("太郎", "次郎", "三郎");
for ($i = 0; $i < 3; $i++) { // for 構文開始
?>
こんにちは<font color="blue">
<?php print $name[$i]; ?>
</font>さん.<br />
<?php
} // for 構文終了
?>
</body>
</html>
10
埋め込みプログラミング (3/3)
11
この著作物は、「クリエイティブ・コモンズ・ ライセンス 表示 2.1 日本」により、
公立はこだて未来大学から利用許諾されています。詳しい利用許諾条項は、
http://creativecommons.org/licenses/by/2.1/jp/legalcodeをご覧下さい。
12
OSSカリキュラム実証実験プロジェクト
システム情報科学実習
— OSSに基づくWebシステム開発 —
第12回 Python の特徴と連想配列
目次
Python の概要
基本構文
連想配列(辞書)
2
Python の概要 (1/3)
●
オープンソースの汎用スクリプト言語
シンプルな文法と利便性の高いライブラリ
用途は多種多様
●
●
Web/デスクトップアプリケーション,CG,
Linuxインストーラなど
プログラミング初心者の入門用に最適
プログラマ以外でも読み書きしやすいように
設計されているため非常に習得しやすい
3
Python の概要 (2/3)
●
Guido van Rossum氏によって作成(1990年)
ABCという教育用言語の後継言語として作られた
Guido氏がファンだった「空飛ぶモンティ・パイソン」に由来
●
Python Software Foundation(PSF)が設立(2001年)
世界中の開発者とPythonコミュニティによって開発が継続
下位互換性は最大限に考慮
●
Python 2.6.2 / Python 3.0.2 (2009年7月現在)
Python 3.x系からは一部互換性を破棄
4
Python の概要 (3/3)
●
欧米では人気
Google,Yahoo,Youtube,NASA,ハリウッド
●
Googleでは主要言語の一つ
日本ではまだまだマイナー
●
●
ドキュメント不足
Zen of Python
ごちゃごちゃ難しいのより白黒はっきりしたのがいい
間違いようのないやり方がひとつだけあるのがいい
「暗黙より明示」「複雑より単純」
●
とにかくシンプルで誰にでもわかりやすい言語に
5
基本構文 (1/3)
●
インデント
{ }で囲む代わりにインデントで構造を区切る
物理的な1行が文の終わりを示す(;などはなし)
●
変数
型の宣言は必要ない
全てがオブジェクトへの参照
●
データ型
全てがオブジェクト
●
属性やメソッドを必ず持つ
6
基本構文 (2/3)
●
演算子
is (アイデンティティ評価),in(メンバ評価)など
●
制御構文
if 文,for文(else使用可)など
●
●
switch 文はない
組み込み関数
open 関数,len 関数,range 関数など
7
基本構文 (3/3)
for i in range(10): # for 構文
if i % 2 == 0:
# if 構文
print '%d は偶数です.' % i
else:
# else 構文
print '%d は奇数です.' % i
8
連想配列(辞書) (1/3)
●
辞書
添字に文字列などを使って値をとりだす
いわゆる連想配列
Pythonは,文字列以外もキーにできる
とても柔軟
●
データ構造の表現などに使いやすい
人や物などの属性,DB的な利用法など
9
連想配列(辞書) (2/3)
>>> #(市外局番,市内局番,加入者番号)のタプルをキーにした辞書
>>> telmap = {(0123, 00, 0000): 'Ika.inc',
(090, 0000, 0000): 'Taro Hakodate'
(0123, 11, 1111): 'Ika Shop} # 電話番号の辞書
>>> result = []
>>> for tel, name in telmap.items(): # キーと値の両方をループ
...
if tel[0] == 0123: # キーの市外局番が0123の場合
...
result.append({tel: name})
...
>>> result
[{0123, 00, 000): 'Ika.inc')}, {(0123, 11, 1111), 'Ika
Shop')}]
10
この著作物は、「クリエイティブ・コモンズ・ ライセンス 表示 2.1 日本」により、
公立はこだて未来大学から利用許諾されています。詳しい利用許諾条項は、
http://creativecommons.org/licenses/by/2.1/jp/legalcodeをご覧下さい。
11
システム情報科学実習
— OSSに基づくWebシステム開発 —
第13回 Webサービス入門
目次
WebアプリケーションとWebサービス
Webサービスとは
XML
●
XML文書
XML文書-XML宣言
XML文書-DTD(文書型定義)
XML文書-DOCTYPE宣言
XML文書-XMLインスタンス
XML文書-XMLの厳密性
●
XMLの実装例
2
WebアプリケーションとWebサービス (1/3)
●
Webアプリケーション
Webサーバで稼動
– CGIスクリプトによる実装など
» Perl, PHP, Python…
[クライアント] と [Webサーバ] 間でやり取り
– プロトコル: HTTPなど
– データ: HTMLなど
人間が利用するシステム
3
WebアプリケーションとWebサービス (2/3)
●
Webサービス
• Webサーバで稼動
• [Webサーバ] と [Webサーバ] 間でやり取り
– プロトコル: SOAP
– データ: XML
» ※ SOAP = HTTP(プロトコル) + XML(データ形式)
• 機械が利用するシステム
4
WebアプリケーションとWebサービス (3/3)
●
Webアプリケーション
Webサーバで稼動
[クライアント] と [Webサーバ] 間でやり取り
人間が利用するシステム
●
Webサービス
Webサーバで稼動
[Webサーバ] と [Webサーバ] 間でやり取り
機械が利用するシステム
5
Webサービスとは (1/2)
●
W3Cによる定義
[Definition] A Web service is a software system designed to support interoperable machineto-machine interaction over a network. It has an interface described in a machineprocessable format (specifically WSDL). Other systems interact with the Web service in a
manner prescribed by its description using SOAP messages, typically conveyed using HTTP
with an XML serialization in conjunction with other Web-related standards.
ネットワーク上の端末同士が相互に利用可能な
ソフトウェアシステム
通信上の規則を機械が処理可能なフォーマットで用意
●
特に,WSDL
プロトコルに SOAP を利用
●
HTTP + XML
6
Webサービスとは (2/2)
●
Webサービスの特徴
• サービスの登録・検索
– UDDI: Webサービスのデータベース
• サービス情報の記述
– WSDL: データ型やURIなどの情報を記述
• 通信方式の規定
– SOAP: HTTP と XML を用いた通信
7
XML (1/2)
●
XML (eXtensible Markup Language)
マークアップ言語(SGMLを拡張)
– 文書をタグで意味付け
– 文書の構造化
– 自由にタグを定義可能
標準化技術
– W3C勧告
» 1998年 XML version 1.0
» 2004年 XML version 1.1
拡張性
– 多くの拡張言語
» XHTML(ウェブ文書), SVG(グラフィクス), MathML(数式),
DocBook(書類),G-XML(地理情報)…
Webサービスでは...
– SOAP, WSDLで使用
8
XML (2/2)
●
XMLの基本要素
• 内容
– 文書の中身
– すべての内容をタグによって意味付け
• 要素
– 内容を文脈に基づき意味付け
– タグで表現
– 開始タグと終了タグで内容を括る
• 属性
– 要素の付随情報
<要素名 属性名=”属性値”> 内容 </要素名>
開始タグ
属性
終了タグ
9
XMLの文法 (1/3)
●
タグによる表現
要素名で内容を意味付け
<市>札幌</市>
<市>富良野</市>
<町>洞爺湖</町>
<湖>洞爺湖</湖>
属性値で内容を区別
<市 都道府県 = “青森”>青森</市>
<市 都道府県 = “青森”>八戸</市>
<市 都道府県 = “岩手”>盛岡</市>
<市 都道府県 = “宮城”>仙台</市>
10
XMLの文法 (2/3)
●
XMLの構造
空要素
– 内容が存在しない要素
– 属性は保持可能
– 空要素タグ <tag />
<要素名></要素名>
<要素名 />
<要素名 属性=“属性値”></要素名>
<要素名 属性=“属性値” />
– 具体例
<br></br>
<hr />
<img src=“./image.png” alt=“image” />
11
XMLの文法 (2/3)
●
XMLの構造
入れ子構造(ネスト)
– 入れ子 => 親子関係
<ルート要素>
<要素A 属性="属性値">内容1</要素A>
<要素B>
<要素C>内容2</要素C>
</要素B>
</ルート要素>
12
XML文書
●
XML文書の構造
13
XMLの厳密性
●
XML文書の正しさ
整形式XML文書
●
●
●
タグの関係がきちんと対応しているなど
定義に則っているかは関係ない
少なくとも構造が適切なXML文書
妥当なXML文書
●
整形式,かつDTDの定義に即したXML文書
構造も意味付けも適切なXML文書
●
妥当なXML文書であることの確認
●
–
–
XML言語の検証
●
XML Validator (http://www.validome.org/xml/validate)
XHTMLなどのXMLによる言語の検証
●
W3C Markup Validation Service (http://validator.w3.org/)
14
XMLの実装例 (1/4)
●
XML (eXtensible Markup Language)
「拡張可能な」マークアップ言語
XHTML
●
●
Web文書の記述
HTML4のをXMLとして再定義
SVG
●
グラフィクスの記述
MathML
●
数式の記述
その他にも,Webに関係なく多くのXML言語としての
実装例や,データベースとしての使用など...
15
XMLの実装例 (2/4)
●
XHTML
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns=“http://www.w3.org/1999/xhtml” xml:lang="jp“ lang="jp">
<head>
<title>xhtml sample</title>
</head>
<body>
<h1>XHTML SAMPLE</h1>
<p>これは,XHTMLによるXML文書の例です.</p>
<hr />
<h2>XML Structure</h2>
<img src=“./xmlstructure.png” alt=“XMLの文書構造”/>
</body>
</html>
表示例 src/example.xhtml
16
XMLの実装例 (3/4)
●
SVG
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg style="shape-rendering:geometricPrecision;"
viewBox="0 0 400 400"
xml:space="preserve"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
preserveAspectRatio="xMidYMid meet">
<path d="M 0,0 C 0,400 400,0 200,200 Z"
fill="lightblue" stroke="blue" />
<rect width="120" height="80" x="120" y="80"
fill="pink" stroke="red" />
<circle cx="120" cy="80" r="50"
fill="none" stroke="green" />
</svg>
表示例 ./src/example.svg
17
XMLの実装例 (4/4)
●
MathML
<?xml version="1.0" encoding="utf-8" standalone="no" ?>
<!DOCTYPE math PUBLIC "-//W3C//DTD MathML 2.0//EN"
"http://www.w3.org/Math/DTD/mathml2/mathml2.dtd">
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>
<mi>x</mi>
<mo>=</mo>
<mfrac>
<mrow>
<mrow>
<mo>-</mo>
… … … … …
</mrow>
</mfrac>
</mrow>
</math>
表示例 src/example.xml
18
この著作物は、「クリエイティブ・コモンズ・ ライセンス 表示 2.1 日本」により、
公立はこだて未来大学から利用許諾されています。詳しい利用許諾条項は、
http://creativecommons.org/licenses/by/2.1/jp/legalcodeをご覧下さい。
19
システム情報科学実習
— OSSに基づくWebシステム開発 —
第14回 マッシュアップ入門(1)
目次
マッシュアップ
JavaScript
Ajax
DOM
2
マッシュアップ (1/6)
●
マッシュアップ
本来は...
●
複数の曲からボーカルや伴奏などを抽出し組み合わせることで,
新たな音楽を生み出す音楽的手法.
Webサービスでは...
●
複数のWebサービスを組み合わせることで,
新たなWebサービス(Webアプリケーション)
を生み出す手法.
3
マッシュアップ (2/6)
●
たとえば...
旅行に関する情報を集める
天気予報
地図
旅行情報
4
マッシュアップ (3/6)
●
たとえば...
旅行に関する情報を集める
天気予報
Livedoo 天気予報
地図
GoogleMaps
旅行情報
じゃらん
5
マッシュアップ (4/6)
●
WebAPI
Webサービスを利用するためのAPI
●
API (Application Program Interface)
– ソフトウェア間の通信をより簡潔に行うしくみ
●
WebAPI
– Webサービスを他のアプリケーションで利用しやすいような
形式で提供するしくみ
●
SOAP, REST...
●
XML, JSON...
※ 次回であつかいます
6
マッシュアップ (5/6)
●
WebAPI
天気予報
Livedoo 天気予報
地図
GoogleMaps
旅行情報
じゃらん
さまざまなWebサービスのWebAPIが公開されている
7
マッシュアップ (6/6)
●
複数のWebAPIを利用したWebサイト構築
次回(最終回)の講義で扱います
●
今回は...
JavaScriptを用いたXML文書のDOM操作
●
WebAPIを扱うための基礎技術の理解
8
JavaScript
●
Webブラウザで利用できるスクリプト言語
詳細は省略
9
Ajax
●
Ajax (Asynchronous JavaScript + XML)
JavaScript と XML による 非同期通信 のデータ処理
10
コード例
Ajax
●
XMLHttpRequest()
<html>
<head>
<script type="text/javascript">
onload = function() {
var request = new XMLHttpRequest();
document.getElementById('btn').onclick = function() {
request.open('GET', './sample.txt', true);
request.onreadystatechange = function() {
document.getElementById('text').textContent =
request.responseText;
};
request.send(null);
};
}
</script>
</head>
<body>
<button id="btn">push</button>
<p id="text"></p>
</body>
</html>
11
XMLプログラミング
●
XML文書の操作
要素・属性・内容 の 追加・変更・削除
SAX (Simple API for XML)
●
XMLをそのまま順に読み込んで処理
– 処理が高速,メモリ使用が少ない
– 複雑な処理が苦手
DOM (Document Object Model)
●
XMLを木構造に変換して処理
– すべて読み込んでから処理 → 処理が遅い,メモリ使用量が多い
– ある程度複雑な処理が可能
12
DOM (1/4)
●
JavaScriptを用いたDOM操作
DOMツリー
13
DOM (2/4)
●
document のメソッド
createElement()
●
ノードを生成
getElementsByTagName()
●
タグ名からノード(の配列)を取得
getElementById()
●
タグのid属性からノードを取得
getElementsByName()
●
タグのname属性からノード(の配列)を取得
document.getElementsByTagName(“p”);
14
DOM (3/4)
●
要素(node, element)の追加
createElement()
●
ノードを生成
createTextNode()
●
テキストノードを作成
appendChild()
●
ノードを子ノードとして追加
removeChild()
●
子ノードを削除
var element = document.createElement(“div”);
var text = document.createTextNode(“Hello, DOM!”);
element.appendChild(text);
document.body.appendChild(element);
15
DOM (4/4)
●
属性(attribute)の追加
setAttribute(属性名, 属性値)
●
属性値を与える
getAttribute()
●
属性値を取得する
var element = document.getElementsByTagName(“div”);
div[2].setAttribute(“id”, “result”);
16
この著作物は、「クリエイティブ・コモンズ・ ライセンス 表示 2.1 日本」により、
公立はこだて未来大学から利用許諾されています。詳しい利用許諾条項は、
http://creativecommons.org/licenses/by/2.1/jp/legalcodeをご覧下さい。
17
システム情報科学実習
— OSSに基づくWebシステム開発 —
第15回 マッシュアップ入門(2)
目次
プロトコル
データ形式
2
プロトコル (1/6)
●
Web APIで用いられるプロトコル
XML-RPC
●
RPC (遠隔手続き呼び出し) をHTTPとXMLで
SOAP
●
●
Webサービスの中核技術
XML-RPCが元
REST
●
●
●
URI を HTTP で
リソース(資源)のURIを指定するだけ
ROA
3
プロトコル (2/6)
●
RPC (Remote Procedure Call)
遠隔手続き呼び出し
遠隔にある端末の手続きを呼び出す
自身の端末にない情報を取得できる
4
プロトコル (3/6)
●
XML-RPC
XML と HTTPを用いた 遠隔手続き呼び出し
●
●
プロトコル: HTTP
データ形式: XML
5
プロトコル (4/6)
●
XML-RPC
XML と HTTPを用いた 遠隔手続き呼び出し
●
●
プロトコル: HTTP
データ形式: XML
リクエストの例
POST /RPC2 HTTP/1.0
User-Agent: Frontier/5.1.2 (WinNT)
Host: betty.userland.com
Content-Type: text/xml
Content-length: 181
HTTPヘッダ
<?xml version="1.0"?>
<methodCall>
<methodName>examples.getStateName</methodName>
<params>
<param>
<value><i4>41</i4></value>
</param>
</params>
XML
</methodCall>
6
プロトコル (5/6)
●
SOAP
XML-RPCを拡張したプ
ロトコル
●
●
●
プロトコルヘッダ
プロトコル: HTTPなど
データ形式: XML
XML-RPCとの違い
–
–
HTTP以外のプロトコル
の使用
複数の返り値を取得
可能
XML
7
プロトコル (6/6)
●
REST (Representational State Transfer)
リソース指向アーキテクチャ(ROA)
●
リソース(資源)にはユニークなURIが存在
●
HTTPのGET, POST, PUT, DELETEと
ユニーク(一意)なURIの組み合わせで動作を表現
●
●
ユニークなURI
–
階層やパラメータの指定で表現
http://www.example.com/japan/hokkaido/cities/
http://www.example.com/japan/okinawa/village/
http://www.example.com/cities?country=jp&prefecture=hokkaido
http://www.example.com/cities?country=jp&prefecture=okinawa
8
データ形式 (1/6)
●
Web APIで用いられるデータ形式
XML
●
●
タグによる意味づけ
階層化された構造表現
RSS/Atom
●
●
●
XML形式
Weblogやニュース記事の配信(フィード)
天気情報や企業の情報配信などにも
JSON
●
●
JavaScriptのオブジェクトや配列表現を利用
関数呼び出しを埋め込んだJSONPはクロスドメインを容易に
解決
9
データ形式 (2/6)
●
RSS/Atomフィード
●
●
ブログやニュース記事の配信,購読の目的
ポッドキャスティングなどにも
標準が乱立
●
●
●
RSS 1.0, RSS 2.0, Atom 1.0
基本はXML
モジュールによって拡張可能(名前空間の使用)
10
データ形式 (3/6)
●
RSS/Atomフィード
RSS (RDF Site Summary) 1.0
●
RDFを用いた記述方式
<description about="The origin of species">
<author>Darwin</author>
</descritption>
※ RDFはXML言語
–
–
トリプル(主語,述語,目的語)を表現
‘’The origin of species‘’の著者はDarwinである
RSS (Really Simple Syndication) 2.0
●
●
RDFを用いない記述方式
RSS 1.0と互換性はない
Atom
●
RSSとは独自に一から開発
11
データ形式 (4/6)
●
RSS/Atomフィード
RSS 1.0 と RSS 2.0 の構造
RSS 1.0
RSS 2.0
12
データ形式 (5/6)
●
JSON (JavaScript Object Notation)
構造化されたテキストベースのデータの記述
●
●
JavaScriptのオブジェクトや配列の表現形式
XMLと同様の構造を記述可能
配列の例
[ "札幌", "旭川", "函館", "釧路", "苫小牧", "帯広“ ]
オブジェクトの例
{ "名前":"札幌", "人口":1889352 }
ネストした例
{ "シンボル":["木", "花", "鳥"] }
13
この著作物は、「クリエイティブ・コモンズ・ ライセンス 表示 2.1 日本」により、
公立はこだて未来大学から利用許諾されています。詳しい利用許諾条項は、
http://creativecommons.org/licenses/by/2.1/jp/legalcodeをご覧下さい。
14
Fly UP