PHPカンファレンス仙台2019に参加してきました #phpconsen
概要
今回も例によって、行くかどうか迷ってましたが、PHPの現場を聞いて参戦を決めました。
先に結論から言うと、とても面白いイベントでした!!
セッションについて
今回が初開催らしいのですが、東京や関西に負けないボリュームでした。
また東京と比べると、マニアックな話も多かったかなと思います。
自分が参加したセッションのスライドを貼りますので、興味がある人はスライドをみてみてください〜
- テストが辛いを解決するテスト駆動開発のアプローチ at PHPカンファレンス仙台2019
- Webサービスを支えるモニタリング
- オミカレを支えるチーム開発 ~プロダクトを支える文化~/phpconference-sendai2019-omicale
- 再発防止策を考える技術 / #phpconsen
- PHPではじめるCQRS
- 開発期間2ヶ月でElasticsearchをプロダクトに使ってリリースした話
- PHPのmiddlewareを 使いこなすために
- Hackで作る堅実な アプリケーションアーキテクチャ / Hack-application-architecture
感想
前半から再発防止の話までは、私がいるチームの課題について話されており、早速持ち帰って展開しなければと思いました。
後半は純粋に自分が興味がある話題について聞いてきました。
CQRS、Elasticsearchと次の仕事で使えると良いなと思っています。
セッション以外で刺激を受けた点としては、 ダブスターズ さんが挙げられる。
PHPカンファレンス以外でも技術イベントを開けるような団体名にしたということでしたが、自分たちも金沢で技術コミュニテイを作ろうと思っているので、参考にさせてもらうと思います。
最後に
素晴らしいイベントを開いてくださった運営の皆様ありがとうございました!
余談
懇親会に参加しなかったので、牛タンを食べて帰りました。
牛タン最高ーーー!
最近の近況〜ISUCONとコミュニテイとPHPカンファレンス仙台の話〜
概要
ブログを開設して、カンファレンスの感想を書くだけなのも味気ないので、近況報告でもしていこうと思います。
ISUCONの話
社内の数人とISUCONに出てみようという話になりました。
早速、こちらの本を参考に勉強を勧めています。
環境はこちらのREADMEを参考に、AWS上で作りましたが、結構つまづき、大変でした。
今はもくもくと本を進めているところですが、それが終わったら、当日に向けて、メンバーとできる限りのレベルアップを行ってきます。
コミュニテイの話
これまた社内のメンバーと、金沢に技術コミュニテイを作ろうという話題が出ました。
自分も含め、金沢に強い人がいない or 見つからないので、コミュニテイを作って、強い人達と交流をしていきたいと思っています。
まだまだ課題がある上、メンバーの技術スタックも違い、苦戦していますが、なんとか形にしていきたいです。
PHPカンファレンス仙台
PHPの現場を聴いて、PHPカンファレンス仙台に行きたいなと思いました。
しかし、金沢から仙台はお金が結構かかります。
迷っていたのですが、会社のバックアップが厚くなり、お金を出してもらえるようになりました。
関西・東京に続き、3つめのPHPカンファレンス。
よろしくおねがいします。
最後に
なんだかんだメンバーに恵まれており、ここ数ヶ月でも貴重な体験ができているなと思います。 関わってくれる人たちに感謝します。
以上、最後まで読んでいただきありがとうございました。
PHPカンファレンス東京2018の感想 #phpcon2018
概要
元々は予定が入っていて行けなかったが、予定がなくなってしまったので、急遽参戦を決めました。
PHPerkaigi2018でカンファレンスに目覚めて、今回で3カンファレンス目になります。 今回も参考になる話が目白押しでした。
聞いてきたセッション
自分が聞いたセッションは下記になります。 朝うだうだしていて、開幕のセッションには間に合いませんでしたが、それ以降はガッツリ参加しました。
- 独立したコアレイヤーパターンによるPHPアプリケーションの実装
- PHP,Go,Elasticsearchによる、@cosmeを5倍速くする取り組み
- ユニットテストが入れられないレガシーなソースでCIが回せるようになった
- Phalcon Essentials: Phalcon で作る成長可能なアプリケーション
- 案外よくできているMySQLというアプリケーション
- Webサービスを育てるための組織作りと文化作り
どれも面白いセッションでした。
この中で一番を選ぶとしたら、独立したコアレイヤーパターンによるPHPアプリケーションの実装
になりますね。
元々ブログで公開されたときから、内容は読んでいたのですが、あまり理解できていませんでした。 今回のセッションを聞いたことで、内容を理解出来、よく考えられているパターンだなと感服しました。
「DIP理解した」
またそーだいさんのセッションは、自分が組織やチームに感じている悩みに、ビタッとマッチする内容で、早速プレイヤーとして文化を養うところを始めて行こうと思いました。
その他
懇親会ではセッションとLTのW登壇をしたBASEの東口さんとお話ができたり、PHPerKaigi2019の宣伝を行った長谷川さんとお話ができてよかったです。うさみさんには静的解析ツールの導入について相談もできました。
PHP界隈のカンファレンスは、皆さん暖かくて楽しいですね。
このような場を提供してくれた、スタッフの皆さん・スピーカーの皆さん・参加者の皆さん、ありがとうございました!
刺激を受けにPHPカンファレンス関西2018に参加
概要
PHPerKaigi2018の感想 - juve534のブログでカンファレンスの楽しさを覚え、今回は関西に参戦です。 PHPカンファレンスとしては、今回が初めての参加でしたが、とても楽しめたのでつらつらと感想を書いていきます。
良かったこと
セッションの内容が充実していた
今回は下記のセッションを聞いてきました。
どのセッションも自分のチームで運用できていない話題で、帰ってから取り入れようと思えるものでした。
特に脱「なんちゃって」フロントエンド
の話は、自分たちが手の行き届いていない部分で、すぐに取り入れないと行けないなと思いました。
「ネットワークに接続していません」はエンジニアの怠慢φ(..)
アンカンファレンス
いろんな人が好きに発表できるのは良いなと思いました。
自分はうずら(@uzulla)さんのSwooleの話に参加しましたが、PHPの非同期処理について話が聞け、その後うずらさんに質問もできたので満足です。
(Swooleを軽く触り始めました)
その他
コミュニティの人たちとコミュニケーションが取れる
もくもくブースにコミュニティの人たちがいらっしゃり、そこで話をすることができました。
長谷川さんにはPHPerKaigiの感想を直接伝えることがやっとできました。 本当は当日に伝えないといけませんでしたね。 PHPの現場のMasashi Shinbara(@shin1x1)さんには、ポッドキャストの感想と開発の悩みを相談することができました。
自分は入社してからずっと同じ会社でエンジニアをやっており、外部のエンジニアと話せるのは、めったにない体験でした。 しかも、普段地方にてなかなか会えないコミュニティの人たちでしたので貴重な体験でした。
名札・ガチャガチャ
名札にシールを貼ることができ、それで参加者の属性がわかるのは面白いなと思いました。 自分ですと、下記のように遠征組でレガシーと戦っているという表現ができますね。 これは懇親会で話を作りやすい試みだなと思いました。
ガラポンは絵柄もかわいいし、アメニティも良いものがあったらしいのですが、引き忘れてしまいました…。(カードも持って帰ってしまった)
カードは企業ブースやセッションで貰うことができたので、スポンサーや登壇者にも旨味がある作りになって、良い仕掛けだなと思いました。
最後に
PHPカンファレンスは初めての参加でしたが、とても充実した1日でした。 運営の皆様、ありがとうございました!
CakePHPのモデルでメモリを消費した話
概要
CakePHP1系のアプリケーションでメモリリミットが起きていました。 原因を調査したところ、Primarykeyに検索をかけるだけの単純なクエリ実行で、メモリを多めに消費していることがわかりました。
原因
CakePHP1系のキャッシングが原因でした。
queryメソッドを使ってSQLを実行する場合、第2引数にfalse
を渡さないとキャッシングしてしまいます。その結果、想定より多めにメモリを消費していました。
その後
原因がわかったので、第2引数にfalse
を渡すことで解決できそうです。
ちなみに先輩からはバグだと言われましたが、2系でも同様の処理があるので、これはCakePHPの仕様なんだろうなと思います。
参考
https://book.cakephp.org/1.3/ja/The-Manual/Developing-with-CakePHP/Models.html#query
https://book.cakephp.org/2.0/ja/models/retrieving-your-data.html#model-query
2回目にvagrantを立ち上げたらディスクエラーが発生した件
概要
swooleを触ってみようとytakeさんのvagrant boxを立ち上げた。
一回目は特に問題なく立ち上がったのだが、再度立ち上げたところディスク共有のところでエラーが…。
Vagrant was unable to mount VirtualBox shared folders. This is usually because the filesystem "vboxsf" is not available. This filesystem is made available via the VirtualBox Guest Additions and kernel module. Please verify that these guest additions are properly installed in the guest. This is not a bug in Vagrant and is usually caused by a faulty Vagrant box. For context, the command attempted was: mount -t vboxsf -o uid=1000,gid=1000 vagrant /vagrant The error output from the command was: /sbin/mount.vboxsf: mounting failed with the error: No such device
一先ず下記の手順で作業をすることで復旧はできたので、ゲストとホストのkernelのバージョンが違ったんだとは思うが、2回目でエラーが出たのは初めてだ。
1. Host側でvagrant plugin install vagrant-vbguest 2. Host側でvagrant vbguest 3.仮想側でsudo yum -y update kernel 4.仮想側でsudo yum -y install kernel-devel kernel-headers dkms gcc gcc-c++ 5.Host側でvagrant reload
PHPUnitでdataProviderが動作せずに時間を食った話
概要
PHPUnitを使って、PHPのテストコードを書いていたところ、dataProviderが動かなくて、数時間悩みました。
備忘録として、情報を残しておきます。
なにがあった?
下記のようなテストコードを書いて、PHPUnitを実行したところ、
rgumentCountError: Too few arguments to function ExampleTest::checkExceptionTest()
というように引数があってないよーというエラーが発生しました。
dataProvider
のDoccommentはTypoもなく、メソッド名も適切な名前になっていました。
class ExampleTest extends TestCase { /** * @var Example */ public $_obi; public function __construct() { parent::__construct(); $this->_obj = new Example(); } public function checkExceptionDataProvider():array { return [ 'number 1' => [1, \LogicException::class, 'number 1'], 'number 2' => [2, \ErrorException::class, 'number 2'], ]; } /** * @test * @dataProvider checkExceptionDataProvider */ public function checkExceptionTest($param, $errorClass, $errorMessage) { $this->expectException($errorClass); $this->expectExceptionMessage($errorMessage); $this->_obj->checkExecption($param); } }
なにが原因だった?
既存でdataProvider
を使っている箇所と見比べると、テストケースの初期化として__construct
を使っていることが、差分として発生していました。
そのため、__construct
をsetUp
に置き換えて見ると、正常にテストは動きました。
PHPUnit マニュアル – 第4章 フィクスチャを見ると、テストデータを生成する際はsetUp
を使えと書いてあるので、そもそも__construct
を使うのが亜流ということですね…。
PHPUnitのコードを読めば、エラーの原因が詳細にわかりそうなのですが、余力がないの今日はここまで。