Laravelの例外処理で最低限知っておきたいこと
例外をレンダリング・出力する機能と、ロギングする機能の2つに分かれる
デフォルトの例外処理クラスApp\Exceptions\Handler
が継承する親クラスIlluminate\Foundation\Exceptions\Handler
には、render()
, report()
というメソッドがあり、これらがそれぞれレンダリング・出力と、ロギングを受け持つ。
またこれらのメソッドは、Illuminate\Foundation\Bootstrap\HandleExceptions::bootstrap()
でset_exception_handler()
で設定された、同クラスのhandleException()
メソッドから呼ばれる。
app.debugが真の場合、デバッグ情報つきでレンダリングされる
最近のLaravelならデフォルトであればIgnitionが使われる。Ignitionがなければ、以前のLaravelで使われていたWhoopsが使われる。
render()
内にはいろいろな処理があるが、基本はprepareResponse()
の呼び出しだ。
app.debug
だけ見ていて、app.env
は見ないので、.env
にAPP_ENV=production
としても、APP_DEBUG=true
のままであればデバッグ情報が出力されてしまうことに注意。
その他レンダリング・出力を調整したい場合は、render()
を読めばどうすればいいかわかるだろう。
例外クラスにrender()
メソッドを実装しておけば、ハンドラのrender()
をオーバーライドしたりしなくても好き勝手に表示変えられるのも、ちゃんと読めばわかる(私はちゃんと読まず、オーバーライドしてしまった)。
一部の例外はロギングされない
Illuminate\Foundation\Bootstrap\HandleExceptions::$internalDontReport
に設定さ
れたクラスや、App\Exceptions\Handler::$dontReport
に設定した例外クラスはロギン
グされない。
これにはIlluminate\Http\Exceptions\HttpResponseException
やIlluminate\
Validation\ValidationException
等が含まれ、abort()
やバリデーションエラーがログ
に残らないのは、このせいである。
現役エンジニアと駆け出しエンジニアの遭遇についてちょっと語る
昨夜、PHPerKaigiのプレイベントとして、現役PHPエンジニアが語る、プログラミングを仕事にするということ - connpassというイベントがあった。
そのイベントの宣伝ブログやイベント自体にちょっと突っ込んだりしていたのだが、
長いから途中までしか読んでないけど、駆け出しエンジニアとか、ベテランエンジニアしかいないようなコミュニティに引き込もってなければいくらでも見つかると思うんだけど。ここの定義だとエンジニアとして働き始めた人はカウントしないみたいなんでその分は難しいだろうが。 https://t.co/qvgLbLggsz
— まがい (@xxmagai) 2021年2月27日
駆け出しエンジニアの定義が未経験者オンリーなのがずれを感じるんだけど、まあ黙って聞こう。 #phperkaigi
— まがい (@xxmagai) 2021年3月3日
まあ文句言ってるだけなのはよくないので、じゃあお前は駆け出しエンジニアはどういうものだと思っているの、みたいなことを語ってみる。
ちょっとぐだぐだ長いんで最初に言うことまとめると、
- 現役エンジニアと駆け出しエンジニアの遭遇機会はたくさんあるよ。
- 会いたかったら会えばいいし、駆け出しエンジニア側が会いたいと思ってくれても会えるし、そんな特別なことじゃないと思うよ。
という感じ。
で語ってる人間について一応書いておくと、10年くらいフリーランスでやってるWebエンジニア。ほぼほぼ一人で仕事していて、人間関係は薄く、ひきこもり気味。
でも駆け出しエンジニアはすごい見かける。
(個人的な)駆け出しエンジニアの定義
まず未経験者だけを駆け出しエンジニアと定義しているのが実感とぜんぜん合わないという気がしていて、では俺はどう定義しているのかというと、
- 広義には、未経験~3年目くらいのエンジニア。
- 狭義には、最初から職業エンジニアを目指していて、趣味のプログラミング経験なしで入ってくるエンジニア。
今回は狭義の方の話。子供のころからプログラミングやってましたとか、高校・大学で関連するコンピュータサイエンスやら数学やらをがっつり学んでました、実践してました、みたいなのは昨今言われている駆け出しエンジニアとはちょっと違うと思う。
駆け出しエンジニアはTwitterでしか見かけないわけじゃない
未経験者だけに限定した場合は、仕事で出会うのは確かにちょっと難しいかもしれない。が、限定しなければ、割と普通に見かける。
自分が今仕事してるクライアントの会社では、3、4人の駆け出しエンジニアがいた。うち半数は未経験から入社、半数は一応経験はあるものの、くらいな感じ。少なくとも半数は積極的に勉強しているようで、会社のSlackで勉強会に行くみたいな話をしていたり。半数はTwitterもやっているようだったが、#駆け出しエンジニア
をつけてツイートしている感じではなさそうだった。
あまりレベル高いところ、給料がいいところなんかだと競争率も高いだろうし、こういう駆け出しエンジニアっぽいのは少ないのかもしれない。
でもその辺がそうでもないところでは、未経験や経験浅くても、給料安めでも頑張ってくれるなら長い目で見ようかな、とい感じで駆け出しエンジニアを積極的に雇っていたりすることも少なくないんじゃないかと思う。
実際俺はそこの給料知らないし、採用に関わっているわけじゃないから想像だけど。
駆け出しエンジニアに会うのは簡単
仕事以外では、小さな(<100人)ネット上の同業者のコミュニティに入ったら、駆け出しがいっぱいいたということがあった。未経験で勉強している人、一応仕事を始めている人、どちらも少なからずいる感じ。
ここで出会ったうちの一人は、メンターを見つけるみたいなサイトでメンター探して勉強するとかしてた。コミュニティ自体でも勉強はできるし、こういうところほかにも多分ある。
小さな勉強会に行ったら、そこでも出会った。未経験者もOKとはなっていたものの、別に未経験者を対象にした勉強会ではなかったのだが、どうも半数近くは未経験者のようだった。
こういうところで出会う人たちの一部は現役エンジニアの話に興味があったり、聞きたいことがあったりするようだ。そこそこ長くやってるよと自己紹介すると、いろいろ話をしてくれたり、聞いてくれたりする。
ほかにもエージェントの主催する懇親会に行ったら、さすがに一応皆未経験ではないものの、割と経験の浅い、駆け出しといっても言い過ぎではないようなエンジニアがいたり。
この辺ではむしろ、現役エンジニアの方が少数派と感じるくらい。
とはいえ、大きなカンファレンスで会うのは確かに難しいかも
ということで、ここ数年本当にどこを見ても駆け出しエンジニアばかりと感じるのだが、逆に見かけないのが大きめのカンファレンスだ。
そういうところに来るのは俺より経験あるようなベテランか、経験は浅くても技術力は高いみたいな凄腕か、たまに学生がいたと思ったらそれでも俺より技術力ありそう、みたいなのばかりで、「駆け出しエンジニア」の定義にあてはまりそうなのなんて100人に1人いるかどうか。
去年のPHPカンファレンス、オンライン開催で無料だったこともあり駆け出しエンジニアの知り合い数人に勧めたけど、まあ割と直前に勧めたこともあったと思うけど、実際には終わった後にアーカイブを見てくれたという人が一人だけだった。オフラインでのイベントに比べて気後れしづらそうなオンライン開催ですらこんな感じ。
想像だけど、やっぱりレベル高いカンファレンスは敷居が高いんじゃないかと。あとそういうのは大体丸一日使って、その辺も大変そう。
ただそういう人たちも自主的に小さな勉強会に積極的に行ってたりするし、カンファレンスのスライド見たりアーカイブ動画見たりはする。
その辺考えると、単純に人は自分に向いていると思うコミュニティに参加してるんじゃないかと。もし駆け出しエンジニアに来て欲しいと思うなら、もっとそっち向けのコンテンツ用意するとかがいいんじゃないかな。
個人的には、この現状にはなんの問題もないと考えている
自分がプログラミング本格的に始めた15年前とかだと、なかなか初心者が気軽に入れるようなコミュニティなんてなかった。2chのプログラマ板が「入りやすい」と感じるような世界観。
その頃と比べると、初心者向けのコミュニティも、コンテンツも、絶対増えてると思うし、ベテランと話してみたい要求もあるだろうけど、そうじゃなくて同レベルの人たちとやっていきたいって要求の方がきっと多いだろうし、別に現役エンジニアが駆け出しエンジニアを気にかける必要はないと思う。
とはいえ話してみたいなら話してみたいで、駆け出しエンジニアにつながる方法はいくらでもあると思うよ、という話。
LaravelのRefreshDatabaseはいつ実行されるか、なにを実行しているか
いつ実行されるか
前提として、PHPUnitでのsetUp()
等の実行タイミングから。
setUpBeforeClass()
がテストクラスごとに、最初のテストメソッドの実行前に。setUp()
がテストメソッドごとに、テストメソッド実行前に。tearDown()
がテストメソッドごとに、テストメソッド実行後に。tearDownAfterClass()
がテストクラスごとに、最後のテストメソッドの実行後に。
以下が詳しい。
4. フィクスチャ — PHPUnit latest Manual
このうち、RefreshDatabaseの実行は、setUp()
のタイミングで行われる。
ただし毎回は実行されない。一度実行されるとRefreshDatabaseState::$migrated
が真になり、このクラス変数が真の場合は実行されないので、実質テストランナーの実行ごとに一度しか実行されない。
なにを実行しているか
php artisan migrate:fresh
, ただしテストクラスでの指定によっては、--drop-views
, --drop-types
, --seed
のオプションが有効になる。
たとえば--seed
に関しては、テストクラスに$seed
というプロパティを真で設定しておけば、有効になる。
おまけ
RefreshDatabaseは実際にはIlluminate\Foundation\Testing\TestCase
内で実行されるため、PHPUnit\Framework\TestCase
を継承したクラスでuse
しても駄目、Tests\TestCase
を継承する。
DockerのMySQLでdocker-entrypoint-initdb.dのSQL読み込み始めたと思ったら"MySQL server has gone away"と言われた場合
多分SQLがでかくて、max_allowed_packet
が足りてない。/etc/mysql/conf.d
あたり
に、
[mysqld] max_allowed_packet=100M
みたいなファイルを置こう。
参考: Connection lost on import of database · Issue #13 · docker-library/mysql
特にDockerで特有の問題ではないようだ。
なおこの場合のファイル名、*.cnf
じゃないと駄目っぽいので注意。
現在、Unix オペレーティングシステムで !includedir ディレクティブを使用して検索およびインクルードされるファイルは、.cnf で終わるファイル名を持っていなくてはなりません。
2020年読んだ本
去年はほんと本が読めなかった。まあ、忙しかったとは思う。技術書が読了したのがまさかの0で、技術書以外のフィクション以外が30冊弱、小説ちょっとは読んだ気してたがこれも30冊弱。漫画は500冊弱で、これは大きく変わってないか。
技術書は部分的に読んだのはいろいろあって、よかったのはオライリーのDocker, アンダースタンディングコンピューテーション、これはコード書きつつ楽しんでたが忙しくなって止まった、ペアプログラミングとかエクストリームプログラミングとか、関数型リアクティブプログラミングとかドメイン駆動設計入門とか、あとエンタープライズアプリケーションアーキテクチャにも再チャレンジしてたか。リファクタリングも読み直してた。そんな感じで、手だけはいろいろ出してる。
今年もあまりしっかり本読めそうな感じじゃないけど、去年よりは読みたいところ。
「新視点 関ヶ原合戦」読了。関ヶ原の戦いやその前後(ほぼ前)のあれこれを、一次資料を中心に調べてみて通説との違いについて語る、的な話。そこまで通説側詳しかったわけじゃないけど、創作とかで知っていた話がじっさいは思ったのとだいぶ違いそう、となるのはなかなか楽しい。思ったよりは軽い本だ
— まがい (@xxmagai) 2020年1月5日
「決定力! 正解を導く4つのプロセス」読了。かなりいい本だった。よい意思決定プロセスのための本。行動経済学その他の知見をベースに語られていて、事例も適量入ってて、本としての読みやすさもあって、注にはコメントつきで出典あるし、参考図書の紹介もあるし、単純に本としてレベル高い。
— まがい (@xxmagai) 2020年1月12日
「「幸せをお金で買う」5つの授業」読了。どういうお金の使い方をすれば幸せに感じやすいか、みたいな話。よく言う物より経験を買うとか、人のために使うとか。研究ベースではあるっぽいもののちゃんとした出典ないのはいまいち。本として読みやすいのはまあよかった。
— まがい (@xxmagai) 2020年2月21日
「エボラvs人類 終わりなき戦い」読了。感染症関係のいい本ないかなーと探してたらUnlimitedであったのでとりあえず読んだ。本としての出来はまあ普通だし、内容も軽めだが知らないこともそれなりにあったし、最終章のシミュレーション周りは今の状況なんか見るとかなりリアルで面白かった。
— まがい (@xxmagai) 2020年3月4日
「第一次世界大戦(木村靖二)」読了。4年半くらい前に読んだのの再読。多分大戦中のインフルエンザの流行に関してなにか書いてなかったかなとか思って読み始めた? その辺はほぼ書いてなかった。短くまとまっていて入門によさそうな本。
— まがい (@xxmagai) 2020年3月29日
「インフルエンザ パンデミック 新型ウイルスの謎に迫る」読了。2009年のいわゆる豚インフルエンザのパンデミックの最中に書かれた本。書いたのは公衆衛生系の人じゃなくてインフルエンザウイルスの研究者の人で、ウイルスそのものに関する情報が詳しく面白かった。ウイルス関係よい本あればもう一冊く
— まがい (@xxmagai) 2020年4月17日
「イスラーム思想を読みとく」読了。イスラム教の思想の話というよりはスンナ派の勢力図とそれを理解するためのイスラム教の概要、みたいな話だった。「著者の考える日本人の考えるイスラム教」視点は蛇足だったが基本的には面白かった。
— まがい (@xxmagai) 2020年5月12日
「RANGE」読了。スペシャリストよりジェネラリスト、的な話だがそれだけの単純な話ではなかった。集中しすぎることの弊害、広く見ることのメリットに関していろいろな方向から探っている。とにかく個々のエピソードにかなりよいものが多くて、読んでて楽しい本だった。
— まがい (@xxmagai) 2020年5月22日
「百姓たちの江戸時代」読了。題名通りの話。淡々とした書き方で本としてはそれほどだが、内容はまあ面白かった。少なくともある程度裕福な層は貨幣経済が根付いていたとか、土地の所有がコモンズっぽい感じらしいとかその辺が興味深かった。
— まがい (@xxmagai) 2020年7月3日
「サイコパスの真実」読了。著者の「入門 犯罪心理学」を前読んで非常によかったので読んだ。そっちほどではなかったが、元々サイコパスとか興味あるものだしまあ面白くはあった。ちゃんとカウンセリングもせずサイコパスと判断することに対して警告しておきながら自身でやっちゃってる感じなのは。
— まがい (@xxmagai) 2020年7月4日
「方丈記(ちくま学芸文庫)」読了。対訳と評がついてるやつ。対訳と評についてはまあ特に問題ないかな。評者はやや鴨長明への思い入れ強い感じだが。内容的にはなにより方丈の庵の機能美に萌える。なんで読み始めたんだか忘れたが、鴨長明の気持ちがちょうどマッチして楽しく読めた。
— まがい (@xxmagai) 2020年7月26日
「宇宙から恐怖がやってくる! 地球滅亡9つのシナリオ」読了。非常に楽しいサイエンス・ノンフィクションだった。隕石、太陽コロナ、ガンマ線バーストくらいまでは割と現実的な恐怖だったけど、その後どんどん宇宙的な規模の話になっていく。語り口がかなりうまく、宇宙の終わりとかあきらかに退屈にし
— まがい (@xxmagai) 2020年8月12日
「この世界が消えたあとの 科学文明のつくりかた」読了。面白かった。人類が大量に死ぬなどして現代文明が維持できなくなった後どうやってやり直すかという話で、複雑な現代文明の基礎がどういう構造なのかみたいな話が延々と続く。読みながら最近の異世界ものみたいなところあるなとか、この設定ベー
— まがい (@xxmagai) 2020年9月3日
「はじめての日本古代史」読了。著者自身があとがきで書いてたけど、教科書的に暗記だけしてると面白みのない日本ん古代史も、こうして流れで読むとなかなか楽しい。
— まがい (@xxmagai) 2020年9月10日
「古代史の基礎知識」読了。この間読んだ「はじめての日本古代史」と合わせて日本の古代史の骨格がなんとなくつかめてきた。今後はもうちょっとテーマ絞った本も読んでいきたい。なおはじめての~と比べてこちらの方が流れより個々のテーマ重視だった。特にどちらがよいということはなかったかな。
— まがい (@xxmagai) 2020年10月5日
「荒木飛呂彦の漫画術」読了。内容のよさもさることながら、読みやすさ・わかりやすさがすごかった。冒頭の重要性、人物の重要性あたりはよく言われているが、「常にプラス」みたいな話はあまり聞いたことがないので興味深かった。とはいえ状況をとにかく過酷にしていくという基本と相反するものでもな
— まがい (@xxmagai) 2020年10月25日
「ベストセラー小説の書き方」読了。これはしばらくぶりの再読。前読んだときは思わなかったが、割と当時(40年くらい前)のアメリカの出版会限定の話とか、クーンツ先生の偏った思想による話も多い。とはいえこれほど端的で実践的な小説の書き方はなかなかなかったし、ちゃんと取捨選択できる人にはおす
— まがい (@xxmagai) 2020年10月25日
「中学生にもわかる化学史」読了。題名通り平易な化学史の本。この辺詳しくないので面白かった。ただ文章が、どうもいまいちで、別に際立っておかしいというわけでもないんだけど全体的にもうちょっとちゃんと書いてよという感じはあった。内容はまあ普通に面白いんだが。
— まがい (@xxmagai) 2020年12月4日
「元素周期表で世界はすべて読み解ける」読了。この間化学史の話読んで面白かったので今度は原子の話を。周期表が原子の性質の類似性などを表現していること、そもそもそれはなぜか、みたいな内容だが語り口もなかなかうまく、楽しめた。
— まがい (@xxmagai) 2020年12月27日
Vimでステータス行にビジュアルモードで選択中の文字数が出てこなくなったら
ステータス行の右の方に、シンルグバイト文字列を選択中なら文字数の数字だけ、マルチバイト文字列を選択中なら文字数-バイト数
、矩形ビジュアルモードだと縦x横
が表示されるアレ。
set showcmd
すればいい。デフォルトオンっぽいんだけど、.vimrcあれこれしてたらなぜか動かなくなっていた。
名前が直感的じゃないのがつらいね。
追記
もうちょっと調べると、どうもset nocompatible
していて、それがいろいろ設定を変更しているようだった。set compatible
やset nocompatible
はいろいろな設定に影響するっぽいので気をつけて実行した方がよさそう。
というか、ヘルプにちゃんと書いてある。
このオプションを変更すると、予期しない効果が数多く現れる。(中略)このオプションをファイル vimrc 内で設定するなら、一番先頭に置くこと。
2020年振り返り
仕事
前年(2019年)末からの案件がまだ継続中。出勤もだが固定の時間で働く働き方が合わず、さらに国内でコロナ感染者が出てきてもしばらくフルリモート移行できなかったこともあり、2月か3月くらいでもうやめようと思っていたのだが、その後けっきょくフルリモートになったこともあり、経済が混乱してそうな中で営業やるのもだるいなということもあり、とりあえず終わるまでは続けるかと思っているとどんどん完成が延び、未だに続いているのであった。
今更半端にやめるのもアレなので、終わるまで続けると思う。
残念なのはもっとチームで仕事、みたいのを期待してたのだが、最初こそそうでもなかったが、段々と俺が書く比率が上がっていって、現段階に至っては90%くらい俺だけで書いてるという状況。
次こういう仕事やるなら、今度こそチームで働いてみたい。できれば俺よりうまいプログラマだけだと嬉しいが、この年で、フルタイムで働く気もない状況でそれは無理だろうな。
技術
仕事その他微妙に忙しくて、あまり勉強できてない。仕事で使って、積極的に調べてるLaravelの理解がだいぶ進んだ。あとDockerを開発環境に使い始めて、とりあえず最低限使うだけはできるかな、というレベル。
ほかはちょこちょこ本読んでたくらい。とはいえこれもしっかり読み切ったのないし。
音楽鑑賞
2月、コロナ感染者出始めてたけどまだ死者は出てなかったくらいのタイミングで、フルリモート移行したいのにさせてくれなかったりでストレス溜まってたときに、谷山浩子のライブが奈良であるのを当日知って見に行った。
これがきっかけでしばらく谷山浩子ばかり聞いて、まだ聞いてなかったアルバム聞いたりして、はまってた。
その後コロナが本格的に広がっていって世の中のライブがぜんぶなくなって、一部がオンライン開催になって、逆に今までより見るようになった。昔はまっていたが最近の曲は聞いていなかった新居昭乃に再はまりしたのはその関係。
あとはずっとAWA使っていたのをふとSpotifyを試してみたら、AWAで消えたようなマイナーな洋楽が入っていたりもあって乗り換え。またそこで新居昭乃聞いてたらやくしまるえつこが関連でかかって、そっちもちょいはまり。
その辺とは関係あるのかないのか平沢進も初めて聞いてはまって。
みたいな感じで音楽鑑賞は充実していた。
で、来年どうするか
仕事はしばらく今の案件を続ける予定。完成時点で一旦契約はなくなりそうだけど、その後も今のところに仕事もらうかもしれないし、また別のところの仕事をエージェント経由でもらうかもしれないし。どちらにしてもクラウドソーシングでつらい営業して仕事取る、みたいのはもうなくなりそう。わからないけどね。
技術的な勉強は、今年よりはもうちょっとやっていきたい。とはいえ、今そもそもプログラマとしてやっていくことについて迷っている部分があって、今年仕事が安定してたからこそそんなこと考える余裕もあったんだろうけど、正直プログラミングは好きだし楽しいけど、職業プログラマとしてまったく適性がないわけでもないと思うけど、でもこの仕事一生続けてそれで満足かというと違いそうで。
来年はその辺どうするか、ある程度見通しできたらいいなと今は思っている。
それではよいお年を。