狠狠撸

狠狠撸Share a Scribd company logo
XPagesDay
2013
【B-3】

XPages開発を始める Notes技術者のための
Web技術概論
2013年11月7日
海老原 賢次
リコーITソリューションズ株式会社
07/11/2013

1
自己紹介
? 海老原 賢次
? リコーITソリューションズ株式会社
? XPagesをはじめ、Webアプリ開発を多数手がけてます
XPagesは2009年から取り組んでいます
? 鹿児島の事業所からお送りしております

? 最近降灰がひどいです

桜島 今年 775回 の爆発 (11月7日時点)

07/11/2013

2
内容
? XPagesを本格的に作成を始めると、どうしてもWeb関連の知識
が必要になります
? もちろん、ここで全てを紹介できないのですが、開発や学習の足が
かりになれば幸いです
? 質問がございましたら、私のブログに専用トピックを作成しましたの
で、こちらへコメントをお寄せ下さい

XPagesで行こう!(IBM developerWorks内)
http://goo.gl/fS44AH
07/11/2013

3
内容

?HTML,CSS
?JavaScript
?Dojo と jQuery
?ライフサイクル

07/11/2013

4
XPages技術俯瞰図
サーバー
リクエスト
ページ?コントロール
イベント処理
JavaScript
(サーバーサイド)

クライアント
(ブラウザ)

HTML
ライフサイクル

装飾

CSS

取得?更新

レスポンス

変更

JavaScript
(クライアントサイド)
Dojo

NotesDocument,
NotesView等

07/11/2013

jQuery

5
HTML,CSS

2013/11/7

6
HTML,CSS
? いまさらですが???

? HTMLとは?
? 文書の内容の一部にマークアップによって、
文字に意味を持たせる言語
? なので、本来そこには見た目を直接定義する要素はない

07/11/2013

7
HTML,CSS
? HTMLのバージョン
? HTML 4.01:ちょっと前の標準

? XHTML1.0, 1.1: XMLに準拠。標準になりそこねた(XHTML5に継承)
? (X)HTML5: 最近の流行。モバイル系では当たり前。
でもデスクトップではこれから?(古いブラウザが多いため)
? 新しいバージョンほどデザイン的な要素の排除を図っている
? HTML5で廃止になったタグ?属性(大半はHTML 4.01で非推奨)
? frame, frameset, font, center, strike などのタグ
? width, height, bgcolor , color, link などの属性も廃止

? HTML5はこれからの主流だが、すべての仕様をブラウザが対応しているわ
けではない。ブラウザ毎の実装状況を要チェック!
07/11/2013

8
HTML,CSS
? HTMLの仕様をきちんと理解しましょう!
? 例えば???

? タグの種類はブロックレベル要素とインライン要素がある
? ブロックレベル要素の前後で改行される(CSSで調整可能)
? <div><p><ul><table>など

? インライン要素は行の中にある要素なので、前後では改行されない(CSS
で調整可能)
? <span><img><a>など

? インライン要素の中にブロック要素を入れることはできない
? <p>の中にはブロック要素を入れることはできない、などタグによっての制限
もある
? などなど
07/11/2013

9
HTML,CSS
? 正しいHTML、CSSのお作法を知っておきましょう!
? 仕様に沿っていないHTMLはブラウザやバージョンによって表現が異なる

? ブラウザ間互換やバージョンアップで痛い目を見る
? HTMLリファレンスは、少なくともブロックレベル要素/インライン要素について
言及しているものを参考にする

? 昔HTMLをやってたけど暫く触っていない、
なんとなくでHTMLを覚えている、
という人は再度確認しましょう!

07/11/2013

10
HTML,CSS
? CSS
? HTMLの各要素の表示位置や装飾を定義

? 通常は、HTMLとは別のCSSファイルで管理される
(各コントロールのプロパティ(style属性)で設定できるけど、
おすすめしない)

ここ↓で指定するのはおすすめしません

