perlのCGIでよく利用する環境変数一覧

2007年8月17日 23:59 perlのCGIでよく利用する環境変数一覧

タイトル通り、perlの、特にCGIでよく使う環境変数の一覧です。

ちなみに、perlの環境変数は連想配列 %ENV に格納されていて、 $ENV{'REMOTE_ADDR'} 等として参照できます。

REMOTE_ADDR
スクリプトを実行したクライアントのリモートアドレス(IPアドレス)。
REMOTE_HOST
スクリプトを実行したクライアントのリモートホスト。
HTTP_USER_AGENT
スクリプトを実行したクライアントのユーザーエージェント
HTTP_COOKIE
スクリプトを実行したクライアントのCOOKIEの値
HTTP_HOST
リクエストされたURIのホスト名。
REQUEST_METHOD
スクリプトを実行したメソッド。GET、POST、HEAD等。
CONTENT_LENGTH
POSTメソッドで渡されたデータの長さ。
QUERY_STRING
GETメソッドで渡されたクエリの内容。所謂「●●.cgi?■■■」の■■■の部分。
PATH_INFO
リクエストされたURIのパス。最近流行の、SEOを意識してGETメソッドではなく「/」区切りでデータをCGIに渡す手法を使う際には、これを参照することが多い。
SCRIPT_NAME
実行されたスクリプトのURI上の「/」からのパス。
SCRIPT_FILENAME
実行されたスクリプトのルートからのパス。
SERVER_PORT
通信に利用したサーバーのポート。SSLと非SSLでのアクセスの判断等に使ったりする。
関連するブログ記事
スポンサード リンク
カテゴリー
perl/CGI
タグ
CGI | perl | 環境変数

コメント(7) | トラックバック(0)

 

特定のファイルに対するアクセス制限

今回も.htaccessネタを旧サイトから引っ張ってきて転載です。


ネタがないので久々に.htaccessシリーズ。

.htaccessに下記のように記述することで、特定のファイルに対してアクセス制限をかけることができます。

<Files filename>
        order deny,allow
        deny from all
</Files>

filenameの部分にアクセス制限をかけたいファイル名を入れればOK。
これによって、ブラウザで閲覧できる場所にある設定ファイルなどに対してアクセス制限をかけることができます。
Webサーバーの設定によっては、ブラウザで.htaccessが閲覧できる状態になっている場合などもありますので、.htaccessは上記の方法でアクセス制限をかけておいた方が良いでしょう。

また、リモートホスト/IPアドレスでのアクセス制限で書いたように、「特定のファイル」を「特定ホストからのみ」アクセス制限、ということも可能です。

ファイル名には正規表現を使うことも可能です。

<Files ~ "regex">
...
</Files>

regexの部分に正規表現を入れることで「.から始まるファイル全てに制限をかける」「拡張子が.htmlのファイルに制限をかける」「拡張子が.gifか.jpgか.pngのファイルに制限をかける」といったことが可能です。

関連するブログ記事
カテゴリー
.htaccess
タグ
.htaccess | アクセス制限

コメント(6) | トラックバック(0)

 

ケータイメールで鬼ごっこ

2007年8月15日 23:59 ケータイメールで鬼ごっこ

今日は僕のクライアントであるM社のI社長と打ち合わせのために大阪へ。
世間はお盆休み真っ盛りですが、うちは無休。クライアントさんもサービス業をされてるところなんかは、当然稼ぎ時ですから休みはないですね。

でも、大抵の人はやっぱりお休みのようで、いつも忙しそうにしてる僕の十年来の悪友SとUが盆休みということで、夕方から久々に飲みに行く約束をしていました。

京都・神戸・大阪と、三人バラバラなところに住んでいるので、今日は僕が仕事で大阪に出ていることもあって、大阪で飲もう、ということだけ決まっていた状態でした。
その後、Sからの連絡で「18時に梅田で」ということに。

「で、梅田のどこで待ち合わせだよ(笑)」と思ったけど、まあみんないい加減なので、そのうち会えるだろうとか適当な感じで仕事を終えて、17時頃には梅田に着いていました。

待ち合わせ時間まで、ヘップファイブのスターバックスで時間を潰していたら、Uからメールが。
曰く「待ち合わせ場所が曖昧なので、鬼ごっこ形式で集合しよう」とのこと。

こういう馬鹿っぽいことばっかりやってた10年前を思い出して、思わずニヤニヤしつつ同意。
ルールは以下の通り。

  • 鬼は、待ち合わせ場所を「梅田」なんていう広い範囲に指定してしまった責任を負ってSがやる
  • Sに見つかる前に、僕とUが合流できたら鬼の負け
  • 僕とUが合流する前に、どちらかがSに見つかってしまったら鬼の勝ち
  • 僕とUとの連絡は全てケータイのメールで行ない、そのメールは常に鬼のSにも同時に送ること
  • 1メールにつき、自分の居場所に関するヒントは1つのみ

こんな感じで、飲み代をかけて30歳前後のおっさんが三人、梅田で鬼ごっこを開始。

僕とUの双方が常に移動していると、メールでのヒントも曖昧になって合流が難しそうだったので、Uをうまく僕のいるヘップファイブのスターバックスに誘導する作戦でいくことにしました。

Uはうまく僕の居場所を察してくれましたが、お互いにヒントを出しすぎて、Uが鬼のSにヘップファイブに入ってすぐに見つかってしまい、ゲームオーバー。
残念ながら負けてしまいました。

けど、これはなかなか面白い遊びでしたね。30代前後のおっさんがやることか、というのはありますが(笑)。
ケータイメールというツールが、完全に定着したからこそできる遊びですね。
10年前、彼らとよくツルんでいた頃は、携帯電話は持っていたけど、まだメール機能は一般的じゃなかった気がします。
その代わり、ポケベルがあったかな?

そう考えると、この10年の技術の進歩はやっぱり凄まじいなぁと思いますね。
今だったら、ケータイのGPS機能とかを使って、さらにもっと面白い遊びもできそうな気もします。

何か考えてみようかな?

関連するブログ記事
カテゴリー
ゲーム
タグ
ケータイメール | モバイル | 鬼ごっこ

コメント(1) | トラックバック(0)

 

リモートホスト/IPアドレスでのアクセス制限

忙しいので今回も旧サイトからの転載です。すんません。


ちょうど良い機会なので(謎)。.htaccessシリーズ第二弾。

.htaccessに下記のように記述することで、特定のホスト及びIPアドレスに対してアクセス制限をかけることができます。

order allow,deny
allow from all
deny from aaa.bbb.ne.jp
deny from ccc.ddd.co.jp

これでaaa.bbb.ne.jpccc.ddd.co.jpというホストからのアクセスを制限することができます。
allow: アクセスを許可するホスト/IP
deny: アクセスを拒否するホスト/IP
です。
上記の場合は、「基本的に全部のアクセスを許可するけどaaa.bbb.ne.jpccc.ddd.co.jpからはアクセスしちゃ駄目」という意味になります。

逆に、特定のホスト/IPからのみアクセスを許可したい場合は、

order deny,allow
deny from all
allow from aaa.bbb.ne.jp

となります。
これは、「基本的に全部のアクセスを拒否するけどaaa.bbb.ne.jpからはアクセスしてOK」という意味になります。
自分専用のWebアプリケーションの管理ツール等を設置するディレクトリに設定しておくと良いですね。
もちろん、外出先等からその管理ツールにアクセスできなくなるという難点もあります。
他には、携帯専用サイトでDoCoMoやau、vodafoneのホストからのみ受け付けるよう設定する、とか。

allow及びdenyに指定できるホスト名は、後方一致でワイルドカード的に指定することができます。
aaa1.bbb.ne.jpやaaa2.bbb.ne.jp、aaa3.bbb.ne.jp等を一括でアクセス制限したい場合は

order allow,deny
allow from all
deny from .bbb.ne.jp

