【備忘】:KP41エラーが出たときの対策

KP41エラーが出て困っている人がいるという噂を聞いたので、昔どこかの掲示板のためにつくったテンプレと合わせて備忘メモ。

まず、世の中で言われているような『KP41病』などと言うものはないので注意。一般的な対策としてメモリの電圧を盛るとか、PCの電源を交換するとか言われているが、いずれも結局おまじないでしかない。
何故か、あたかも「KP41と言う原因不明のエラーを吐いて止まる事象がある」と誤解されているが、「KP41と言うのは前回のOSシャットダウン時に正常な手順で完了できなかった」と言うのが正しく(と言うか、イベントビューアのKP41の詳細にはこう書いてあるよね?)、言い換えると「KP41は前回、BSoD(Blue Screen of Dead、つまり青画面)等エラーを吐いてOSが止まった」ことを示しているに過ぎない。ので、大事なのは「KP41」と言う事象にとらわれるのではなく、「BSoDの原因が何なのか?」と言うことなのである。

と言うことで、問題解決の正しい手順は(1). BSoDが発生した原因を調査する、(2). 原因に対して対策を行う、である。で、困るのがBSoDの原因の調査方法になる。
一番確実なのは青画面が出てる真っ最中にSTOPコードが表示されているのでそのコードをメモしておくことなのだけど、まあ普通の人は青画面が出ると焦ってしまうし、青画面のメッセージは英語のメッセージなので混乱して、正しくSTOPコードを記録しておくことができない。
だけど焦ることはない。過去のBSoDメッセージはメモリダンプと言う形でOSの中に保存されているので(エラー状態の中なので、稀に保存されない場合もあるが)その過去のメモリダンプを解析してBSoDのSTOPコードを調べればよい。『メモリダンプの解析』とか言うと、16進のバイナリを解読しなきゃいけないのかと焦ってしまうかもしれないが、そんな心配はないのでご安心。Windows純正でメモリダンプを解析してくれる『Debugging Tools for Windows』と言うアプリが配布されているので、手順に従ってアプリをパソコンにインストールし、メッセージを冷静に読み取ればいい。

Debugging Tools for Windowsのインストール、およびSTOPコードの出し方に関しては、以下に非常に丁寧にインストール方法が書かれているので省略。
実際には、Debugging Tools for WindowsのうちWinDbg.exe(32bit版か64bit版、自分のPCに合わせて選択しましょう)をインストールすればよい。

  ■クラッシュダンプ解析のはじめの一歩 at SE の雑記

  ■メモリダンプを解析する

と言うことで手順を軽く抜粋していくと、
(1). Microsoftが無償公開しているDebugging Tools for Windowsをインストールする。
(2). フォルダc:\websymbolsを作る。
(3). WinDbg.exeを起動する。
(4). メニューの[File ]-[Symbol File Path]を選ぶ。
(5). 入力欄に下記の文字列を書いてOKを押す。
   SRV*c:\websymbols*http://msdl.microsoft.com/download/symbols
(6). 調査したいダンプファイルをWinDbgのウインドウにドラッグ&ドロップする。
(7). !analyze -vコマンドを実行する。
(8). ウインドウに表示された内容から、原因を究明する。
(9). まずはバグチェック文字列(STOP CODE、BUGCHECK_STR:などとも)と呼ばれる文字列を探す。
   0x00000nnn とか0xnnnと書かれてる文字列(16進数の数字)になるので、その文字列と同じ数字を以下のページで探す。
   STOPエラー (全てのコード : 2015年版)
(10). または、ダンプファイルから原因のドライバー(IMAGE_NAME:)を探してもよい。これはBSODを引き起こしたアプリないしドライバになる。
   よく見る症例としては、nvlddmkm.sysなどnvで始まる文字列の時はビデオドライバ(nVidia)が原因。
   また、atapi.sysだったら繋いでるSSDやHDDの異常になる。などなど、その他の場合も地道にドライバ名を検索して同じ症例を探せばよい。
(11). 上記の手順を踏んでもまだ解決しない場合、初めて「おまじない」の登場になる。
・特定の操作(特定のアプリを起動)を行った際限定でBSODになるなら
  →ドライバ含むソフトウェア要因の可能性が高いのでBSODが発生し出した前後のシステム変更を見直し、
  心当たりがあればその対処(アプリやドライバのアンインストール、アップデート)を行う
・BSODの発生に一意性がなく「不定期に」固まったり落ちたりする
  →ハードウェアの故障や相性の可能性が高いので、メモリやCPUの電圧を盛っていればそれを解除(OCなども)。
  メモリを複数枚搭載している場合は1本だけにして問題なければ2本、3本と徐々に追加して切り分けを行う。
