uzullaがブログ

uzullaがブログです。

Windows Vista以降を使うと生きるのがつらい理由

あまりにも親切なコメントが多いので、先頭にも書いておきます。

1.そもそも!Macの上に!VMで!Windowsたててますから!

2.開発&本番がWindowsPHP必須の要件じゃなきゃ!そもそも!俺だって!Windows使う気ないから!!

お願い

この寒くて無知な記事を全ディスして解決策を提示しちゃうするエントリかいたら絶対にブクマのびますよ!!リンクもはらせて頂きます!チャンスだから是非書いてください!!(懇願


追記:回答をいただきました
http://blog.textt.net/nyontan/6
ホワイト案件お待ちしています

https://gist.github.com/matarillo/6208533
Web PIと WebMatrix はつかったことがないので是非使ってみたいですね、助かる命が有りそうです。しかしApache必須の命は救われない奴だ…。

http://d.hatena.ne.jp/NOV1975/20130812/p1
不勉強な糞マカーで大変申し訳ございませんでした!!!
できれば他の人にこの仕事をお渡ししたいです(迫真

以下本文

私はiPhoneがでた頃のレパードからの新参者マカーですが*1、最近のWindowsをつかうと本当に生きるのが辛くて嫌になります。


「オッ、マカーのドザーDISですか?IEとかディスっちゃう?」


…というわけではなくて、最近のWindowsVista以降は「ごく一部の人において、罠が沢山あって死にたくなる」のです。


マカーやLinuxの人がWindows上で、LAMP…いやWAMP環境の開発をしないといけない時に、はまりがちな罠をメモ書きします。

量子力学的Program files

最近のWindowsは、Program files(や、ProgramData)がとても不思議な挙動をします。
具体的にいえば、お前が今エクスプローラーでみているProgram filesと、サービスで起動されたApacheがみているProgram filesは別物である。マジで。


なにいってるかわかるか?俺は理解できた瞬間にWindowsを窓からなげ捨てたくなった。


これはWindowsApache+PHPとかの環境をたてるとしばしばハマる罠ですね。詳しく書きませんが(ちゃんと理解できていると思っていないので)、" Virtualization program files"とかでググると辿れると思います。
要は、悪名高い UAC の機能の一部で、セキュリティを高めるために複雑なことになっています。


これが割とマジでリアルな糞でして、Apacheとか、何もかんがえないと c:\program files\Apache software foundation/apache2.2/ とか、アマゾンの密林顔負けな深さにインストールされますが、
この中においてあるconfを修正しても、ぶっ壊してもどうしても反映されない事がある。
その場合は、これを疑うと良いでしょう。

同様に、PHPもc:\p(略)\phpとかにはいりますのでphp.iniが反映されないことがあります。


解決策は単純で、c:\apacheとかにインストールしましょう。
それだけで抜けられるあたり、本当に場当たり的な設計だなこのヤローっておもいます。


ちなみに本当の「ただしいかいけつさく!」は、サービスの設定で、ログオンユーザーを揃えたりすればよいのですが、これもかなりハマるというか、細々とした罠が残っている事があるので、オススメしません。


量子力学的ネットワークドライブ

ファイル共有(CIFS aka SAMBA)で、他のPCやMacのドライブをネットワークドライブとして、たとえば\\lovery_mac\nice_webappとかをWindowsのZドライブとかにマップすることができますね。
これはまあデキて当然な機能ですが、とても便利です。


コードをMacイカしたエディタで編集し、Gitで管理し、VMで動かしたWindowsで、IE同様にテストだけにつかいたいですよね。とても正常で健全な思考だと思います。
Windowsの開発だからってWindowsのどうしようもない環境でコードをいじるのは精神衛生に悪い。

でも、ApacheのDocument Rootにネットワークドライブを指定するとハマります。


Windowsのネットワークドライブ(マウント)は他のOSとは異なり、高度にも、セッション単位で作成されています。
サービスはコンソールセッション(目の前のセッション)とは別のセッションです。なので、ネットワークドライブはサービスの中から使うことが基本的にはできません
すごい高度な設計ですよね、人類の0.01%くらいはうれしがりそうです。僕は泣き出します。


UNC記法で、\\lovery_mac\nice_webappとか直接指定すれば動きますが、これも結構苦痛を伴う方法なのでオススメできません。


じゃあどうするかといえば、当たり前なんですけどコンソールセッションからApacheを起動すれば大丈夫です。
つまりはサービスにしなければよいのです。インストールで設定すれば、スタートメニューからApacheを単体起動することができます。


これで現在のセッションのドライブがマップできるので最高ですね。Parallelsとかの仮想ドライブもちゃんとうごくはずです。
開発でつかうなら(他のPCのドライブをマウントしてつかうようなケースなら)サービスで動かす意味ってあんまりないですからね。


ちなみに逆もありえますよね、Windowsから共有してMacでマウント。これはやめたほうが良い。
しばらくその環境で使わないと、なんでやめたほうが良いのか理解できないかもしれないが、兎に角オススメしません。
たとえば、Gitが発狂したり、IDEのコードサジェストが自殺しはじめたりします。あと、ackとかも気軽にかけられなくなるのは苦痛でしょ。


追記

SymlinkはUNCでも張れるみたいです!すごいお役立ち情報だ!

観測されないログ

Linuxとか使ってる人なら、ログとか空気のように存在するものですが、Windowsはどうなっているかしらない人も多いと思いますね。
Windowsでログ?なにそれ?というのが普通だと思います。


Apacheとかはもちろん自前でログをだしていますが、そのApacheが突然死すると、なにもログに出ないことがあります。たとえば外部DLLをロードして、COMオブジェクトでなにかするとき、その先の方で死んだりとか。
MacとかLinuxなら標準エラーとかに出されるような致命的なやつです。


Windowsでは、ログはイベントビューワというものにまとまっています。
メーラーみたいなUIのプログラムで、文字列ではないのですっごくみづらい、すっごくコピペしづらい、簡単なGrepにも難儀する最悪の代物ですが、わりとここには重要情報が多く出ているので、シブシブ是非使いましょう。

何件か選択して、人間が読めないよくわからない独自形式(何で開けるのか、僕はしりません->教えてもらった(( http://www.sans.org/windows-security/2009/06/30/dump-windows-event-logs-to-csv-text-vbscript )))で保存してベンダに送りつける事もできます。


え?どこにあるか?スタートメニューとかコンパネとかをしらみつぶしにさがしましょう。
そしてさっさとデスクトップなりにショートカットをつくりましょう。

さて、そもそもWindowsApachePHPはどうすべきなのか

そもそもWAMP環境は似非のかたまりであり、苦行であって、楽をしようとかできるはずがない。


つまりどうしようもないというのがオチですが、Xamppとか環境フルセットのパッケージをつかうのがちょっとした解決策ですね。
まちがってもApacheとかPHPとかMysqlとかバラで拾ってきて入れるべきではない。


ただ、PHPのバージョン番号やMysqlのバージョン番号を固定しないといけない人もいるでしょう、僕だ。

そういう人は前世でなにかやらかしたのだろうなあ、と静かに諦めるしかありません。ご愁傷様です>俺

知られざる完璧な解決策

Windows 2000をつかうと問題の9割が解決します。マジで。ヤッター!!!
IE6のテストでもつかえるし!Windows2000最高!!!

追記1

Linuxつかえ、VMつかえ(つまりはLinuxだよね?)というお話を沢山いただいておりますが、世の中にはWindowsPHPでしかつかえない、COM dotnetという謎の機能があり、DLLで拡張してやる案件があるのです。
そういうので逃げられない恐怖案件があるのです!!!

追記2 勝手な宣伝

http://sugamasao.hatenablog.com/entry/2013/08/11/121217
知り合いがすばらしげなルッビーの本をかきましたので、PHP+Windowsとかでハマる必要のない、ルバーの人は是非。

追記3 追加エントリをかきました!

http://uzulla.hateblo.jp/entry/2013/08/12/215654
頂いた様々なご指摘を受け止め、エントリを書きました!!!

追記4 で、その量子力(略)のVirtual Storeの場所

c:\Users\ユーザー名\AppData\Local\VirtualStore
または、
%USERPROFILE%\AppData\Local\VirtualStore

*1:…いや、実際には漢字Talk1だかを、白黒のMac PLUSでつかってたので、ある意味筋金入り?