PHPカンファレンス仙台2019に参加してきました #phpconsen

概要

PHPカンファレンス仙台 今回も例によって、行くかどうか迷ってましたが、PHPの現場を聞いて参戦を決めました。
先に結論から言うと、とても面白いイベントでした!!

セッションについて

今回が初開催らしいのですが、東京や関西に負けないボリュームでした。
また東京と比べると、マニアックな話も多かったかなと思います。

自分が参加したセッションのスライドを貼りますので、興味がある人はスライドをみてみてください〜

感想

前半から再発防止の話までは、私がいるチームの課題について話されており、早速持ち帰って展開しなければと思いました。
後半は純粋に自分が興味がある話題について聞いてきました。
CQRS、Elasticsearchと次の仕事で使えると良いなと思っています。

セッション以外で刺激を受けた点としては、 ダブスターズ さんが挙げられる。
PHPカンファレンス以外でも技術イベントを開けるような団体名にしたということでしたが、自分たちも金沢で技術コミュニテイを作ろうと思っているので、参考にさせてもらうと思います。

最後に

素晴らしいイベントを開いてくださった運営の皆様ありがとうございました!

余談

懇親会に参加しなかったので、牛タンを食べて帰りました。
牛タン最高ーーー!

利久の牛タン
牛タン

最近の近況〜ISUCONとコミュニテイとPHPカンファレンス仙台の話〜

概要

ブログを開設して、カンファレンスの感想を書くだけなのも味気ないので、近況報告でもしていこうと思います。

ISUCONの話

社内の数人とISUCONに出てみようという話になりました。
早速、こちらの本を参考に勉強を勧めています。
環境はこちらのREADMEを参考に、AWS上で作りましたが、結構つまづき、大変でした。

今はもくもくと本を進めているところですが、それが終わったら、当日に向けて、メンバーとできる限りのレベルアップを行ってきます。

コミュニテイの話

これまた社内のメンバーと、金沢に技術コミュニテイを作ろうという話題が出ました。
自分も含め、金沢に強い人がいない or 見つからないので、コミュニテイを作って、強い人達と交流をしていきたいと思っています。

まだまだ課題がある上、メンバーの技術スタックも違い、苦戦していますが、なんとか形にしていきたいです。

PHPカンファレンス仙台

PHPの現場を聴いて、PHPカンファレンス仙台に行きたいなと思いました。
しかし、金沢から仙台はお金が結構かかります。
迷っていたのですが、会社のバックアップが厚くなり、お金を出してもらえるようになりました。

関西・東京に続き、3つめのPHPカンファレンス
よろしくおねがいします。

最後に

なんだかんだメンバーに恵まれており、ここ数ヶ月でも貴重な体験ができているなと思います。 関わってくれる人たちに感謝します。

以上、最後まで読んでいただきありがとうございました。

PHPカンファレンス東京2018の感想 #phpcon2018

概要

元々は予定が入っていて行けなかったが、予定がなくなってしまったので、急遽参戦を決めました。

PHPerkaigi2018でカンファレンスに目覚めて、今回で3カンファレンス目になります。 今回も参考になる話が目白押しでした。

聞いてきたセッション

自分が聞いたセッションは下記になります。 朝うだうだしていて、開幕のセッションには間に合いませんでしたが、それ以降はガッツリ参加しました。

どれも面白いセッションでした。
この中で一番を選ぶとしたら、独立したコアレイヤーパターンによるPHPアプリケーションの実装になりますね。

元々ブログで公開されたときから、内容は読んでいたのですが、あまり理解できていませんでした。 今回のセッションを聞いたことで、内容を理解出来、よく考えられているパターンだなと感服しました。

DIP理解した」

またそーだいさんのセッションは、自分が組織やチームに感じている悩みに、ビタッとマッチする内容で、早速プレイヤーとして文化を養うところを始めて行こうと思いました。

その他

懇親会ではセッションとLTのW登壇をしたBASEの東口さんとお話ができたり、PHPerKaigi2019の宣伝を行った長谷川さんとお話ができてよかったです。うさみさんには静的解析ツールの導入について相談もできました。

PHP界隈のカンファレンスは、皆さん暖かくて楽しいですね。

このような場を提供してくれた、スタッフの皆さん・スピーカーの皆さん・参加者の皆さん、ありがとうございました!

刺激を受けにPHPカンファレンス関西2018に参加

概要

PHPerKaigi2018の感想 - juve534のブログでカンファレンスの楽しさを覚え、今回は関西に参戦です。 PHPカンファレンスとしては、今回が初めての参加でしたが、とても楽しめたのでつらつらと感想を書いていきます。

良かったこと

セッションの内容が充実していた

今回は下記のセッションを聞いてきました。

  • 脱「なんちゃって」フロントエンド
  • PHPer向けWebアプリケーションのパフォーマンスチューニング入門
  • PHPアプリケーションのコンテナ化入門
  • HerokuでPHPアプリ開発速度を倍にする

どのセッションも自分のチームで運用できていない話題で、帰ってから取り入れようと思えるものでした。
特に脱「なんちゃって」フロントエンドの話は、自分たちが手の行き届いていない部分で、すぐに取り入れないと行けないなと思いました。
「ネットワークに接続していません」はエンジニアの怠慢φ(..)

アンカンファレンス

いろんな人が好きに発表できるのは良いなと思いました。
自分はうずら(@uzulla)さんのSwooleの話に参加しましたが、PHPの非同期処理について話が聞け、その後うずらさんに質問もできたので満足です。 (Swooleを軽く触り始めました)

その他

コミュニティの人たちとコミュニケーションが取れる

もくもくブースにコミュニティの人たちがいらっしゃり、そこで話をすることができました。

長谷川さんにはPHPerKaigiの感想を直接伝えることがやっとできました。 本当は当日に伝えないといけませんでしたね。 PHPの現場Masashi Shinbara(@shin1x1)さんには、ポッドキャストの感想と開発の悩みを相談することができました。

自分は入社してからずっと同じ会社でエンジニアをやっており、外部のエンジニアと話せるのは、めったにない体験でした。 しかも、普段地方にてなかなか会えないコミュニティの人たちでしたので貴重な体験でした。

名札・ガチャガチャ

名札にシールを貼ることができ、それで参加者の属性がわかるのは面白いなと思いました。 自分ですと、下記のように遠征組でレガシーと戦っているという表現ができますね。 f:id:juve534:20180717203944j:plain これは懇親会で話を作りやすい試みだなと思いました。

ガラポンは絵柄もかわいいし、アメニティも良いものがあったらしいのですが、引き忘れてしまいました…。(カードも持って帰ってしまった)
カードは企業ブースやセッションで貰うことができたので、スポンサーや登壇者にも旨味がある作りになって、良い仕掛けだなと思いました。

最後に

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を使っていることが、差分として発生していました。
そのため、__constructsetUpに置き換えて見ると、正常にテストは動きました。

PHPUnit マニュアル – 第4章 フィクスチャを見ると、テストデータを生成する際はsetUpを使えと書いてあるので、そもそも__constructを使うのが亜流ということですね…。

PHPUnitのコードを読めば、エラーの原因が詳細にわかりそうなのですが、余力がないの今日はここまで。