・その他、地道に丹念に調べる時の目安
  →メモリを疑うなら、とりあえずMemtest86+を回す
  複数本メモリを差してるなら、一本ずつ差して様子を見たり、差す場所を交換したりしてみよう
  →ビデオカードを疑う時は、まずドライバのバージョンを変えよう
  ビデオドライバだけでなく、Flashのバージョン、ブラウザのバージョンも変えてみよう
  最新のバージョンだけでなく古いドライバも試してみよう
  古いドライバがうまく消えない時もあるので、ビデオドライバの完全アンインストールできるツールを試すのもよい
  →HDDやSSDを疑う時は、chkdskを実行しよう(ただしデータ消失のリスクがあるのでバックアップを優先しよう)
  CrystalDiskInfo等でS.M.A.R.T.情報の代替不能セクタ等も調べた方がいい
  →USBなどで付けている周辺機器が悪いと言うこともよくあるので、気付いた周辺機器は外そう
  特に最近新しい機器をつけた思い当たりがあるなら、それは絶対はずした方がいい
  →夏場になって異常が増えたなら熱暴走を疑おう(PCの中身あけて特にファン周りを重点的に掃除しよう)
  →その他、インストールされているアプリが原因の場合も稀にだがある
  アンチウイルスソフトの障害でBSODをはくことがあるので、セキュリティ板で情報収集をしよう
  Windows Update由来でBSODをはくこともあるので、この板のWindowsUpdateスレの情報もチェック
・どこかのハードが壊れかけ、電源の壊れかけ、電源容量不足などの場合
  →PCのログからはもはや推測できない場合がある、これはもう地道に部品交換していくしかない

などなどの手順を踏んでいくことになる。

試しに、僕のPCでWinDbgを実行し、残っているBSoDメッセージを開いてみたら、以下のようなものがあった。メモリダンプの日付は去年の11月になっていた。

<code>

Microsoft (R) Windows Debugger Version 6.2.9200.20512 AMD64
Copyright (c) Microsoft Corporation. All rights reserved.


Loading Dump File [C:\Windows\Minidump\110314-9204-01.dmp]
Mini Kernel Dump File: Only registers and stack trace are available

Symbol search path is: SRV*c:\windows\symbols*http://msdl.microsoft.com/download/symbols
Executable search path is: 
Windows 7 Kernel Version 7601 (Service Pack 1) MP (4 procs) Free x64
Product: WinNt, suite: TerminalServer SingleUserTS
Built by: 7601.18526.amd64fre.win7sp1_gdr.140706-1506
Machine Name:
Kernel base = 0xfffff800`03463000 PsLoadedModuleList = 0xfffff800`036a6890
Debug session time: Mon Nov  3 04:26:34.787 2014 (UTC + 9:00)
System Uptime: 3 days 17:12:42.914
Loading Kernel Symbols
...............................................................
................................................................
............................
Loading User Symbols
Loading unloaded module list
.......
*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************

Use !analyze -v to get detailed debugging information.

BugCheck A, {fffffa8830b957a8, 2, 0, fffff800035551db}

Probably caused by : tcpip.sys ( tcpip!TcpTcbKeepAliveSend+320 )

Followup: MachineOwner
---------

2: kd> !analyze -v
*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************

IRQL_NOT_LESS_OR_EQUAL (a)
An attempt was made to access a pageable (or completely invalid) address at an
interrupt request level (IRQL) that is too high.  This is usually
caused by drivers using improper addresses.
If a kernel debugger is available get the stack backtrace.
Arguments:
Arg1: fffffa8830b957a8, memory referenced
Arg2: 0000000000000002, IRQL
Arg3: 0000000000000000, bitfield :
	bit 0 : value 0 = read operation, 1 = write operation
	bit 3 : value 0 = not an execute operation, 1 = execute operation (only on chips which support this level of status)
Arg4: fffff800035551db, address which referenced memory

Debugging Details:
------------------


READ_ADDRESS: GetPointerFromAddress: unable to read from fffff80003710100
GetUlongFromAddress: unable to read from fffff800037101c0
 fffffa8830b957a8 Nonpaged pool

CURRENT_IRQL:  2

FAULTING_IP: 
nt! ?? ::FNODOBFM::`string'+433d3
fffff800`035551db 488b4128        mov     rax,qword ptr [rcx+28h]

CUSTOMER_CRASH_COUNT:  1

DEFAULT_BUCKET_ID:  WIN7_DRIVER_FAULT

BUGCHECK_STR:  0xA

PROCESS_NAME:  System

TAG_NOT_DEFINED_c000000f:  FFFFF88003994FB0

TRAP_FRAME:  fffff8800398cfd0 -- (.trap 0xfffff8800398cfd0)
NOTE: The trap frame does not contain all registers.
Some register values may be zeroed or incorrect.
rax=000000000000ffff rbx=0000000000000000 rcx=000000000000cfec
rdx=fffffa802bdd1cf0 rsi=0000000000000000 rdi=0000000000000000
rip=fffff88001730f80 rsp=fffff8800398d160 rbp=fffffa802c7a1530
 r8=0000000000000001  r9=0000000000000001 r10=0000000000003f8c
