PHPカンファレンス2011に参加してきた #phpcon2011

今年のPHPカンファレンスは、技術者のための楽しい祭典という立場に立ち戻り、
様々なテーマをちりばめた「ごった煮のお祭り」を目指します!
楽しいお祭りという事で、公募中心のプログラムとなっています。
みなさまのお越しを心からお待ちしております!

PHP自体はPukiWikiを自宅鯖や会社鯖で運用してた関係上、改善等の機会に触っていた程度だったのですが、今回のカンファレンスの存在を知り、またこの際だから基本的な部分位は覚えておこうかなぁ、軽く何か作れる位には覚えたいな〜、といった感じで参加してきました。

開催場所は大田区産業プラザPiO京急蒲田駅から近い場所にある施設です。

今回は以下の講演・セッションに参加(全てのメモは取り切れていません。また、御指摘箇所などありましたら宜しくお願い致します)。

・基調講演:PHPの今とこれから2011(廣川 類さん)
・初心者セッション「もうHello Worldはいらない!」〜テンプレート編集からはじめるPHP入門〜(有限会社アリウープ 柏岡 秀男さん)
・アジャイル開発とTDDを半年間実践してみた顛末と、これから(澤田 径さん)
・PHPとテストとCIと私〜愛するあなたのため〜(yamashiroさん)
・徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011(徳丸 浩さん)

基調講演:PHPの今とこれから2011

  • 廣川 類さん
  • PHPのあゆみ
    • 2000年 Ver4.0でブレイク、PHPユーザー会も発足
    • 2004年 Ver5.0 オブジェクト指向
    • 2008年位にVer6.0が出る予定だったんだけど・・・Unicode関連で紆余曲折を経てキャンセルになった。
    • 2009年06月 Ver5.3
      • これをVer6.0と言っても良いんじゃないか?という位の変更
      • Ver6.0は鬼門らしい
    • 今日話すのはVer5.4について。
    • Ver5.5についてはまだ何が変わるかというところはまだ見えていない。
    • 今年
  • PHP標準リリースプロセス
    • リリースサイクルは1年
    • ライフサイクルは3年(バグ修正2年、セキュリティ修正のみ1年)
    • 同一メジャーリリース(例:5.x)では下位互換性を確保
    • 同一マイナーリリース(例:5.3.x)ではバイナリ互換性を確保
  • PHP5.4 改善・変更のポイント
    • 速度改善:10〜15%
    • Traits:コードの再利用性改善
    • レガシー機能の削除
    • マルチバイト対応強化(mbstring機能強化)
    • (テスト用)組み込みWebサーバ
    • default_charset:ISO-8859→UTF-8
    • エラー設定:E_STRICTがE_ALLに含まれるようになった
  • PHP5.4でより早く、快適に。
    • 更なる高速化、省メモリ化
    • 19%高速化。(5.3と比較)
  • PHP5.4でコード再利用:Traits
    • 単一継承の言語でコードを再利用する仕組み
    • 言語がサポートするコピー/ペースト(多重継承よりシンプル)
    • クラスや他のTraitsとメソッド名の衝突を解決する仕組み
  • PHP5.4で構文が便利に
    • オープンタグの短縮形(テンプレート記述が分かりやすくなる)
    • 配列定義の簡略表記(配列の定義が簡単に)
    • 配列デリファレシング(配列を返す定数/メソッドの処理簡略化)
    • 2進数表現
    • コール可能な引数に対するタイプヒント
  • PHP5.4で日本語の扱いが便利に
    • Zendエンジンマルチバイト対応標準化、バイナリ互換性改善
    • 16進数値文字参照の追加
    • RFC3629準拠のUTF-8にチェック強化(最大4バイト)
    • mbstring(libmbfl)に文字コード追加
      • 携帯用,JIS X0213等...
  • PHP5.4でUTF-8がより安全に
    • RFC3629標準のUTF-8にチェック強化(最大4バイト)
    • PHP5.3まで:最大6バイト、非最短形式を許容/出力しない
    • 非最短形式のUTF-8の例
    • 不正なUTF-8の例
  • 従来の携帯絵文字変換
    • 各キャリアはSJISUTF-8外字領域に絵文字を定義
    • キャリア内変換(SJISUTF-8)、キャリア間変換を定義
    • 独自の変換をライブラリで定義:HTML_emoji, Text_Pictgram_Mobileなど
  • PHP5.4の絵文字変換
    • Unicode 6.0へ絵文字収録:携帯以外でもサポート
    • Unicode 6.0を介したキャリア内/キャリア間相互変換を定義
    • 各キャリア用SJISUTF-8ISO-2022-JPKDDIのみ)を定義
  • PHPとセキュリティ
    • アプリケーション固有の脆弱性
    • 設定に起因する脆弱性
    • システム固有の脆弱性
    • 攻撃手段は日々進化する
    • 初心者だからといって許してくれない
    • 基本を守る
    • 最新の情報を見る(雑誌、ブログなど)
  • PHPとQA
    • PHPのコード品質は比較的高い
    • テストされていないコードには欠陥がある
    • PHP5.3.7でcrypt関数(MD5)が動作しなかった
    • 軽微な未修正の問題についてもテストケースがコミットされFAILする原因となっている。
      • →提案『XFAIL(experimental fail)を導入し、FAILの出現の判別を容易にする』
  • 日本PHPユーザ会
    • 2000年4月発足
    • 非常に緩い組織
      • 設立趣旨:PHPユーザ相互の情報交換及びコミュニティの健全な発展
    • 来年北海道でもカンファレンス実施への動きも
  • PHPの成功と未来
    • Scales:小規模サイトからFacebook/Yahooまで
      • C10k問題、MySQL5.6、gearman
    • Easy to learn:言語がシンプル、ドキュメントが豊富
      • 多様な要求に応えつつ分かり易さを保つことが必要
      • 地道な活動が重要、ローカルなPHPリファレンス、勉強会等
    • Easy to manage:必要十分な現実的な解を提供(Webの進化に対応)