07/11/2013

11
HTML,CSS
CSSファイルを作成して
Xpageにリソースとして追加

07/11/2013

12
HTML,CSS
? なぜ分けるのか?

? それぞれの役割を明確にする →
構造化するという意味ももちろんあるけど???

?メンテナンスが楽!というメリットが大きい
? 同じような要素に対して一元的に管理できる

? ページ毎に再定義する必要がない

→変更に強い!
07/11/2013

13
HTML,CSS
? class の利用
? 同じ種類の要素を同じ class 名をつけておき、CSSファイルでそのクラスの
デザインを定義すると
それらのデザインを一括で変更することができる

? CSSファイルでスタイルを定義できるのは id や class だけでない

07/11/2013

14
HTML,CSS
? セレクタ
? CSSファイル内でHTMLのどの要素に対しての定義なのかを指示するモノ

? セレクタの指定に一致した全ての要素がその定義の対象となる。

07/11/2013

15
HTML,CSS
? セレクタ
? 使いこなせると、スタイルを管理しやすくなります。
(斜体がセレクタが一致する場所です)
class:
.hoge { color: red; } /* <div class="hoge"> */
(要素名): div { color: red; } /* <div class="hoge"> */
Id:
#sp { color: red; } /* <div id=“sp"> */
属性:
[type=button] { color: red;} /*<input type="button">*/
合わせ技*1: input.hoge[type=button] { color: red;}
/*<input class="hoge" type="button">*/
/* input要素で且つclassが"hoge"で且つtypeが"button" */
*1 スペースを開けないこと!

07/11/2013

16
HTML,CSS
? セレクタ
子孫: #sp .hoge { color: red; }
//id="sp"のタグの下にある(孫以降でも良い)class="hoge"の要素
//※id="sp"のタグは対象ではない
子:
#sp > .hoge { color: red; }
// id="sp"のタグの直下にある(子のみ孫以降は対象外)class="hoge"の要素
弟(CSS3): #sp ~ .hoge { color: red; }
// id="sp"のタグと同じ階層でこれ以降にある class="hoge" の要素
or:

#sp, .hoge { color: red; }
// id="sp" または class="hoge"の要素

? などなど???他にもいろいろ有ります
? Webで検索 -> [CSS セレクタ]
07/11/2013

17
HTML,CSS
? CSS3
? CSS2.1が主流

? セレクタが増えている
? 表現が増えている
? 角丸やグラデーションも画像なしで、CSSのみで表現できる!

? でも???
? HTML5同様、ブラウザが全て実装できていない!

? ブラウザの種類、バージョンによっても差異がある!

? 使用するときは対応状況を要チェック!
07/11/2013

18
HTML,CSS
? ブラウザの開発者ツール
? タグやCSSの解析
どのタグにどのCSS定義があたっているかなどの確認ができる
JavaScriptで変更された最新のHTMLを解析できる
? JavaScriptのデバッグ

? 起動方法
? IE

(8以降),

chrome, Firefox

(Firebug)

F12 ]キーで起動!

