2007/07/24

うたまっぷ歌詞検索ガジェット公開

iGoogleから歌詞が検索できるように、「うたまっぷ歌詞検索」ガジェットを公開しました。

Photobucket

検索条件を入力して、ボタンを押すと別ウィンドウで、検索結果となる歌詞が表示されます。

是非、お試しあれ!!

2007/07/17

[coldfusion]新人研修-CFQUERYPARAMでメモリ容量を小さくする。

CFQUERYでSELECT文を発行する場合、ならべく、CFQUERYPARAMを使うようにしましょー。

例えば、下のようなCFQUERYタグがあるとします。

<CFLOOP index="clist" list="test1,test2">
<CFQUERY name="hoge" datasource="sample">
SELECT column1
       , column2
  FROM lc_table
 WHERE column3 = '#clist#'
</CFQUERY>
</CFLOOP>

上の場合、CFLOOPによって、2つのCFQUERYタグ(より正確にいうと、SELECT文)が発行されますが、この時、CFは二つのSELECT文を別々のものとして解釈をします。

したがって、CFサーバーのメモリを2つくってしまうことになってしまいます。

一方、CFQUERYPARAMを使って、

<CFLOOP index="clist" list="test1,test2">
<CFQUERY name="hoge" datasource="sample">
SELECT column1
       , column2
  FROM lc_table
 WHERE column3 = <CFQUERYPARAM value="#clist#" CFSQLType = "CF_SQL_VARCHAR">
</CFQUERY>
</CFLOOP>

と表現することによって、メモリを一つにすることができます。

つまり、CFQUERYPARAMを使うことで、CFに余計な負荷をかけずに、パフォーマンスをアップさせることができます。

ここで、CFSQLTypeは、各DBサーバーによって、使える値が変わってくるので、リファレンスで確認しましょー。

ものすごく大切なタグです。

2007/07/16

[coldfusion]新人研修-query変数

CFQUERYでSELECT文を発行したときに、使える便利な変数を紹介。

まず、SELECT文の合計数は、

QUERY名.RecordCount

で取得することができます。

また、現在行の取得は、

QUERY名.CurrentRow

で表示することができます。

最後に、カラム名の取得は、

QUERY名.ColumnList

でゲットできます。

結構、便利な変数たちです。

2007/07/15

[coldfusion]新人研修-SQL文の発行

SQL文の発行は、CFQUERYタグを使います。

<CFQUERY name="任意の名前" dataSource="administratorに登録されているデータソース">
・・・SQL・・・
</CFQUERY>

で発行することができます。

ちなみに、SELECT文の結果を、画面に表示したい場合は、CFLOOPのクエリーループを使います。
使い方は、

<CFLOOP query="CFQUERYでつけた名前">
#カラム名#
</CFLOOP>

でいけちゃいます。

また、DML文の場合は、トランザクション処理が走るので、CFQUERYの外側に、

<CFTRANSACTION action="begin">
  <CFTRY>
    <CFQUERY・・・>
    ・・・SQL文・・・
    </CFQUERY>
    <!--- エラー発生 --->
    <CFCATCH type = "Database">
      <CFTRANSACTION action="rollback" />
    </CFCATCH>
  </CFTRY>
  <!--- 無事にトランザクション完了 --->
  <CFTRANSACTION action="commit" />
</CFTRANSACTION>

というように、CFTRANSACTIONタグで括って、さらにCFRYを使ってその直下にCFQUERYタグを置くようにしましょう!!

なぜ、DML文発行時にここまでしなくちゃーいけないのかというと、エラーが発生した場合、rollbackを行い正常終了の場合、commitをかけたいからです。

cftryを入れることで、エラーが発生した場合、cfcatchでエラーが発生した場合の処理に移り、そこで、rollbackされていることがわかります。

逆に正常終了の場合、cfcatchタグをスルーしてそのまま、commitがかかっていると思います。

最初は、理屈で覚えるよりも、暗記みたいな感じで覚える方が早いかもしれないかも。

2007/07/14

[coldfusion]新人研修-cfparamで変数宣言

ある変数が宣言されていない場合だけ、変数を作ってしまうCFPARAMタグというものが存在します。

どういうことかというと、

<CFSET hoge = "イチゴ">
・・・
<CFPARAM name="hoge" default="オレンジ">
・・・
<CFPARAM name="hoge2" default="バナナ">
・・・
<CFOUTPUT>
#hoge#
<BR>
#hoge2#
</CFOUTPUT>

