koogawa blog

iOS、Android、foursquareに関する話題

PHPカンファレンス福岡 2017 #phpconfuk に参加してきたよ

最近はサーバーサイドエンジニアをやっております @koogawa です。

今日は博多にて開催された PHPカンファレンス福岡 2017 に参加してきました。

f:id:koogawa:20170610140029p:plain

福岡での開催は今年で3回目だそうです。

会場はFFBこと、福岡ファッションビルです。

f:id:koogawa:20170610140052p:plain

ちなみに、私がPHP関連のイベントに参加するのは約10年ぶりになります。最後に参加したのはたしか 日本 PHP ユーザ会 (Japan PHP Users Group) :: メイン :: PHPカンファレンス2008 - プログラム概要 だった気がします。

***

以下はイベント中のメモになります。間違いなどありましたらご連絡ください。


PHP7で堅牢なコードを書く - 例外処理、表明プログラミング、契約による設計

セッション内容: PHP はバージョンを追う毎に堅牢なコードを書くための機能が充実してきましたが、 PHP7 ではついに例外や表明の機能が大幅に見直され、強化されました。本講演では、例外処理を設計する際の基本的な考え方や、表明(assertion)の使い方、そして表明と例外を使い分け、堅牢なコードに導くための設計手法「契約による設計(Design by Contract)」の考え方を説明します。

登壇者:和田卓人 (@t_wada)

  • 予防的プログラミング
    • 問題発生を事前に防ごうというコーディングスタイル
    • 「そうなるはずだ」と決めつけない
    • 不正な使われ方をしても被害を受けないようにすること
    • ※悪いコードに絆創膏をあてることではない
  • 攻撃的プログラミング
    • 早めにクラッシュさせる!
    • 障害を抱えて中途半端に動いているプログラムよりも死んだプログラムのほうがダメージは少ない
    • PDOException が発生する設定にする
    • 例外は無視できない!
    • PHP7のassertを使う
  • 契約プログラミング
    • ソフトウェアモジュールの権利と責任を文書化(そして承諾)し、プログラムの正しさを保証するための簡潔かつパワフルな技法
    • 実行時の表明違反(や、バグを示すための例外)は、そのソフトウェアにバグがある証拠である
    • バグと例外を区別し、さらに誰の責任かも見分けられるようにする

API型決済サービスから見る決済の未来

セッション内容: APIへリクエストを送るだけでクレジットカード決済が出来てしまうAPI型決済サービス。導入もとても簡単で、直接カード情報を取り扱わないのでセキュリティ的にも安心です。 そして、各サービスを利用していると決済UIがとても似ていることに気が付きます。これが共通化されれば特別な実装なしで決済が出来てしまいます。

実はW3Cでは昨年からWeb決済 ""Payment Request API"" の仕様策定が進んでおり、一部ブラウザに既に実装されています。 そんなAPI型決済サービスの現状とPayment Request APIを踏まえて決済の未来についてお話します。

登壇者:穴井怜 (@gorou_178)さん

私が今最も興味を持っている分野ということもあり、興味深く聴かせて頂きました。Payment Request API については、恥ずかしながら名前すら知らなかったので、後で詳しく調べたいと思います。

  • API型決済サービスとは
    • 「このクレジットカードに100円課金して」という情報を送信するだけで支払い完了
    • 数行のコードコピペで実装できちゃう
  • API型決済サービスでできること
    • クレジットカード決済
    • 顧客管理
    • トライアル・クーポン
    • 多彩な通貨での課金(APPLEPAY, BITCOINなど)
  • セキュリティは大丈夫なの?
    • PCI DSS に準拠しているので安心
  • 利用審査
    • 審査には時間がかかる
    • 審査に通るまで入金されない
    • 会社にもよるけど、だいたい1ヶ月ぐらいかかる
  • 課題
    • 対応通貨に差がある
    • 支払方法の種類に差がある
      • ○○は対応してるけど〜は未対応
    • 様々な支払い方法に対応するには複数のAPIを導入しないといけない
    • UIがバラバラ
  • 今後の決済の未来
    • BITCOINイーサリアム、Ripple
    • 国境がなくなってきている
    • 決済という共通の仕組みがあればどこでも購入できるようになる
    • 経済を変えてしまうインパクトの有る技術