r11=fffff880082e5448 r12=0000000000000000 r13=0000000000000000
r14=0000000000000000 r15=0000000000000000
iopl=0         nv up ei ng nz ac po cy
tcpip!TcpTcbKeepAliveSend+0x320:
fffff880`01730f80 6641890b        mov     word ptr [r11],cx ds:fffff880`082e5448=????
Resetting default scope

LAST_CONTROL_TRANSFER:  from fffff800034d8169 to fffff800034d8bc0

STACK_TEXT:  
fffff880`0398cb98 fffff800`034d8169 : 00000000`0000000a fffffa88`30b957a8 00000000`00000002 00000000`00000000 : nt!KeBugCheckEx
fffff880`0398cba0 fffff800`034d6de0 : fffffa80`2c2eaa70 fffff880`0398cee0 00000000`00000000 fffff6fb`7dbf1000 : nt!KiBugCheckDispatch+0x69
fffff880`0398cce0 fffff800`035551db : fffff880`0398ce58 fffffa80`2bfd5530 00000000`0000000e fffffa80`2bfd5470 : nt!KiPageFault+0x260
fffff880`0398ce70 fffff800`034d6cee : fffffa80`2ae730c0 fffffa80`2beb5270 fffffa80`2beb5270 fffffa80`2bdd1cf0 : nt! ?? ::FNODOBFM::`string'+0x433d3
fffff880`0398cfd0 fffff880`01730f80 : fffffa80`2c7a1600 00000000`00000001 00000000`00000001 fffffa80`2c7a1530 : nt!KiPageFault+0x16e
fffff880`0398d160 fffff880`016be156 : 00000000`00000000 fffff880`01686b18 00000000`00000000 fffffa80`2bdd1cf0 : tcpip!TcpTcbKeepAliveSend+0x320
fffff880`0398d2d0 fffff880`016871a6 : 00000000`00000000 00000000`00000000 00000000`00000e10 00000000`01ea0ca3 : tcpip! ?? ::FNODOBFM::`string'+0x3959d
fffff880`0398d3b0 fffff800`034e385c : fffff880`0398d4c0 fffffa80`0133259c 00000000`00000000 00000000`00000001 : tcpip!TcpPeriodicTimeoutHandler+0x3f9
fffff880`0398d430 fffff800`034e36f6 : fffffa80`1c2c7708 fffffa80`1c2c7708 00000000`00000000 00000000`00000000 : nt!KiProcessTimerDpcTable+0x6c
fffff880`0398d4a0 fffff800`034e35de : 000002eb`c4039f43 fffff880`0398db18 00000000`013a22e2 fffff880`039691c8 : nt!KiProcessExpiredTimerList+0xc6
fffff880`0398daf0 fffff800`034e33c7 : 000000f1`cb3a17c2 000000f1`013a22e2 000000f1`cb3a176b 00000000`000000e2 : nt!KiTimerExpiration+0x1be
fffff880`0398db90 fffff800`034d08ca : fffff880`03965180 fffff880`0396ffc0 00000000`00000000 fffff800`00000000 : nt!KiRetireDpcList+0x277
fffff880`0398dc40 00000000`00000000 : fffff880`0398e000 fffff880`03988000 fffff880`0398dc00 00000000`00000000 : nt!KiIdleLoop+0x5a


STACK_COMMAND:  kb

