にしし ふぁくとりー:西村文宏 個人サイト

Presented by Nishishi via Movable Type. Last Updated: 2018/02/19. 10:39:36.

Sakura Scope (2013年06月)

ちょっと倒錯気味な、ただの日記です。(^^;)
これはやばいと思われた場合は、お早めに閲覧を中止されることをお勧め致します。

フォームへの入力チェックがリアルタイムにできるスクリプト

フォームの入力内容をリアルタイムにチェックする方法ウェブ上の入力フォームに入力した内容のチェックって、送信後に一括してエラーメッセージをずらずらと表示されるよりも、入力欄を移動した瞬間にチェックして(ミスがあれば)エラーを表示してくれる方が便利ですよね。
エラーメッセージも、ダイアログのポップアップなどではなく、入力欄の下とか端とかに軽く表示してくれる方が、操作が邪魔されなくてありがたいです。

そんなときに便利なのが、ユーザの入力内容を(ほぼ)リアルタイムに自動チェックできるスクリプト「jQuery-Validation-Engine」です。

エラーメッセージは、「バルーン」の形で入力欄の右上あたりに浮いて表示されるので、既存のレイアウトを崩さず、ユーザの操作を阻害せずに表示できます。(バルーンが設問に重なって邪魔なら、クリックすればすぐに消えます。)

必須項目への入力有無をチェックできるのはもちろん、文字数・文字種・数値チェックのほか、「チェックボックスと連動したテキスト入力欄に入力されているかどうか」のような複雑なチェックも楽々実現可能です。

この「jQuery-Validation-Engine」の設置方法や使い方をAll Aboutで解説しました。

フォームの入力内容をリアルタイムにチェックする方法(@All About ホームページ作成)

エラーメッセージは、スクリプトのソースを修正することで簡単に自分で指定できますが、元々日本語にも対応しているので、日本語表示用スクリプトを同時に読み込ませておけば、何もカスタマイズしなくても、日本語でエラーメッセージが表示できる点も良いです。
何らかの入力フォームを作る際には、ぜひ活用してみて下さいー。

FacebookとかのSNSに自サイトのURLが書かれたときに望みのサムネイル画像を表示させる「OGP」

SNSでの言及時に望みの情報や画像を出すOGPの記述方法FacebookやGoogle+などのSNSでは、投稿欄にURLを書くと、そのページの概要文やサムネイル画像が自動的に読み込まれて表示されます。これらの情報は、適当にそのページから文章や画像を抜き出して表示してくれるんですが、「OGP(Open Graph Protocol)」という記述をHTMLに含めておけば、ウェブ製作者側が指定しておくこともできます。

そんなOGPの書き方を解説した記事を、All Aboutで公開しました。

SNSでの言及時に望みの情報や画像を出すOGPの記述方法(@All About ホームページ作成)

OGPを使って望みの画像や概要文を用意しておく方が、SNSで言及された際にも「分かりやすい紹介文」やサムネイル画像が表示できるので、望ましいでしょう。特に、サムネイル画像は、(OGPを記述していないと)何も表示されないこともありますから。

OGPは、特殊な記述では全然なく、ただmeta要素を使って簡単に記述できます。お勧めです。
……とか言いつつ、うちのサイトではまだ使ってないんですけども。(^_^;)
(All About自身では、活用されています。^^;)
ぜひ試してみて下さい。

攻殻機動隊 -ARISE-

攻殻機動隊 -ARISE-攻殻機動隊 -ARISE-」の特典(右写真参照)がなんだか豪華です。^^;
もうこれをパンフだと言っていいんじゃないの? と思うような冊子には、各種インタビューのほか、マンガも1話が丸々掲載されていました。

新聞の方は、裏面がMicrosoftのタブレットSurfaceとのコラボ。
作中にSurfaceでも出てくるのかな? と思ったんですが、さすがにそれはなかったみたいですね。^^; 出てきたら、ちょっと技術的に時代が合致しませんもんね。^^;

おもしろかったです。
今回の攻殻機動隊は、4話構成。次回は11月末だそうです。
楽しみ。

ハヤテのごとく!第37巻 限定版を買ってきた。ヒナギクの香り……(^_^;)

ハヤテのごとく! 37 香る生写真つき限定版「ハヤテのごとく!」第37巻が発売されたので買ってきました。
今回も、通常版と限定版があります。どうしようかな……と思ったんですが、まあ、150円しか違わないので限定版を買ってきました。
裏面を擦ると、ヒナギクの香りがするというイラストカード付きです。(笑)

右写真の左端がコミック第37巻本体。右端にちょっとだけ見えているのは、とらのあな特典のイラストカード。中央のが、香り付きイラストカードの袋とカード(の裏面)です。
そこだけを拡大すると、下写真のような感じ。
「ここをこすって下さい」と書かれたシールが貼ってあります。たぶん、そのシールの表面に、香りがする物質が付いているんでしょうね。(カードの表面は、ヒナギクのイラストです。^^;)