全部[

07/11/2013

19
HTML,CSS
? テーブルレイアウト
? <table></table>を使って画面のレイアウトをデザインする技
? 単純なところがいいのですが???変更にめっぽう弱い

? 一般向けサイトでは採用されることは多く無い
主流はCSSによるレイアウト
?

素人っぽい

? 使うのなら限定的に

? レイアウトはCSSで!
? float などを利用します。
? 詳しくはWebで->[CSS レイアウト]や[CSS 段組]で検索!
? XPagesでの画面全体のレイアウトは、Extension Library の
「ApplicationLayout 」を使用するのがオススメ!
07/11/2013

20
JavaScript

2013/11/7

21
JavaScript
? XPagesではクライアントはもちろん、サーバー側でも使用する。

→超重要!

? 他のプラットフォームでは、サーバー側はJavaやC#などのため、別な言語
が必要だけど???

? XPagesは、JavaScriptをマスターすると、どっちでも使える!

→超お得!

07/11/2013

22
JavaScript
覚えておくと便利な仕様
? オブジェクト?リテラル
? オブジェクトを直接ソースコードに記述する事ができる。
? 定数の宣言
? 関数の引数が多くなる場合にまとめることで、引数の順番に配慮する必要はない

var hoge = { name: 'ebihara', old: 35}
print(hoge.name); // ebihara

? 名前空間パターン(オブジェクトリテラルの応用)
? メソッドをグループ化することができる。メソッド名カブりの心配がなくなる。
var myNameSapce = {}; //名前空間の宣言
myNameSapce.getName = function(){
//メソッドの内容
};
07/11/2013

23
JavaScript
?JavaScriptって???
? クラスを作れない?
? クラスっぽいものが作れます!(コンストラクタ関数)

? クラスの継承できない?
? prototypeをつかえば継承できます!

07/11/2013

24
JavaScript
?より高度な使用方法については、私のブログで紹
介しています。ぜひ見てやって下さい!

XPagesで行こう!(IBM developerWorks内)
http://goo.gl/TKOnf0

07/11/2013

25
Dojo と jQuery

07/11/2013

26
Dojo と jQuery
? クライアントのHTMLを操作するのに、既存のオブジェクトやメソッ
ドだけでは不便

? Dojo や jQueryといったJavaScriptライブラリを利用するの
が便利
? ブラウザ間の差異を吸収してくれる
? 一般的に、これらを使用しないWebアプリはない、といってもいいく
らい

07/11/2013

27
Dojo と jQuery
? Dojo
? 利点
? XPagesに組み込まれていて、何もしなくても利用可能
? jQueryに比べ、動作が早い場合が多い

? 欠点
? 情報が少なく、英語が多い(日本語の記事は殆ど無い???)
? “dojo”で検索したら“道場”が検索される
(Webでの検索が地味にめんどくさい)

2013/11/7

28
Dojo と jQuery
? jQuery
? 利点
? 多くのWebアプリで利用されており、デファクト?スタンダードといって良い
? 情報が多く、日本語の書籍も多数ある
? Dojoより使いやすい(個人の感想です)

? 欠点
? DBの設計に追加する必要がある
? Dojoと混在することになる
競合による不具合を発生することはないが、jQueryを読み込む分、ロードに
時間がかかる

2013/11/7

29
Dojo と jQuery
? HTML要素のアクセス方法の比較(ブログにサンプル有ります)
例)下記のクラス名"dox1"のdiv(複数の可能性がある)の下にある、クラス名"text1"の
span(複数の可能性がある)の中にテキスト"uga"を"hoge"に入れ替え、文字色を赤で太
字にする
<div class="box1">
<span class="text1">uga</span> <!-- 対象 -->
<span class="text2">:</span> <!-- 対象外 -->
<span class="text1">uga</span> <!-- 対象 -->
</div>
<div>
<span class="text1">消さないで</span> <!-- 対象外 -->
</div>
<div class="box1">
<span class="text1">uga</span> <!-- 対象 -->
</div>
2013/11/7

30
Dojo と jQuery
? ライブラリなし
var boxes = document.getElementsByClassName('box1');
var i, j, div, spans, spanText1;
for(i=0, max=boxes.length; i < max; i++){
div = boxes[i];
if(div.tagName === 'DIV'){
spans = div.getElementsByTagName('SPAN');
for(j=0, max=spans.length; j < max; j++){
spanText1 = spans[j];
if(spanText1.className === 'text1'){
spanText1.innerText = 'hoge';
spanText1.style.color = 'red';
spanText1.style.fontWeight = 'bold';
}
}
}
}
2013/11/7

31
Dojo と jQuery
? Dojo