初心者セッション「もうHello Worldはいらない!」〜テンプレート編集からはじめるPHP入門〜

  • 自己紹介
    • PHPユーザ会発起人の一人
    • PHP絡みのを色々やっています
    • Webの何でも屋
    • 火消し案件多数
    • PHPハンドブック出版しました。
    • 会場に来た方特典:直接質問に答えます。
    • 懇親会でプレゼントに出ます。
  • PHP紹介
    • 1995年 Rasmus
    • 初期のコード
      • 結構この頃から面影はある
      • まんまテンプレートエンジン
    • PHPの動作
      • PC→WWW→Apacheが受け取ってPHPのモジュールが動く
      • PHPが一旦パース
    • PHPの特徴
      • 習得が容易
      • 利用可能なプラットフォームが多数
      • HTMLとの親和性の高さ
    • 豊富なOSSアプリ
  • テンプレートMVC
    • テンプレート?
    • VIEW?
    • テンプレート:文書などのコンピュータデータを作成する上で雛形となるデータ。
    • View:表示担当部分
  • MVCとは
    • Model/View/Controller
      • Model:データの集まりを扱う
      • View:表示を司る
      • Controller:全体のコントロールを行う
    • MVCの流れ
      • Controller
        • リクエストの受付
        • Modelから値を取得
        • Viewの選択
    • MVCの利点
      • プログラムのメンテナンス性アップ
      • データはデータで、テンプレートはテンプレートで扱う
      • プログラムとデザインの分離
  • PHPセクション:カスタマイズ
    • 最低限の知識は必要
    • プログラム構築出来る程は必要無し
    • 大体読めば分かります。
    • 関数
      • PHPを行う処理
      • ()がついている
      • 返り値の有無に注意
    • 変数
      • $xxxx で表される
      • echoで出力
      • 条件判定に使われたり
      • プログラムで取得された
  • $echo関数の説明
  • :構文(コロン構文))の説明
    • 通常のPHP構文と違う書き方
    • HTMLタグに近い。
  • if/elseの説明
  • for/do〜whileループの説明
  • foreach/whileの説明
  • 配列の説明

アジャイル開発とTDDを半年間実践してみた顛末と、これから

セッション資料が事前に公開されていたので、メモは少なめ。

  • 立ち位置説明
    • セッションが参考になるかも知れない人
    • セッションがあまりさんこうにならないかもしれないので心配な人
    • 1982年生まれ、札幌育ち。
    • ウォーターフォーラーだった。
    • 半年前にNIJIBOXに転職
    • 細く長くPHPを愛用
  • ニジボックスに転職
    • 携帯向けのゲームを作っている。
    • 現場のスペック
      • ソーシャルアプリの自社開発がメイン
      • 少人数、開発期間は短い
      • チームメンバーが流動的
      • 開発中〜リリース直前まで仕様変更頻繁、常に仕様が変わる
    • この現場ではWFは無理だな・・・
    • アジャイルやってみるか
    • 試しに社内勉強会で『アジャイルラクティス』読んで見よう