ヒナギクの香るイラストカード(の袋と裏面^^;)

さて、どんな香りがするんだ……? と思って、早速擦ってみました。
(いや、擦る以前に、開封した時点で既に香りは漂ってましたけども。^^;)

たしかに擦ると香りがします。

………………。
…………。

うん。昔々、こういう味のするガムを食べたことがあるような気がする。(笑)


「ハヤテのごとく!」第37巻本編は、相変わらず、かわいおもしろかったです。(*´ヮ`)
しかしまあ、ずいぶん長く続いていますね。いつの間にか37巻……。
次巻も楽しみです。

ハヤテのごとく! 第37巻 通常版/香る生写真つき限定版(@Amazon.co.jp)

ぐにゃっと潰れるボールを買った

ジェルの入った、ぎゅっと握るとぐにゃっと潰れるボールを買いました。(^_^;)
数年前からたまーにヨドバシの店頭とかで見て、気にはなっていたのでした。^^;
ふと思い出したので、ヨドバシ.com経由で購入。

copain パッケージ copain ボール

Amazonだと「買い合わせ」対象で合計2,500円にならないと送ってくれないけど、
ヨドバシだと、1個から送料無料で送ってくれた……。(^_^;)

ぎゅっと握ると、直径が半分くらいまで潰れます。
柔らかいというわけではなく、なんとなく「柔らかい」と「硬い」の中間くらいの感じ。^^;

ロアス(LOAS)製の、WR-708Yという型番のボール。
「グラスプジェル」と書いてありましたが、パッケージを見ると、ジェルの材質はポリウレタンと書いてあります。色は、マンゴーイエロー。5色くらいあるっぽいです。

「言の葉の庭」、新宿御苑

新宿御苑(from Wikipedia)「言の葉の庭」、都会の中にある架空の大規模な公園が舞台なのかな……と思っていたら、新宿御苑がモデルなんですね。最後にそう表示されていました。新宿御苑って、こういうところなのか……。
良いですね。こういうでかい公園は。

「言の葉の庭」の影響で、雨の日を狙って新宿御苑に行ってみる人が出てきそう。ちょうど今、梅雨時期ですし。(あんまり雨は降っていませんが……。^^;)
いや、でもまあ、社会人だと「平日の雨の日」に行くのはなかなか難しいでしょうけども。(^_^;;;

関東方面の某ネット友達が、「言の葉の庭」に触発されて、新宿御苑に突撃して写真を撮ってきていました。(^_^;) 仕事が早いな……。^^;
晴れていると、ベンチは空いてないんですね……。^^;

「言の葉の庭」、靴職人になりたいという明確な目標があるのは良いですね。
学部生時代、うちの研究室に、大学に通いながらアパレル系の専門学校にも同時に通っていた強者が居たのを思い出しました。四年制大学(の後半)と専門学校の2つをよく2年間も同時に通い続けられたもんだなと感心していたんですが。彼は今頃ファッション業界で活躍してるのかな……?

言の葉の庭(@Amazon.co.jp)

「Monochrome Myst (モノクローム・ミスト)」の新刊が半年前に……

Monochrome Myst (モノクローム・ミスト)椎名優さんがお描きになられている「Monochrome Myst(モノクローム・ミスト)」の続刊を非常に楽しみにしています。
「まだかなー、そろそろ出てもいい頃じゃないかなー?」とふと思ったので調べてみたところ、とっくに今年の1月に発売されていたのだと知りました……!(爆)
半年前かッ!(^_^;;;

連載している雑誌が隔月刊ということもあって、そんなに早くは新刊は出ないだろう……と思っていたためか(実際に第1巻から第2巻まで1年半ほど空いているわけですが)、しっかりとはアンテナを張れていなかったようでした。(^_^;;;
連載雑誌は昨年末で休刊になってしまって、その後は、版元のウェブ上で連載されていたんですね。

というわけで、「Monochrome Myst」第2巻を早速、購入!
早速、読了!
おもしろいです。絵が美し可愛いです。(*´ヮ`)

作者の椎名優さんは、小説の表紙絵・挿絵を多数お描きになっています。
この第2巻を待っている間に出た冊数も結構ある気がします。^^;
昔々から、椎名優さんの表紙絵に惹かれて手に取った本はたくさんありました。

※数日前に外伝が出ていたことに気づいたと書いた「ユーフォリ・テクニカ」の挿絵も、椎名優さんでした。(残念ながら外伝に挿絵はありませんでしたが。^^;)

「Monochrome Myst」第2巻は続きの展開が気になるところで終わっているので、第3巻も非常に楽しみです。発売は……あと1年後くらいかな?(^_^;)

Monochrome Myst (モノクローム・ミスト)(@Amazon.co.jp)

ファイル名に半角スペースを含むファイルを検索する方法

Windows上でファイルを検索する際、「任意の文字列」がファイル名に含まれたファイルを探したい場合なら、ただ「その文字列」を入力して検索すれば良いだけです。
しかし、ファイル名に「半角スペース」を含むファイルを探したい場合にはちょっと困ります。

なぜなら、「半角スペース」は、キーワードの区切り文字として利用されるため、「半角スペース」を直接検索語として入力しても、検索語だとは見なされないからです。

そんなときは、引用符とワイルドカードを使って、

"* *"

という検索語にすると、うまくいく……と思ったんですが、
Windows上のエクスプローラ(マイコンピュータ)の検索窓を使った検索の場合、対象フォルダのインデックスが作成されているかどうかで結果が異なるっぽいですね。

下図は、

  • 1枚目が、インデックス作成が済んでいるフォルダで検索した結果です。ファイル名に「半角スペース」文字を含むファイルの検索ができています。
  • 2枚目が、インデックス作成が済んでいないフォルダで検索した結果です。半角スペースを含むファイルも含まないファイルも、すべてのファイルが該当してしまっています。

半角スペース記号を含むファイル名をエクスプローラ上で検索した結果 インデックスが作成されていないと、半角スペース文字を含むファイルも含まないファイルもすべてが該当してしまう?

コマンドプロンプト上で、ファイル名に半角スペースを含むファイルを検索

Windowsのエクスプローラ上では、上記のようにあんまりうまくいかないので、コマンドプロンプト上で、dirコマンドを使って実行してみました。
すると、こちらではうまくいきました。

コマンドプロンプトで、先にカレントディレクトリを「検索対象のディレクトリ(フォルダ)」に移動してから、

dir "* *"

のように打つと、半角スペース文字をファイル名に含むファイルだけがリストアップされてきます。
下図は、

  • 1枚目が、「dir」とだけ打った結果です。(=すべてのファイルが表示されます。)
  • 2枚目が、「dir "* *"」と打った結果です。(=ファイル名に半角スペース文字が含まれるファイルだけが表示されます。)

dirコマンドを使って、ディレクトリ内の全ファイルを表示させたところ。 dirコマンドを使って、ファイル名に半角スペース文字が含まれるファイルだけを表示させたところ。

このコマンドプロンプト上では、インデックス作成の有無は関係なく、うまく検索できているような気がします。

サブフォルダも含めて、すべての階層から半角スペース文字を含むファイルを探す

ちなみに、下記のように「/s」オプションを加えると、サブディレクトリも含むすべての階層を対象にして、一気に検索できます。

dir "* *" /s

下図は、Cドライブのルートディレクトリ上から、「dir "* *" /s」と打ってみたところです。
1枚目がWindows 7での実行例、2枚目がWindows XPでの実行例です。
どちらも、うまく検索できています。

すべてのフォルダから、ファイル名(またはフォルダ名)に半角スペース文字を含むものを検索(Windows 7) すべてのフォルダから、ファイル名(またはフォルダ名)に半角スペース文字を含むものを検索(Windows XP)

コマンドプロンプト上からファイルを検索できても、そのあと、それらのファイルに対して何らかの操作をしたい場合には、エクスプローラ上ほど便利にはいきません。
コマンドプロンプト上に出力される内容は、「>」記号を使ってファイルにリダイレクトできるので、

dir "* *" /s > FileList.txt

上記のような感じで、dirコマンドによるリストアップ結果をテキストファイルに出力してやれば、まあ、多少は便利に使える気がします。^^;

……もっと、何かうまい方法がありますかね?(^_^;;;
半角スペース文字をファイル名に含むファイルだけを検索する方法……。

ファイルの検索にも正規表現が使えれば、もっといろんな検索がスマートにいくのにな……と思うんですけどもね……。なんで、Microsoftは、正規表現を使って検索する機能を用意しないのかな……?

Echofonが「410 Gone」というエラーを吐いてTwitterのTLを取得できなくなった

朝、TwitterクライアントのEchofonを起動したら、下図のような「Can't login to Twitter. (410 Gone (account_verify_credentials))」というエラーが出て、最新のツイートを一切読み込めなくなっていました。

Can't login to Twitter. (410 Gone (account_verify_credentials))

どうやら、今朝でTwitter API 1.0の提供が終わってしまったんですね。
以前から、そうなると予告はされていたものの、ずっと使えていたので不思議だったんですが(^_^;)、とうとう終わってしまったようです。

Twitter API 1.0の廃止が完了…サード開発者にとって厳しい状況に(@ガジェット速報)

新しいTwitter API 1.1に非対応のアプリは、今後はツイートの取得が一切できなくなったとのこと。
とうとうこの日が来てしまったかー。
Echoron for Windowsや、Echofon for Firefoxは、これ以上のアップグレードはしないとアナウンスされていたので、使用期限が来たということになります。

うーむ。
まあ、最近は、Twitter公式ウェブも使い勝手が良くなっているので、ブラウザだけでアクセスするようにしても良いんですけどね。
代替アプリは探さずに、しばらくはTwitterウェブだけを使っていようかな……。

Echofonは、ログインすると、とりあえず最新の200件弱くらいのTLを取ってきて、古いツイートから順に読めたので、その辺が便利だったんですけども。(^_^;;;

入力フォームの送信で稀に「403 Forbidden」エラーになる現象はWAFが原因だった

ウェブ上の入力フォームから送信したときに、「500 Internal Server Error」ではなく「403 Forbidden」になる現象に遭遇しました。
必ずなるわけではなく、フォームに入力した内容によって、正常に送信できたり、Forbiddenエラーになったりします。
試行錯誤の結果、ウェブサーバ側に導入されたWAF(ウェブアプリケーション・ファイアーウオール)が原因だということが分かったんですが。^^;

入力フォームから短い文字列を送信しても、403 Forbiddenエラーになる

それほど特殊な文字列を入力しているわけでは全然なく、なんと「A and B in box (white)」のような文字列だけでもエラーになります。
もっと短い文字列でもエラーになります。例えば、

  • x and y in. (z)
  • x and y in.()
  • x and -in. (2)
  • x and +in()

のいずれでもエラーになります。(^_^;;;
たったこれだけの記述がプレーンテキストで含まれているだけで、CGIが実行されずに403 Forbiddenになるのがすごく謎でした。

単純に「and」や「in」などの文字列が含まれているだけで無条件にエラーになるわけではありません。例えば、以下の文字列ではエラーにはならずに正常に送信できました。

  • and -in. (2)  ←「and」の前に空白がない
  • and-in. (2)  ←「and」と「in」の間に空白がない
  • and -in. 2)  ←丸括弧が対になっていない
  • rand -in()  ←英単語「and」ではない(rand)
  • and in()  ←「and」と「in」の間に『1つの空白』しかない
  • and a in[]  ←丸括弧ではなく角括弧

入力フォームから送信して、403 Forbiddenエラーになる条件

いろいろ試行錯誤して調べたところ、以下の3条件に合致する場合に、Forbiddenエラーになることが分かりました。(後から追加の情報を頂いたところ、上記の条件以外でも同エラーが発生するパターンがあるようでしたが。)

  • 条件1. 英単語「and」の前後に空白がある。
  • 条件2. 条件1の後に、「空白」と「任意の文字」を挟んだ上で英単語「in」が出現する。
  • 条件3. 条件1・2の後に、丸括弧 ( ) が出現する。

なんだこれ……。(^_^;;;
CGI側に何らかの問題があるのかな……と思って結構悩みました。^^;;;

何にしても、英単語「and」と「in」と丸カッコなんて、たとえ英語サイトでなかったとしても、使われる頻度は高い文字列です。
これらが含まれているだけで送信エラーになってしまうと、入力フォームとして役に立たなくなってしまいます。

WAF(ウェブアプリケーション・ファイアーウオール)が原因だった

もしCGI側(Perlソースの中身)に問題があるのなら、「403 Forbidden」エラーではなく、「500 Internal Server Error」になるはずですよね。
なので、もしかしてサーバ側のセキュリティ関係に何か問題があるんじゃないかな? と思ったのでした。
試しに、私が個人で利用しているサーバ上に同CGIを置いてみたところ、送信エラーは特に発生しませんでした。

どうも、レンタルサーバによっては、ウェブ上での不正な通信をブロックする「WAF(ウェブアプリケーション・ファイアーウオール)」なるツールがデフォルトで有効になっているみたいですね。
サーバのコントロールパネルから、WAFの設定を「無効」にするよう設定をお願いしたところ、問題の403 Forbiddenエラーは出なくなりました!(^_^;;;

入力フォームからの送信で403 Forbiddenエラーになるならファイアーウオールを疑え!(^_^;)

というわけで、CGIを使って何らかの文字列をサーバに送信する仕組みを用意しているときに、文字列によって送信できたり送信できなかったりする場合で、サーバが「403 Forbidden」エラーを吐く場合は、WAF(ウェブアプリケーション・ファイアーウオール)の影響を確認してみるのが良さそうです。

うーむ、そんなことがあるんですねえ……。
しかしこれ、今回検証した条件でエラーを吐くなら、明らかに過剰検出じゃないか……?
WAFは、CGIとかのプログラムをウェブ上で使わないことが前提みたいな感じなんだろうか……?(^_^;;;

※注:上記の話のレンタルサーバは、私が契約しているサーバではありません。(つまり、さくらインターネットの話ではありません。別の会社です。)

「ユーフォリ・テクニカ」の外伝短編小説が電子書籍で出てた

「ユーフォリ・テクニカ」の外伝が電子書籍として販売されていたことに今頃気付きました。昨年末、2012年12月19日に出ていたらしいです。
短編で100円。雑誌か何かに掲載されていた分なんですかね?
1冊の書籍にまとまらない短い分量でも販売可能なのは電子書籍の利点ですねえ。

黒猫非猫 ユーフォリ・テクニカ外伝 Kindle版 販売ページ 黒猫非猫 ユーフォリ・テクニカ外伝 Kindle版 購入直後

上図は、iPod touch(iOS6)のSafari経由で、「ユーフォリ・テクニカ」外伝の販売ページを表示させたところと、購入した直後の画面。
Safari上で「今すぐ購入」ボタンを押した瞬間に購入が決定されるんですね……。確認画面は一切なく、ボタンを押したらすぐに右側の画面になりました。^^;;;

んで、SafariからKindle for iPod touchアプリに移動すると、購入タイトルが表示されていて、ダウンロードが開始されると。(下図参照)
Kindleアプリ上では直接購入できず、ブラウザを介する必要があるのは、Apple側の制約でしたっけ?

黒猫非猫 ユーフォリ・テクニカ外伝 in Kindle for iPod touch Kindle for iPod touch最初の電子書籍に、「黒猫非猫 ユーフォリ・テクニカ外伝」

というわけで、早速、ユーフォリ・テクニカ外伝「黒猫非猫」を買いました。
Kindle for iPod touchに入れた電子書籍第1号です。(^_^;)
最初のページを表示させたところが下図。
どれくらい読み進んだかを示すバーは、ちゃんと右端から左端に向かって進むんですね。(上下に表示されているタイトルやコントロールバーは、タップすると消えます。)

「黒猫非猫 ユーフォリ・テクニカ外伝」電子書籍版表紙

オリジナルの(最初に出た書籍の)「ユーフォリ・テクニカ 王立技術院物語」は、第1巻しか発売されていないのですけども、かなり気に入っていた話なので、短編(外伝)が新たに読めるのは嬉しいです。
20%くらい読了しました。おもしろいです。
一気に読了してしまうのがもったいないので、少しずつ読み進めます。(^_^;;;

なんでKindleでしか販売されていないのかな……と思ったんですが、別にKindle専売というわけではなかったんですね。^^; ググったところ、他の端末向けの版も出てきました。しかし、値段が異なります。^^; Appleはプラットフォーム側の取り分が大きいのかな……?
紀伊國屋だと105円iTunesだと150円
Amazonの100円が最も安いです。もしかして、Amazonの電子書籍って、消費税は払ってない?(^_^;;;

外伝■黒猫非猫 ユーフォリ・テクニカ外伝 (C★NOVELS Mini) [Kindle版] 定金伸治 (著)(@Amazon.co.jp)
本編■ユーフォリ・テクニカ 王立技術院物語 (C・NOVELSファンタジア) [Kindle版] 定金伸治 (著), 椎名 優 (イラスト)(@Amazon.co.jp)

「ぼくらのよあけ」

ぼくらのよあけ非常に遅ればせながら、「ぼくらのよあけ」第2巻を読了。(数日前の話ですが。^^;)
実はこれ、発売された直後あたりには購入していたのでした。
発売日は、2011年11月末あたり。(笑)
1年半くらい前です。^^;;;

その頃、TwitterのTLで、この「ぼくらのよあけ」が話題でして、ちょっと気になったので第1巻を買って読んでみました。(それが右写真の左側)
そしたら、とてもおもしろかったので、当時発売されたばかりの第2巻も買ったのでした。
……が、まあ、いろいろ同時に買った本も(たぶん)たくさんあり、たまたま積ん読棚の奥深くに紛れてしまったのか、最近になってようやく発掘されてきた……ということで。(^_^;;;

この「ぼくらのよあけ」第2巻よりも、さらに後に出た同作者の新作「アリスと蔵六」第1巻の方を先に読了していました。^^; そちらも、ほぼ発売(今年の3月)と同時に購入して、数週間以内くらいには読んだんだった気がします。

というわけで、「ぼくらのよあけ」全2巻読了です。
すごく良かったです。
話題になったのも納得ですね!(1年半も前ですが。^^;;;)

2038年が舞台。小学生たちが、団地の屋上に眠っていた宇宙船の人工知能を発見して、なんとか宇宙に帰してあげようとする話です。オートボットのナナコがかわいいです。^^;

ぼくらのよあけ(@Amazon.co.jp)

スズログ完結

スズログ遅ればせながら、先月買った「スズログ」第3巻を読了。
完結しちゃった。
もっと続いて欲しかったなー。
スペースコロニーに住む少女らが電脳空間にハッキングして地球の遺産を発掘する話。
おもしろかったです。

もっと続いて欲しかったなーというのは、「猫神やおよろず」完結のときも思いましたけども。^^; キャラクターがかわいいです。

「スズログ」は、第2巻の初版に乱丁があるという、珍しい本でした。^^;
53ページの後に、76~79ページがいきなり入り込んでいるという……。
たしかに最初に読んだとき、「あれ?」とは思ったんですよね。読んだときは、「突然回想シーンになったのかな?」くらいにしか思わなかったんですけども。(^_^;;;
まさか乱丁だったとは。
電撃コミックス 『スズログ -suzuro’s logfile-(2)』 乱丁についてのお詫びとお知らせ(@AMW)

「スズログ」は完結しちゃいましたが、同作者が少年チャンピオンで連載している「ダーウィンズゲーム」の第1巻が、今週末にも発売されるらしい。Amazonで表紙を見ると、今までのすごく可愛い系とは、なんかずいぶんと絵柄の雰囲気が異なります。
楽しみです。

スズログ(@Amazon.co.jp)

「暦物語」が厚い!

暦物語・憑物語(西尾維新)厚いッ!^^;
過去のシリーズでは、もしかして最も厚いんじゃないかな……? と思えるくらい分厚いです……と思ったんだけど、最初の「化物語」も結構分厚かったかな。^^; 正確には比較していませんけども。
右写真の通り、少なくとも前作の「憑物語」と比べると、厚さが際立ちます。
これ、1日で読めるかな……?(^_^;;;

講談社BOXは、箱に入っているから自立させやすくて、背表紙を写真に撮りやすいですね。^^;

化物語」から始まった物語シリーズも、いつの間にか14冊。
最初の「化物語」って、2006年に出ていたんですねえ。
いつの間に、こんなに経ったんだ……。(^_^;;;

「化物語」(上下)→「傷物語」→「偽物語」(上下)→「猫物語」(黒白)→「傾物語」→「花物語」→「囮物語」→「鬼物語」→「恋物語」→「憑物語」→「暦物語」

そろそろ完結しちゃうみたいですね。
あと2冊?

さくらインターネット上のデータベースをMySQL4.0から5.5へ移行する際の試行錯誤の結果(^_^;)

phpMyAdminさくらインターネットのレンタルサーバでは、データベースとしてMySQLサーバが用意されています。
今、データベースを新規作成する際に利用できるバージョンは、MySQL 5.5なんですけども、MySQL 4.0が提供されていた頃から利用しているユーザは、4.0も使えます。
ただ、MySQL4.0利用者がMySQL5.5を利用するためには、4.0で作成したデータベースを削除する必要があります。

私は、サーバを2つ契約しているので、MySQL4.0と5.5の両方を使えていたんですが。(^_^;)
昔々にMySQL4.0を使って構築したツールを5.5へ移行させるのも面倒だったので、そのまま4.0を使い続けていたんですけども、さすがにメインサイトで古い4.0を使い続けるのはどうなの……と思ったので、すべて5.5へ移行することにしました。

MySQL4.0を5.5へ移行させるにあたっては、ネット上にもたくさん情報があるし、たぶんサクっと済むんじゃないかな……と思って取りかかったんですが、予想以上につまずいて時間が掛かってしまいました。(^_^;;;
というわけで、試行錯誤の結果、分かった手順をまとめずには居られなかったので、以下に記します。(笑)

まとめると、それほど複雑なことは何もないんですけども。^^;
原因が分からないトラブルは、試行錯誤に時間が掛かって仕方ないですね……。

MySQL4.0から5.5へ移行させる大まかな手順

以下は、Movable Typeで利用するMySQL4.0をMySQL5.5にする場合の手順です。
Movable Type以外の場合でも手順は同じです。(手順6だけはMovable Type固有の設定ですから不要ですが。)

私がどっぷりハマっちゃったのは、上記の(4)~(6)の部分です。(^_^;)
なお、ここでは、すべての文字コードにUTF-8を使っていることを前提にしています。

(1) MySQL 4.0 側のデータベースをSQLファイルの形でエクスポートする

さくらインターネットのコントロールパネルから、phpMyAdminにアクセスして、すべてのデータベースをエクスポートします。
だいたい以下の手順です。

  1. phpMyAdminのログイン画面で、文字コードの指定に「UTF-8」を選択した状態でログイン。
  2. メニューから「エクスポート」を選択。
  3. 「構造」欄の中にある「DROP TABLEを追加」項目と「IF NOT EXISTSを追加」項目にチェックを入れる。
  4. 「ファイルに保存する」項目にチェックを入れる(圧縮は「なし」を選択)。
  5. 「実行」ボタンをクリックする。

以上で、「 mysql16.db.sakura.ne.jp.sql 」のような感じのファイル名(拡張子は .sql )でデータベースのバックアップ(SQLファイル)がダウンロードできます。
ファイルの中身は、テキストファイルです。
文字コードは、UTF-8(BOMなし)になっているはずです。

※この手順では、以下のサイトを参考にしました。
MySQLを4から5へ」(@HashiMのたわごと(?))

(2) MySQL 4.0 のデータベースを削除する

間違いなくエクスポートできたら、さくらインターネットのコントロールパネル上から、MySQL 4.0のデータベースを削除します。
一度削除すると、決して元には戻せませんので、エクスポートがちゃんとできていることを確認した上で、覚悟を決めて削除して下さい。(^_^;)

(3) MySQL 5.5 のデータベースを新規に作成する

次に、MySQL5.5で新規にデータベースを作成します。
MySQL4.0では、データベース名はユーザ名そのままでした。
MySQL5.5では、データベースを20個作成可能(スタンダードコースの場合)なので、データベース名は「ユーザ名」の後に任意の文字列を加えられるようになっています。
Movable Typeで使うなら、例えば「mt」を加えて、「 username_mt 」のようなデータベース名にすれば良いでしょう。(ユーザ名の部分は変更できません)

(4) SQLファイルの中身をMySQL5.5の構文に合致するよう修正する

さて、現状でローカルに保存したSQLファイル( mysql16.db.sakura.ne.jp.sql )は、MySQL 4.0 の構文で記述されています。
そのままでは、Syntax Error になってしまって、MySQL 5.5にはインポートできません。
そこで、テキストエディタを使ってSQLファイルの中身を修正する必要があります。
ここで、ずいぶんとハマりました。(^_^;;;

修正する箇所は、以下の3種類です。

aは1箇所しかありませんが、bやcは複数回登場します。それらすべてを一括して修正します。

■a. 先頭付近の CREATE DATABASE と USE 行を削除

SQLファイルの先頭付近に、以下の2行があります。

CREATE DATABASE `ユーザ名`;
USE ユーザ名;

この2行は、MySQL4.0側で使っていたデータベース名になっています。
MySQL4.0で使っていたデータベース名は「ユーザ名」そのままです。
しかし、さくらインターネット側の仕様変更によって、MySQL5.5でのデータベース名は「ユーザ名+_+任意の文字列」という形になるので、同じ名称ではデータベースを作れません。
そもそも、新しいデータベースは、さくらインターネットのコントロールパネル上で作成するので、SQLファイルの中にその記述を含める必要はありません。
なので、この2行は削除しておきます。

削除するのが不安なら、とりあえず行頭に「--」を加えて、以下のようにコメントアウトしていても構わないでしょう。

-- CREATE DATABASE `ユーザ名`;
-- USE ユーザ名;

■b. 「TYPE=」を「ENGINE=」に修正

SQLファイルの途中に、何度も以下のような記述が出てきます。

TYPE=MyISAM

この記述をすべて、

ENGINE=MyISAM

に変更します。

SQLファイル中には、「TYPE=MyISAM AUTO_INCREMENT=2」などのように、「TYPE=」という記述が複数回登場します。
しかし、MySQL5.5では「TYPE」は使えないので、すべて一括して「ENGINE=」に修正します。
テキストエディタの一括置換機能を使って修正してしまえば良いと思います。

※この手順では、以下のサイトを参考にしました。
MySQLバージョン4.x以前からエクスポートしたsqlファイルはTYPE = MyISAM を ENGINE = MyISAM に変更する」(@きほんのき)

■c. 「timestamp(14)」を「timestamp」に修正

このtimestampについては、特に言及しているサイトを見かけなかったんですけども、必ずしも問題になるわけではないんでしょうかね……?
私はこの修正点に気づくまでにずいぶんと時間を掛けてしまいました。(^_^;;;
SQLファイルの途中に、何度か以下のような記述が出てきます。

timestamp(14) NOT NULL

この記述に含まれる「(14)」の部分を削除して、すべて、

timestamp NOT NULL

のように変更します。

MySQL5.5では、このtimestampの仕様が変更されており、「timestamp(14)」という記述のままだとインポートできません。
括弧と数値を削除して、ただの「timestamp」に修正します。

※この手順では、以下のサイトを参考にしました。
MySQLのデータインポートでエラー」(@Yahoo!知恵袋)
MySQL Bugs: #41510: timestamp(14) fails in table create (TikiWiki)」(@MySQL Developer Zone)

(5) SQLファイルをデータベースにインポートする

修正したSQLファイルを、MySQL5.5で作成した新規データベースにインポートします。
手順は以下の通り。

  1. phpMyAdminにログイン(※)
  2. 左側に表示されているデータベース一覧から、インポート先のデータベースをクリック
  3. 右側の上部に表示されているメニューから「インポート」をクリック
  4. インポートするファイルを選択
  5. 右下の「実行する」ボタンをクリック

※このとき、phpMyAdminのトップ画面からいきなり「インポート」を選択してはいけません。先に、左側のメニューから、作成済みのデータベース名を選択しておく必要があります。

ここで、SQLファイルの中身に何らかの問題があると、

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '~' at line XX

のようなシンタックスエラーメッセージが出てきます。
私も何度もハマりました。(^_^;;;
とりあえず、手順(4)でちゃんと修正できていれば、問題はないはずです。
それでもこのエラーが出るようなら、他に何らかの問題があるのでしょう……。

エラーメッセージに書かれた「near」の後に、問題のある箇所を示してくれています。
私が今回試行錯誤したところによると、ここでの指摘箇所の『直前』に何らかの問題があると考えて良い気がしました。
このメッセージ内に引用されている内容ばっかり注目していると気が付かないことがあるので注意した方が良いと思います。(^_^;;;

(6) Movable Type の mt-config.cgi の中身を修正する

最後に、Movable Type の設定ファイルであるmt-config.cgiの中身を、新しいサーバ用に修正します。

ObjectDriver DBI::mysql
Database データベース名
DBUser ユーザ名
DBPassword パスワード
DBHost mysql***.db.sakura.ne.jp

しかしながら、これだけの修正だと、私の場合は、Movable Type上で、日本語文字がことごとく「????」のように文字化けしてしまいました。
私は、Movable TypeでもUTF-8を使っていましたし、データベースもUTF-8に設定しましたし、出力したSQLファイルもUTF-8を指定しましたし、文字化けするような要因がないんですけども、なぜか文字化けしました。^^;;;
で、いろいろ情報を探したところ、mt-config.cgiの最後に、以下の1行を記述することで解決できました。

SQLSetNames 1

これは、DBI::mysqlでMySQLサーバに接続するときに、クライアント(CMSツール)側の文字コードを明示するオプションです。
こいつを加えてやることで、日本語文字も正しく表示されるようになりました。

※この手順では、以下のサイトを参考にしました。
Movable Type + MySQL 4.1 を組み合わせると日本語が文字化けする不具合/障害の解決方法」(@iandeth.)

というわけで、以上で、めでたし、めでたし……。
めちゃくちゃ時間が掛かってしまいました。(^_^;;;

夏至の月/物理的にサーバを分けた

ハヤテ日めくりカレンダー6月もしかして、6月……?

2013年上半期の「ハヤテのごとく!」日めくりカレンダーも、ずいぶんと薄くなってきました……。
残り1ヶ月分です。
いつの間に、こんなに日が経ったんだ……。(^_^;;;

6月と言えば、夏至の月ですね。
昼間が最も長くなる日のある月。
そういえば、19時くらいでもそこそこ明るいですもんねえ。
夏至の日は、年によって6月21日だったり6月22日だったりしますが、今年(2013年)は、6月21日(金)のようです。

物理的にサーバを分けた

夏至とは何も関係ないんですが、このサイトを構成するドメインを分けて、物理的にサーバを1つ追加しました。
今年の頭から、時間を確保できたときに(だけ)ちょくちょく進めているリニューアルの一環です。

このサイトは、レンタルサーバ1つに www.nishishi.com というドメインを割り当てて運営していたんですが、ちょっとサーバ面で都合があって、サーバをもう1つ追加して、新しく tips.nishishi.com というサブドメインを用意しました。

サブドメインが必要だったわけではなく、物理的にサーバを分ける必要があったので、ドメインも分けざるを得なかったんですが。(^_^;)

サーバそのものは、同じレンタルサーバ会社で以前から2つ契約していました。主に他のサイト用に使っていたものですが。なので、新たに契約したわけではありません。
それぞれディスクスペースは30GBあるので、2契約で合計60GB。(^_^;;;
ウェブサーバとしては十分過ぎる量です。容量の大半が余ってます。(^_^;;;

2007年以来さっぱり更新していない「スタイルシートTIPS」というコーナーがあるんですが(^_^;)、そこだけWordPressを使って構築していました。
まずはこいつを、tips.nishishi.com 側に移動。

従来のURL http://www.nishishi.com/css/~ でアクセスされた場合には、
新しいURL http://tips.nishishi.com/css/~ へ全てリダイレクトするようにしてあります。
同じファイル名で各ページを生成するようにしてあるので、検索サイトからのアクセスも取りこぼしはないはず……。

Movable Typeのように静的にファイルを出力するCMSであれば、ツールやデータベースを一時的に削除しても特に問題ないんですが、WordPressは動的にファイルを生成するので、ツールやデータベースを削除すると、ページ自体を閲覧できなくなっちゃうんですよね。
なので、リニューアルの過程で移動させる必要があるのでした。^^;;;

※リニューアル作業自体を短い時間で済ませられるなら、一時的にアクセス不能にするだけでも良かったんですが。そんなに連続して長い作業時間を確保はできそうになかったので、移転先を用意しました。一時的な移転にするのか、もうずっと移転したままにするのかは、今のところ考えていません。^^;

物理的にサーバを分けちゃうと、wwwサーバ側からtipsサーバ内のファイルの更新日時をSSIでは取りに行けなかったり、両ドメイン間でCookieやWeb Storageを共有できなかったり、若干の問題がありますが……。
その辺をどうするかは未解決のまま。(どうしても気になるようなら、リニューアルが完全に済んだ時点で、元の単一ドメインに戻すという手もありますが……。)

まあ、そういう細かいところよりも、全体のリニューアルを先に進めたい……。^^;

2013年06月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            

他の月

--- 当サイト内を検索 ---