新卒2年目がサービス開発の際に乗り越えた課題とその解法など

セッション内容: Fusicは、2017/04/01にsigfyという連絡網サービスをリリースしました。 その開発は、登壇者(2016年新卒入社)と、 先輩エンジニア(2015年新卒入社)が中心となって行いました。

既存サービスの機能をCakePHPで完全リプレイスし、機能追加するプロジェクトでした。 登壇者は、このプロジェクトの仕様設計からサービスのリリースまで関わりました。 その過程で数々の問題に遭遇し、それらを解決してきました。 本セッションでは、どのように問題を認識し、解決したのかを発表したいと思います。

登壇者:株式会社Fusic 濱野泰明 (@gorogoroyasu)

  • sigfy
    • LINEとメールに届く連絡網
    • 連絡網と言えば昔は電話だったけど、今は個人情報とかうるさくてできないらしい
    • サービス名は signal fire(のろし)から由来
    • PHP 7.0 + CakePHP 3
  • チーム
    • PO、営業、エンジニア2人
  • PHP 5.6 => 7.0 対応
    • もともとはPHP 5.6
    • いきなり受託で試すわけにはいかないので、まずは自社サービスで試す
    • 実は 5.6 の方がサポート期間が28日も長い
    • 速くなった話はここではしないので懇親会で聴いてね
  • デプロイ方法変更
    • git clone でやってた
      • コマンドが多く、煩雑
      • テストサーバーがどこだかわからない
      • デプロイツールを導入した
    • capistrano を採用
      • コマンド一発で完了するようになった
      • 設定ファイルにデプロイするbranch情報、パス情報、お客様固有の情報を書き込む
  • デプロイの自動化
    • 問題点
      • 設定ファイルが命
      • 間違ったら終わる
      • 黒い画面を開く必要がある
    • 管理サイトを作った
      • 設定ファイルを持たなくて良くなった
      • 非エンジニアもさわれる
  • 大量配信
    • Amazon SESを使っている
    • 送信数に上限がある(1日あたり10000通)
    • ソフトバウンスとハードバウンスをちゃんと管理する

僕達がやってきたレガシープロジェクトとの付き合い方

セッション内容: 弊社で運用している「超」レガシーなプロジェクトの運用改善事例を紹介します。 巷ではPHP 7.x系が話題ですが、サポート切れのPHP 5.3.x系のプロジェクトの話でも聞いて、和やかな気持ちになってください。 キーワードは「安全」で「楽」な「(レガシーだけど)モダン」な運用です。

登壇者:株式会社ハシゴ 渡辺 謙一郎 (@_nabeen)

  • プロジェクト概要
    • いわゆるブラウザゲー
    • 運用歴5年
    • LAMP
    • SVN 管理
    • PHP + Codeigniter + MySQL
    • PHP 5.3(2年以上前にサポート終了)
  • 問題点
    • テストコードが全く無かった
    • エンジニアがini職人化していた
      • エクセル化されたものをエンジニアがini化
    • コードレビューの文化がなかった
      • esa.io で変更点をまとめてレビュー依頼
      • svnにコードレビューの仕組みを淹れるのは簡単ではない
  • やったこと
    • 新規でコミットする部分についてはテストを書いた
    • エクセルから .yml を介して .ini を吐き出すツール作った
    • SubGitという git と svn を同期してくれるツールを使った

Fusicホール/14:15〜14:30 【ゴールドスポンサーセッション】海外からのアクセスを制御する

セッション内容: ホスティングという様々なお客様のいる環境下で、海外IPからの不正なリクエストを効率よく制限するために、検討したことや使用したソフトウェアの紹介をおこないます。 登壇者:GMOペパボ株式会社 田平 康朗

1,800リクエスト/秒の世界

セッション内容: AWSでEC2 2台 + RDSで運用されているCakePHPベースのとあるサービスに、2017年3月1日、1,800リクエスト/秒のアクセスがやってきました。 このアクセスは事前に予定していたことだったので、いくつかの対策をし、無事サーバダウンすることなく乗り切ることが出来ました。