アジャイルプラクティス 達人プログラマに学ぶ現場開発者の習慣

アジャイルプラクティス 達人プログラマに学ぶ現場開発者の習慣

  • TDDのコード例
  • ビフォー/アフター
    • テストコードを書くエンジニア増えた
    • TDD導入案件0→3件
    • デグレの報告件数が目に見えて減った
    • アジャイル
      • 実践前に比べて、仕様変更が容易に
        • 相対的見積をを採用
        • 機能単位での開発
      • チーム外への文化の伝播が始まった
        • ホワイトボードが伝播
  • 掛かったコスト(TDDについて)
    • テストコードを書く時間
    • 社内勉強会参加時間
  • これからの課題
    • TDDが自然に社内に伝播→我流TDDが生まれてしまう事への対応
      • 社内でTDD講習会を開く
    • CIが継続出来ていない
      • Jenkins
  • 独断と偏見ベースだけど・・・
    • 顧客の考える価値は常に変わる=仕様も常に変わる
  • いまTDDを学ぶべき理由
    • TDD実践文化は急にはスケールしない
    • PHP/PHPerの人口の割に、テスト人口が少ない(TDDBC調べ)。悔しい!
      • TDDBCでの使用言語数の比較
        • PHP少ない(4件、Javaの3分の1)
          • 話題になってる割にテストされてなくない?
          • TDD実践者・PHPユーザ総数が重なる部分が少ない?
        • 少ない予想
          • 水は低きに流れる
          • 必要性を感じている人が少ない
  • Kent Beck Wtote
    • 保守的な登山家は、4本の手足のうち必ず3本は地面に付けるという習慣を持つ
  • アジャイルの導入方法=価値の説明方法
    • 横文字ばっかり。それらを押しつけないで。
    • 使えそうなプラクティスから使う。
    • 学習コストを常に意識。
  • TDD教材選び:以下の2冊がオススメ!

テスト駆動開発入門

テスト駆動開発入門

Growing Object-Oriented Software, Guided by Tests (Addison-Wesley Signature Series (Beck))

Growing Object-Oriented Software, Guided by Tests (Addison-Wesley Signature Series (Beck))

  • 社内でテストコード書く会を開いたり、TDDBCに参加してみると良いよ!

PHPとテストとCIと私〜愛するあなたのため〜

  • 自己紹介
    • ドワンゴ所属
    • java-ja出身の人
    • 『提供ドワンゴでお送りします』
      • エンジニア募集しています。
      • 『@yamashiroの紹介で』とお伝えください。
    • 生存戦略〜!
    • 僕の理由
      • あなた=僕。
  • 最前線(の一歩手前くらいのところに)配属
    • 長い戦い史
    • 四天王
  • 師曰く
    • 3本柱(←といいつつ四本足の椅子)
      • バージョン管理
      • テスティング
      • 自動化
  • テストの無いコードはレガシーコードだ

レガシーコード改善ガイド (Object Oriented SELECTION)

レガシーコード改善ガイド (Object Oriented SELECTION)

リファクタリング―プログラムの体質改善テクニック (Object Technology Series)

リファクタリング―プログラムの体質改善テクニック (Object Technology Series)

  • 作者: マーチンファウラー,Martin Fowler,児玉公信,平澤章,友野晶夫,梅沢真史
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2000/05
  • メディア: 単行本
  • 購入: 94人 クリック: 3,091回
  • この商品を含むブログ (312件) を見る

  • PHPのバージョンによって標準関数の挙動が違う
    • 違うのならテストを書くしかないじゃない!
  • TDD
  • 今日は結婚式(僕のじゃないよ!)の帰りでスーツでした
  • より自動化をめざして
    • StageHand Test Runner
  • 自動化→CI
    • いつでもリリース可能
    • 問題発生時のチェック
    • コードを綺麗に保てる
  • コミット毎に実行したとする。手動だと…?
    • 1回のビルド5分
    • 1日10回コミット
    • 毎年200日
    • 40年。
    • 400000分=6666時間=833日。
    • 年老いてしまう・・・
  • コンピューターが出来る事はコンピュータにやらせよう。
  • CIツールの定番:Jenkins
    • Why?
      • 導入が簡単。
      • 日本人が開発している。
      • プラグインで拡張が出来る。
  • 導入するには?
    • 1.普通感を出す(地獄のミサワ風に:高等技術を要する)
    • 2.一人で始めちゃう
    • 3.少しずつ始める
  • それでも挫折した時は?
    • レガシーコード第24章:もうウンザリです。何も改善できません
      • プログラムは楽しい
      • 新規に作っても絶えずシステムは変わる
      • 隣の芝生は青く見える。
      • レガシーで成功する鍵は『やりがい』
      • 黄金の回転
      • オアシスが出来ると楽しいもの
      • 五輪の書日本で最初のアジャイラー:宮本武蔵曰く、
        • 『1対1で戦うべし。』

徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011


本日の目玉である『徳丸本』著者の徳丸浩さん。方々から凄さは聞いていましたが、噂に違わずスゴイお方、PHP愛に満ちた方であるという事が感じ取れた講演でした。

  • 自己紹介は割愛。
  • 本を書きました。おかげさまで大増販。

    • 史上最強のレビューア軍団、ありがとうございます。
  • 今日は『10の鉄則』を紹介。

鉄則10:安全なPHP入門書で学習する

  • 安全なPHP入門書って?
    • そこそこでも安全な入門書には出会ったことがない…?
  • 逆引きレシピとかは良いけど、入門書的位置付けとは言い難い。

PHP 逆引きレシピ (PROGRAMMER'S RECiPE)

PHP 逆引きレシピ (PROGRAMMER'S RECiPE)

    • せめてXSSSQLインジェクションくらいは最初から正しく教えて欲しい・・・
    • 一見対策している『つもり』の例
      • (コード例を挙げ、問題点を指摘。
      • 指摘された書籍。(な、名指し…(-.-;)w)

よくわかるPHPの教科書

よくわかるPHPの教科書

鉄則9:入力-処理-出力で適切な対処をすること

鉄則8:安全なSQLライブラリを選定して正しく使う

鉄則7:XSS対策の第一歩はhtmpspecialcharsを上手く使う

鉄則6:ファイルアップロードは罠がいっぱい

  • ファイルアップロードの危険性
    • アップロードしたファイルをPHPスクリプトとして実行される
    • アップロードしたファイルをHTMLと誤認させるXSS
    • 詳しくは徳丸本P.258を参照
  • PHP逆引きレシピのアップロードサンプル
    • 素晴らしい。
    • 残念なところ
      • チェックがきびしすぎてie8以前でpng画像のアップロードがエラーになる
      • ファイル名の生成に現在時刻(秒単位)を使っているのでファイル名の衝突の可能性あり
      • (→徳丸本 P.266)
    • 全体としては逆引きレシピ本、かなりいいよ♪

PHP 逆引きレシピ (PROGRAMMER'S RECiPE)

PHP 逆引きレシピ (PROGRAMMER'S RECiPE)

鉄則5:今時文字コードのセキュリティを気にしなくて良いのは小学生までだよね〜

鉄則4:2010年代のWEBサイトはクリックジャッキング対策をしよう

  • iframeを用いたセキュリティ攻撃手法の1つ。
  • XSRFと同等の影響・危険性がある。(徳丸本P.63等を参照)
  • クリックジャッキングされると困るページには、X-FrAme-OPTIONsヘッダを指定(徳丸本P.63等を参照)
  • CSRF対策のトークンを発行しているページが対象となる。

鉄則3:パスワードの保存はhash(pass.salt)の繰り返し(Stretching)

鉄則2:PHPのバージョンアップにとことん付き合う信念

  • PHPのバージョンアップにタイムリーに追随しよう
    • PHP脆弱性もあるが、基本的には迅速に対応している
    • 基本的にはバージョンアップによりpHP脆弱性対応を行う
    • サイト稼働中のPHPメジャーバージョンアップの可能性を考慮しておくこと

鉄則1:徳丸本を買ってよく読め


以上で個人的にはスケジュールを全て消化。LT以降の予定も組まれていたのですが、ひとまずここまでの聴講でお腹いっぱいになったので満足し、帰宅の途へ。

PHPを勉強するにはまず『徳丸本』を読むことから始めれば良いのだな、という事が良く分かったカンファレンスでした(笑) (←微妙に違うとも言いきれない部分も有るのが徳丸本/徳丸さんの凄さでもある。『初心者本で良いのがない』と嘆いておられたが、それならいっその事徳丸さんが100点の初心者本を出せば良いのに…と思ってみたり。)


その他関連URL: