他人に教えるときのメモ用です。
開発環境構築
リモートサーバ編
仕事で使うようなサーバは大体Linuxです。ときどきWindowsサーバもありますが、普通はLinuxです。
PHP開発者として身を立てたかったら、自分でサーバぐらい借りましょう。さくらが安くてオススメです。月500円ぐらい。
Mac編
Apache、MySQL、PHPを一発で整える楽な方法
どっちも大して変わりません。基本的に英語ですが、問題はそれほどないと思います。
全部自分でやる大変な方法
Macporsを利用する。これは将来的にサーバ・エンジニアリングや他言語(Ruby、Perl、Python、Objective-C)での開発を検討している方におすすめです。
プログラミングとはコマンドライン環境(マウスを使わず、コマンドだけでパソコンに命令する)と切っても切れない関係にあるので、いい練習になるでしょう。
デザイナー志望の方にはおすすめしません。Apache、MySQL、PHPのインストールも個別に行うことになるので、大変です。
Windows編
Windowsでは色々と面倒なことがあるので、Xamppをおすすめしておきます。
どうしても自分でやりたい方はググってください。
[429] [429] Client error: `POST https://webservices.amazon.co.jp/paapi5/getitems` resulted in a `429 Too Many Requests` response: {"__type":"com.amazon.paapi5#TooManyRequestsException","Errors":[{"Code":"TooManyRequests","Message":"The request was de (truncated...)
PHP開発ツール
共通
PHPは基本的にプログラミング言語です。なので、文字ばっかり書くことになります。
「テキストエディタで全部やる」という硬派なプログラマもいますが、ガッツリ作るときは面倒くさいので、PHP用の統合開発環境で作ったりします。
統合開発環境(IDE)というのは、コードヒントを出したり、マニュアルを参照できたり、デバッグができたり、ソースコード管理システムへの連携が容易だったり、色んな便利機能がついているものを指します。
大規模なものはIDEでがっつり作り、テキストエディタは小規模なものや細部の修正に使うといのが基本です。
Mac用テキストエディタ
CotEditor
Cocoaベースで作られたフリーのエディタ。コードのカラーリングができる。
mi
歴史のあるフリーエディタ。PHP拡張を入れると、コードをカラーリングしてくれる。ただし、黒背景+黄緑+赤という配色なので、デザイナーにはおすすめできない。
viとかemacsとか
ターミナルから利用できるエディタ。
コマンドラインの操作をしたことがない人にはものすごく癖のある操作感なのえ、デザイナーにはおすすめできないが、エンジニアよりの技術を身につけたい人は絶対にさわっておくべき。
SSHなどと並び、サーバ管理者には必須の技術
Windows用テキストエディタ
Terapad
フリーのエディタ。シンプル。PHPのコードかラーリングはない(はず)ので、Perlカラーリングでだましだまし使う。
秀丸
有名なエディタ。シェアウェアで4000円ぐらい。
Notepad++
おそらく、Windows環境ではこれで決まり。圧倒的におすすめ。コードカラーリングもばっちりの上、コードヒントも出るなど、なにかと便利。テキストエディタというより、統合環境より。
ただし、UTF-8以外の文字コードではちょっと面倒なこともある。
メモ帳(使っちゃダメ!)
Windowsにはデフォルトでメモ帳というテキストエディタが入っていますが、これは使わない方がいいです。Windows以外の改行コード(LF or CR)を認識できない上、UTF-8に対応していなかったはずです。
統合開発環境(IDE)
これはWindowsでもMacでもあんまり変わりません。
Aptana
フリーのIDE。一番オススメ。特にコードヒントは秀逸。自分で定義したクラス、変数、関数も候補として出してくれるので、一度使ったらやめられない覚醒剤のようなツール。インストールはStandAlone版で。
Dreamweaver
いわゆるWebデザイナー御用達のツール。有償。設定を色々と行えばデバッグも可能だが、使いこなしている人が少ないのか、情報があまりない。
SVNアクセスやFTP連携などの機能もあり、CS4ぐらいからプレビューでJavascriptを実行できたりするはず。
Eclipse+PDT
AptanaのベースになっているEclipseというJava用IDEにPHPプラグインを入れたもの。個人的にはAptanaの登場で消えていくのでは、と思っている。
デザイナーにはオススメできない。Eclipseのインストール+日本語化で寿命が二年縮まる。
PHP入門者がつまずく共通点
改行コードとエンコーディング
パソコンは0と1しか扱えません。
その後、この0と1を駆使して人間にわかる言葉を扱えるようにしたのですが、パソコンを作ったのは日本人ではなかったので、とりあえずアルファベット+数字+メタ文字(改行やスペース、タブなどの特別な意味を持つ文字)を表す仕組みが作られました。
その後、このアルファベットを使って日本語を表す仕組みが作られました。
0と1→アルファベット+数字+メタ文字
色んな人が色んな風にパソコンを改良していった結果、「ここで改行してください」という意味を表すメタ文字「改行コード」には3種類があります。Linuxで用いられるLF(\n)とMacで用いられるCR(\r)とWindowsで用いられるCRLF(¥n¥r)です。
開発環境がWindowsで、本番サーバがLinuxの場合、CRLFはすべてLFに変換する必要があります。
普通はFTPツールが自動でやってくれますが、メール送信プログラムなどを書いた場合はこのせいでハマることがあるので、注意してください。
アルファベット+数字+メタ文字→日本語
前述の通り、日本語の文字を理解するとき、パソコンはアルファベットを元にしています。例えば、「あ」という文字は「829F」という具合です。
しかしながら、「あ」=「829F」というのは、あくまで誰かが決めたルールです。はじめにルールを作った人は「渡邊さん」の「邊」は「辺」でもいいだろと思っていたとします。すると、「邊」を表す文字コードを作らなかったりします。
すると、プログラマの渡邊さんが激怒し、「俺の名字も表示できないルールは変えてやる!」と思って新しい文字コードを作り始めます。
というわけで、ある言語を表すルール(文字コード)にはいくつかの派閥が生まれました。それがShift-JIS、EUC-JP、UTF-8などです。
Shift-JISはWindows環境と携帯サイト開発で好まれ、EUC-JPはLinux技術者たちの間で古い歴史を持っています。UTF-8は国際化に対応し、かなり多くの言語を表現できますが、サイズが大きいので昔からの技術者に嫌われたりしています。また、メールのヘッダはISO-2022-JPじゃないといけなかったりします。
というわけで、PHPを開発するにあたって、文字コードは常につきまとう存在です。あまり考え込みすぎると気が狂ってしまいますが、「文字コードはプロジェクト内で統一する」というシンプルなルールで乗り切って下さい。
mod_rewrite
mod_rewriteはApacheの拡張機能ですが、色んなところで使います。SEO対策が重要になるにつれ、mod_rewriteの存在感はますます確固たるものになっています。
MySQLの初期設定
MySQLはPHPと非常に相性がいいデータベースですが、初期設定ではデフォルトの文字コードがLatin1という半角英数しか表示できないものになっています。
これでは困るので、MySQLのデフォルト文字コード設定をUTF-8に統一しておくとあとあと便利です。
ちなみに、Windowsだと設定ファイルmy.cnfが短縮ダイヤルになっているので、がんばってテキストエディタで編集してください。
上級トピック
PHP拡張とは?
PHPには色んな拡張機能があります。インストールはPECLなどを使うこともあって面倒ですが、試してみる価値は大です。
- PDO…データベース接続
- PHP_JSON…PHPの連想配列をJSONにしたり、JSONを連想配列にしたり
- CURL…PHPでよそのサーバにアクセスしたり
- GD・ImageMagick…jpegやpngファイルのサイズを変えたり
PEARとは?
PEARとは、PHPに新しい拡張機能をもたらすライブラリです。サーバにインストールしなくても(サーバの管理権限がない=共有サーバでも)使うことができます。PEARのインストールは簡単です。
- XML_Serializer…XMLを連想配列に変換する。RSSを扱うときなどによく使う。
- Services_Amazon…Amazonから商品情報を取得するときに便利。
- Net_UserAgent_Mobile…携帯のキャリアや画面解像度、型番などを判別するときに使う。これなしでの携帯サイト開発は苦行。
[429] [429] Client error: `POST https://webservices.amazon.co.jp/paapi5/getitems` resulted in a `429 Too Many Requests` response: {"__type":"com.amazon.paapi5#TooManyRequestsException","Errors":[{"Code":"TooManyRequests","Message":"The request was de (truncated...)
携帯開発
PHPは携帯サイト開発にとても向いています。情報も豊富であり、なおかつ携帯の問題の多くが「端末ごとの表示方法が違いすぎる」という点にあるので、こういう時こそPHPの出番です。
上述したNet_userAgnet_Mobileのように、豊富なライブラリがたくさんあるので、PHPを覚えたら携帯サイト開発にチャレンジするとよいでしょう。
[429] [429] Client error: `POST https://webservices.amazon.co.jp/paapi5/getitems` resulted in a `429 Too Many Requests` response: {"__type":"com.amazon.paapi5#TooManyRequestsException","Errors":[{"Code":"TooManyRequests","Message":"The request was de (truncated...)
PHPでのオブジェクト指向開発
オブジェクト指向については説明を省きますが、PHPはヴァージョン5からオブジェクト指向での開発ができるようになってきました。
ある程度慣れ親しんできたら、ぜひ手を出してみてください。適当な書籍はまだ見当たらないようですが、IBMのサイトをはじめとして、Web上に色んな資料があります。
オブジェクト指向だけだと何が便利なのかはわかりませんが、デザインパターンという概念を学ぶと、その利点がわかりやすくなります。武道でいう「形」みたいなものでしょうか。
余談ですが、PHPプログラマとして中級以上になるためには必要な条件は以下の通りです。
- Webサーバ、DBサーバ、メールサーバをPHP用にチューニングして利用できる
- オブジェクト指向の開発ができる
- PHP4とPHP5の違いを知っている
- フレームワークでの開発ができる
- CMSのプラグイン・モジュールの開発ができる
案件ごとにアサインするタイプのエンジニア派遣を見ると、求められるスキルがわかりやすいです。
フレームワークの紹介
フレームワークとは、プログラミングを行うにあたってのルールのようなものです。
プログラミングを始めるとすぐにわかることですが、あるアルゴリズムを実現するためのプログラムというのは、どのようにでも書くことができます。ルールはプログラマの数だけ存在します。
しかし、人も世も激しく移り変わるこの時代、そうした「マイルール」を継承していくことはよくないことだというのが時代の風潮です。担当者が変わっただけで、ルールの引き継ぎという大変な作業が発生します。
こうした流れを受けて誕生したのがフレームワークという考え方です。RubyのフレームワークであるRuby On Railsで有名な格言はDRY(Don’t Repeat Yourself = 同じことを繰り返すな)やCOC(Convention Over Configuration = 規約は設定に勝る = 大きなルールに従い、例外だけを個別に設定していく)です。
あらかじめ決めたルールに乗っ取って開発した方が楽だという哲学に乗っ取るのが、フレームワークです。PHPにも、そうした工夫がいくつかあります。
CakePHP
Ruby On Railsの影響を受けて作られたフレームワーク。おそらく、日本語情報、世界シェアともに一番多い。
[429] [429] Client error: `POST https://webservices.amazon.co.jp/paapi5/getitems` resulted in a `429 Too Many Requests` response: {"__type":"com.amazon.paapi5#TooManyRequestsException","Errors":[{"Code":"TooManyRequests","Message":"The request was de (truncated...)
Symfony
PHPで有名な開発会社アシアルが激推ししているフレームワーク。OpnePNEもバージョン3からSymfonyを採用していたはず。
[429] [429] Client error: `POST https://webservices.amazon.co.jp/paapi5/getitems` resulted in a `429 Too Many Requests` response: {"__type":"com.amazon.paapi5#TooManyRequestsException","Errors":[{"Code":"TooManyRequests","Message":"The request was de (truncated...)
ZendFramework
PHPを作ったZend社が考えたフレームワーク。細切れに使えるので、規約に縛られることが少ない。
[429] [429] Client error: `POST https://webservices.amazon.co.jp/paapi5/getitems` resulted in a `429 Too Many Requests` response: {"__type":"com.amazon.paapi5#TooManyRequestsException","Errors":[{"Code":"TooManyRequests","Message":"The request was de (truncated...)
PHPアプリケーションの紹介
PHPで作られたアプリケーションが幾つかあります。自分でショボい掲示板を作るのもいいですが、他人が作った優良アプリをいじりまわすことで見えてくるものもあります。
@2011/1/25追記 なんかこの記事のアクセス多いんですが、オープンソースPHP製ソフトウェアと利用のコツにもまとめときました。
CMS
WordPress
有名なブログエンジン。日本ではまだMovable Typeが有名だが、世界的に見れば圧倒的にWordPress。Smartyのようなテンプレートエンジンも使わず、フレームワークも採用していないので、PHP初心者にはもっともとっつきやすい。
[429] [429] Client error: `POST https://webservices.amazon.co.jp/paapi5/getitems` resulted in a `429 Too Many Requests` response: {"__type":"com.amazon.paapi5#TooManyRequestsException","Errors":[{"Code":"TooManyRequests","Message":"The request was de (truncated...)
Xoops、Drupal、Joomla!
こちらはWordPressがブログエンジンとして明確な目的を持っているのと比較すると、モジュールやプラグインという形式で機能を追加できる。そのせいでキャラ立ちがせず、「その他大勢」といった印象になっている一面も…
Xoopsは日本での歴史が長く、情報も多いが、デフォルトがSmartyテンプレートエンジンを採用しているため、初心者がいじりやすいものではない。
[429] [429] Client error: `POST https://webservices.amazon.co.jp/paapi5/getitems` resulted in a `429 Too Many Requests` response: {"__type":"com.amazon.paapi5#TooManyRequestsException","Errors":[{"Code":"TooManyRequests","Message":"The request was de (truncated...)
SNS
OpnePNE
日本製のオープンソースSNS。mixiクローンといってもよい。
バージョン3.0からSymfonyを採用しているため、本格的にいじるにはある程度の経験が必要。
[429] [429] Client error: `POST https://webservices.amazon.co.jp/paapi5/getitems` resulted in a `429 Too Many Requests` response: {"__type":"com.amazon.paapi5#TooManyRequestsException","Errors":[{"Code":"TooManyRequests","Message":"The request was de (truncated...)
ECサイト
EC-Cube、Zencart、OSCommerce
Ec-Cubeは日本製。Smartyを採用している。共有レンタルサーバではSSLが使えないことが多いが、ちょっとしたECサイトならサクッと作れる。Zencart、OSCommerceは最近元気がない印象。
[429] [429] Client error: `POST https://webservices.amazon.co.jp/paapi5/getitems` resulted in a `429 Too Many Requests` response: {"__type":"com.amazon.paapi5#TooManyRequestsException","Errors":[{"Code":"TooManyRequests","Message":"The request was de (truncated...)
Wiki
WikiはPHP製のものが多くある。Mediawiki、Pukiwiki、dokuwikiなど。
[429] [429] Client error: `POST https://webservices.amazon.co.jp/paapi5/getitems` resulted in a `429 Too Many Requests` response: {"__type":"com.amazon.paapi5#TooManyRequestsException","Errors":[{"Code":"TooManyRequests","Message":"The request was de (truncated...)
CRM
SoyCMS、SugarCRMなど。営業的な視点に立てば、ビジネスにおいて重要なのはこういうことだというのを教えてくれるツール。@2011/1/24 SoyCMSは名前の通りCMSです。なぜここに書いたかは忘れました。
メールとプロジェクトの紐付け、工数管理、工数あたりの単価計算、担当者のランク付けなど、お金に関する管理機能が山ほどあって、正直引きます。
BTS
開発者にとって欠かせないのは、コードの管理。誰がいつなにをいじったのか。バグはいつから発生するようになったのか。そういう問題を少しでもわかりやすくしてくれるのがバグ・トラッキング・システム(BTS)です。
PHP製のものは以下の2つ。
- Mantis…カマキリ印のBTS。Firefox開発チームの使っているBugZillaに次ぐ歴史の古さだが、最近は人気がないっぽい。
- Candycane…Ruby On Rails製の超絶BTS・RedmineのPHP移植版。CakePHPをベースに作られている。ただし、正式リリースはまだ。
まとめ
ここに書いてあることをちょっとずつやっていけば、なんとかなると思います。がんばってください。