カテゴリー別アーカイブ: php

dyld: Library not loaded: /usr/local/opt/jpeg/lib/libjpeg.8.dylib を解決する

久々に local 環境の Mac で php を使おうとしたら、以下のようなエラーが。

こちらのコメント欄で brew switch jpeg 8d をすると解決すると記載がありました。

dyld: Library not loaded: /usr/local/lib/libjpeg.8.dylib – homebrew php

無事に解決しました。

追記:

brew upgradeしたらphp実行できなくなって、php-buildも失敗するようになった【たぶん解決】
を読むと、根が深い問題のように思えるので、恒久的な解決策は別であると思います。

今回は深追いしていません。

PHP BLT #6 で LT してきた

例によってメルカリで LT (PHP BLT #6) してきました。
PHP BLT #2 のときもメルカリで LT してるんですが、その時と比べて内装がめちゃくちゃキレイになってた…

オシャレスペースすぎてドギマギしました。記者会見とかできるよ…
会場のパノラマ写真を記念に撮ったんですが、 public にしていいものか悩むのでここでは公開しませんw

他の方の発表で特に刺さったのは、

Dockerを使ったPHPアプリ開発とCIについて
Introduction to Guzzle

あたり。

オーディエンスに、Docker を開発環境で使ってる人ー?と呼びかけられてて、チラホラ手を挙げてる方がいたのは見たんですが、本番環境で使ってる人ー?となると誰も手を挙げてなかったのが印象的でした。
Guzzle はコントリビュート出来るチャンスがいろいろあるよと、コントリビュートしてる @DQNEO さんが言ってたのでおそらくあるんでしょう。コードリーディングしていきたい気持ちになりました。

さて、僕の発表スライドはこちら。

今回は PHP 書く人ならおなじみの Carbon を題材にしつつ、最終的に OSS 運営の知見につなげたんですが若干強引だったような…。

ちなみに、これから使うなら Carbon じゃなくて、Chronos じゃない?とは言いつつ Laravel が Carbon 使ってる限り捨てづらい気もしますね。個人的には、Laravel 使わない PHP プロジェクトがあれば積極的に Chronos を使っていきたい所存です。

スライドに両リポジトリで起こった時系列の話を書いているのですが、そこにリンクは張っていないのでここではリファレンスという意味で置いておきます。


2012-09-11 Carbon v1.0.0 公開
2012-09-12 Carbon のリポジトリでイミュータブルに出来ないかという issue が作られる
https://github.com/briannesbitt/Carbon/issues/2
2013-04-19 Eloquent 内で DateTime の代わりに Carbon を使っては?という提案 issue が作られる
https://github.com/laravel/framework/issues/999
2013-04-20 Laravel に Carbon が取り込まれる
https://github.com/laravel/framework/pull/1012
2013-05-26 なぜ Carbon を使っているのか?という質問 issue が作られる
https://github.com/laravel/framework/issues/1408
2013-05-28 Carbon が取り込まれた Laravel v4.0.0 (php >= 5.3.0) が公開される
https://github.com/laravel/framework/releases/tag/v4.0.0
2013-06-20 DateTimeImmutable class が実装された PHP 5.5.0 がリリースされる
http://php.net/ChangeLog-5.php
2014-04-17 CakePHP に Carbon が取り込まれる
https://github.com/cakephp/cakephp/pull/3328
2015-05-08 CakePHP Community で、Carbon を使うのをやめないかという提案がされる
https://github.com/cakephp/cakephp/issues/6509
2015-10-12 Chronos v0.1.0 公開
https://github.com/cakephp/chronos/releases/tag/0.1.0
2016-01-02 Carbon がすべて Chronos に置き換えられた CakePHP 3.2.0-RC1 (php >= 5.5.10) が公開
2017-01-08 Carbon needs to be more ACTIVE. (2016年は一度もリリースなし)
https://github.com/briannesbitt/Carbon/issues/839
2017-01-11 @lucasmichot が member に追加される
2017-01-15 1 年 3 ヶ月ぶりに Carbon のマイナーバージョンアップされ 1.22.0 が公開


ElasticBeanstalk の PHP 5.6 on 64bit Amazon Linux 2015.09 v2.0.7 がちょっとおかしい件

2/11 に新しいバージョンのプラットフォームがリリースされたようです。

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/platform-history-php.html

https://aws.amazon.com/releasenotes/AWS-Elastic-Beanstalk/0121149643032499

早速、サンプルアプリケーションをデプロイしてみただけなのですが、ちょっと buggy じゃないですかね。

すぐに修正されると思うのですが、困る人がいるかなと思いメモがてら。

PHP7 Casual Talk で LT してきました

さて、先週 PHP 7 Casual Talk #1 に参加して LT してきました。
会場は、ヒカリエの上のほう、KDDI さんでした。会社から近くて助かります。

スライドにも書いたんですが、PHP BLT #2 で PHP7 の話が予想以上に少なかったって tweet をしたら、@fortkle さんに捕捉されてしまいましたw

僕の LT はリアルに拙い感じでほんと申し訳ないんですが、他の方の LT はとても有意義でした。

  • PHP5.x から PHP7 に移行したが、後方互換性が高くほとんど苦労しなかった
  • ほとんどのメジャーどころのフレームワークは PHP7 対応してる
  • PHP7 だから無条件でパフォーマンス上がる!というわけではなく、ちゃんと計測することが大事
    • Yii Framework はまさかのパフォーマンス低下…(びっくりしました)
  • PHP7 独自の機能(スカラー型宣言、null 合体演算子、無名クラス etc…)を使って共通ライブラリ作るのはまだつらいかな…
  • 7.0.1 とか 7.0.2 の changelog とか見ると面白い

個人的には移行へのハードルってやっぱりそこまで高くないんだなーということを実体験として語られている方がいたので、とても参考になりました。

Travis CI、CircleCI をお使いの方はおもむろに php7 でテスト走らせてみたりしたらいいんじゃないかな。
テストコードが無いって方は、PHP7 Compatibility Checker で互換性チェック&互換性ないって場合は、どのように互換性がないかを出力してくれるという便利ツールを使うといいと思います。

connehito の CTO @tatsushim さんもいらしていて、お声がけいただきました。ちょう久しぶりの再会だ!と興奮していたんですが、実は会ったことはなかったらしく、いろいろと失礼しましたw

ピザがとても美味しかったです。ありがとうございました。

しかし、もう LT ネタがない…プライベートでまた時間確保して何かネタを作らねばー。

PHP BLT #2 で LT してきた話

もう先週の出来事になってしまったが、メルカリオフィス@六本木ヒルズで PHP BLT の第 2 回が開催された。

LT 枠で応募して、無事に滑りこむことが出来た。20 枠もあればすんなり入れるだろうと思ってたが、思いの外応募が多くて BLT ブランドすごいなと思った。

メルカリオフィスにつくと、だだっ広いスペースの一角が会場として準備されていた。メルカリは絶賛増床中だそうで、勢いを感じた。
PHP7 リリース直後ということもあり、PHP7 ネタは大いにかぶる可能性があったのであえてそのネタは外して、SensioLabs が出してる Security Checker の話をした。

この checker は以前話題になっていた「ぼくの考えた最強の開発フロー PHP編」の中でちらっと紹介されていたもので、その後この checker についても伸びるかなーと思っていたが、案外日本語の記事が全然現れてこないので、発表することにした。

スライドを読んでいただければ全て書いてあるが、自分のプロジェクトで使用しているライブラリの脆弱性チェックをしてくれるというツールで、それを CI に組み込んでしまえば、普段意識せずに開発できて良い感じですよというもの。

注意点としては、絶対の信頼をおいちゃダメだよってことで、JVN など一次ソースをあたることも忘れちゃならない。

スライド中で、Lumen に組み込んだ CI のサンプル用リポジトリへのリンクをはっていますが、面倒な方はこちらからどうぞ。

https://github.com/serima/security-checker-on-lumen

 

個人的には、packagist.jp の方が来ていたのがテンション上がった。いつもお世話になっていたので…、そしてメルカリに入社していたことにびっくり。タレント揃えてる感あるなーと。

イベントまとめとしてはここがとても良くまとまっているので興味ある方は是非。

PHP BLT #2 に参加してきました

余談ですが、@uzulla さんがトップバッターの LT ってその後のハードル上がるからやめてほしい…

Laravel のログインパッケージ Confide のパスワードリセット通知メールをテキストメールとして送信する

仕事で関わっているプロジェクトで Laravel のログインパッケージ Confide を使用しているのですが、パスワードリセット操作をした際にユーザに送信されるメールは、デフォルトだと Content-Type: text/html で送信されてしまいます。
これだとなにがまずいかというと、ユーザが @softbank.ne.jp などのキャリアメールを使用している場合に本文が添付ファイルとして送信されてしまいます。
さらに、charset が UTF-8 に設定されているため文字化けしていて読めないメールが届いてしまいます。

そこで、パスワードリセットの通知メールなんて、Content-Type: text/html で送るほどでもないので、text/plain に変えたいなーと思いました。

最初は、メール送信をしているメソッド ConfideUser#forgotPassword をオーバーライドしないとダメかなーと思っていたのですが、コードをよくよく読んでいくと config 変更するだけでいけそうということでやってみました。

結局、Confide も Swift Mailer を使ってメールを送信しているだけなので、渡す view の中身に気をつけてやればよしなにやってくれるということでした。

関係しそうなコードはこのへん。

https://github.com/Zizaco/confide/blob/master/src/Confide/EloquentPasswordService.php#L176
https://github.com/illuminate/mail/blob/master/Mailer.php#L328-L330

というかんじでした。
もちろん、text/html メールを送りたければ key の名前を html にすれば良いと思います。

なお、Confide の導入については @localdisk さんのLaravel のログインパッケージ Confideの解説(実践編)がとても親切です。

忘備録も兼ねてのポストでした。

Laravel 4 から Slack へメッセージを投げる

この記事は Laravel Advent Calendar 2014 の 24日目のエントリーです。

はじめに

11月から、仕事で Laravel 4 と 話題の Slack を使うようになりました。

ChatOps の第一歩として、 Slack の Integrations の機能を使って、メンバーの Commit / pullreq を #github channel に垂れ流すようにしました。
これがとっても便利で、他のエンジニアの方が何をしているか可視化されることで、業務効率も上がりました。
なにより、単純に楽しいということが大事ですよね。

こうなってくると、プロダクトのアラートメールなども一元的に Slack で受け取れるようにしたいな…と思ってきてしまいました。

Slack API の Incoming WebHooks

Slack は API を提供しており、自由に外部サービスからメッセージを投げることができたりします。
Incoming WebHooks を登録すると、token 込みの WebHook URL を取得できるので、それを使って、まずは試しに自分の Team の #general channel にメッセージを投げてみましょう。

webhookbot

こんな感じでメッセージが投げられたでしょうか。

Laravel 4 から メッセージを投げてみる

PHP から Slack へメッセージを投げるプラグインは、このページを見る限りでもずいぶんたくさんあります。
https://api.slack.com/community

この中でも、Laravel 4 で一番使いやすそうな maknz / slack を使わせてもらうことにしました。

インストールは README を見れば簡単にできます。
試しに Laravel から送信してみるための artisan command を書いてみました。
Webhook URL は、別途 Config から取得するようにしています。

README を見ればわかると思いますが、以下のように chaining して書くこともできます。

アラートメールの代替手段としての Slack

Slack の API は、1 request / sec までのリクエストしか受け付けてません。
厳密にコントロールされているかは分かりませんが、大量に送るのは考えものです。

https://api.slack.com/docs/rate-limits

今回は、アラートメールの代替手段として考えていたので、デプロイ直後などにアラートが飛びまくる可能性があることも念のため考慮しました。

以下のような感じで、 SlackHelper クラスを作ってしまい、Slack へのメッセージングはここで管理するようなイメージです。
連投を防ぐ手段としては、Slack にメッセージを投げるたびに /tmp/postslack という空ファイルを touch して、その最終更新日時を見ることで、メッセージを投げていいか判定しています。

エラーハンドリングは、 Laravel のドキュメントにある通り、ログリスナーを登録する形で行っています。
http://laravel.com/docs/4.2/errors#logging

Slack 最高

これで無事にアラートが Slack に投げられるようになりました。
アラート以外にも他の通知系でメールを使用している部分も少しずつ Slack に寄せたいなと思ったりしています。

余談

この package ですが、 json_encode の UTF-8 問題で、最初は日本語文字列が含まれている場合 false が返ってきてしまう不具合があり送信できなかったのですが、 issue 登録したら、すぐに対応してくれました!

https://github.com/maknz/slack/issues/4

さいごに

明日はついに最終日ですね!
@localdisk さんのポエムに期待しつつ、みなさん良いクリスマスを!