本セッションではこのシステムの設計や、高負荷対策のプランニングと実行、当日の様子などについてお話します。

登壇者:長谷川智希 (@tomzoh)

iOSの勉強会でお世話になっている長谷川さんとPHPの勉強会で、しかも九州でお会いすることができました!

  • 今回の対象システム
  • 負荷がやってくる
    • 就活解禁日は 03/01 0:00 決まっているので、みんな一斉にアクセスしてくる
    • 負荷を想定する
      • Webサーバのスケールアウトで対応したい
      • DBがツラければスケールアップ
  • 負荷がやってきた
    • 予想以上にツライ
    • 負荷をかけ始めた瞬間にレスポンスが悪化し、ELBから外される
    • 5分と持たない
    • いくつかのAPIを静的ファイル化
    • 爆速になった!
    • 今回は3/1を乗り切ればいいのでこの対応で大丈夫

Progressive Web Apps + AMP = PWAMP for PHPer

セッション内容: 通信速度の向上と共に肥大化していくWebページ。いざ低通信速度環境や通信の出来ない環境に来た時に、ネイティブアプリなら通信の必要の無いコンテンツやキャッシュで一見普段と変わらないコンテンツを表示してくれることが多いですが、ブラウザは何も表示してくれませんね? それはあなたのWebサイトが時代に追いついていないからなんです。

Progressive Web Apps -> Service WorkerやApp Shellを有効に実装・活用することで、オフライン環境でもアプリ感覚でWebサイトをユーザーに届けることが出来ます。 Accelerated Mobile Page -> パフォーマンス向上の為に制約を設けられたHTMLのサブセット、というのは最早過去の話。色々なリッチコンテンツを作成出来る拡張機能を備えたマークアップ言語に成長しています。

これらを利用して、どこでも、より早く、ユーザーに有用なWebコンテンツを届けることが出来ます。 まずは、これらを気軽に触れるような機能の紹介や導入の手引をご紹介します。また弊社サービスでの取り組みをお話出来たらと。

登壇者:坂本結衣 (@yui_tang)

  • なぜWeb?
    • 回線環境の悪い国々ではアプリをダウンロードすることへの抵抗感が未だ強い
    • 1アプリ200円ぐらいかかったりすることも
    • Webでできることが増えている
  • AMP(Accelerated Mobile Pages)
    • リッチで遅い→シンプルで早い
    • HTMLに似ていて学習コストが低い
    • MOBILEって名前だけど、別にモバイル専用ではない
    • 既存ページと二重管理する必要がある、というconsも
    • AMPに必要なコンポーネント読み込み用のJS以外は基本的に使えない
    • モダンブラウザなら基本的に動く
  • PWA (Progressive Web Apps)
    • グーグルが中心になって進めている
    • WEBページでAPPのようなUXを実現する
    • Safari非対応
    • Twitter lite は PWA
  • Service Worker
    • 通常のページで動くjsとは違い、ブラウザ内でよしなに起動・停止するJS Worker
  • PWAとAMPを組み合わせるメリット
    • PWAはSWインストール後が早い
    • AMPはリッチなコンテンツはできないが、最初から早い
    • AMPページでSWがインストールできたら?
    • amp-install-servieworker

PHPerに覚えて欲しい日本語の重要性

セッション内容: バリデーションメッセージはPHPerにとって、ないがしろにしやすいものではないでしょうか?

「言葉なんて、あとでどうにでも修正できる。」 「これで通じるやろ」

そのように思いながら設定していませんか?

日本語は複数の意味を持つことができてしまう言語です。 また、「空気を読む」ことで、何となく理解しようと努力してしまう国民性もあるかもしれません。

伝わる日本語が書かれていないせいで、そのシステムが難しいシステムになっていないでしょうか?

今回は、テストして感じたシステムにおける日本語の重要性について、事例とともに紹介します。

・未入力です ・正しく入力して下さい

このようにバリデーションメッセージを設定しているPHPerのみなさまは是非聴講してください。

