Shin x blog
Macで一番簡単にPHP5.4をインストールする方法
- 2012-05-25 (金)
- PHP
Mac OS X に PHP5.4 を簡単に入れる方法です。
PHP5.4 使っていますか?
5.4 で実装されたビルトインサーバや traits、short array syntax などの新機能を試してみたい!でも 5.4 をインストールするのが面倒だなあ、というあなた、朗報です。
「PHP 5.3/5.4 for OS X 10.6/10.7 as binary package」というパッケージを使うと、簡単に PHP5.4 をインストールできます。
PHP5.4をインストール
方法は簡単。下記のコマンドを実行するだけです。
$ curl -s http://php-osx.liip.ch/install.sh | bash -s 5.4
実行するとパッケージのダウンロードが始まりますので、しばらく待ちます。インストール処理で sudo を使っているので、パスワードが求められる場合があるので、パスワードを入力して進めて下さい。
はい、これで完了です。/usr/local/php5 以下に PHP5.4 がインストールされます。
$ /usr/local/php5/bin/php -v PHP 5.4.2 (cli) (built: May 8 2012 09:48:57) Copyright (c) 1997-2012 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies with Xdebug v2.2.0rc2, Copyright (c) 2002-2012, by Derick Rethans
ビルトインサーバもバッチリ動きます。
$ /usr/local/php5/bin/php -S 127.0.0.1:8000 PHP 5.4.2 Development Server started at Thu May 24 14:51:35 2012 Listening on 127.0.0.1:8000 Document root is /path/to Press Ctrl-C to quit.
php.ini
php.ini ファイルは /usr/local/php5/lib/php.ini です。また、拡張毎の差分 ini ファイルが /usr/local/php5/php.d/ 以下にあります。
設定を変更する際は php.ini を直接変更するのではなく、新たに差分 ini ファイルを作成して変更箇所だけを記載するのが良いでしょう。
デフォルトでは timezone が Europe/Zurich になっているので、Asia/Tokyo に変更してみましょう。下記では、/usr/local/php5/php.d/99-my.ini というファイルを作成して timezone を Asia/Tokyo に変更しています。
$ sudo vim /usr/local/php5/php.d/99-my.ini date.timezone = Asia/Tokyo $ /usr/local/php5/bin/php -i | grep timezone Default timezone => Asia/Tokyo date.timezone => Asia/Tokyo => Asia/Tokyo
拡張モジュール
インストール拡張モジュールは以下です。かなり色々はいってますね。
$ /usr/local/php5/bin/php -m [PHP Modules] bcmath bz2 calendar Core ctype curl date dom ereg exif fileinfo filter ftp gd gettext hash iconv igbinary imap intl json ldap libxml mbstring mcrypt memcache mhash mongo mssql mysql mysqli mysqlnd OAuth odbc openssl pcntl pcre PDO pdo_dblib pdo_mysql pdo_pgsql pdo_sqlite pgsql Phar posix Reflection session shmop SimpleXML soap sockets solr SPL sqlite3 standard sysvmsg sysvsem sysvshm tidy tokenizer uploadprogress wddx xdebug xhprof xml xmlreader xmlrpc xmlwriter xsl zip zlib [Zend Modules] Xdebug
apc, twig, xslcach もインストールはされていますが、読み込まれていない状態になっています。必要であれば差分 ini ファイルを変更して有効にして下さい。
$ sudo vim /usr/local/php5/php.d/99-my.ini date.timezone = Asia/Tokyo # ↓を追加する extension=/usr/local/php5/lib/php/extensions/no-debug-non-zts-20100525/apc.so $ /usr/local/php5/bin/php -m | grep apc apc
OS X 標準 Apache の mod_php を元に戻す
このパッケージをインストールすると OS X 標準の Apache の mod_php も PHP5.4 に置き換わります。5.4ではなく、既存の PHP を使う場合は以下の手順で設定を戻して下さい。
$ sudo rm /etc/apache2/other/+php-osx.conf $ sudo vim /etc/apache2/httpd.conf # LoadModule php5_module libexec/apache2/libphp5.so <--- コメントアウトを解除する LoadModule php5_module libexec/apache2/libphp5.so $ sudo /usr/sbin/apachectl restart
PHP5.4をアンインストール
インストールした PHP5.4 をアンインストールする時は、上記「OS X 標準 Apache の mod_php を元に戻す」手順を行ったあとに /usr/local/php5* と /usr/local/packager を削除するだけです。
$ sudo rm -rf /usr/local/php5* $ sudo rm -rf /usr/local/packager
気軽にインストールできるPHP5.4
PHP5.4をインストールする方法としては、ソースからのビルド、MacPorts や Homebrew などのパッケージシステムからインストールするなど多くの方法があるのですが、どれもビルド環境を整えたり、パッケージシステム自体を入れる必要があるなど、ひと手間かかります。
この「PHP 5.3/5.4 for OS X 10.6/10.7 as binary package」であれば、PHP自体を入れるだけ(正確には packager という小さなパッケージシステムが一緒に入ります)なのでとても簡単ですし、元からインストールされている PHP への影響がないので、元のバージョンに戻すのも簡単です。
PHP5.4 を導入するのに躊躇している人、一度試してみて下さい。
- コメント (Close): 0
- トラックバック (Close): 0
PHPソースをコーディング規約に合わせて修正してくれるPHP Coding Standard Fixer
- 2012-05-22 (火)
- PHP
PHPソースをコーディング規約に合わせて修正してくれるツール「PHP Coding Standard Fixer」を試してみました。
PHPでコーディング規約チェックツールとしては PHP_CodeSniffer が有名です。PHP_CodeSniffer はソースをチェックして、問題点を指摘してくれるのですが、ソースの修正は自分で行う必要があります。
PHP Coding Standard Fixerは、コーディング規約チェックだけではなく、規約に従っていないソースを修正してくれるツールです。
PHP Coding Standard Fixerを使う
インストール
インストールは簡単で、githubで公開されている php-cs-fixer.phar ファイル をダウンロードしてくるだけです。
実行する
ダウンロードしたphp-cs-fixer.pharファイルをphpコマンドで実行します。
第2引数には対象のPHPファイル、もしくはPHPソースディレクトリを指定します。ディレクトリを指定した場合は、そのディレクトリ以下の全てのソースが修正対象となります。
$ php php-cs-fixer.phar fix /path/to/dir $ php php-cs-fixer.phar fix /path/to/file
コーディング規約(修正ルール)には PSR-1, PSR-2 の一部のがデフォルトで含まれています(PSR-1, PSR-2はまだ策定中:2012/05/22)。–level オプションで適用するコーディング規約を指定することができます。–levelを指定しない場合は、–level=allと同じになります。
$ php php-cs-fixer.phar fix /path/to/file --level=psr1 $ php php-cs-fixer.phar fix /path/to/file --level=psr2 $ php php-cs-fixer.phar fix /path/to/file --level=all
実際に適用されるルールはgithubに記述があるので、こちらを参考にして下さい。
https://github.com/fabpot/PHP-CS-Fixer
PHPソースを修正してみる
試しに以下のようなソースで試してみました。
このソースに php-cs-fixer.phar を実行します。
$ php php-cs-fixer.phar fix php-cs-fixer-sample.php #!/usr/bin/env php 1) /path/to/php-cs-fixer-sample.php
修正されたソースです。なにやら変更されていますね。主な変更箇所は以下です。
- 不要なuse文を削除
- インデントが4spaceに
- クラス宣言の開始ブレースが次行に
- PHP開始タグが <? から <?php に
- return文の前行を一行開ける
Vimプラグイン
Vimプラグインが公開されており、Vim上からPHP Coding Standard Fixerを実行することができます。
https://github.com/stephpy/vim-php-cs-fixer
自動で修正は楽
まだツール自体が荒削りで、対応しているルールが少ない、対応ルールとして挙げられているものが適用されなかったりしますが、発想としては面白いツールだと思います。日々開発しながら使っていけば、自然とコーディング規約に沿ったソースにしていけるので、これは便利です。
このツールでは実際にソースを変更してしまうので、万が一を考えて、修正後は自動テストを実行するようにしておくと安心ですね。
- コメント (Close): 0
- トラックバック (Close): 0
PHPカンファレンス関西2012を開催しました
5/12に大阪産業創造館で PHPカンファレンス関西2012 を開催しました。
昨年に引き続き大阪市内でPHPカンファレンス関西2012を開催しました。イベント当日は多くの方にお越し頂き、セッション、懇親会を通じて盛り上がりました。
協賛頂いた各社様、スピーカーのみなさん、参加されたみなさん本当にありがとうございました。
個人的なトピックはこちらに書いたので、ここでは実行委員長として見たカンファレンスを書いてみたいと思います。
好きやねんPHP!
今回のテーマはずばり「好きやねんPHP!」でした。
PHPは何かと揶揄されることが多い言語です。PHPが嫌いな人が揶揄するだけでなく、PHPが好きな人、PHPを使っている人も自虐的にそういった発言をすることがあります。そこで、カンファレンスの時間くらいは、PHPの良いことろを見直して、好きになってみましょう!ということをオープニングで話しました。
テーマを決めるにあたってスタッフ間でも話したのですが、そもそも、なんでこういったイベントを開くか、の原点はまさにこれなんですね。
カンファレンスのクロージングで「PHPを好きになった人!」と聞いたところ、ほぼ全員の手をあがりました!(「もっと好きになった人!」を聞けば全員だったのに、聞き忘れてました><)
今後もPHPが好きなら恥ずかしがらずに堂々と「PHPが好き」と言いましょう:D
2会場でマルチトラック、セッションは一般公募
カンファレンス全体で見ると、昨年との大きな違いは、会場を2会場にしてマルチトラックにしたこと、そしてセッションを一般公募したことです(昨年は LT のみ一般公募)。
この試みはどちらも正解でした。セッション数増加+一般公募で、初心者向けから上級者向けまで、内容もPHP言語、クラウド、CMS、フレームワークと幅広いセッション構成を組むことができました。
どのセッションも興味深い内容でかつ発表自体もレベルが高いものばかりでしたので、参加された方にも楽しんで頂けたかと思います。
当たり前のことですが、やはりカンファレンスで最も大事なのはセッションだということをあらためて感じました。スピーカーの皆さん本当にありがとうございました。
なお当日録画したセッションの動画をカンファレンス公式サイトで公開していますので、ぜひご覧下さい。
スタッフのみんなに拍手
Twitterやblogなどを見ていると、運営についてお褒めの言葉をいくつか頂きました。スタッフ全員が手弁当で運営しているだけにこういった言葉は何よりも励みになります。ありがとうございます!
実行委員長の自分から見ていても、スタッフのみんなの働きは素晴らしかったと思います。
イベント経験豊富なメンバーがいたことも大きいですが、それぞれがそれぞれの持ち場で的確に動いてくれました。当日、自分はほとんど何もしていないのですが、スムーズにイベントは進んで行きました。
こうして良いメンバーと一緒にイベントができたことは幸せなことです。このメンバーでなら、誰が実行委員長をやっても、きっと上手くいくと思います。みんな、本当にありがとう。
また楽しいイベントを!
昨年のカンファレンス、勉強会、そして今年のカンファレンスで、「関西でPHPのイベントを開催する」という流れは作れたと思います。今後はぜひその流れに乗って、イベントを企画や運営、そして発表する人が増えていくと良いですね。
カンファレンスのような大きなイベントは来年になるかもしれませんが、勉強会は開催していくつもりです。またみんなで楽しいイベントをやりましょう!
おまけ:実録!実行委員長の一日
実行委員長って何するの?という話があったので、カンファレンス当日の自分の行動を書いてみました。あらためて見ると何もしてないですね><
8:30
朝一、事務所にスタッフ(@BiMihoujyun、@poego、@masa0221)と荷物取りに行く。
協賛企業さんの配布パンフ、カンファレンスパンフ、ステッカー、マジックやテープ等の文房具、電源タップ、懇親会景品などをタクシーで会場へ運ぶ。
Facebookを見ると公式サイト、パンフ、ステッカーをデザインしてくれた@nowebnolifeが体調不良で無念の欠席。パンフ、ステッカーのお披露目だっただけに残念。
9:10
産業創造館1Fカフェでスタッフ集合。軽く打ち合わせ(というか雑談)
9:20
鍵を受け取って、4F会場へ。それぞれ持ち場でセットアップ開始。
みんなは、受付ブース作ったり、スライド流したり、音響チェックしたり、電源並べたり。特にUst班の@spice_oが大忙し>< 手が開いている人はひたすら配布パンフをクリアファイルに詰めていく。
何するわけでもなくウロウロしてみんなを見守る。
9:40
ブース出展の協賛企業さん到着。挨拶後、ブース設営を見守る。
9:50
オープニングムービー用にスタッフ写真撮影。
ちょうどみんな集まったから、昨年と同じく円陣組もうと思ってけど、みんな忙しそうにそそくさと持ち場に戻っていった。ちょっと寂しい。
10:00
開場。廊下で待って頂いていた方が続々と中へ。
入場を見守りつつ、色々な人にご挨拶など。
10:30
カンファレンス開始。まず@ixcy力作のオープニングムービーから。
ムービーを壇上で見つつ、ちょっとグッと来てた。朝一で感動するやつはダメだよ><
オープニングでは普通に「うんうん」の練習をしたり。みんなノリが良くて嬉しくなった:D
張り切ってピンマイクで話したは良いが、終わった後もマイクがオンになっていて、しょうもない話が会場中に筒抜けに。。。
10:40
基調講演開始。
LT までは前に出ることはないので、6Fの様子を見に行ったり、あちこちウロウロ。
6Fに行くと @slywalker、@bren_boss、@masa0221、@papettoTVがセットアップしてた。実に頼もしい。
4Fに戻ってセッションを@sigesabaの後ろで聞く。チラ見すると黙々と @kphpug アカウントで tweet してた。仕事人だ。
11:30
6F セッションも開始。
@tenshowがすごいレンズで写真をバシバシ撮ってた。おおよそ趣味のカメラには見えない。
Twitterを見ると何やら忍者がいるらしい。4Fの展示ブースへ向かう。忍者と名刺交換というレアな体験。
合間合間で司会の@BiMihoujyunと進行について打ち合わせ。
12:15
午前中終了。今のところ問題らしい問題はなし。順調に回り出したので一安心。
というか問題があっても、その場でみんな解決するから、特に把握せず(いいのか?)。
一人ぼっちで昼食取っているのを@heavenshellに激写される。
13:10
午後セッション開始。セッション聞きつつ、相変わらずウロウロ。
なんかウロウロしてるけど、これと言ったことはしていない。
14時過ぎにイベントマスター@ixcyが別件のため無念の離脱。おつかれっした!
ふと受付ブースをのぞくと@d_sak、@yukarin33、@yamamasa、@poegoが何やら楽しそうにやってた。なんかキラキラして見えた気がしたが、けっして若さのせいではないと自分に言い聞かせる。
みんな進んであれこれアイデアを出してやっている。ホントすごい。
15:00
最後の LT に向けて準備開始。もちろん目玉のドラ娘さんも準備。
LT 順番抽選スクリプトを引きずり出したり、司会の@msngと打ち合わせたり。
壇上そばにいる撮影班@omoonの表情が固い。セッション前はなんだか落ち着かないね。
15:30
LT開始。自分の番はさらっと終わった。CakePHP2 の cookbook は良い。
他の人はみんなレベル高い。やっぱり LT は盛り上がる。
そしてドラ娘さんが適任すぎる。PHPカンファレンス関西はドラ娘充だ。
16:20
エンディング。ちょっと気のきいた言葉でも言えば良いのに思いつかず。
「もっとPHPが好きなった人!」は絶対に聞くべきだったorz
イベント最後に壇上から見る光景は素晴らしい。みんな良い笑顔!
希望者だけで集合写真。みんな良い笑顔:D
17:00
懇親会受付開始。懇親会開始までは色々な人とお話できた。
17:30
懇親会開始。開始の挨拶は準備で大奮闘の@nano_eight。
@msngの軽妙な司会で進んでいく。歓談、じゃんけん大会、LT。LTは笑いすぎて苦しかった:D
ここでもドラ娘と忍者が大活躍。
20:30
楽しい時間はすぐ過ぎるもの。最後も@nano_eightがしめて終わり。今年はバッチリしめてくれた。
21:00
もろもろ撤収。
最後にスタッフだけで簡単に〆。こういう時はかっこいいことが言えるようにちゃんと考えておこう。
- コメント (Close): 0
- トラックバック (Close): 0
CakePHP における Mass Assignment 脆弱性対策
- 2012-03-12 (月)
- CakePHP
Rails 界隈で話題の Mass Assignment 脆弱性を CakePHP で防ぐ方法です。
Github に Mass Assignment 脆弱性が発見されて、Rails 界隈で話題になっています。この問題自体は目新しいものではなく、Rails 自体の問題というより、Rails アプリケーションの作り方の問題ということで、以前から作る側が注意を払う必要がありました。
この Mass Assignment 脆弱性は、Rails を手本に発展してきた CakePHP アプリケーションでも同様の問題が発生する可能性があります。知っている人には常識なのですが、まだ知らない人もいるかと思うので、CakePHPにおける対策方法を書いてみます。下記コードはCakePHP2系を想定していますが、考え方はCakePHP1系でも同じです。
Mass Assignment 脆弱性
CakePHP における Mass Assignment 脆弱性は、フォーム(多くはFormHelperで作成)からPOSTで送信された値をモデルに渡す時に発生します。
例えば、以下のようなフォームの場合、一見するとnameだけが送信されるように見えます。このフォームをブラウザで表示して入力内容を送信すれば、もちろんnameだけが送信されます。しかし、フォームというかHTTPリクエストは自在に改変できるので、nameの他にemailでもpasswordでも何でも送ることができます。
app/View/User/edit.ctp
<?php echo $this->Form->create('User'); ?>
<?php echo $this->Form->input('name'); ?>
<?php echo $this->Form->end('submit'); ?>
コントローラで見ると、edit()メソッド内で、$this->request->dataの値をそのままUser#save()に渡しています。サンプルコードなどではよくある書き方ですが、$this->request->dataに本来想定していないパラメータが含まれていても(上記フォームで言うところのname以外)、usersテーブルにカラムが存在すれば、送信された内容がそのままデータベースに保存されてしまいます。
app/Controller/UserController.php
<?php
App::uses('AppController', 'Contoller');
classs UserController extends AppController {
public $uses = array('User');
public function edit() {
if (!empty($this->request->data['User'])) {
$this->User->save($this->request->data);
}
}
}
これを悪用すると、本来入力フォームでは変更して欲しくないカラム(例えば管理者フラグや権限、もしかするとポイント数など)を外部から操作することが可能となります。
さらにModel#save()では、与えられた引数にプライマリーキー(多くはid)が含まれていると、その値にマッチするレコードをupdateしてしまいます。つまり新規追加フォームのつもりが、任意のレコードを変更されてしまう可能性があります。
この問題、実は意識しておかないと結構影響が大きいです。
対策1. SecurityComponent を使う
対策として、SecurityComponent を使う方法があります。SecurityComponentをコントローラの$componentsに記載しておけば、自動的にフォーム改ざんチェックが有効となるので、フォームを改ざんして任意のパラメータを送信してもエラーとなり、アクションメソッドが実行されません。
対策2. save()に渡す値を設定する
対策1でも対策にはなるのですが、本質的な問題は$this->request->dataに意図しないパラメータを含まれているのにそのまま処理してしまうことです。そこで、処理対象のパラメータのみを抽出して、save()には抽出したパラメータを渡すようにします。
下記がサンプルです。$dataに処理対象のパラメータだけをセットして、save()には$dataを渡しています。これにより意図しないパラメータが送られてきても、save()に渡されることはありません。
public function edit() {
if (!empty($this->request->data['User'])) {
$data = array(
'name' => Set::extract($this->request->data, 'User.name'),
);
$this->User->save($data);
}
}
不十分な対策 save()の第三引数に更新対象カラムを渡す
save()の第三引数に処理対象カラムを指定することで、意図しないカラムへの更新を防ぐという方法があります。
下記のようにsave()の第三引数にarray(‘name’)を指定して、nameのみを更新対象とします。この方法なら更新されるカラムはnameに限定することができます。しかし、$this->request->data[‘User’]にidが含まれていると、そのidに該当するレコードが更新されるという問題が残ります。つまり更新カラムはnameのみですが、その対象レコードは任意に指定されてしまいます。
public function edit() {
if (!empty($this->request->data['User'])) {
$this->User->save($this->request->data, true, array('name'));
}
}
便利機能には注意を
$this->request->dataをそのままModel#save()に渡して処理する。この方法は簡単だし、スマートに見えます。しかし、上で見てきたように意識しておかないと意外な落とし穴にはまります。
このあたりは手を抜かずにきっちりと処理対象パラメータのみを抽出してsave()に渡すという方法が問題も起こりづらいし、挙動も把握しやすいと思います。意識していなかった人はご注意を。
- コメント (Close): 0
- トラックバック: 1
PHPカンファレンス関西2012を開催します
PHPカンファレンス関西2012を5/12に開催しますよ!
すでにご存知の方も多いかと思いますが、昨年盛り上がったPHPカンファレンス関西をまたまた開催します。
イベントの概要と現在募集している内容をご紹介します。
PHPカンファレンス関西2012
今年はゴールデンウィーク明けの5/12(土)に開催します。会場は昨年と同じく大阪産業創造館(産創館)です。
カンファレンス公式サイトを公開しています。今後、参加者申込やセッション発表などイベントに関する情報を公開していきますので、こちらも見てみて下さい。
・名称
PHPカンファレンス関西
・開催日時
2012年5月12日(土)10:30-16:40(10:00開場)
・開催場所
大阪産業創造館 4Fイベントホール 6F会議室(A・B)
http://www.sansokan.jp/
・テーマ
「好きやねんPHP!」
・参加費用
無料
・定員(予定)
250名
PHPカンファレンス関西2012の特徴を3つ。
1. テーマは「好きやねんPHP!」
今回のテーマは「好きやねんPHP!」です。
このイベントが何のイベントなのか、という原点に立ち返って、とにかくPHPが好き!という思いを全面に出していきます。
2. 会場が2会場、マルチトラックに
会場は、昨年開催した「イベントホール」に加えて、「6F会議室」の2会場となります。
会場が増えたということで、マルチトラックが可能となり、セッション数も大幅に増えます!
マルチトラックの利点はセッション数の増加だけではありません。大事ななのは参加するセッションを選択できる、ということです。同じ時間に開催される2セッションのうち、参加したいなあと思う方を自由に選ぶことができます。
どちらも聞きたい!ということになりそうですが、「選べる」というのは嬉しいですね。
3. セッションを公募に
そしてそして最後にここにつながります。
今年は LT だけではなく、本セッションについても公募を行います。
もちろん昨年同様、どなたかにセッションをお願いすることも考えていますが、公募による本セッションを行います。
発表内容はPHPに関するものなら何でも ok です。エンジニア向けだけではなく、デザイナー向け、オペレータ向け、初心者向け、なんでも来いです。
今回のテーマもマルチトラックにしたのも、全てこのセッション公募を実現するためです。ぜひバラエティに富んだセッションを開催したいと思うので、皆さんからの応募をお待ちしています!
募集しています!
現在、PHPカンファレンス関西2012では、以下の内容を募集しています。
セッション発表者募集
上記でも書きましたが、セッションで発表して頂ける方を募集しています。
まさにこれが今回のイベントの肝です。ここ関西で開催されるカンファレンスで発表してみましょう!
発表に興味はあるけど、勇気が出ないという方には、この言葉をオススメします。
「君の当たり前に僕らは感嘆させられるんだ」
セッション発表者募集に関する詳細は下記からどうぞ。
セッション発表者を募集しています。 – PHPカンファレンス関西2012
スポンサー募集
PHPカンファレンス関西2012に協賛頂けるスポンサー企業を募集しています。
関西はもちろんのこと、関西外からもPHPユーザが数多く集まるイベントです。これまでこういったイベントへの協賛をされていない方も大歓迎ですので、お気軽にお問い合わせください。
スポンサー募集に関する詳細は下記からどうぞ。
スポンサーの募集を開始しました – PHPカンファレンス関西2012
スタッフ募集
イベント運営をお手伝いして頂けるスタッフを若干名募集しています。とくに今回は会場が増えたので当日にお手伝い頂ける方をお待ちしています。
イベントは参加するだけでも楽しいですが、運営に関わるとまた違った視点でイベントを見ることができます。個人的にはスタッフをやっていて好きなのは、参加している人たちの笑顔ですね。とくに懇親会の最後に壇上から見ると、ほんとみんな良い表情をしてるんですね。そうした光景を見ると「あーほんとにイベントやって良かったなあ」を感じます。
一緒に参加している人を笑顔にしてみませんか?
スタッフ募集に関する詳細は下記からどうぞ。
スタッフを募集しています – PHPカンファレンス関西2012
5/12は大阪産業創造館へ
5月開催ということで、まだ少し時間がありますが、まずは5/12の予定を確保してお待ち下さい。(遠方の方も今なら飛行機の早割も間に合いますよ:D)
今後、準備が整い次第、参加者募集などを開始していきますので、公式 Twitter(@phpcon_kansai)、Facebook(pcon.kansai)をフォローして下さいね。
では、今年もPHPカンファレンス関西をよろしくお願いします。5/12は大阪産業創造館でお会いしましょう!
- コメント (Close): 0
- トラックバック: 1
blogに使える、わかりやく伝える3つの技術
- 2012-02-27 (月)
- book
「わかりやすく<伝える>技術」からblogに使える3つのテクニックをご紹介。
テレビでお馴染みの池上彰さんの著作「わかりやすく〈伝える〉技術」を読みました。
タイトルどおり、とても読みやすく、分かりやすい内容になっています。読んでいると池上さんがテレビでお話されているかのように、すんなりと頭に入ってきます。
随所に<伝える>技術が盛り込まれているのですが、その中から、blogを書くのに使える技術を3つご紹介しましょう。
1. 伝えたいことをはじめに書く
最初の一文にこのエントリで伝えたいことの概要を簡潔に書きます。
こういったリードがあると、読み手はエントリ自体が何に関するものなのか、どういった方向に話が進むのかというのを理解することができます。この本で言うところの「地図を渡す」ということですね。
全体の流れとしては「概要 or 結論 -> 記事 -> 結論」となります。はじめに提示した結論が良い前フリとなり、記事本文を迷わずに読むことができて、最後は「なるほど」と腑に落ちます。(もちろん内容が伴わないといけないですが)
最初の一文が大事なのは、エントリが読みやすくなるだけではありません。
ソーシャルメディアでは、エントリの序文が掲載されることがあります。はてなブックマークでは、エントリの書き出しのあたりが掲載されます。Twitterでもblogエントリの序盤をtweetするbotがいます。はじめにエントリの内容を簡潔に書いておけば、より多くの人に見てもらえる可能性が広がります。
はてなブックマーク
ねえ、ねえ、大変!
では分かりやすいリードを書くにはどうすれば良いでしょうか?
ユニークな方法が紹介されています。
相手に自分が体験したことを面白く伝えたい。自分の気持ちをわかってほしい。
そんたとき、まず、「ねえ、ねえ、大変」という言葉から始まる文章を考えましょう。
この言葉の後にエントリで伝えたいことを書けば、それが自然とリードになるという方法です。
例えば、「ちょー聞いてーや、この本めっちゃ面白いで!」というのがまず伝えたいことで、その後に「この本は池上彰さんが書いた本でな、分かりやすいわ−」というように伝えたいことの肉付けをしていきます。
これは友人や家族へ話す時は自然とやっていることですね。誰かに伝えるつもりで書いていけば、自然とリードをまとめることができます。
2. 文章を短く切る
これは目から鱗というか、恥ずかしくなったというか、安心した技術です。
短い簡潔な文章を重ねるより、長く小難しそうな文章を書いたほうがなんだかかっこ良く思えて、ついつい一文を長めにしがちでした。これをこの本ではバッサリと一刀両断しています。
たとえば、三つの荷物(要素)を、相手(聴き手)のもとに届けるとします。三ついっぺんに運ぼうとすると、ヨタヨタしてしまい、なかなかたどりつけません。一回に一つだけにすれば、簡単に届けられます。それを三回繰り返せばよい。原稿も同じ事だろうと考えました。
考えてみると当たり前のことですね。伝えるために表現として文章を書いているのだから、伝わりやすい方法で書いた方が良いに決まっています。
引用した文章は、まさに短い文で構成した好例です。読んでみるとポンポンとリズム良く文章がやってきます。実にわかりやすい。
短く文章を切る効果は他にもあります。
一つの長い文にすると、文章の中身の要素同士が論理的につながっていなくても、まるでつながっているように思えてしまうのです。たとえば、「〜で、〜ということから、〜といえる」などと文をつなげていくと、論理的な文章に見えてしまうことがあります。
長い文章を書くと書いてる本人も気づかず「それっぽい」文章になってしまうため、論理的につながっていない文章を書いてしまうことがあります。読み手としては「それっぽく」は見えますが、意図がうまく伝わらないため、「結局何が言いたいんだろ?」という感想を持つかもしれません。
短い文にすると、このごまかしが効かないので、意図を明確に伝えることができます。
3. 三の魔術
日常的によく言われていることですが、なぜかこの3という数字はおさまりが良いです。
「大事な事は一つだけです」でもいいのですが、もういくつかあったほうがありがたい気がします。「二つあります」でも「え、二つでいいの?」という物足りない気分になります。それが「四つある」だと、今度は多い印象を受けてしまいます。
伝えたいことが5つあっても、優先順位を考えてとにかく3つに絞ります。これは3という数字が良いというだけでなく、制限をかけることで伝えるポイントをより明確にすることができます。
書き手としても、5や10伝えることを考えるのではなく、たった3つに絞ればすれば良いので、書きやすくなるというメリットもありますね。
<伝える>人には必読の書
本書にはこのエントリで紹介した3つの技術に限らず多くの技術が紹介されています。
「図解する」「プレゼンテーション資料から話す内容を調整する」「パワーポイントにパワーポイントを使う」「具体例を示す」「接続詞の使い方」などなど参考になる技術がたくさん紹介されていますが、三の魔術に従い、あえて3つに絞りました:D
日々の暮らしでは、blogに限らず、ありとあらゆる場面で「伝える」という行為が行われています。
本当はこう言いたいのに、もっと上手く伝えたい、わかりやすく話したいという方にはオススメの一冊です。新書なので持ち運びにも便利なので、ぜひ手にとって読んでみて下さい。
- コメント (Close): 0
- トラックバック: 0
PHPUnit テストケースで書き換えた値を復帰する
- 2012-02-09 (木)
- PHP
PHPUnitのテストケースで書き換えた値の復帰について。
テストケースでテストを記述する際に、スーパーグローバルやクラス変数を書き換えることがあるのですが、これらの値を書き換えたまま、別のテストを実行すると書き換えられた状態でテストが実行されるので、それらの値に依存した処理があるとテストが通らないことがあります。
PHPUnitでは、そういったテストをまたがって影響を及ぼすであろう値の保存、復帰を自動で行なってくれる機能があります。
スーパーグローバル
デフォルトでは、各テストメソッドを実行する前に、スーパーグローバル変数($_ENV, $_POST, $_GET, $_COOKIE, $_SERVER, $_FILES, $_REQUEST)の値をが保存されており、テストメソッド終了後にそれらの値がスーパーグローバル変数へ復帰されます。
これらの処理はsetUp()/tearDown()の外側で行なわれており、setUp()の前に値の保存、tearDown()の後に復帰されるので、スーパーグローバル変数については値の保存と復帰を自分で書く必要はありません。
下のソースでは、テスト開始前にスーパーグローバルの内容を保持しておき、実際に値の復帰が行われているかを確認しています。
なお、以下のいずれかの方法で、この機能を無効にすることもできます。
- phpunitコマンドで「–no-globals-backup」を指定
- アノテーションで「@backupGlobals disabled」を指定
- テストケースのインスタンス変数「$backupGlobals」にfalseを指定
また、インスタンス変数$backupGlobalsBlacklistに値の保存、復帰したくない変数名を連想配列で記述するとその変数だけ保存、復帰を避けることができます。
しかし、この機能を無効化するとテスト内で書き換えたスーパーグローバルの値が別のテストでも使用されてしまい、実行結果に影響を及ぼしてしまう可能性があるので、通常はデフォルトのまま有効にしておく方が良いでしょう。
クラス変数
PHP5.3以降の環境では、テスト実行時にユーザが定義しているクラスのクラス変数についてもスーパーグローバル変数と同様に値の保存、復帰を行うことができます。
ただし、デフォルトでは有効となっておらず、以下のいずれかの方法により有効となります。
- phpunitコマンドで「–static-backup」を指定
- アノテーションで「@backupStaticAttributes enabled」を指定
- テストケースのインスタンス変数「$backupStaticAttributes」に true を指定
この機能を用いると、これまでテストが困難だと思われていたSingletonパターンのクラスについて別のテストケースの影響を受けることなくテストすることができます。
下のソースでは、Sigletonで実装したクラスのクラス変数(private)の値が復元されているかを確認しています。
この処理は GlobalStateクラス(PHPUnit/Util/GlobalState.php)の backupStaticAttributes メソッドで実行されます。値の保存、復帰には Reflection が使われており、protected/private な変数についても setAccessible(TRUE) を実行して値をアクセスしています。
Reflection を使って値を取得するには分かりやすいサンプルになっているので、興味がある方はソースを読んでみて下さい。
PHPUnitは奥深い
PHPのxUnitツールとしてはデファクトスタンダードとなっているPHPUnitですが、実に多くの機能があり、まだまだ把握できていません。
全ての機能を使わずともテストは書けるのですが、今回のスーパーグローバルやクラス変数の保持、復元のように知っていればより勘弁にテストが書ける機能があります。
こういった機能を知って、より簡単に楽にテストが書けるようにしていきたいですね。PHPUnit勉強会でもやろうかな。
- コメント (Close): 0
- トラックバック: 0
蕁麻疹のため禁酒してます
- 2012-02-02 (木)
- 雑記
蕁麻疹ができて痒みに苦しんでたという話。
昨年からのバタバタぶりが少し落ち着いてきた1月中旬、足に肌色の蕁麻疹が出てきました。はじめは少し痒いくらいだったのですが、日に日にひどくなり、ついにはとても強い痒みが来て、掻くと余計に痒みが強くなるというやっかいなものになりました。
実は、こうした蕁麻疹は2年前にも体験していて、その時は初夏だったので、汗なんかも関係あったのかなあと考えていたのですが、まさかこんな冬になるとは思いませんでした。
夜になると痒みが強くなり、起きている間はできるだけ掻かないように意識できるのですが、いざ寝てしまうと無意識のうちに掻いてしまい、それでさらに痒みが強くなって掻くという悪循環になってました。さらには強い痒みで何度も起きてしまい、掻いたことの罪悪感も相まって、ろくに寝れずに会社に行く日もありました。
前回の時は、はじめに行った病院との相性が悪くて、この辛い時期が長かったのですが、最終的には良い病院と出会い、2ヶ月程で治りました。
その点、今回はすぐに良い病院に行くことができ、1週間経ったあたりでかなり落ち着きました。今は発作的な痒みは無くなったので、心穏やかに眠れるようになりました:D
いつかまたなるかもなので、対処法をメモしときます。(この対処法は自分がうまくいった方法で、人によっては効果が無い、もしくは逆効果の可能性もあります。治療する際は病院等で相談して下さい。)
1. 痒くなってきたら、冷やす
冷やせば、その瞬間は痒みがおさまります。
逆に温めると痒みが増します。夜寝ている間に痒みが来るのも、温かい毛布にくるまって寝ているのもあるでしょうね。。。
2. 早く病院に行く
発作的な痒みがくる状況になると、もう病院に行って薬をもらった方が良いです。放っておいてもひどくなる一方でした。
病院で出された薬は以下。
- セレスターナ配合錠(飲み薬:朝夕食)
- アレロックOD錠(飲み薬:朝夕食)
- ステロイド剤(塗り薬)
3. 症状を緩和する市販薬
いくつか市販薬も試したのですが、一番効果的だったのはこの薬でした。
ジェルタイプの塗り薬でスーッとする成分が入っているので、痒みを冷ましてくれます。正直痒みを取る目的では病院でもらったステロイド剤より効果がありました。
![]() 【送料490円・税込5000円以上で送料無料】2/2 10時~ エントリー&3ショップ購入で最大10倍!ア… |
4. 調子に乗ってお酒を飲まない
蕁麻疹の原因は医者曰く「アレルギー」だそうです。
原因をあれこれと考えてみたのですが、痒みがきた頃に特に変わったものは食べていないし、生活環境も特に変わったことはなく、これ、と思い当たるものはありませんでした。
強いて言えば、正月頃から毎日お酒を飲んでいたくらいですかね。家で飲むのもそうですが、新年会やイベントやらで外で飲む機会もあったので、元来アルコールが得意で無い自分にとってはオーバーペースだったのかもしれません。
お酒が直接の原因ではないかもしれないですが、アルコールで血流が良くなると痒みが増すので、良くはないです。
そういえば2年前の時も暑くなりはじめた頃で、毎日梅酒を飲んでいたから痒くなったと思い、その後禁酒していたのを後から思い出しました。。。
痒みを舐めたらダメ
経験がある方なら分かりますが、あの発作のような痒みはホントに辛いものです。さらに掻きむしってしまった後の激しい自己嫌悪、あれも苦しいですね。
お酒が原因かははっきりしてませんが、「それ以上飲んだら体壊すぞ」という体からのサインだと思うので、完治するまでは禁酒を、完治してもほどほどにしたいと思います。
というわけで、宴の席ではしばらくウーロン茶になりますので、ご承知おきをm(_ _)m
- コメント (Close): 0
- トラックバック: 0
2012年は変化の年
- 2012-01-29 (日)
- 雑記
気がつけば、もう1月が終わろうとしていますが、今年最初のエントリです。
昨年秋ごろから本業でバタバタとしていて、貧乏暇なしを体現するがごとく仕事に明け暮れていたら、気がついたら年が開けていました。
いちおうまだ1月なので、まずは昨年の振り返りを。
2011年
昨年も色々とあったのですが、イベント関連を振り返ると印象深かったのはやはりPHPカンファレンス関西を開催できたことです。
毎年、東京で行われているPHPカンファレンスのような大きなイベントを、地元関西でも開催したいという想いがずっとあったので、それが無事に実現できたことは大きな意味がありました。
このイベントを運営したスタッフが母体となって、Kansai PHP Users Group(kphpug)を立ち上げました。カンファレンスや勉強会といったPHPに関するイベントの開催を通じて、関西のPHPerが交流出来る場を作っていきたいと思います。
また、JAWS-UG大阪にスタッフとして関わるようになりました。あまりスタッフらしいことはしていませんが、これまで接することが無かった人たちと新たに交流できるようになりました。これも昨年の大きな変化でした。
2011年に参加したイベントを並べてみました。
こうして見ると、年初の「CakePHP勉強会」と「appengine ja night #13」以外は全て関西で開催されたものばかりです。関西が盛り上がるのは良いことですね。
- 第2回関西アンカンファレンス
- CakePHP新春勉強会 東京
- appengine ja night #13
- Japan AWS User Group (JAWS) – Osaka勉強会 第1回
- PHPカンファレンス関西
- Japan AWS User Group (JAWS-UG) – Osaka勉強会 第3回
- 第1回関西PHP勉強会
- RxTstudy
- 第一回関西PHP初心者勉強会
- PHP Masturi 2011
- 第2回 関西PHP勉強会
2012年は「変化」の年
2012年は「変化」の年です。
これは個人的にというだけでなく、会社としても、この「変化」というキーワードを今年の目標に置いています。
1×1を個人事業ではじめて12年目、法人化して7期目に入っています。さらにこのblogを書きはじめて6年、OSSのコミュニティ活動に関わって5年が経ちました。
これまで多くの方々とのご縁のおかげでなんとかやってこれました。本当にありがとうございます。
現状維持だけを考えれば、ここ 1, 2 年は色々な面でこのままやっていけそうな感覚はあります。しかし 5年、10年というサイクルで見ると、このまま現状維持を目指していたのでは萎んでいくのが目に見えています。
もちろん、これまでも精一杯取り組んではきたのですが、そろそろそのアプローチを見直す時期に来ているのかなと感じています。これは数年前から薄々は感じていたのですが、昨年あたりからその感覚が強くなってきていて、いよいよ行動に移す、移さないといけない時が来ています。
実は昨年から少しづつ変化の兆しはありました。
一つ例をあげると、kphpug では @BiMihoujyunをはじめとする若いメンバーが中心となり「関西PHP初心者勉強会」というイベントを開催してくれるようになりました。これまでは自分や決まったメンバーが開催していたのですが、こうして若いメンバーが引っ張っていってくれるようになると、また違う盛り上がりをみせてきますね。
仕事面でもこういった変化の兆しは少しづつ見えていて、より先へ進もうとしています。
今年は、こういった変化の兆しを作る、そして実際に変化していく一年にしようと思います。
今年が終わった時に「あー結局、何にも変わらなかったね」ということだけにはならないようにやっていきますので、2012年もよろしくお願いします!
- コメント (Close): 0
- トラックバック: 0
PHP Advent Calendar jp 2011 まとめ
- 2011-12-28 (水)
- PHP
PHPer の年末を彩る PHP Advent Calendar jp 2011 が今年も無事に終了しました。
今年は12/1から12/26まで、全26回に渡って全国の PHPer が PHP に関するエントリを投稿しました。今年は見事に登板日を超す人もいなくて、無事に完走できました。(焼肉奢りの人はいませんでした><)参加された皆さんお疲れ様でした!
エントリ内容
今年もPHP言語についてやライブラリ、フレームワークなど多岐に渡る内容が投稿されました。昨年も様々な記事がありましたが、あえて違いをあげるなら PHP5.4 に関する記事が登場したことでしょうか。
PHP 関連では 5.4 や各フレームワークなど内容を絞った Advent Calendar も開催されていたので、PHP Advent Calendar jp については、普段 PHP を使っていて気になること、つまづいたところ、もっとこうした方が良いよ、といった Tips 的が多く、PHP を使う多くの方に参考になる記事が多かったと思います。
他にも、PHP自体のソース解説やフレームワーク論、プロセス制御、hiphop phpなど中級者〜上級者向けのコアな内容や、資格試験、イベント報告、そして退職報告に絡めたエントリなど、盛りだくさんではあるのですが、とてもバランスが取れたラインナップとなりました。
電子書籍化
今年は技術評論社さんのご協力により、Advent Calendar の記事を電子出版して頂ける予定です。せっかくこれだけの記事が集まったのですから、まとめて読めるのは嬉しいですね。
価格は無料で、2012/1 or 2 月頃に提供頂けるようです。みなさんお楽しみに:D
PHP Advent Calendar jp 2011 エントリ
=
- コメント (Close): 0
- トラックバック: 1
- 検索
- フィード
- メタ情報