とあった場合、hogeとhoge2は何が表示されるでしょうか??

答えは、hogeは「イチゴ」、hoge2は、「バナナ」を表示します。

なぜかというと、まずcfsetタグで、hogeに、イチゴがセットされています。
次に、cfparamでhogeを宣言しようとしても、すでに、一つ上の行で、cfsetによって、宣言されてしまっているので、この行はスルーされます。

一方、hoge2にはどこにも、宣言された痕跡がないので、cfparamタグで、バナナが設定されます。

ちなみに、cfparamタグは、

<CFPARAM name="任意の変数名" default=値>

と書き表します。

宣言されていない場合だけ、値をセットしたい、なんて時に役に立ちます。

2007/07/13

[coldfusion]新人研修-大文字、小文字の区別がない

JavaScriptでは、変数宣言を行う場合、大文字小文字を区別して、処理されますが、CFの場合、タグ、変数名の大文字、小文字の区別は行われません。

つまり、

<cfouput>
・・・
<CFOUTPUT>

なんて書いてもオッケーだし、さらに、

< hoge="hello">
<CFOUTPUT>
#HOGE#
</CFOUTPUT>

なんて書いても、この場合、「hoge」の値は、きちんと「hello」を表示します。

文字の大きさが違う場合でも、実行をエラーを引き起こさないので、便利。

2007/07/12

[coldfusion]新人研修-コメントの表記

開発時に、よく、コメントを残す場合があります。

htmlの場合、「<!--コメント-->」で書くことができるし、JavaScriptの場合、「//コメント」か、または、「/*コメント*/」で残すことができますよね。

CFもコメントを残すことができて、それは、

<!---コメント--->

というように、htmlの場合よりも、一本多く横線を入れてコメントを残すことができます。

htmlだとクライアントにコメントが残ってしまいますが、CFのコメントの場合、クライアントに残らないので、ユーザーさんから内容をわからないようにするには便利かなと思います。

2007/07/11

[coldfusion]新人研修-変数の確認はIsDefiend関数で

よくCFで変数の存在確認をする場合があります。

そんなとき、IsDefined関数を使うと便利です。

具体的にいうと、

IsDefined("変数名")

で書くことができます。

で、IsDefined関数は、()の中にある変数が存在する場合、trueを返し、存在しない場合は、falseを返します。

例として、

<CFSET hoge = 2>
<CFOUTPUT>
#IsDefined("hoge")#
#IsDeFined("hoge2")#
</CFOUTPUT>

というような場合、IsDefined("hoge")はtrueを表示し、IsDefined("hoge2")はfalseを表示します。

hogeはその2行上のcfsetで値がセットされているのに対し、hoge2はどこにも値をセットした痕跡がないので、この場合、変数が存在しないことになります。

CFで開発をするときにめちゃくちゃ使う関数なので、きちんと押さえたいところです。

2007/07/10

[coldfusion]新人研修-submit後のform変数に関して

formタグの中を送信したとき、例えば、formタグ内にあるINPUTのtypeがsubmitのボタンをクリックした時や、JavaScriptで、document.formのname.submit()などで情報が送信されたき、CFは、formの中にあるINPUTタグの値を、form.inputタグのnameという形で、構造体としてキャッチします。

例えば、下のソースを見てみましょう。

<FORM name="Frm_Main" action="" method="post">
  <INPUT type="text" name="hoge" value="1">
  <BR>
  <INPUT type="checkbox" name="test_checkbox" value="2">
  <INPUT type="checkbox" name="test_checkbox" value="3">
  <INPUT type="checkbox" name="test_checkbox" value="4">
  <BR>
  <INPUT type="radio" name="test_radio" value="a">
  <INPUT type="radio" name="test_radio" value="b">
  <INPUT type="radio" name="test_radio" value="c">
  <BR>
  <SELECT name="test_select">
    <OPTION value="apple">りんご</OPTION>
    <OPTION value="lemon">レモン</OPTION>
    <OPTION value="orange">オレンジ</OPTION>
  </SELECT>
  <INPUT type="submit" value="Run" >
</FORM>

上の場合、submitボタンを押した場合、どうなるでしょうか??

一つずつ確認していきたいと思います。

まず、type=textの場合ですが、そのままの値を保持します。
よって、

< CFSET cv_hoge = Form.hoge>

で値を取得することができます。

次にチェックボックスですが、以下の場合に分かれます。