とすれば、ホストの末尾が.bbb.ne.jpからのアクセスを全て拒否できます。
ただし、この使い方は無関係な人までアクセス拒否してしまう可能性が非常に高いので、設定する場合はその辺を考慮に入れる必要があります。

allow及びdenyには、ホスト名だけでなくIPアドレスも指定できます。
IPアドレスをワイルドカード的に指定する場合は前方一致です。また、サブネットマスクによる範囲指定も可能です。

order allow,deny
allow from all
deny from 192.168.0.1
deny from 192.168.1.
deny from 192.168.2.0/255.255.255.0
deny from 192.168.3.0/16

こんな感じで。

「アクセス制限をかける」という行為自体が私はあまり好きではないのですが、誰でもデータベース内の情報を編集できる、所謂wikiのような「性善説系」サイトを長年やってると、やはり必要悪だなと特に改めて思わされますね。

関連するブログ記事
カテゴリー
.htaccess
タグ
.htaccess | アクセス制限

コメント(9) | トラックバック(0)

 

同人ゲーム『ひぐらしのなく頃に』が実写映画化だってさ

ひぐらしのなく頃に』がとうとう実写映画化までされちゃうらしい。
どこまでメディアミックスする気だー。凄いなぁ。

僕自身は、もともとたった2時間程度の尺で無理矢理に起承転結をつける、映画という媒体自体にあまり魅力を感じない上に、原作つきの実写の邦画という時点で魅力は地に落ちた感じなので、よっぽどのことがない限り見たいとは思わないですが、素人が作り上げた作品が世に受け入れられて、ここまで様々な媒体で発表される、という事実には、本当に心の底から凄いと思える。

次はTVドラマかな?

関連するブログ記事
カテゴリー
ゲーム
タグ
07th Expansion | ひぐらしのなく頃に | 映画 | 竜騎士07

コメント(5) | トラックバック(0)

 

「アインシュタインLOVE」展を見に、大丸ミュージアム・梅田に行ってきました

昨日、実家の両親が頂いたお中元のお裾分けに送ってもらったビール券のお礼で、母にメールを送ったら、会話の流れで「梅田の大丸でやってるアインシュタイン展が良かったよー」なんて話になった。

僕はどっちかと言うと文系人間なので、相対性理論とかその辺正直よくわからないんですが、最近天文学の初歩とかに興味があった関係で、興味のアンテナは立ってた。

なのですぐに調べてみると、なんと今日で大丸ミュージアム・梅田でやってる「アインシュタインLOVE」展は終わりらしい。
ちょうど日曜日だし、行ってみるかー。という感じで、今日行ってきました。

っていうか、梅田の大丸に大丸ミュージアムなんていう展示場があること自体知らなかったですよ。

大丸の地下二階から、大丸ミュージアムのある15階まで延々エスカレーターで上っていったんですが、エスカレーターの途中で毎階壁に貼られたチラシにアインシュタインの名言がでかでかと書かれてて(しかもパターンが結構多い)、なんかそれ見てるだけでも結構楽しめました。

「アインシュタインLOVE」の「LOVE」ってどういうことよ?とか思いながら会場についたら、最終日ということもあってか、意外と混んでました。
正直、デパートの中のしょぼい展示場だろうから、ガラガラかなー、とも思ってたんですが。すいません。

展示は大きく分けて4つのブロックになってて、

  1. アインシュタインの見た「ニッポン」
  2. ありのままのアインシュタイン
  3. 科学者アインシュタイン
  4. "?"から"!"への科学体験ワールド

というタイトルがつけられてました。

最初の『アインシュタインの見た「ニッポン」』は、大正11年にアインシュタインが来日した際のことを詳細な資料と共に展示してありました。

正直、恥ずかしながらアインシュタインが来日していたことすら知らなかった僕ですが、アインシュタインが、今僕の住んでいる神戸から入国し、僕の実家のある奈良にも行って東大寺でお辞儀する鹿にお辞儀し返している写真とかを見ただけでめちゃくちゃ親近感が沸きましたですよ。単純ですね。

その後の展示の「ありのままのアインシュタイン」「科学者アインシュタイン」共に、アインシュタインという「人」に非常にフォーカスを当てた展示となっていました。

20世紀最大の天才物理学者と言われる人が、どんな人生を送っていたのか、というのはとても興味深かったし、あの有名な、舌をペロっと出した写真にも見られる、人柄の良さというか人間臭さというか、そういうものを感じられて面白かったです。

ただ、「相対性理論」なんかの、物理学の素人にはよく意味のわからないものを、わかりやすく説明してくれているような展示を期待していたんですが、そういった部分は最後の「"?"から"!"への科学体験ワールド」だけで、そこもあまり力を入れた展示ではない感じだったのが、少々残念でした。

まあ、あくまで「アインシュタインLOVE」という名前通り、アインシュタインという「人」がメインの展示なので、期待するところが間違っていたな、ということですね。

けど、物理学とかその辺にも興味を持てたので、よい経験になりました。

関連するブログ記事
カテゴリー
博物館巡り
タグ
アインシュタイン | 偉人 | 博物館 | 大丸ミュージアム・梅田 | 物理学 | 相対性理論

コメント(3) | トラックバック(0)

 

perlでPostgreSQL

2007年8月11日 23:59 perlでPostgreSQL

今回も旧サイトからネタを引っ張ってきました。すんません。

PostgreSQL関連は早めに転載しとかないと、色々と困るので......。


DBIモジュールを使用する

perlにはデータベースを操作するためのモジュール「DBI」が用意されている。
Windows用のActivePerlを使う場合は、2003年3月現在は別途DBIモジュールをインストールしないといけない。
詳しいやり方は忘れた。DOS窓からppmコマンドで色々やったらインストールできたはず。

とりあえず、

#-- DBIモジュールの使用を宣言
use DBI;

データベースに接続

DBIモジュールを使ってPostgreSQLデータベースに接続するには、connect ステートメントを使用する。
「Amethyst」という名前のデータベースに、アカウント名「amethyst」パスワード「abcdefg」で接続する場合、下記のようにする。

#-- データベースに接続
$DB = DBI->connect("DBI:Pg:dbname=Amethyst","amethyst","abcdefg");

一つのプログラムで何度もデータベースに対してSQL文を発行する場合は、 その都度connectしたりせずにプログラムの最初に connect して、全ての処理が終わったら disconnect した方が良いらしい。


データの編集

データベース内のデータの編集関連のSQL文(insert,update,delete)の使用例。

#-- insert文の使用例
#-- SQL文を変数 $SQLstatに格納
$SQLstat = $DB->prepare("insert into $table_name (ID,Name) values ($id,$name)");
#-- SQL文を実行
$RESULT = $SQLstat->execute;
#-- 実行したSQL文を破棄
$SQLstat->finish;

#-- update文の使用例
#-- SQL文を変数 $SQLstatに格納
$SQLstat = $DB->prepare("update $table_name set Name='$name' where ID = '$id'");
#-- SQL文を実行
$RESULT = $SQLstat->execute;
#-- 実行したSQL文を破棄
$SQLstat->finish;

#-- delete文の使用例
#-- SQL文を変数 $SQLstatに格納
$SQLstat = $DB->prepare("delete from $table_name where ID = '$id'");
#-- SQL文を実行
$RESULT = $SQLstat->execute;
#-- 実行したSQL文を破棄
$SQLstat->finish;

SQL文内に変数を用いる場合も、数値以外はシングルクォーテーション「'」で括ること。

各SQL文を execute すると、結果が変数 $RESULT に代入される。
$RESULT に代入される値はSQL文実行によって変更のあった列数なので、処理実行後 $RESULT の値を調べることで、エラーチェックができる。

#-- エラーチェック
if($RESULT < 1){die print 'データの編集に失敗しました';}

データの検索

データベース内のデータの検索のためのSQL文(select)の使用例。