dojo.query('div.box1 span.text1')
.forEach(function(spanText1){
spanText1.innerText = 'hoge';
spanText1.style.color = 'red';
spanText1.style.fontWeight = 'bold';
});
※CSSセレクタと同じ記述で要素の指定ができる!

2013/11/7

32
Dojo と jQuery
? jQuery

$('div.box1 span.text1‘)
.text('hoge')
.css({color: 'red',
'font-weight': 'bold'});
※‘font-weight‘ は ’’無しで fontWeight でも良いです
※jQueryも CSSセレクタで要素の指定ができる!

ね、簡単でしょ?
2013/11/7

Version: [###] Classification: Internal Owner: [Insert name]

33
Dojo と jQuery
? jQueryをNotesDBに組み込む

XPagesで行こう!
連載:ちょっとディープなXPages コラム2

http://goo.gl/XJMfAp

07/11/2013

34
ライフサイクル

2013/11/7

35
ライフサイクル
? ライフサイクルとは???
? クライアントからサーバーにリクエストを送り、サーバーが決まった順番で処理
をしてHTMLを生成して、クライアントに返すまでの一連の流れ

? 理解しておく必要がある理由
? サーバーで処理すべきか、クライアントJavaScriptのみで処理できるのか、
その判断の重要な要素となる
? 処理の内容から、それをどこに記述するのが最も好ましいのかを判断できる
? 不具合があった時にどこに問題があるのか、切り分けができる

2013/11/7

36
ライフサイクル
? ページを開いた時

$式???ページ読み込み時に計算
#式???動的に計算
HTTPリクエスト
(GET)

beforPageLoad
後ほど説明します

(ページ内の$式)
afterPageLoad
afterRestoreView
beforRenderResponse

後ほど説明します
HTTPレスポンス
07/11/2013

(ページ内の#式?HTMLの生成)

afterRenderResponse
37
ライフサイクル
? 開いた後にサーバーイベントのあるボタンなどを押した時(ポストバック)
ボタンのイベントで「すべて更新」でも「部分更新」でも違いはありません。*1
(クライアントイベント処理)

HTTPリクエスト
(POST)

クライアントのonClickなどの処理

beforPageLoad
(ページ内の$式)

afterPageLoad
afterRestoreView
サーバーサイドのonClickなどの処理

(コントロールイベント処理)
beforRenderResponse
(ページ内の#式?HTMLの生成)

HTTPレスポンス

afterRenderResponse

07/11/2013

*1 「部分実行モードの設定」をしている場合は異なります。

38
ライフサイクル
? #式 と $式

? コントロールのプロパティで「値の計算」とした時の処理タイミング
? $式 ??? ページを開いた時のみ実行
? #式 ??? ページを開いと時とポストバック時に実行

07/11/2013

39
ライフサイクル
? ページイベント
? ページを開いた時の初期処理
? beforPageLoad または afterPageLoad
? 文書のフィールドに初期値を与えるなどの処理
? beforPageLoadでは、サーバーコントロールのオブジェクトがまだないので注意

? 「開いた時」というのは新しくブラウザを起動したときではなく、URLの入力、他
のページのリンク、content.redirectToPage()等で遷移してきた時などです。

? イベントの度に実行する処理
? beforRenderResponse
? フィールド値の変更により、別な値を変更したり、表示/非表示を切り替えるなどの
処理
? コントロール内の#式でも良いけど、処理をまとめて書きたいときに便利。

複雑なことをしない限りは、これだけでOK
07/11/2013

40
デモ
? 最近開発したXPagesアプリケーションをご紹介します

07/11/2013

41
最後に
? XPagesは、これまでNotesを中心に開発してきた人には、少々
難しいかもしれません。
? しかし、新しい技術を身につけるチャンスです。

? これを機会に新たなステージにジャンプアップしましょう!

07/11/2013

42
ご視聴、ありがとうございました。

2013/11/7

43
07/11/2013

Version: [###] Classification: Internal Owner: [Insert name]

44

More Related Content

XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論