がんばるぞ

がんばります

Circle CIでIlluminate\Contracts\Container\BindingResolutionExceptionが発生する

Circle CIで、全てのテストが通っているのにCIが落ちるエラーが発生しました。

#!/bin/bash -eo pipefail
./vendor/bin/phpunit

PHPUnit Pretty Result Printer 0.25.1 by Codedungeon and contributors.

PHPUnit 7.5.7 by Sebastian Bergmann and contributors.

/* 省略 */

Time: 6.08 seconds, Memory: 36.00 MB

OK (155 tests, 234 assertions)

Fatal error: Uncaught Illuminate\Contracts\Container\BindingResolutionException: Target [Illuminate\Contracts\Debug\ExceptionHandler] is not instantiable. in /home/circleci/lec/vendor/laravel/framework/src/Illuminate/Container/Container.php on line 962

Illuminate\Contracts\Container\BindingResolutionException: Target [Illuminate\Contracts\Debug\ExceptionHandler] is not instantiable. in /home/circleci/lec/vendor/laravel/framework/src/Illuminate/Container/Container.php on line 962

Call Stack:
6.0873   36298904   1. Illuminate\Foundation\Bootstrap\HandleExceptions->handleException() /home/circleci/lec/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php:0
6.0878   36328616   2. Illuminate\Foundation\Bootstrap\HandleExceptions->renderForConsole() /home/circleci/lec/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php:87
6.0878   36328616   3. Illuminate\Foundation\Bootstrap\HandleExceptions->getExceptionHandler() /home/circleci/lec/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php:101
6.0878   36328616   4. Illuminate\Foundation\Application->make() /home/circleci/lec/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php:159
6.0878   36328616   5. Illuminate\Foundation\Application->make() /home/circleci/lec/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:757
6.0878   36328616   6. Illuminate\Foundation\Application->resolve() /home/circleci/lec/vendor/laravel/framework/src/Illuminate/Container/Container.php:619
6.0878   36328616   7. Illuminate\Foundation\Application->build() /home/circleci/lec/vendor/laravel/framework/src/Illuminate/Container/Container.php:671
6.0878   36328728   8. Illuminate\Foundation\Application->notInstantiable() /home/circleci/lec/vendor/laravel/framework/src/Illuminate/Container/Container.php:800

調べてみると、どうやらcodedungeon/phpunit-result-printerのAnyBarなるものがenableになっていると発生するエラーのようでした。 参考

なので、laravelのルートディレクトリにphpunit-printer.ymlを作成し

options:
  cd-printer-hide-class: false
  cd-printer-simple-output: false
  cd-printer-show-config: true
  cd-printer-hide-namespace: false
  cd-printer-anybar: false
  cd-printer-anybar-port: 1738
markers:
  cd-pass: "✓ "
  cd-fail: "✖ "
  cd-error: "⚈ "
  cd-skipped: "→ "
  cd-incomplete: "∅ "
  cd-risky: "⌽ "

のようにすることで解決しました

2018年を振り返る

2018年ももうすぐ終わります。

https://twitter.com/strtyuu/status/1079567851717943296

こんなツイートをしましたが、改めて今年を振り返ってみようかなと思います

仕事

2018年は、昨年に引き続きとにかく仕事を頑張った年でした。

給料もそこそこあげていただきました。
具体的にはベース給が年収50万弱上がりました。
ボーナスも含めると100万弱上がりました。本当にありがたいことです。

そしてさらにありがたいことに役職も少しだけにあげてもらい、それに伴い業務がほんの少しだけ変化しました。

  • 後輩(一応部下らしいですが、あまり部下という言葉がしっくりこないので後輩です)という存在が発生しました。
  • マネージャー会議というものへの参加権が与えられました
  • 従来の仕事に対する責任が多少増しました

ここらへんでしょうか。
入社一年半ほどでこういった評価をいただけるのはありがたいことです。

反省点としては、勉強したことのアウトプットが少なさすぎたことです。
自分が担当する案件では勉強した技術を使用していたので、僕自身はスキルアップ出来た実感があります が、それを社内へ共有していなかったため、会社へのポジティブな効果はあまり生み出せていなかったかなと思います。

また、だいたい僕は1人で案件のほとんどの部分を担当するため、技術的な挑戦・実験した結果のノウハウは社内勉強会などでしっかりアウトプットしないと誰とも共有出来ない感じです。
(最近は後輩の方と二人で案件をこなすことが増えてきましたが)

なので、せめて少しは共有しようということで2018/12/26に DDD、クリーンアーキテクチャ、CQRS などの話を100枚近いスライドにまとめて社内勉強会で発表しました。
来年はアウトプットをもっとやっていきたいですね

あ、あと多分2019年の4月に転職します。
一応内定はもらっているので、あちらからお断りされない限りは転職します。

