Comments
Description
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