#-- SQL文を変数 $SQLstatに格納
$SQLstat = $DB->prepare("select * from $table_name where Name like '%$name%'");
#-- SQL文を実行
$SQLstat->execute;
#-- マッチした件数を取得
$match = $SQLstat->rows;
print qq|$match 件 マッチしました。\n\n|;
#-- マッチしたデータを配列 @DATA に順番に格納
while(@DATA = $SQLstat->fetchrow_array){
	($ID,$NAME,$PASS,$MAIL,$BIRTH) = @DATA;
	print qq|ID: $ID\n|;
	print qq|Name: $NAME\n|;
	print qq|Password: $PASS\n|;
	print qq|Email: $MAIL\n|;
	print qq|Birthday: $BIRTH\n|;
	print qq|\n|;
}
#-- 実行したSQL文を破棄
$SQLstat->finish;

rows は、execute したSQL文にマッチした列数を返す。
fetchrow_array は、実行されるたびに、execute したSQL文で取り出した列を順番に一行ずつ配列として返す。


プレースホルダ

下記のように、ループの中で何度も似たようなSQL文を prepare して execute して finish するのは非効率的らしい。

foreach $ID (keys(%NAME)){
	$SQLstat = $DB->prepare("update $table_name set Name='$NAME{'$ID'}' where ID = $ID");
	$RESULT = $SQLstat->execute;
	$SQLstat->finish;
	if($RESULT < 1){die print qq|ID: $ID, Name: $NAME{'$ID'} の更新に失敗しました。\n|;}
}

こういう時は、ループの外でSQL文を prepare し、変数が入る部分には「?」を入れておく。
この「?」をプレースホルダと呼ぶらしい。

$SQLstat = $DB->prepare("update $table_name set Name=? where ID = ?");
foreach $ID (keys(%NAME)){
	$RESULT = $SQLstat->execute($NAME{'$ID'},$ID);
	if($RESULT < 1){die print qq|ID: $ID, Name: $NAME{'$ID'} の更新に失敗しました。\n|;}
}
$SQLstat->finish;

このように、execute する際にプレースホルダにバインドする順番に変数を渡してやると、意図通りに実行される。
また、execute する前に bind_param でプレースホルダにバインドする値を指定する方法もある。

$SQLstat = $DB->prepare("update $table_name set Name=? where ID = ?");
foreach $ID (keys(%NAME)){
	$SQLstat->bind_param(1,$NAME{'$ID'});
	$SQLstat->bind_param(2,$ID);
	$RESULT = $SQLstat->execute;
	if($RESULT < 1){die print qq|ID: $ID, Name: $NAME{'$ID'} の更新に失敗しました。\n|;}
}
$SQLstat->finish;

bind_param 時に渡す値は「何番目のプレースホルダなのか」という数値と、「バインドする値」の二つ。


データベースとの接続を終了する

データベースを操作する処理が終了したら、データベースとの接続を終了する。

#-- データベースとの接続を終了
$DB->disconnect;
関連するブログ記事
カテゴリー
PostgreSQL | perl/CGI
タグ
perl | PostgreSQL | RDBMS | SQL

コメント(6) | トラックバック(0)

 

au(EZweb)向けサイトで音声ファイルを配布する方法

Web系Tipsが旧サイトからの転載ネタばっかりなので、たまには新ネタを。

au(Ezweb)向けサイトでオリジナルの音声ファイルを配布する方法です。

1. 音声ファイルをEZムービー用の3GPP2形式(拡張子.3g2)に変換する

これは色んなソフトがありますが、au推奨はQuick Time Proのようです。

他には、Sound it!とか、QTConverterとか、色々あるみたいです。

2. 3g2ファイルをアップロード

作成した3g2ファイルをFTPでWebサーバーにアップロードします。

3. .htaccessに3g2ファイルのMIMEタイプの設定を追加する

.htaccessに以下の記述を追加します。

AddType audio/3gpp2 .3g2

音声だけでなく、動画も配布する場合は、以下も追加。

AddType video/3gpp2 .3g2

4. ダウンロードページのhtmlファイルを作成する

ダウンロードページを作ります。

音声ファイルのダウンロード用のリンクは、下記のように記述します。

<object data="http://www.abe-tatsuya.com/hyakkusenman.3g2" type="audio/3gpp2"
 copyright="no" standby="ダウンロードする">