給料はまだどうなるかわかりませんが、おそらく今と同じくらいかちょっと上がるかくらいだと思います。
残業がほぼなくなるらしいので、その分勉強や趣味に使える時間が増えます。やったね。

技術

技術的な大きな変化といえば、設計をそこそこ勉強したことですかね。

6月にDDDと出会い、DDDをきっかけにクリーンアーキテクチャ、CQRSなどの概念を知ることができました。
イベントソーシングに関しては全然試せていないので、来年は手を出したいですね。

設計に興味を持ったきっかけとしては、エンジニア歴半年ごろに担当した案件で 遺憾コード 、ようは技術的負債を自ら生み出してしまったことですね。
技術的負債を生み出さないために何か手がかりはないかと色々調べた結果、非常にピンときたのがDDDだったわけです。

見つけるまで半年近く時間がかかってしまったのがちょっともったいないですね。

DDDを通してOOPも多少は理解できたような気がしてます。
といってもOOPそのものをがっつり勉強したわけではないので、来年はOOP自体も勉強したいです。

あとはLaravelもだいぶ詳しくなりました。
来年はSlimなどのマイクロフレームワークもやりたいなあ。
言語もほぼPHPオンリーなので、別言語もやりたいですね。今興味あるのはRustとGoとScalaかな。でもGoはみんなやってるからRustにしようかな。

勉強の用途でのGithubの使い方がある程度わかってきた気もします。Githubめっちゃ楽しい。

音楽

ほぼギターを弾かなくなりました。指がどんどん動かなくなっていっている・・・。

とはいえ、何回かライブはやりました。
来年はオリジナルあるいはがっつりアレンジしたコピーとかやりたいなあ。
あとライブじゃなくてYoutubeでの活動を主にしようかなー。

来年は転職でプライベートの時間が増えるはずなので、ギターもしっかり練習したいですね。

リスナーとしてはネオソウル?とかいうジャンルにめちゃくちゃはまってます Artistでいえば

とかです、Lianne LaHavas超かわいい。
一番はまってるのはMoonchildです。
Robert GlasperのSmells Like Teen Spiritのカバーもめちゃくちゃすごいな。ああ。

というとりとめもないですが、今年の振り返りはこんな感じですかね。

来年もよろしくお願いいたします!!!!

LaravelでRoutingしてるのに404エラーが返ってくる

Routingしてるのに404エラーが帰って来た

こんな感じで定義してたんですが

<?php
Route::patch('/user/{user-id}, 'UsersController@update');

どうやら
{user-id} という書き方はダメみたい。
{user_id} に変更したら普通に動きました。

Laravelのバグ発見できたかと思って一瞬喜んだけど僕が悪いだけだった

公式ドキュメントにも書いてあった

ルートパラメータは、いつも{}括弧で囲み、アルファベット文字で構成してください。
ルートパラメータには、ハイフン(-)を使えません。下線(_)を代わりに使用してください。
ルートパラメータは、ルートコールバック/コントローラへ順番通りに注入されます。
コールバック/コントローラ引数の名前は考慮されません。

【読んだ】PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応

最近出たLaravel本を読み終わったので感想文です。

どんなことが書いてあるのか

  • Laravelの内部処理の解説
  • Laravelの内部処理を独自実装に変える方法
  • アプリケーションの設計
  • TDDも軽く

Laravelを触ったことない人を置いてけぼりにした内容なおかげでかなり実践的な内容がたくさん書かれてます。笑

特に設計の話はCQRSやらRepositoryパターンやらレイヤードアーキテクチャやらの話が出てくるので、Laravelに限らずどんなアプリケーションでも役に立つ内容でした。

この本を読むのにおすすめの人

  • Laravelに慣れてきた人
  • コントローラーに処理をベタ書きしてる人
  • Laraveのソースコードを読んだことがない人

サービスコンテナ?なにそれ?
認証系はEloquentでしか使えないっしょ!みたいな人は読むと非常に学びがあると思います。

おすすめしない人

  • Laravelを触ったことがない人

Laravelを触ったことがないと全くついていけないと思いますので、この本買う前にLaravelでアプリケーションを1回作ってから読んだ方がいいと思います。

感想

Laravelに慣れてきた人とかにめちゃくちゃ役に立つと思います。おすすめです。

特に認証をEloquent以外で使いたいとかは絶対に出てくる要件なんで、ここらへん解説してくれてるのはすごくありがたいですね

あと最後のTDDも、TDD未経験者にはめちゃくちゃとっつきやすい内容になってて良いですね。
せっかくなので写経しときました laravel-socym-tdd-sample

おわり

PHP勉強会#129でLTしてきた

PHP勉強会でLTしてきました。

DDDについて1ヶ月ほど勉強したので、それを5分にまとめるという苦行をしてきました。

DDDを5分でまとめるのはそもそも無理があるため、かなり大雑把な説明になってしまったので
今度は20分枠で発表したいなあという感じです。