FOLLOWUP_IP: 
tcpip!TcpTcbKeepAliveSend+320
fffff880`01730f80 6641890b        mov     word ptr [r11],cx

SYMBOL_STACK_INDEX:  5

SYMBOL_NAME:  tcpip!TcpTcbKeepAliveSend+320

FOLLOWUP_NAME:  MachineOwner

MODULE_NAME: tcpip

IMAGE_NAME:  tcpip.sys

DEBUG_FLR_IMAGE_TIMESTAMP:  533f5bd4

FAILURE_BUCKET_ID:  X64_0xA_tcpip!TcpTcbKeepAliveSend+320

BUCKET_ID:  X64_0xA_tcpip!TcpTcbKeepAliveSend+320

Followup: MachineOwner
---------

</code>

見れば分かる通り、このエラーは
>Probably caused by : tcpip.sys ( tcpip!TcpTcbKeepAliveSend+320 )
とあるのでネットワーク関連で発生したエラーだと推測される。文面を読んでいくと
>BUGCHECK_STR: 0xA ←0x0Aと言うこと
とあり、先ほど紹介したサイトの説明と合わせて解読すると、「tcpip関連のドライバのエラーで、メモリに不正アクセスしたらしい」と言うことになる。
このケースではこれ一回しか発生しなかったので放置したが、このエラーが頻発するようなら
(a). イーサネットカードのドライバを新しいものにしたり、あるいは古くて安定しているバージョンに差し替える
(b). このエラー自体はOS由来の可能性が高いが、もしかしたら特定のアプリ由来かもしれないので、エラー発生前後のアプリを推測していく。
   tcpipのエラーなんだから、なんらかの通信ソフトが原因なことは分かる。たとえば、ブラウザでネットワーク動画を見たのがきっかけとか…
と類推で解決の道を探すようになる。

なお、こんなことを書いているのだから当然僕もうちのWindows7でBSoDエラーが頻発(毎週とか毎月とか)して困った経験がある。僕の場合、原因を追究していくと一つにはIEEE1394でオーディオインターフェースをつなげていたのが原因だった。
もう一つはSTOPコードがSTOP: 0x00000101(CLOCK_WATCHDOG_TIMEOUT)と言うやつで、これはなかなか原因が特定できなかった。CPUのクロックが原因と言われてもなあ…だったが、クロックが変わるということはTurboBoostとかSpeedStepとか類のものだろうと推察して、BIOSの中で気になった「C1Eステート」設定を無効にしたら、BSoDが発生しなくなって問題解決した、などと言うことがあった。
ご参考までに。

【レビュー】:Orne ポケット リブレ サック(岩波文庫)【YANAGITA KUNIO】を買ってみた

僕はまあまあ図書館を利用する。
うちの娘が保育園の頃は絵本を借りていたし、娘が学校に行くようになって学校の図書室を使用するようになっても自分用の本をちょこちょこと借りに行く。
で、昔はマイバッグ(エコバッグ、ショッピングバッグなどと言われる奴)に入れて本を持ち歩いていたのだけど、マイバッグはお店で買った品物によっては結露の水で濡れることもあるし、絵本を入れないとなるとそこまで大きい本である必要はないので、図書館専用の袋を一つ用意したいものだと思っていたところ、結構面白いものを発見した。

なんと、『岩波文庫』の柄のバッグである。これは買いだ! とさっそく買ってみたので簡単なレビュー。
生地は柔らかめのコットン生地。取っ手の取り付け方を見る限り、ぎゅうぎゅうに本を詰め込んだらちょっと不安に感じそうだけど、僕が普段借りる3、4冊程度を入れるのなら何の問題もないだろう。B4ぐらいの大きさがあるけど、絵本だと稀にこれより大きいサイズのものがあるので、絵本を借りるような人はもう少し大柄なバッグを探したほうがいいと思う。

20150328_P5010005

僕の買ったものの柄は柳田国男の「遠野物語」である。なお、写真に写り込んでいる文庫は同じ遠野物語なのだが、集英社文庫のものである。僕は本を借りる・買うと言っても、専門書・学術書・科学分野・民俗学分野・経済学分野が主で、小説等はほとんど買わないので意外に手元に岩波文庫が少なかった(4、5冊ぐらいしかなかった)。

20150328_P5010006

なにか雑誌を入れてみたイメージとして、「アサヒカメラ」を突っ込んでみた。このぐらいの大きさの雑誌が一番ピッタリくる大きさなんじゃないかと思う。なお、僕がアサヒカメラを買うのはニューフェース診断室にペンタックスの製品がとりあげられているときで、特集とかは全く気にしない。

20150328_P5010007

バッグを開けると、やや小さなポケットが2個ついている。ただの布きれをくっつけて外袋と縫い合わせている簡素なものだが、まあ役に立つかもしれない。ためしに手元にあるものを突っ込んでみた感じでは、お財布はちょっと入らない。カードケースやスマートホン辺りを入れるのがちょうどよい使い方なのではないかと思う。


僕が購入したもののほかに、松尾芭蕉とかぐや姫のバッグもあった。この辺はお好みでどうぞ。

Dreamweaverを活用してwordpressサイトをメンテナンスする(3)

前記事に引き続いて。今度は実際に運用しているWordpressサーバのデータを取り込んで、DreamWeaverとの連携を行う。
この辺の作業のやり方を解説しているサイトが見つからなくて本当に苦労した。

WordPressのデータをリモートサーバに準拠させて編集する

一般的な『DreamWeaverをWordpressで使う』の説明はここで終わりなことが多いのですが、僕にはちょっと疑問です。「テーマファイルを適用するのなら、Wordpressのデータは基本的にサーバ準拠のデータじゃないとやりにくいんじゃないの?」と思うのですが、世のデザイナーの人たちはその辺は諦めて作業しているのでしょうか。僕は納得できなかったので、もう少し頑張ってサーバ準拠の環境を作ることまで挑戦しました。
理想的にはローカルにあるテストサーバーで編集→DreamWeaverの同期機能でアップロードして本番環境へ、と行きたいところですがDreamWeaverにはFTPでファイル同期する機能はあるものの、データベースを連携する機能はないのでDreamWeaverだけで完結はできませんでした。
が、リモートのMySQLサーバにあるデータをダウンロードしてきて、ローカル環境のMySQLにデータをインポートしてやることで、より本番環境に近い状態でテーマファイルの編集ができます。

20150311_50_dw

もう一度サイトの管理を編集します。先ほど作ったテストサーバ接続用設定を上書きしてもいいし、新しく作り直してもいいです。

20150311_51_dw

Local serverは先ほど作ったテストサーバーと設定は同じです。今度はそれに追加してRemote serverを設定しておきます。

20150311_52_dw

Remote serverの設定です。モザイクばかりで分かりにくいのですが、FTPアドレスにはレンタルサーバのアドレスを、ユーザ名/パスワードはレンタルサーバからもらっているユーザ名/パスワードを設定します。
ルートディレクトリはレンタルサーバ内のwordpressをインストールしてあるディレクトリを指定します。

20150311_53_dw

これでローカル – テストサーバ – リモートサーバと言う設定が済んだことになります。
なお、wordpressのファイルのうち、wp-config.phpだけは同期するとMySQLへの接続設定などが上書きされ、エラーの原因になりますので、同期しない設定を行います。
同期をキャンセルするには、ファイルを右クリックして『クローク実行』と設定すると、ファイルアイコンに赤い斜め線が入って同期されないことを示します。

20150311_54_dw

一度サイトのビューを狭めて、『リモートサーバー』をプルダウンで選択します。

20150311_55_dw

再びサイトのビューを広げて、リモートサーバーと同期をしましょう(ただし最初はリモートサーバーのものを消さないようGETにしましょう)。

20150311_56_fx

以下、僕が利用している『さくらのレンタルサーバ』を前提にした解説です。
次に、レンタルサーバの設定画面を開きます。【アプリケーションの設定】→【データベースの設定】をクリックし、真ん中画面の【管理ツール ログイン】からレンタルサーバのphpMyAdminを開くことができます。

20150311_57_fx

phpMyAdminにログインしたら、上部メニューから【エクスポート】を選択します。

20150311_58_fx

僕はレンタルサーバで『chatarou_wordpress』と言う名前でWordpress用データベースを格納していますので、これをエクスポートしてやります(画面ではかけてしまいましたが一番右下にエクスポートボタンがあります)。エクスポートはzipで行う方が成功しやすいようです。

20150311_59_fx

今度はローカルのphpMyAdminに移動します。URLやホーム画面をよく見てローカルサーバであることを確認してください。
今度は上部のメニューから【インポート】を選択します。

20150311_60_fx

先ほどエクスポートで出来たsqlファイルをアップロードボタンを押して選択し、インポートを実行してください。

20150311_61_fx

インポートが正常に完了するとメッセージが出ます。次に上部メニューから【SQL】を選択します。

20150311_62_fx

先ほど作った『local_wordpress』ユーザに、今インポートした『chatarou_wordpress』へのアクセス権限を付与します。

<code>
GRANT ALL PRIVILEGES ON `chatarou_wordpress`.* TO 'local_wordpress'@'localhost';
</code>

20150311_63_fx

ユーザへの権限付与が正常に行われたときは戻り値は空です。

20150311_64_explorer

今度はwp-config.phpを再び編集します。

<code>
/ ** MySQL 設定 - この情報はホスティング先から入手してください。 ** //
/** WordPress のためのデータベース名 */
define('DB_NAME', 'chatarou_wordpress'); ←chatarou_wordpressへ書き換える
/** MySQL データベースのユーザー名 */
define('DB_USER', 'local_wordpress'); ←書き換えない
/** MySQL データベースのパスワード */
define('DB_PASSWORD', 'local_user_pass'); ←書き換えない
/** MySQL のホスト名 */
define('DB_HOST', 'localhost'); ←書き換えない
/** データベースのテーブルを作成する際のデータベースの文字セット */
define('DB_CHARSET', 'utf8'); ←書き換えない
/** データベースの照合順序 (ほとんどの場合変更する必要はありません) */
define('DB_COLLATE', ''); ←書き換えない
</code>

ここまでで変更作業は終わりです。もう一度ローカルサイトのWordpressを開いてみると、

20150311_65_fx

20150311_66_fx

このような感じになります(ブログパスなどが若干違うので、トップページはうまく記事が表示できませんでしたが、個別記事は表示できます)。この方法を使うと、複数サイトをDreamweaverで編集することも出来るかもしれません(MySQLファイルのインポートとインポートしたデータベースへのユーザの紐付けをしておけば、wp-config.phpのDB_NAMEを書き換えるだけで別のサイトの編集ができると思います)。

Dreamweaverを活用してwordpressサイトをメンテナンスする(2)

前記事に引き続いて。今度はWordpressのインストールと、DreamWeaverとの連携を行う。

WordPressをインストールする

20150311_26_fx

WordPress 日本語ローカルサイトからWordpressをダウンロードする。
この記事を書いた時点での最新版は4.1.1だった。なお、Wordpressは自動バージョンアップ機能もあるので、多少バージョンの低いものを扱っても大丈夫。

20150311_27_explorer

ダウンロードしたら、zipファイルを解凍して、できた【wordpress】フォルダを【C:\xampp\htdocs\】フォルダに移動する。

20150311_28_fx

移動が終わったらhttp://localhost/wordpress/を開く(開く前に、XAMPPのコントロールパネルでApacheとMySQLがちゃんと起動していることを確認)。問題がなければ、Wordpressの最初の設定画面が立ち上がるはずだ。【さあ、始めましょう!】を押して設定を進めていく。

20150311_29_fx

データベース名はさっき設定した通り『localhost_wordpress』、ユーザ名『root』、パスワード『local_root_pass』、データベース『localhost』、テーブル接頭辞『wp_』と設定すればよい。

20150311_30_fx

成功すればこのようなメッセージになる。もしエラーが出たら、■XAMPPでApache・MySQLはちゃんと起動しているか? ■MySQLのrootパスワードは正しく設定してあるか? ■phpMyAdminでデータベースをちゃんと作成してあるか? 辺りに立ち戻って確認しよう。

20150311_31_fx
Wordpressの初設定画面。ここで入力するユーザ名とパスワードはMySQLのユーザ名/パスワードとは違うので注意。仮に、ここではユーザ名『mai』、パスワード『local_wordpress_pass』として以降の作業を進める。入力が終わったら【WordPressをインストール】をクリック。

20150311_32_fx
これでインストール作業は終わり。

20150311_33_fx

20150311_34_fx

実際にログインしてみると、管理画面へログインすることもできるし、

20150311_35_fx
http://localhost/wordpress/にアクセスすることで実際にテストブログを見ることもできます。

MySQLにWordpress用ユーザを追加する

さて、ここまでWordpressのデータベース接続先にrootを用いてきましたが、Wordpress接続先にrootと言うのはセキュリティに好ましくありません。そこで、MySQLで新しくこのWordpress専用ユーザを設定しましょう。

20150311_36_fx

まず、XAMPPからMySQLのAdminをクリックし、phpMyAdminの画面を呼び出します。そこで、上のメニューの中から【SQL】をクリックします。

20150311_37_fx

SQL文を打ち込んで、ユーザを追加します。このユーザは、先ほど作ったWordpressのデータベース、local_wordpressを管理する専用とします。

<code>
CREATE USER 'local_wordpress'@'localhost' IDENTIFIED BY 'local_user_pass';
GRANT USAGE ON *.* TO 'local_wordpress'@'localhost';
GRANT ALL PRIVILEGES ON `localhost_wordpress`.* TO 'local_wordpress'@'localhost';
</code>

:SQL文の意味:
一行目 CREATE USERでlocalhost鯖に『local_wordpress』と言うユーザを作る。パスワードは『local_user_pass』としておく。
二行目 グローバルレベルでCREATE権限を設定しておく。グローバルレベルで権限がない状態に。一応のおまじない構文。
三行目 データベース『localhost_wordpress』ではすべての権限を与える。

20150311_38_fx

ユーザの作成に成功すると返り値は空(正常)になる。ここでphpMyAdminの上のメニューから【ユーザ】をクリックすると、

20150311_39_fx

local_wordpressと言うユーザが追加されているのが確認できる。

次に、Wordpressの設定ファイルを編集する。【C:\xampp\htdocs\wordpress\】にあるwp-config.phpを開くと、以下のような項目があるのでそれぞれ書き換えます。

<code>
/ ** MySQL 設定 - この情報はホスティング先から入手してください。 ** //
/** WordPress のためのデータベース名 */
define('DB_NAME', 'localhost_wordpress'); ←書き換えない
/** MySQL データベースのユーザー名 */
define('DB_USER', 'root'); ←local_wordpressへ書き換える
/** MySQL データベースのパスワード */
define('DB_PASSWORD', 'local_root_pass'); ←local_user_passへ書き換える
/** MySQL のホスト名 */
define('DB_HOST', 'localhost'); ←書き換えない
/** データベースのテーブルを作成する際のデータベースの文字セット */
define('DB_CHARSET', 'utf8'); ←書き換えない
/** データベースの照合順序 (ほとんどの場合変更する必要はありません) */
define('DB_COLLATE', ''); ←書き換えない
</code>

ここまでの作業が終わったら、もう一度Wordpressのダッシュボードhttp://localhost/wordpress/wp-admin/を開いてみましょう。
作業が正しく済んでいれば、先ほどと同じようにダッシュボードが、失敗していればおそらく【データベース接続エラー】と表示されますので、成功するまで設定を念入りに確認しましょう。
ここまでの作業が済んだら、rootのパスワードは変更して分かりにくいものにした方がいいです。

DreamWeaverでWordpressのサイトを閲覧する

ここまでの作業で、ローカルにWordpress鯖が立ったので、DreamWeaverを用いてビジュアルをチェックできます。
DreamWeaverを立ち上げて、【サイト】→【新規サイト】と進みます。

20150311_40_dw

サイト名は何でもいいですが、ローカルのサーバ上のサイトを見ていることがわかりやすい名前がいいでしょう。
ローカルサイトフォルダーは、Wordpressをインストールした【C:\xampp\htdocs\wordpress\】を指定します。

20150311_41_dw

【+】のボタンを押してサーバーを追加する。

20150311_42_dw

サーバー名:は何でもいいです。
使用する接続:にローカル/ネットワーク を指定しましょう。
サーバーフォルダー:はwordpressをインストールしたフォルダ、
Web URL:はhttp://localhost/wordpress/ を指定します。

20150311_43_dw

追加が終わるとサーバー設定画面に戻りますが、この時リモートのチェックボックスを外してテストのチェックボックスにチェックを入れましょう。

20150311_44_dw

バージョンコントロールは特に行わないので「なし」のまま。詳細設定も特に変更なしです。

20150311_45_dw

ここまでの設定を保存すると、ローカルとテストサーバーの設定が終わります。

20150311_46_dw

今度はライブビューで作成したブログサイトのプレビューを見ることができるようになりました!(ここまで長い…)。

20150311_47_explore

さらに、自分のテーマを適用させてみましょう。【C:\xampp\htdocs\wordpress\wp-content\themes】に適用させたいテーマフォルダを置きます(僕の場合は『chatarou5style』と言う名前になっています)。

20150311_48_fx

WordPressの管理画面を出しているブラウザにいったん戻り、テーマの設定から今追加したテーマを有効化します。

20150311_49_dw

再びDreamWeaverに戻り更新すると、テーマが適用されたWebサイトが出来上がりました! ここまででやっとテーマファイルをDreamWeaverでビジュアライクに編集することが可能になります。(さらに次の記事へ続く)

Dreamweaverを活用してwordpressサイトをメンテナンスする(1)

このサイト、一昨年終わりごろにWordpressで再構築して、自前のテーマファイルを設定したんだけど、自作のテーマファイルと言うのが手抜きと言うか、通常サイドバーに置かれてる要素がページ末にダラダラと並んでいる状態のまま放置してきてしまった(普段あまり見かけないシングルカラムレイアウトにしようというのは構築当初から考えていたのだけど)。

そこで、今回DreamWeaverを使ってサイトメンテをすることにした。が、Wordpressサイトのメンテは思ったより手順が面倒なので、調べた結果をまとめて備忘メモすることとした。なお、この記事を書いている僕はDreamWeaverは今まで使ったことのなかった初心者レベル。だから初心者でも行けるよ、ってことで。


この本を買って一応読破してみたけど、Dreamweaverの本と言うよりはHTMLの基礎みたいな感じで一時間もかからない本だった…。

DreamWeaverでWordpressを管理する際の問題点

20150311_01_dw

まず、DreamWeaverを立ち上げて、リモートサイトとファイルを共有するとこんな感じになる。
ここまでの手順はネットで探せばいくらでもあるというかDreamWeaverの基本的使い方だから省略。

20150311_02_dw

ここで、ローカルビューで自分が適用しているテーマファイルを開く(例えばindex.php)と、画面の真ん中上のビューのところに
(このビューの中には本来ライブビュー、つまり実際にブラウザ上で見えるhtmlイメージが表示されるはずなのである)
【このページにはサーバーのみによって検索される動的関連ファイルがある可能性があります。検索|環境設定】
と言う文字がポップアップする(画像の赤枠の中)。ここで【環境設定】を押しても設定に行くだけなので、【検索】を押すのだが

20150311_03_dw
こんな風に
【サーバの内部エラーのため、動的関連ファイルは解決されませんでした。再試行】
と言う表示になって、相変わらず実際のwebイメージを見ることができない。
これは、ローカルにファイルを置いているだけでは、DreamWeaverがWordpressのphpを理解できていないからだ。
そこで、DreamWeaverがphpを理解するために、ローカル(自分のパソコン)にウェブ鯖(テストサーバーと言う名称)を立てて、Wordpress環境を構築してやる必要が出てくる。

XAMPPをインストールする

さて、ローカル環境にWordpressの実行環境を作る方法だけど、一つ一つソフトをインストールしたり設定したりするのはかなりめんどくさい。
そこで、ローカルに一気にインストールできるツールが出回っている。XAMPP(ザンプ)と言うツールだ。いわゆる、LAMP(Linux、Apache、MySQL、PHP or Perl、これはLinux版)のWindows版のツールと言う意味らしい(なので頭の文字がLinuxではなくx-Windowって意味になってる?)これをインストールするとWordpress以外は一気にインストールできるのでお勧めだ。
XAMPP Installers and Downloads for Apache Friendsに行き、XAMPPをダウンロードしよう。

20150311_04_fx

なるべくなら、レンタルサーバのPHPバージョンとリモート環境のPHP環境を揃えたほうがいい。が僕の場合、さくらのレンタルサーバの方に入っているPHPは5.4.35とあまり新しくなく、今ダウンロードできるXAMPPが5.5.19か5.6.3だったので、遠慮なく最新の方をダウンロードした。

20150311_05_fx

ダウンロード画面はこんな感じ。

20150311_06_xampp

ダウンロードしたファイルを実行すると、UACの質問の後にこんなクエスチョンが出る。アンチウイルスを作動している場合は注意してくれってことだが、僕の環境(avast!)ではアンチウイルスを停止させなくても特に問題はなかった。Yesを押して続行する。

20150311_07_xampp

今度のメッセージは一応注意。
【Important! Because an activated User Account Control (UAC) on your system some functions of XAMPP are possibly restricted. With UAC please avoid to install to C:\Program Files (x86) (missing write permissions). Or deactivate UAC with msconfig after this setup.】
UACの問題が出るので、【C:\Program Files (x86)】みたいな一般的なインストール先へのインストールはやめましょうってこと。この後出てくるけど、このツールのデフォルトのインストール先は【C:\xampp】になるので、そっちに入れておけば問題はない。OKを押して続行する。

20150311_08_xampp

20150311_09_xampp

インストールするツールを尋ねてくる。今回の作業では、■Apache(標準で必ず入る)、■MySQL、■PHP(標準で必ず入る)、■phpMyAdminは必須かと思う。残りは入れる必要はないんだけど、別に邪魔でもなければ入れといてもいいとは思う。

20150311_10_xampp

先ほど書いた通り、デフォルトのインストール先が【C:\xampp】になっているのでこのまま続行。

20150311_11_xampp

Bitnami for XAMPPと言うのは、XAMPPの環境に簡単にインストールできるWordpressアプリなのだが、僕が試用した限りではbitnami_wordpressと言う名前の不要なWordpressサイトを作るだけなので(テーマの編集などならそれで済ませても構わないのだが)、今回はチェックを外してWordpressは別途落とすこととした。

20150311_12_xampp

20150311_13_xampp

20150311_14_xampp

説明に従っていけばインストールは完了する。最後の画面で、『Control Panel』をすぐに出したくない場合はチェックを外してもいい。ここではそのまま引き続いて作業してしまうので、チェックしたまま進める。

XAMPPでローカルサーバを実行する

20150311_15_xampp

コントロールパネルを起動するとこんな感じ。僕は全部のツールをインストールしてしまったのでTomcatとかも入っているけど、不要ツールのチェックを外した人はその辺はいないかもしれない。早速、ApacheとMySQLの【Start】ボタンを押して両方を起動させよう。

20150311_16_xampp

こんな感じになれば正常な起動。うまくいかなかったりするとステータス画面に赤色の文字列が並ぶのだが、その辺の詳細は省略。

20150311_17_fx

コントロールパネルの【Apache】の【Admin】を押すと、こんな風にXAMPPのページが立ち上がる。見ての通り、localhost内に立ち上がっていて、Web鯖が起動していることも確認できる。右端の『日本語』を押す。

20150311_18_fx

こんな風に日本語トップページが出ると、ちょっと感動するかもしれない。ここで、左のメニューに並んでいるのの上から3番目、『セキュリティ』をクリックする。

20150311_19_fx

するとこんな風に現在のセキュリティについてずらずらっと一覧が出る(なおこのページ、僕の環境では必ず文字化けが発生する。日本語文字エンコードをShift-JISに設定すればなおる)。ここからMySQLのパスワードが設定できるので、画面中段ぐらいのオレンジ文字の【http://localhost/security/xamppsecurity.php】に飛んで設定しよう。

20150311_20_fx

ここで設定するパスワードはローカルサーバのMySQLのrootアカウントのパスワードなので、勘違いしないように。文字列は何でもいいけど、ここでは便宜上『local_root_pass』と入れたものとして以下書いていきます。パスワードを入力したら、【パスワードを変更しました。】ボタンを押す。

20150311_21_fx

変更が終わるとメッセージが出るので、xamppのコントロールパネルに戻る。

20150311_22_xampp

MySQLを一度【Stop】を押して終了させ、もう一度【Start】を押して再起動完了をさせよう。次に、コントロールパネルの【MySQL】の【Admin】を押すと、phpMyAdminのページが立ち上がる。

20150311_23_fx

ここでユーザ名:root、パスワード:local_root_pass(さっき設定したもの)でphpMyAdminにログインする。

20150311_24_fx

ここで、Wordpressで最初に接続するテスト用のデータベースを作成しておこう。phpMyAdminの上に並んでるメニューから、【データベース】をクリック。

20150311_25_fx

データベースを作成する。データベース名は何でもいいけど、ここでは『localhost_wordpress』と言う名前で作ることにする。右隣の照合順序は、『utf8_general_ci』としておいた方がいいらしい。

これで、Wordpressをインストールする前準備は完了した。(次の記事へ続く)