<param name="disposition" value="devmpzz" valuetype="data" />
<param name="size" value="12345678" valuetype="data" />
<param name="title" value="思い出は百千万" valuetype="data" />
</object>
object要素
data属性には音声ファイルのURIを指定します。
type属性には、音声ファイルなら「audio/3gpp2」、動画ファイルなら「video/3gpp2」を指定します。
copyright属性には、ダウンロード配信なら「no」、ストリーミングなら「yes」を指定します。
standby属性には、画面に表示されるリンクのテキストを指定します。
param要素 (name="disposition)
value属性にデータタイプを指定します。3g2ファイルの場合は「devmpzz」を指定。
param要素 (name="size")
value属性には、音声ファイルのサイズをバイト単位で指定します。
param要素 (name="title")
value属性には、音声ファイルのタイトルを指定します。最大40バイト(全角文字で20文字ですね)らしいです。

このhtmlファイルをWebサーバーにアップロードすれば、auの3g2対応端末でアクセスすると音声ファイルがダウンロードできます。

各端末の対応状況は、au公式サイトのマルチメディアデータ対応表を参照のこと。

関連するブログ記事
カテゴリー
モバイル(携帯電話・ケータイ)Web
タグ
au | モバイル | 着うた

コメント(2) | トラックバック(0)

 

起業家に贈る、B'zの名曲五選

起業家っていうのは、なかなか大変な商売でして、自分のモチベーションの維持というのが結構大変です。

調子が良い時は、何も意識しなくても物凄い高モチベーションで、やる気満々なんですが、ちょっとスランプに陥って、モチベーションが下がってくると致命的です。
基本的に、起業家というのは自分の行動がそのままダイレクトに売上や収入、結果に繋がる商売ですから、これは下手をすると生死に関わる大問題です。

そういった時、人それぞれ色んな方法で自分を奮い立たせて、下がったモチベーションを再び上げていくんだと思います。
僕なんかは、自分より先を行っている人や、自分の後ろから追いかけてきている人と会って話すことで刺激を受けて、自分のモチベーションを再度アップさせることとかが多いかも。

他にも色々ありますが、「モチベーションの上がる歌詞の曲を聴いたり歌ったりする」というのも、なかなかやる気が出てくる手段です。

というわけで、実はB'zファンを17年程やっている僕が、『起業家に贈る、B'zの名曲五選』をご紹介。
どれもやる気の出てくる良い曲ばかりです。

MOVE

B'z The Mixture』・『ミエナイチカラ ~INVISIBLE ONE~』収録。

もうこれは、歌詞の最初から最後までモチベーションを上げるための歌、という感じですね。
じっくり聴いてると、今すぐ動きたくなって、いてもたってもいられなくなります。
特にサビの部分の歌詞は、ヘコんでる時には激しいボディブローになるかも。

何をびびってるの キミは今?
でかいチャンスを目の前にして
なんてことはないよね何事も
楽しい者勝ち動けや MOVE ON, MOVE ON, NOW
『MOVE』より引用

とか、ほんとにびびってる自分が馬鹿らしくなります。

曲調もアップテンポなロックで、凄く燃えてくる名曲です。

Pleasure'91、Pleasure'98

B'z The Best Treasure』・『LADY NAVIGATION』収録。

先の見えない不安な状態の時、この曲を聴くと「あー、頑張るしかないよなー」と、しみじみ思えます。
かっこいいメロディに、哀愁漂う歌詞がマッチして何とも言えない良さ。

人生一度きりなんだから、悩んでる暇があったら楽しまなきゃ損だなー、という気持ちにさせてくれる名曲です。

イエス、自分は間違ってない
この先の浮き沈みも歌えば楽し
『Pleasure'91』より引用

そうそう。浮くのも沈むのも、自分だけのための自分にしかできない、貴重な経験なわけですよ。

X

THE CIRCLE』収録。

これまためちゃくちゃかっこいい曲なんですが、詞がまた凄く良いです。
自分で選んだ起業家という道や境遇に、不安や不満を抱いたときに聴くと、自分を叱咤して燃えてきます。

突然何が起こるかわからない人生を、とことんまで味わい尽くしてやろう!という気にさせてくれますね。

さあ 目ざめるがいい 邯鄲の夢からその身を起こしなさい
波乱ぶくみの人生が望みだったんだろう 存分に楽しめよ
『X』より引用

という初っ端の歌詞が、凄くダイレクトに心に響きます。

THE RACE

Peace Of Mind』収録。

これはB'zじゃなくて、B'zのボーカルの稲葉浩志さんのソロの曲ですが。

この曲は、周りに取り残されてる感に打ちひしがれた時に聴くと、とっても心に響きます。
「あー、そういや俺はマイペースで生きたいから起業したんだった」と思い出させてくれます。

競争につかれた時には是非一度聴いてみてください。

走れよ走れ 無様に煌いて
誰にも見えないあの白いテープを切ろう見事に
『THE RACE』より引用

他人には理解されないかもしれないけど、「ここが自分のゴール」みたいなのがあって、それを達成するのが人生の意味やん? とか素で思える。

O.NO.RE

志庵』収録。

こちらも稲葉さんのソロの曲。

自分の手に負えるかどうかわからない仕事を前に、ちょっと身が竦んでいる時にはこれを聴いて、静かに燃えると良いです。
まだまだ自分の限界はこんなもんじゃないだろ、と思い込むことができます。

身のほどを知れ 力を抜け
You can't get away やりたきゃやりゃええんじゃやりゃええんじゃ
やらずに悔やむよりゃええ
『O.NO.RE』より引用

「やらずに悔やむよりやって悔やむ方が~」ってのは良く言われることですが、ほんとに正論ですよね。いい意味で。
やらずに悔やむのは、ほんとに後悔しか残りませんもんね。


あー、なんかこの記事書きながらこの5曲聴いてたら、めっちゃやる気出てきた~!

関連するブログ記事
カテゴリー
B'z
タグ
B'z | MOVE | O.NO.RE | Pleasure'91 | Pleasure'98 | THE RACE | X | モチベーション | 松本孝弘 | 稲葉浩志 | 起業家

コメント(6) | トラックバック(1)

 

携帯端末判別法(i-mode,J-SKY,EZweb)

なんというか、今回のは相当古い情報なんですが......最近、携帯関連の仕事も増えてきたし、古くても今でもある程度は通用するノウハウなので、一応旧サイトから転載しておきます。


単純に判別してみる

とりあえず、i-mode,J-SKY,EZwebの各UserAgentに関しては、公式サイトに詳しく載ってます。

  • i-mode(DoCoMo Net)
  • J-SKY(J-PHONE developer Program)
  • EZweb(EZwebホームページを作ろう!)

上記を踏まえた上で、凄く単純に各携帯端末を判別してみる(perlで)。

#-- i-mode
if($ENV{'HTTP_USER_AGENT'} =~ /^DoCoMo\//){$UA = 'i';}
#-- J-SKY
elsif($ENV{'HTTP_USER_AGENT'} =~ /^J-PHONE\//){$UA = 'j';}
#-- EZweb
elsif($ENV{'HTTP_USER_AGENT'} =~ /^UP\.Browser\//){$UA = 'e';}
#-- EZweb(WAP2.0対応機)
elsif($ENV{'HTTP_USER_AGENT'} =~ /^KDDI-/){$UA = 'e2';}
#-- その他
else{$UA = 'other';}

実際には、EZwebのWAP2.0非対応機でもEZサーバーがc-html・xhtml・htmlもhdmlに変換して端末へ情報を送ってくれるので、 今後のことを考えれば、携帯端末用コンテンツはEZwebのHTMLコンテンツ変換仕様を考慮した上で、 i-modeやJ-SKY独自の属性を取り込みつつxhtmlで記述するのが一番楽ちんだと思う。

各社のhtml,xhtml等の対応状況とか独自属性とかは下記公式サイト参照。

  • i-mode(DoCoMo Net)
  • J-SKY(J-PHONE developer Program)
  • EZweb(EZwebホームページを作ろう!)
関連するブログ記事
カテゴリー
モバイル(携帯電話・ケータイ)Web
タグ
au | DoCoMo | perl | User-Agent | ソフトバンク | モバイル | 環境変数

コメント(6) | トラックバック(0)

 

PostgreSQLの初歩

2007年8月 7日 23:59 PostgreSQLの初歩

毎度毎度、旧サイトからの転載で申し訳ないんですが……。
ちょうど今日客先でWebアプリ構築の仕事をやっていて、単純なSQL文すら忘れていることに愕然としたんですよ。

最近、PostgreSQLを全然触ってなかったからなぁ……。
こんな程度を忘れるのはさすがに自分でも酷いと思うけど。

結局、客先でWayBack Machineから自分の旧サイトをひっぱり出して、これを調べる始末。

なので次に同じことが起きたときのために、今のうちにこっちに移しておきます。

というわけで、以下は旧サイトからの転載です。


データベースを作る

シェル上で createdb コマンドを実行。

% createdb Amethyst	# "Amethyst"はデータベース名
CREATE DATABASE	# レスポンス

これでデータベース作成完了。
レンタルサーバーなんかだと、最初から自分のアカウント名のデータベースを用意してくれてることが多いみたい。
そういうところは大抵自分で新たにデータベースを作成することはできないと思う。
そんな場合はデータベース作成は飛ばして次へ。


psqlの起動

シェル上で psql コマンドを実行する。引数としてデータベース名を指定。
この際、引数を指定しない場合は自動的に自分のアカウント名が引数にセットされる。

% psql Amethyst
# 以下、レスポンス
Welcome to psql, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help on internal slash commands
       \g or terminate with semicolon to execute query
       \q to quit
# ここまで
Amethyst=>

psqlを起動すると、プロンプトは「データベース名=>」になる。
この際、設定によってはユーザー名やパスワードを要求されることもある。

psql起動中は、SQL文の他に「internal slash commands」(個人的に「\コマンド」と呼んでる)とやらが使える。
個人的によく使うのは以下。

  • \q psqlの終了
  • \d データベース内のテーブルを一覧表示
  • \h SQL文のヘルプを表示
  • \? \コマンドの一覧表示

テーブルの作成

テーブルの作成は
「create table テーブル名 ( フィールド(列)名 データ型 オプション , フィールド名 データ型 オプション , ……);」
というSQL文で行う。
create table に限らず全てのSQL文のラストには、セミコロン「;」をつけなければならない。
逆に言うと、セミコロンをつけるまで、一つのSQL文を何行にも渡って記述することも可能。
というか、そうしないとやってられない。

ID,Name,Password,Email という四つのフィールド持つ UserList というテーブルを作るには下記のようにする。

Amethyst=> create table UserList (
# 以下、括弧内の部分を記述しているということが一目でわかるよう
# プロンプトが「(>」に変わるところが便利
Amethyst(> ID text PRIMARY KEY,
Amethyst(> Name text NOT NULL,
Amethyst(> Password text NOT NULL,
Amethyst(> Email text
Amethyst(> );
# 以下、レスポンス
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index 'userlist_pkey' for table 'userlist'
CREATE

フィールド「ID」に「PRIMARY KEY」のオプションをつけたので、自動的に「userlist_pkey」というindexが作成される。
indexが何なのか理屈はよく知らないけど、とりあえずこれでIDをキーに検索するときは効率が良くなるらしい。


データ型

個人的によく使う、フィールドのデータ型は下記。

numeric
バイト数可変の1000桁までの正数と小数。
数値を格納するフィールドはよっぽど特殊な場合以外はこれでOKだと思う。
text
バイト数可変の文字列。
上に同じく文字列を格納するフィールドはよっぽど特殊な場合以外はこれでOKだと思う。
timestamp
日付・時刻。
入力・取り出しは「2003-04-20 17:05:06」の形式が使いやすいと思う。
inet
IPアドレス。
ネットワーク系の処理のために使うのでなければtext型でも充分だけど、せっかく専用のデータ型が用意されてるので使ってるだけ……。

オプション

個人的によく使う、フィールドのオプション(という呼び方は正しくないような気もするけど)は下記。

PRIMARY KEY
ひとつのテーブルにつきひとつのフィールドにしか指定できない。
indexが作成されるので、このフィールドをキーにした検索は効率が良いらしい。
フィールドが一意で、かつ、NULLではないという条件がある。
UNIQUE
ひとつのテーブル内の複数のフィールドに指定できること以外は PRIMARY KEY と基本的に同じだと思う。
PRIMARY KEY に指定したフィールドは、自動的に UNIQUE も指定されている。
NOT NULL
NULL値を認めないフィールドに指定。
PRIMARY KEY や UNIQUE に指定したフィールドは、自動的に NOT NULL も指定されている。
DEFAULT value
新たな行が追加された時に、自動的に挿入されるデフォルト値(value)を指定できる。

フィールドの追加

既存のテーブルにフィールドを追加する時は
「alter table テーブル名 add フィールド名 データ型 オプション;」
というSQL文で行う。

先程作ったテーブル UserList に BirthDay というフィールドを追加する場合は下記のようにする。

Amethyst=> alter table UserList add BirthDay timestamp;
ALTER TABLE	# レスポンス

numeric型のフィールドを追加する時は、デフォルト値として 0 をセットしといた方が良いと思う。
そうしないと、フィールドを追加する前に存在した行の該当フィールドの値は全てNULLになるため後々不便(0 と NULL は別物なので)。
perlからデータベースを使う場合は特に。


既存フィールドのデフォルト値の設定

既存のフィールドの DEFAULT value の設定・変更は
「alter table テーブル名 alter フィールド名 set default デフォルト値;」
というSQL文で行う。

先程作ったテーブル UserList の Email フィールドにデフォルト値 anonymous を設定する場合は下記のようにする。

Amethyst=> alter table UserList alter Email set default 'anonymous';
ALTER TABLE	# レスポンス

なお、デフォルト値の設定を破棄する場合は「set default デフォルト値」の代わりに「drop default」を使う。

Amethyst=> alter table UserList alter Email drop default;
ALTER TABLE	# レスポンス
2003.04.26 追記

データの挿入

テーブルにデータを挿入するときは
「insert into テーブル名 (フィールド名1,フィールド名2,……) values (値1,値2,……);」
というSQL文で行う。

先程作ったテーブル UserList にデータを挿入する場合は下記のようにする。

Amethyst=> insert into UserList(
Amethyst(> ID,Name,Password,Email,BirthDay)
Amethyst-> values (	# SQL文の途中、かつ括弧内でない場合のプロンプトは「->」になる
Amethyst(> '00001',
Amethyst(> 'Amethyst',
Amethyst(> '01234567',
Amethyst(> 'amethyst@amethyst-web.org',
Amethyst(> '1976-05-06'
Amethyst(> );
INSERT 2910628 1	# レスポンス

値を入力するとき、数値以外はシングルクォーテーション「'」で囲むこと。


データの表示

テーブル内のデータを表示するときは
「select フィールド名1,フィールド名2,…… from テーブル名 条件 (ソート方法);」 というSQL文で行う。

先程作ったテーブル UserList から、「Emailが空でないデータのみ、NameとEmailを表示」する場合は下記のようにする。

Amethyst=> select Name,Email from UserList where Email != '';
# 以下、レスポンス
   name   |           email
----------+---------------------------
 Amethyst | amethyst@amethyst-web.org
(1 row)	# マッチした件数(行数)が表示される

全てのフィールドを表示したい時は、フィールド名をアスタリスク「*」一文字にするだけでOK。
「select * from テーブル名 条件 (ソート方法)」

where句以下の条件を指定しなければ、テーブル内のデータ全てが表示される。

特定のフィールドの値を元に昇順にソートして表示したい場合は、select文末尾に「order by フィールド名」
降順にソートして表示したい場合は「order by フィールド名 desc」


データの検索

前項の例のように、データの検索には
「where 条件」
という句をSQL文に追加して実行する。

単純にフィールドが条件と合致しているものを検索するには「where フィールド名 = 条件」。

複数の条件で検索するには「where フィールド名 in(条件1,条件2,……)」

逆に条件と合致していないものを検索するには「where フィールド名 != 条件」。

値の一部が合致しているものを検索するには「where フィールド名 like 条件」。
「%」が「0文字以上の何か」を表すので、「Aから始まる文字列」の検索は「where フィールド名 like 'A%'」という感じ。

numeric型やtimestamp型では「> < <= >=」もよく使う。

and や or を使って、複数の条件を指定するすることも可能。

別のテーブルの検索結果を条件に指定することも可能。
「where フィールド名 in (select文)」


データの更新

既存のデータの値を更新する時は
「update テーブル名 set フィールド名1=値1,フィールド名2=値2,…… 条件(where句)」
というSQL文で行う。

先程挿入したデータのPassword「01234567」を「abcdefgh」に変更する場合は下記のようにする。

Amethyst=> update UserList set Password='abcdefgh' where ID = '00001';
UPDATE 1	# レスポンス

where句以下の条件を指定せずに実行すると、テーブル内のデータ全てが更新されるので一括更新がしたいときは楽。
ただし、一括更新するつもりがない時はwhere句の指定を忘れないよう注意が必要。


データの削除

既存のテーブルからデータを削除する時は
「delete from テーブル名 条件(where句)」
というSQL文で行う。

先程挿入したデータを削除する場合は下記のようにする。

Amethyst=> delete from UserList where ID = '00001';
DELETE 1	# レスポンス

where句以下の条件を指定せずに実行するとテーブル内のデータは綺麗さっぱりなくなってしまうので要注意。


テーブルの削除

既存のテーブルそのものを削除する時は
「drop table テーブル名」
というSQL文で行う。

先程作成したテーブル UserList を削除する場合は下記のようにする。

Amethyst=> drop table UserList;
DROP TABLE	# レスポンス

前項のdelete文で全てのデータを削除してもテーブル自体は残っているので、テーブルそのものを削除する時はこちらを使う。


データベースのバックアップ

データベースのバックアップを取るときは、シェル上で pg_dump コマンドを実行。

% pg_dump Amethyst > AmethystDB.bak
# "Amethyst"はデータベース名。"AmethystDB.bak"はバックアップファイル名

これで"AmethystDB.bak"という名前のバックアップファイルが作成される。
中身はSQL文とかが沢山書かれたテキストファイル。

バックアップファイルをもとにデータベースを再作成するときは psql コマンドに -e オプションをつけて実行する。

% psql -e Amethyst < AmethystDB.bak
# "Amethyst"はデータベース名。"AmethystDB.bak"はバックアップファイル名
関連するブログ記事
カテゴリー
PostgreSQL
タグ
PostgreSQL | RDBMS | SQL | コマンドライン | シェル

コメント(7) | トラックバック(0)

 

.htaccessによるBasic認証のかけ方

さて、昨日書いた通り、早速前のサイトで書いていたTipsをこちらに移行し始めることにします。

まずは、.htaccessによるBasic認証のやり方。

以下は、旧サイトからの転載です。


便利なんだけど一度設定したらそれっきりなので、それほど頻繁に設定をするわけでもない.htaccess。
いざ使おうとすると「あれ、どうやるんだっけ」てな感じになることが多々あるので備忘録としてメモっておきます。

人から設定の仕方をよく訊かれたようなものを中心に。
ということで、まずはBasic認証のかけ方を。

Basic認証をかけるためには、.htaccessに記述する前に、認証用のユーザー名と暗号化されたパスワードの記述されたファイルを作成する必要があります。
SSHまたはtelnetでサーバーにログインし、任意のディレクトリに移動した後、以下のコマンドでパスワードファイルを作成します。

% htpasswd -c password.dat Amethyst
New password:password
Re-type new password:password
#-- 下記はレスポンス
Adding password for user Amethyst

password.datはパスワードファイル名。任意のファイル名を設定すること。
Amethystは設定するユーザー名。任意のユーザー名を設定すること。
passwordは設定するパスワード。任意のパスワードを設定すること。実際には入力したパスワードは表示されない。

上記作業が終わると、ユーザー名:Amethyst、パスワード:passwordのパスワードファイル password.dat が作成されます。

上記パスワードファイルにさらに別のユーザーを追加する場合は、htpasswdコマンドに -c オプションをつけずに実行すれば良いです。

% htpasswd password.dat Sapphire
New password:abcdefg
Re-type new password:abcdefg
#-- 下記はレスポンス
Adding password for user Sapphire

とすれば、さきほど作成したパスワードファイル password.dat にユーザー名:Sapphire、パスワード:abcdefgの情報が追加されます。

なお、htpasswdコマンドで作成したパスワードファイルのフォーマットは、
ユーザー名:パスワード(暗号化済)
という形式で1ユーザーにつき1行ずつ記述されるので、perlのcrypt関数等を利用して、cgiを経由して作成することもできます。
なので、telnetやSSHでのログインが許可されていないレンタルサーバー等を利用している場合も、こういうやり方をすればパスワードファイルは作成できます。

さて、パスワードファイルを作成したら、次はBasic認証をかけたいディレクトリに、以下を記述した.htaccessを設置します。

AuthUserFile    /home/amethyst/data/pass/password.dat
AuthGroupFile   /dev/null
AuthName        "Input Your Name And Password"
AuthType        Basic
<Limit GET POST HEAD>
require valid-user
</Limit>
AuthUserFile
先ほど作成したパスワードファイルのパスを指定します。
AuthGroupFile
グループファイルによる認証を行なう時に使用。
単にユーザー名とパスワードだけで認証を行なう場合は /dev/null (未定義)としておけばOK。
AuthName
ユーザー名・パスワード入力用のウィンドウに表示させるメッセージ。
スペースを含む場合はダブルクォーテーションで囲む必要がある。
2バイト文字を使用すると多分文字化けする。
AuthType
認証のタイプ。Basic認証をかける場合は Basic とする。
<Limit method>~~</Limit>
methodの部分に、認証をかけたいメソッドを指定。
GET,POST,HEADの各メソッドに対して認証をかけたい場合はGET POST HEADとする。
メソッドを指定しない場合は、<Limit>~~</Limit>は記述しなくて良いはず。
require
認証するユーザーを指定する。パスワードファイルに記述したユーザー全てに対して認証を行なう場合はvalid-userとする。
特定のユーザーのみを認証する場合は、そのユーザー名を記述する。上記の例の場合、Amethystと記述しておけば、ユーザー名Sapphireで正しいパスワードを入力しても、認証は通らない。

この.htaccessを認証をかけたいディレクトリに設置すれば、そのディレクトリ及び下位ディレクトリに対して、Basic認証が働くようになります。

関連するブログ記事
カテゴリー
.htaccess
タグ
.htaccess | Basic認証 | アクセス制限 | コマンドライン | シェル

コメント(13) | トラックバック(0)

 

Internet ArchiveのWayBack Machineは便利でありがたい存在すぎる。

あなたにとって、資料として、データベースとして、非常に有用なサイトがあるとする。
何か困ったことがあって調べたいとき、そのサイトにアクセスして答えを得ることがよくあるだろう。

そういった資料価値の高いサイトは大抵、ページ数も多いので、全ページをローカルに保存しておくというのも、ちょっと面倒で避けてしまうと思う。

ところが、そんなサイトが突然何らかの理由で閉鎖されてしまったり、アクセスできなくなってしまったら……。

そんな時に、とっても便利でありがたいのが、Internet Archive(インターネット・アーカイブ)のWayBack Machine(ウェイバック・マシン)です。

このWayBack Machine、なんと世界中のWebページを、時系列毎に保存してくれているという、とんでもなくありがたい存在なのです。
時系列毎、というのは、例えば http://xxx.yyy.com/zzz.html というページの2005年10月の状態、11月の状態、12月の状態を、それぞれ保存してくれている、という感じ。
なので、頻繁に内容が更新されるページでも、ある程度はその経緯を追うことが可能なわけです。

Google等の検索エンジンのキャッシュ機能だと、常に最新のページを保存しているので、こういった使い方はできにくいですよね。
消えちゃったページのキャッシュは、いずれ検索にヒットしなくなるので探せなくなってしまいますし。

ただ、このめちゃくちゃ便利なWayBack Machineも、立場によっては非常に厄介な存在にもなり得るわけです。
存在を抹消したい、所謂「黒歴史」的なページも延々とWeb上に存在し続けるわけですから。

僕自身、大昔にネット初心者だった頃に運営していた、とってもイタいサイトが今でもどこかに残っているのか、と思うと、恥ずかしくて時々真夜中に奇声を発したくなっちゃいます。
ビジネスとしてWebサイトを運営している場合なんかは、下手をすると真夜中の奇声どころでは済まされないデメリットになることもあるたろうということは、容易に想像できます。

一応、WayBack Machineからの削除方法(英語)もちゃんと掲載されているんですが、見ての通り、robots.txtを利用する方法です。
なので、既にドメインの契約を切った後だったり、レンタルサーバーの契約を解除した後に、ログを削除したくなった場合なんかには、どうしようもないわけですよね。

結局のところ、Webサイトを持つということは、全世界に情報を発信しているんだ、ということをしっかり自覚して、後から見ても恥ずかしくない言動を、ということになるわけですかねぇ。

まあ何にせよ、僕自身はこのWayBack Machineの存在は、とにかく非常にありがたく感じています。

以前このブログで書いたように、ちょうど前に趣味で運営していたサイトがサーバー会社から追い出された関係で、そのサイトに自分で掲載していたWeb系のTipsが消えてしまって、僕自身がとっても困っています。
もともと、自分が毎回検索とかして調べるのがめんどくさいから、自サイトでまとめていたTipsなだけに、自分へのダメージがデカいわけです。

というわけで、WayBack Machine様のお力を借りて、前のサイトで掲載していたTipsなんかを、ちょっとずつこちらに転載していこうと思います。

あくまで目的は有用な情報の保管ですからね。
決して、これでブログのネタに困った時に、適当に過去ログひっぱってくればいいから楽だー、なんて考えていませんので悪しからず。いやほんとに。まじで。うん。

ちなみに、WayBack Machineと似たようなので、ウェブ魚拓というものもありますね。
こっちは手動でページを保管するので、意図的にリアルタイムでその時のサイトの状態を保管しておきたい時用ですね。
最近だと、炎上したブログが閉鎖される前に、閉鎖後も情報の共有ができるように、とかの用途でよく使われている気がします。
「臭いものに蓋」的発想で「マズいことが起きたら削除」では駄目ってことですね。
何か問題を起こしちゃったら、ちゃんと向き合おう。誤魔化しは効きません。っていうわけですか。

関連するブログ記事
カテゴリー
インターネット・アーカイブ
タグ
Internet Archive | Wayback Machine | ウェブ魚拓 | キャッシュ

コメント(15) | トラックバック(0)

 

『うみねこのなく頃に』の主題歌に志方あきこさんとか、もう完全に同人ゲームの域を超えてるな

もうすぐ『うみねこのなく頃に』という同人ゲームが発表されます。

制作は『07th Expansion』というサークルさんで、前作『ひぐらしのなく頃に』は、そのホラー要素とミステリ要素がネット上で凄まじい話題と反響を呼び、同人ソフトであるにも関わらず、その後、漫画化・アニメ化・小説化されるわ、PS2版のゲームが発売されるわ、その他にも商業の関連商品多数という、個人の趣味で制作された作品としては正にバケモノ級の人気と影響力とコンテンツ力を誇る作品です。

僕自身もニ・三年前に友人に薦められて、その独特の絵や、テキストの随所に散りばめられた、いわゆる「萌えオタ」系のノリにちょっと抵抗を感じつつも試しにやってみて、第一章『鬼隠し編』を読了した時にはもう完全に『ひぐらし』の魅力の虜になっていました。

それこそ寝る間も惜しんで『ひぐらし』の推理に夢中になっていた程なんですが、去年の夏に発表された最終章『祭囃し編』の内容に失望してしまい(その割に、ひぐらしのコミック版は全巻揃えてたり、PS2版のゲームも買ったりしてましたが)、今年の夏に出る新作『うみねこのなく頃に』の購入は、しばらく様子見の予定でした。

ところが、昨日公開された『うみねこ』のオープニングムービーを見てみたら、なんかいきなり凄く聞き覚えのある歌声が……。

「え?まじで?」とか思いつつ、ムービーのクレジットを見たら、しっかり「志方あきこ」って書いてある。

もう本気でびっくりですよ。ええ。

志方あきこさんはプロの歌手・作曲家さんで、何年か前、まだメジャーデビューされる前に、たまたま志方さんのサイトで試聴した『ロマの娘』という超神曲を聴いて以来、大ファンなんですよ。
志方さんが作る曲のメロディラインやコーラスは、僕の大好物です。

しかしまさか同人ソフトで、avexという超メジャーな会社に所属するアーティストを起用するとは……、志方さんも数年前まではインディーズだったことを鑑みても、やっぱり凄いなぁ。
何と言うか、DSでドラクエ9が発売されるという発表を聞いた時と同種の驚きを感じました。

ひぐらしの超大ヒットぶりを見ていれば、経済的な面で言えばプロの歌手・作曲家さんを起用したこと自体には何の不思議もないんですが、個人の制作するゲームの主題歌のためにavexと交渉できるという事実が凄い。
改めて『ひぐらし』の凄さを思い知った気がします。

で、肝心の志方さん作曲の主題歌ですが、もろに僕の好みなメロディのアップテンポな曲。いいですねー。
少々、志方さんの過去の名曲『花帰葬』と構成やテンポ、コード進行とか色々と似すぎていて目新しさがないので、初めて『ロマの娘』や『花帰葬』を聴いたときのように鳥肌が立つほどではなかったのが残念はありますが、それでもやっぱり凄く良い曲。

この曲のせいで、購入は様子見のつもりだった『うみねこ』をさっきネット通販で予約してきてしまいました。
我ながらまんまとプロモーションに釣られてます。
『ひぐらし』のキャッチコピーなんかでも言われてたけど、07th Expansionの竜騎士07さんは自分の作品のプロモーションがめちゃくちゃうまいなぁ。
2chやニコニコ動画での反応を見てみても、やっぱり様子見だった人が結構購入に動いている様子。
僕と同じようなこと考えていた人が多かったのかもしれませんね。

『うみねこのなく頃に』の主題歌に志方あきこさんとか、もう完全に同人ゲームの域を超えてるなの続きを読む

関連するブログ記事
カテゴリー
ゲーム | 志方あきこ
タグ
07th Expansion | うみねこのなく頃に | ひぐらしのなく頃に | 志方あきこ | 竜騎士07

コメント(20) | トラックバック(0)

 

同一URLでPC用と携帯用ページを振り分けた際のSEO面でのデメリット(かも?)

今日は僕のクライアントさんである大阪のA社へ行ってきました。

色んな相談を受けてたんですが、その中の一つにSEOに関するちょっと興味深い内容が。
(あ、先に予防線を張っておきますが、僕はSEO専門のコンサルタントではないので、各検索エンジンのクロウラーの細かい挙動や、所謂「裏技」的なテクニックにはあまり詳しくないです)

A社さんのサイトは、独自のCMS(というか僕が独立する何年も前に作って提供したものなんですが)で運営されていて、TOPページをはじめ、ほとんどのページが、アクセス元がPCなのか携帯なのかを自動で判別して、PC用と携帯用それぞれに適したページを出力するようになっています。

で、今日頂いた相談内容と現状をわかりやすく羅列すると、

  • しばらく前(どれくらい前なのかははっきりしない)から、サイトTOPの、Yahoo!(YST)での狙ったキーワードでの検索結果表示順が極端に落ちた
  • しかも、サイトTOPページだけがYahoo!(YST)にキャッシュされていない
  • Yahoo!のカテゴリー登録(ビジネスエキスプレス)は何年も前に済ませている
  • 上記二点の影響か、Yahoo!(YST)検索結果に表示されるTOPページタイトルが、実際のTOPページのtitleタグ内に記述したものではなく、Yahoo!のカテゴリに登録されているタイトル(サービス名のみのシンプルなタイトル)で表示されている

こんな感じ。

htmlソース等にも特に問題らしき所は見当たらず、SEO専門の業者さんにも依頼して、色々と策を講じたそうなんですが、原因がわからずじまいだとのこと。

正直、僕にもさっぱり原因がわからなかったんですが、話の流れでYahoo!モバイル(携帯用サイトのYahoo!検索エンジン)を確認したところ、新事実発覚。

  • Yahoo!モバイルでは、サイトTOPの、狙ったキーワードでの検索結果表示順はかなりの高位置
  • 検索結果に表示されるTOPページタイトルも、実際のtitleタグ内に記述されたものが表示されている
  • 自動で振り分けているので当然ですが、PC用Yahoo!で評価の落ちているTOPページと、Yahoo!モバイルで高評価のTOPページは、同一URLである
  • しばらく前(どれくらい前なのかははっきりしない)に、Yahoo!モバイルにTOPページをサイト登録した(検索エンジンのロボットにクロールしてもらうためのアレです)

以上、ここまでが事実です。
以下はあくまで僕の仮説であって、信憑性に関してはかなり微妙なところです。


「もしかして、PC用のYahoo!とYahoo!モバイルでは、基本的に同じインデックスを元に検索結果を返しているのでは?」

そう仮定した上で、ある時期からPC用Yahoo!での評価が落ちたことと、Yahoo!モバイルにサイト登録をした時期が重なる可能性があることを考えると、ひとつ気になることがあるんですよね。

つまり、Yahoo!モバイルにサイト登録をしたせいで、Yahoo!のインデックスが「A社サイトのTOPページは携帯用ページである」と判断してしまったんじゃないかな、ということです。

もちろんA社サイトのTOPページは、携帯でアクセスした場合には携帯向けのページを出力するので、その判断は正しいわけですが、逆にPCでアクセスした場合にはPC向けのページを出力するので、同時にPC用ページでもあるんですよね。

ところが、PC用Yahoo!とYahoo!モバイルで同一のインデックスを参照しているせいで、「A社サイトのTOPページはPC用ページである」と「A社サイトのTOPページは携帯用ページである」の判断を両立できていないのではないだろうか? というわけです。
その結果として、Yahoo!モバイルでは上位に表示されるけど、PC用Yahoo!では下位な上にキャッシュすらされない、と。

僕自身は他に同一の事例を確認していないので、前述の通り、現段階では全然信憑性のない仮説に過ぎないんですが、PC用と携帯用を振り分けて表示する仕組みというのは、これまでもこれからも需要のある仕組みですし、何よりA社さんのためにもしっかりと検証するべきかな、と思っています。

万が一この仮説が当たっていたら、ちょっと辛いなぁ……。

関連するブログ記事
カテゴリー
SEO(検索エンジン最適化)
タグ
SEO | Yahoo! | Yahoo!モバイル | YST | モバイル

コメント(8) | トラックバック(1)

 

『おっくせんまん!(思い出は億千万)』の成り立ちには奇跡を感じる

昨年末、突然現れてあっという間に国内最大級の動画共有サイトの座を獲得した『ニコニコ動画』。

動画の上にユーザーのコメントをスクロールさせる、という画期的なインターフェイスを売りにした、この『ニコニコ動画』の魅力と問題点に関しては、書きたいことが山のようにあるんですが、まあそれは追々じっくりと書いていきたいなぁと思います。

とりあえず今日は、『ニコニコ動画』内屈指の人気動画であり、個人的に最も「ニコニコの良いところが奇跡的に組み合わさって生まれたコンテンツ」だと思っている、『おっくせんまん!(思い出は億千万)』をご紹介。
(既に相当な今更感がありますが……)

近いうちに、この『おっくせんまん!』の何が凄いのか、だらだらと書いてみるつもり。

なお、『ニコニコ動画』にアップされている動画は、同サービスにユーザー登録していないと閲覧できないので、今回は誰でも見られるYouTubeにアップされている、内容の同じ動画を掲載しておきます。

『おっくせんまん!(思い出は億千万)』の成り立ちには奇跡を感じるの続きを読む

関連するブログ記事
カテゴリー
動画共有サイト
タグ
おっくせんまん! | ニコニコ動画

コメント(0) | トラックバック(0)

 

良いレンタルサーバー業者とは、どんなのだろう?

さて。唐突にまた、このabe-tatsuya.comドメインで、一からブログを始めることにしました。

タイミング的に月初めでキリがいいとか、いつまでもこのドメインにつまらない駄文ブログを放置しておくのが気持ち悪いとか、ちょうど今日はなんかやる気満々な雰囲気だったとか、理由を挙げればキリがないんですが、最大の理由は「プライベートでブログを書いてたレンタルサーバーと、仕事で使っていたレンタルサーバーから同じ日(7/31)に出て行かないといけなくなった」から。

正直びっくりしましたよ。ええ。
まさか同日に長年愛用していたレンタルサーバー二社から、共に撤退しないといけなくなるとは……。

あ、別に悪さしたわけじゃないですよ。二社共に事情は別ですが、まあとにかく出て行かないといけなくなった、と。
で、それならいい機会だから今までドメインだけ取ってほとんど放置していたここを存分に有効活用しようかな、と。

そういうわけで今日はサーバー移転作業に数時間を費やしていたんですが(こういう時、MTみたいなCMSでサイトを構築しているとやっぱり凄まじく移行が楽だ)、そんな地道な単純作業をしながら、漠然と「今まで、趣味に仕事にとかなり色んなレンタルサーバーを使ってきたなぁ」なんてことを考えていました。

昔を振り返ってみると、2007年8月現在のレンタルサーバーの安さと機能の豊富さは異常ですね。
独立前の勤めていた頃なんかは、必死でWeb上を調べまわって「perl5が使えてPostgreSQLが使えてSSHが使えてマルチドメインに対応していてメールアカウントも沢山作れるレンタルサーバーはどこだーーーーー!」とかやってたんですが、今だと探さなくても大抵のレンタルサーバー会社はその程度は対応してますよね(SSHは微妙かな?)。
しかも値段は下手すると当時の1/5以下かも。凄いね。所謂『チープ革命』ってやつですか、これが。

そうやって、レンタルサーバー側がデフォルトで提供できる機能が豪華になってくると、やっぱりユーザー側もわがままになっていくわけで。

5年前(2002年頃)のレンタルサーバーに求めていたもの

  • perl5で書いたCGIが動く
  • PostgreSQLが使える
  • perlからPostgreSQLが使える
  • telnetかSSHが使える
  • sendmailが使える
  • cshあたりのシェルが使える
  • cronが使える
  • httpd.confか、せめて.htaccessが設定できる
  • メールアカウントを複数作れる

これだけの条件を満たしてるレンタルサーバーなんて、本当に数少なかった。
だから、数少ないそういった業者に対しては、特に機能的な面以外の多くを求めることはなかった。

現在(2007年)のレンタルサーバーに求めているもの

  • perl5.6で書いたCGIが動く
  • PHP4が動く(もちろんモジュールで)
  • MySQLかPostgreSQLが使える(できればMySQL)
  • SSHが使えてtelnetが使えない
  • sendmailが使える
  • cshあたりのシェルが使える
  • cronが使える
  • httpd.confか、せめて.htaccessが設定できる
  • SSLが使える
  • マルチドメイン対応
  • 各ドメインにサブドメインを沢山つけることができる
  • 各ドメイン毎にメールアドレスが沢山作れる
  • 各ドメイン毎にFTPアカウントを複数作れる
  • メールサーバーには使えるSPAMフィルターがついている
  • とにもかくにもMovable Typeが問題なく動く環境である
  • 信頼できる会社が運営している
  • 電話サポートつき

5年経った今では優先順位は変わって、最後のニ点が特に重要。
機能的な面では、上に挙げたものの大半は満たせているサーバー会社の方が多いんじゃないでしょうか。
だからこそ、突然夜逃げするような会社では問題外だし、「電話でのお問合せはお断りします」とか開き直ってる会社も厳しい。
(昔はそんなところでも、あれだけの機能が使えたからまあ仕方ないか、で何とか済ますことができた)

今は機能的な面ではもう差別化が難しいから、安心を売りにするか、値段の安さを売りにするか、という二極化ですよね。
中にはその両方で結構評判がいいところもありますし、逆に両方の面で評判が悪いところもありますが(笑)。

何にせよ、テスト用とかに使うサーバーじゃなければ、値段の安さよりも安心を取った方が絶対に良いですよね。
高ければ安心ってわけでもないし、有名だから安心ってわけでもないところが痛いんですけどね。
ただ、初心者さんが「値段が他より安くて手ごろだから」なんていう理由でサーバーを選ぶのだけは、絶対にやめといた方が良いと思います。間違いなく後悔することになりますから。

というわけで、良いレンタルサーバー業者とは、運営が安定していてサポートがしっかりしているところ、という馬鹿でもわかる当たり前な結論で、このブログの最初のエントリーを締めくくるのでありました。まる。

またそのうち、今までに使ってきたレンタルサーバーのレビューでも書こうかな?

関連するブログ記事
カテゴリー
レンタルサーバー
タグ
レンタルサーバー

コメント(1) | トラックバック(0)

 

このブログについて

阿部辰也

Webコンサルタントやシステムエンジニア、執筆業などをやっている、グッドホープ代表・阿部辰也のブログです。
Web技術系のTipsから仕事の話、趣味の話まで色々と。
人生は所詮生まれてから死ぬまでの壮大な暇つぶし。
だったら有意義に暇をつぶして生きましょー。

阿部辰也へのお仕事のご依頼・問合せはこちらからどうぞ。

Twitter: @t_abe
読書メーター: ID:Tatsuya

このブログのサイトマップ
このブログのはてなブックマーク数

Feed/RSS購読

タグクラウド

最近のトラックバック

阿部辰也の著書

77のキーワードで知る インターネットで稼ぐ 図解 ブログ・メルマガ・Webサイト構築の基本

77のキーワードで知る インターネットで稼ぐ 図解 ブログ・メルマガ・Webサイト構築の基本

頑張って書いたのに、出版後すぐに出版社が倒産して印税も貰えずじまいで俺涙目(笑)。

Powered by Movable Type 5.02

スポンサード リンク

はてなブックマーク



あわせて読みたい

t-abeの今読んでる本

t-abeの最近読んだ本

t-abeの今やってるゲーム

t-abeの最近やったゲーム