登壇者:フクダリナ (@rina)

  • よく見るバリデーションの例
    • 未入力です
    • 正しく入力してください
  • 未入力です
    • それは見たらわかる
    • どうすれば登録できるのかわからない
    • 〜してください にする
  • 正しく入力してください
    • 正しくって何?
    • 何が正しいのか、ユーザーはわからない
    • 全角で入力してください等にする
  • 下さい と ください
    • 下さいは欲しい時
    • くださいはお願いする時←こっちを使う

エラーと例外の再入門

セッション内容: アプリケーションを作る際、問題が起きたことを知らせるエラーと例外の機構は必要不可欠な存在です。 PHP7よりfatal errorが例外扱いになり、これまでのエラー機構を忘れている方も多いかもしれませんが、今でも便利な場面が多数存在します。

「エラー」「例外」とは何かを機能面から整理し直し、使い分けについて解説します。

登壇者:中野拓 (@Hiraku)

  • PHPはエラーの範囲が非常に広い
    • lint 的なのもエラー
  • エラー発生と後始末をわける
    • 例外はこのためにある
  • エラーと例外がある
    • 例外は無視できない
    • 基本的には例外を使おう
  • PHPerも例外安全を意識しないといけない
    • 我々は例外安全と共に生きなければならない!
  • Pokémon catching
    • やたら広い例外クラスで catch してること

ライトニングトーク(各5分)

PHPでWebサーバ作ろう

登壇者:富所亮 (@hanhan1978)

  • PHPでWebサーバを作れなくてよいのは中学生まで
  • 14行でWebサーバーが爆誕
  • Webサーバ作るとhttpリクエスト・レスポンス、IOの処理モデルがわかる!

WHERE 1 =1

登壇者:金澤裕毅

(こんふぃでんしゃる)

カンファレンスのこちら側とあちら側

登壇者:長谷川智希 (@tomzoh)

  • 本を発売して天狗になっていた
  • そんなとき勉強会に出てみたら著者だらけだった!!
  • 勉強会で発表している人はすごいようにみえるけど、実はそんなにすごくないよ!
  • 発表する側(あちら)と聴いてる側(こちら)は意外と近い
  • いつか発表したいと思っている人は今すぐ発表するべき!「いつか」なんて永遠に来ないよ

ガラケーの世界

登壇者:濱野泰明 (@gorogoroyasu)

SendGridで人生変わった

登壇者:s-ichikawa (@ichikawa_0829)

  • メールに関する様々な機能を提供するSaaS
  • Laravel でも使えるようにするライブラリ作った
  • 世界各地のエンジニアから連絡が来るようになった

バックエンドからのSEO対策 〜JSON-LDでのschema.org入門〜

登壇者:うえしー (@uessy_akr)

〜わたしの外国語学習法〜

登壇者:石田知世 (@chiyochan81)

  • 英語、韓国語、アラビア語を勉強中!
  • 勉強する目的を明確にする事
  • 外国人の友達と話したい!など

CakePHP3アプリを徹底チューニングしてみた

登壇者:貞方毅 (@sadapon2008)

  • メモリキャッシュ活用でI/O削減 267trans/sec -> 280
  • composerのautoload調整 280 -> 329
  • Apache チューニング(聞きそびれた!)329 -> 355

クイズを支える技術2017

登壇者:平田哲 (@debility)

  • 本日5つめのLT
  • 結婚式2次会の余興システム作った
  • はやすぎて聞き取れずw(とにかく賑やかなLTでした)

感想

PHPから長い間離れていたこともあり、時間の流れをところどころ感じました。

とあるセッションで「私達はまだPHP 5.3を使ってるんです」→会場笑い、みたいな流れがあったんですが、PHP 4 をメインで使っていた自分にとっては、あそこが笑うところだと気付きませんでした😅

こういったイベントに参加すると、その分野のトレンドを知れるのも良いところですね。

また、ここ数年ずっとiOSアプリ開発ばかりをやってたので、他のコミュニティから見たアップルの立ち位置みたいなのがわかって勉強になりました。(各社対応する中、Appleだけが対応してない・・!という話が結構あった)

***

全体的に素晴らしいイベントでした。運営の皆さま、スピーカーの皆さま、おつかれさまでした!