1.何もチェックを入れていない場合
2.一つだけチェックを入れている場合
3.複数チェックを入れている場合

1の場合、form変数自体、何も値を保持していないので、form.変数名で値を取得することができません。
(そもそも、値自体がない。)

2の場合、form.変数名で値を取得することができます。

3ですが、2と同様、form.変数名で値を取得することができるのですが、2と違うのは、listとして取得する点が違っています。

type=radioと、selectボックスですが、選択された値のみform.変数名で取得することができます。

form.変数名は、プログラミングをする上でとても大切な構造体なので、これを機にマスターしたいっすね。

2007/07/09

[coldfusion]新人研修-list

listの紹介をしたいと思います。

listとは、配列、構造体とは違って、ある区切り文字を使って、複数の文字や数字を、一つの変数にセットする方式です。

例えば、

<CFSET hoge = "2,3,4,5">

というように、上の場合、「,」で数字を区切って、一つの変数にセットしています。

区切り文字は、「,」だけではなく「;」や「:」も使うことができます。

「;」の場合

<CFSET hoge = "2;3;4;5">

「:」の場合

<CFSET hoge = "2:3:4:5">

そして、これを表示したい場合は、cfloopのリストループと呼ばれる手法を使ってループを行いながら表示をします。

仮に、

<CFSET hoge = "2,3,4,5">

で見てみましょう。

これをループさせたい場合、

<CFLOOP index="test" list="#hoge#" delimiters =",">
  #test#
</CFLOOP>

と書きます。

上のループを日本語に訳してみると、hogeというリストを、それぞれの値を「,」で区切って、一つずつtestという変数にセットしていくという感じでしょうか。

もちろん、区切り文字を「;」や「:」にすることもできます。

「;」の場合

<CFLOOP index="test" list="#hoge#" delimiters =";">
  #test#
</CFLOOP>

「:」の場合

<CFLOOP index="test" list="#hoge#" delimiters =":">
  #test#
</CFLOOP>

と書くことができます。

また、CFのリストは、配列に変換したり、配列からリストに変換することができます。
前者は、ListToArray関数、後者は、ArrayToList関数を使って実装することができます。

配列で詰まったときは、listに、listで苦戦したときは、配列に変換してみたりすることで、道が開けるかもしれません。

2007/07/08

[coldfusion]新人研修-if文

CFのif文ですが、ちょっとややこしいです。

<CFIF 条件>
・・・処理1・・・
<CFELSEIF 条件>
・・・処理2・・・
<CFELSE>
・・・処理3・・・
</CFIF>

と書くことができるのですが、条件を記述する際に、

CFの決定演算子JavaScriptの決定演算子
IS==
IS NOT!=
GREATER THAN(省略:gt)>
LESS THAN(省略:lt)<
GREATER THAN OR EQUAL TO(省略時:gte>=
LESS THAN OR EQUAL TO(省略時:lte<=

と対応していて、ブール演算子が、

CFのブール演算子JavaScriptのブール演算子
AND&&
OR||

と対応しているところが注意するところです。

2007/07/07

[coldfusion]新人研修-switch文

CFにもswicth文を使うことができます。

まず、JavaScriptでswitch文を使うと、

swicth(条件){
    case  値1:
        ・・・処理1・・・;
        break;
    case  値2:
        ・・・処理2・・・;
        break;
}

と書くことができますが、これをCFで書き直すと、

<CFSWITCH  expression="条件">
    <CFCASE  VALUE=値1>
        ・・・処理1・・・
        <CFBREAK>
    </CFCASE>
    <CFCASE  VALUE=値2>
        ・・・処理2・・・
        <CFBREAK>
    </CFCASE>
</CFSWITCH>

と書くことができます。

次回紹介する、cfifと使いわけて書きたいです。

2007/07/06

[coldfusion]新人研修-for文を表現する。

JavaScriptで、for文があります。

for(var i=1;i<=5; i++){
・・・処理・・・
}

これをCFを使って書き換えてみると、

<CFLOOP index="i" from="1" to="5">
・・・処理・・・
</CFLOOP>

これは、CFLOOPというタグのindexループといわれるジャンルのループの仕方で、1から5まで、一つずつ値を増やしながら処理を行っていくループです。

CFLOOPは、indexループ、conditionループ、listループ、queryループがありますが、登場の都度、解説していきたいと思います。

また、今回、indexループを使いましたが、これをconditionループを使って書き換えると、

<CFSET count=1>
<CFLOOP condition="count lte 5">
・・・処理・・・
<CFSET count = count +1>
</CFLOOP>

と書きえることができます。

conditionループの重要なところは、condition="条件を記述"で表記をするところ。

各ループの長所を生かして使いたいです。

2007/07/05

[coldfusion]新人研修-配列と構造体

突然ですが、JavaScriptでは、配列というものが存在します。

//1次元配列の例
hogeArray = new Array(5);
hogeArray[0] = "test1";
hogeArray[1] = "test2";
hogeArray[2] = "test3";
hogeArray[3] = "test4";
hogeArray[4] = "test5";

coldfusionも同様に配列が存在します。
上の例をCFを使って表してみると、

<CFSET hogeArray = ArrayNew(1)>
<CFSET hogeArray[1] = "test1">
<CFSET hogeArray[2] = "test2">
<CFSET hogeArray[3] = "test3">
<CFSET hogeArray[4] = "test4">
<CFSET hogeArray[5] = "test5">

と表現することができます。

ArrayNew関数を使って、hogeArrayを1次元の配列として変数宣言を行います。

そして、1つづつ値をセットしていきます。

JavaScriptと違う点は、最初、0ではなく1からスタートするというところが違っています。
また、JavaScriptは、配列の要素数を最初に決めなければなりませんが、CFは要素数を宣言時に決める必要がないので、融通が利きます。

構造体というのは、文字列.文字列で値をセットしていく配列とは違う構造体というものがあります。

上の例を構造体に書き換えると、

<CFSET hoge.foo1 = "test1">
<CFSET hoge.foo2 = "test2">
<CFSET hoge.foo3 = "test3">
<CFSET hoge.foo4 = "test4">
<CFSET hoge.foo5 = "test5">

と表現することができて、hogeの部分と、fooの部分は、任意に書き換えることができます。

適材適所で配列と構造体と使い分けることが重要かなと思います。

2007/07/04

[coldfusion]新人研修-四則演算と文字列連結

四則演算と文字列結合について書きたいと思います。

まずは下のコードについてみていきましょう。

<CFSET hoge1 = 1+2>
<CFSET hoge2 = 1*2>
<CFSET hoge3 = 1-2>
<CFSET hoge4 = 1/2>
<CFSET hoge5 = 5 mod 3>
<CFSET hoge6 = "test1"&"test2">
<CFOUTPUT>
#hoge1#
<BR>
#hoge2#
<BR>
#hoge3#
<BR>
#hoge4#
<BR>
#hoge5#
<BR>
#hoge6#
</CFOUTPUT>

仮に上のコードを、「test.cfm」として保存して表示した場合に、cfoutput内は、どのように表示されるのでしょうか?

答えは、下になります。

3
2
-1
0.5
2
test1test2

では、解説していきたいと思います。

まず、1行目から4行目を四則演算を行っています。

乗算をしたい場合は、「*」、除算の場合は、「/」を使って計算を行います。

5行目の「mod」は、割ったあまりを求めます。
上の場合、5から3を割ったあまり(2となります。)をhoge5にセットしています。

また、演算とは違いますが、文字列の結合を行いたい場合、「&」を使って結合していきます。

2007/07/03

[coldfusion]新人研修-hello world

昨日までは、割と堅い話だったので、今日はさっそく、coldfusionを使ってプログラミングをしてみたいと思います。

まず、hello worldを画面に表示してみましょう。

ノートパッドなどのテキストエディタを使って、下の内容をそのまま書いて、「helloworld.cfm」というファイル名で保存してみましょう。

<CFSET hoge="Hello World ColdFusion">
<HTML>
<HEAD>
<TITLE>Hello World ColdFusion</TITLE>
<BODY>
 <CFOUTPUT>
    #hoge#
 </CFOUTPUT>
</BODY>
</HTML>

保存が完了したら、IEで上のファイルを表示します。

すると、下のように表示されます。

Photobucket

これは、trainフォルダの下にある「helloworld.cfm」を表示した結果です。

画面にHello World ColdFusionが表示されていると思います。

では、上のプログラムでは何が起きているのでしょうか??

一行ずつ確認していきたいと思います。

まず1行目では、cfsetタグを使って変数宣言(上の場合、変数名は、hogeです。)を行い、そのまま、「Hello World ColdFusion」という文字列をセットしています。

同じことをjavascriptで表現すると下のようになります。

var hoge = "Hello World ColdFusion";

上の例では、文字列をセットしていますが、数字、ブール値(true,false)を設定することもできます。

数字の場合、

<cfset hoge = 5>

と書きます。

また、ブール値も、

<cfset hoge = false>

と書きます。

文字列の場合だけ、文字列の前後を「"」で囲みます。

以上のことからcfsetタグは、

<cfset 変数名 = 値>

とまとめることができます。

2行目から4行目までは、htmlなので、coldfusion(以下cfと呼ぶ)は、何もしません。

次に、5行目の<cfoutput>ですが、これは、cfsetで設定した変数をwebページに表示するために使うタグで、変数名の前と後ろに「#」をつけることで、表示することができます。

ここでは、cfsetで設定した「hoge」という変数を表示したいので、変数名の前と後ろに「#」がついていると思います。

仮に、#をはずして表示してみましょう。
保存して実行をしてみると、下のように表示されると思います。

Photobucket

上は、CFがhogeを変数として解釈をせずに、単なる文字として解釈してしまったために、そのまま表示されてしまいました。

なので、変数名を表示させたい場合は、cfoutputタグを使って、変数名の前後に「#」をつけましょう。

さらに、cfoutputは、最後に</cfoutput>が必要になるので注意が必要です。

上のソースでは、8行目に該当します。

以上からcfoutputタグは、

<cfoutput>#cfsetで設定した変数名#</cfoutput>

とまとめることができます。

次回は、cfsetを使った四則演算と文字列結合について書きたいと思います。

2007/07/02

[coldfusion]新人研修-coldfusionの利点

前回は、「coldfusionとは、なんぞや??」について書きました。

今日は、coldfusionの利点について書いていきたいと思います。

まずcoldfusionがない場合について考えてみたいと思います。

coldfusionがない場合、htmlとjavascript、cssをだけでは以下のことができません。

  1. oraclewindows sql servermysqlなどに登録されている内容をサイトに表示する。
  2. ホームページに入力した内容を使ってpdfファイル作成を行う。
  3. ホームページからデータベースの検索。
  4. グラフの作成。

では、coldfusionだと上のことが実行可能なのでしょうか??

答えは、「yes」です。

つまり、coldfusionを使うことで、htmlだけよりも、多くのことができるようになります。

さて、ここまで、おおざっぱではありますが、「coldfusionについて」と、「coldfusionの利点」について書いてきました。

いよいよ、次回は、coldfusion(CFML)の書き方について解説していきたいと思います。

余談

ここからのお話は、覚えないでほしいのですが、実際、coldfusionを使わなくても上のことは大抵、javascriptできてしまいます。

1、3は、google gearsで実装することができるし、4に関しては、google chartを使えばできてしまいます。

だけど、この内容は、気にしないでください。

2007/07/01

[coldfusion]新人研修-coldfusionとは

これから、coldfusionを使ったアプリケーションの開発方法について解説していきたいと思います。

まず始めに、そもそもcoldfusionとは、何なのでしょうか??

さっそく、ぐぐって、Wikipediaの定義を見てみましょう。

そこには、下のように書かれています。

ColdFusion は、ソフトウェア全般(特に動的ウェブサイト)の開発に使われるアプリケーションフレームワークであり、アプリケーションサーバである。Webサイト開発フレームワークという意味では、マイクロソフトのASP.NETやJava Platform, Enterprise Editionなどの製品と同等である。

via:ColdFusion
これだけだと、正直言って何がなんだかよくわかりません。さらに先を読み進めていくと、

ColdFusion の第一の機能はそのスクリプト言語 ColdFusion Markup Language (CFML) であり、文法的にはHTMLに似ており、JSP、C#、PHP に比肩する。

via:ColdFusion

と書かれています。
つまり、coldfusionとは、htmlのように

<タグの名前>
・・・内容・・・
</タグの名前>

と書く言語だということがわかりました。

では、次に疑問に思うのは、htmlと違う点は、何でしょうか??

それは、InternetでURLを記入したときに、htmlやjavascriptよりも前にcoldfusion(サーバー)がプログラム(Coldfusion Markup Language)を実行します。

htmlだけの場合、

html、javascript、cssが実行される。
自分のパソコンに実行結果が表示される。

に対して、coldfusionは、

coldfusion(正確に言うと、CFML)が実行される。
html、javascript、cssが実行される。
パソコンにすべての実行結果が表示される。

という流れで実行されるということです。

次回は、coldfusionを使った利点について書きたいと思います。