読者です 読者をやめる 読者になる 読者になる

わすれっぽいきみえ

みらいのじぶんにやさしくしてやる

コードレビューの見出しのフォーマットについて

GitHubに限らずコードレビューを行う際は例えばPull Requestなら一体何を解決するためのPRなのか簡単でいいから書いて欲しいと思っていて、何のdescriptionもなくいきなりリンクだけ貼られて「はい、レビューしろ」っていうのは失礼だなとさえ思う。

でもこの辺ってチームの文化とか慣れとかでだんだんなぁなぁになるのかなとも思ってるんで、最低限自分が決めているフォーマットを結構前からgistにおいてる。

gist.github.com

たったこれだけしかない。けど、このたったこれだけがあるのとないのとでだいぶ違うと思っている。

Pull Request のフォーマットを決めるとレビューの効率が3倍よくなる :: Crocos Engineering Blog にあるくらいガチガチに書くのは結構description書くだけで骨が折れるので、よっぽど周りに突っ込まれたくない時くらいしかやらないなぁと思ってる。まぁ書きすぎて逆に突っ込まれそうでもあるがw

上に貼ったフォーマットはものすごく簡略化されてるけど、簡単だからこそ継続しやすい。あと自分がこれをずっとやってるとフォーマットこそ微妙に違うものの、チーム内で「何も書かないのはまずいかな?」という雰囲気がちょっと出るので良いと思ってる。

もっといいフォーマットあったら教えてください。

2017-01-30 追記

ブクマコメントより

タイトルで概要が伝わらないならちょっと辛い。

本当にその通りだと思う。本当ならタイトル自体をいい感じにするべきなので、ちゃんとチームでのPRのタイトルの運用についても揉んだほうがいい。

映画『聖杯たちの騎士』観た

seihai-kishi.jp

先週観に行ったが、人生で初めての経験をした。

映画館で初めて寝た。

自分でもかなりビビった。それもナタリー・ポートマン出るよーっていう、この映画では割りと見せ場っぽいところで寝て、え?ナタリー・ポートマンじゃん、いつ出てきたのって思いながら観てた。隣の席にいた男の人がウーーンって途中唸ってて、いつもだったら静かにしてほしいなと思うところなのに、今回はまぁわかるよって気持ちになってた。

あんまりにも退屈だったんで、感想書くのをためらってたけども、もういいやと思って書く。

あらすじ

脚本家として成功したリックは享楽的な生活をしつつ、どこか満たされない毎日を送っていた。
何か救いを求めながら、何かを探しながら数々の女性と出会う。

感想

眠かった。

映像はきれいで、大好きなケイト・ブランシェットもやっぱきれいで、わーきれいと思ったけど、ストーリーに期待して観に行くとものすごく損した気持ちになる。

主人公が何に悩んでるのか、どうしたいのかなんかもうちょっとわかればよかったんだけど、家族と何故か仲が悪くて、何故か出会う女性とことごとく破綻して、そのまま終わって、えぇぇ…という気持ちになった。家族に関しては弟か兄かが一人自殺したっぽい話がちょっとだけ出てきたけど、「みんな自殺と思ってるけど、本当は…」って言ったまま詳細を語らないので、結局何のことかさっぱりわからない。

主人公が出会う男性の方はもう割り切った人たちばかりで、女の子と遊ぶの楽しいやんかわいいやん遊びたいやんがはっきりしてるから逆に好印象。こんな人達と付き合っていくのは確かに疲れる一面もあるだろうけど、これで本人幸せならそれもいいかなという感じだった。

主人公はとにかく何かにかけてぐずぐずしてて、女の子と遊ぶのは楽しいけどいっときだけで、自分は結局一人ですって思ってるみたいな人だった。あんなのに付き合わされる女性の側がかわいそうで、一緒にいるのに一緒にいないみたいだった。ただ時間が立つと付き合っていく女性のタイプも享楽的・刹那的なタイプの人から誠実・堅実なタイプに変わっていくので、主人公本人よりも女性の変わり方に着目してみると映画としてはマシになるかもしれない。

ケイト・ブランシェット、マジできれいだった。
キャロルのときは宝塚の男役みたいな綺麗さだったけど、今回のはもっと大人の女性な感じで、端的に言うとエロかった。
水の中で虫がもがいてるのをそっとすくい上げて逃してあげるシーンの白い手が本当に美しい。

でも、私はこの映画をもう観ないと思う。

Eloquent ORMで特定カラムの値を処理して取り出すために$appendsを使う

簡単に間違いコードを書くと

<?php

use Illuminate\Database\Eloquent\Model as Eloquent;

class Example extends Eloquent
{
    protected $table = 'examples';

    public function getPath() {
        return parse_url($this->url);
    }
}

ここで url というのは examples テーブルの1カラムとする。

要は url を単にURLではなくて、後ろのパスだけを取り出すメソッドが書きたいと思ったときにどうしたらいいの?というのを調べてた。
正直、上みたいに書いただけで簡単に動いてほしかったんだが、実際には以下のような例外が飛んだ。

[BadMethodCallException]
  Call to undefined method Illuminate\Database\Query\Builder::getPath()

まさか Query\Builder からメソッドが呼び出されるとは思ってなくて驚いたんだが、Eloquentはすべてのattributeをあるテーブルのカラムと紐付けて取り出そうとしてしまうからのようで、上のサンプルコードのようなことをやりたかったら実際のテーブルには存在しない仮想的なカラムみたいなのを用意して実装してやる必要があると分かった。

なので上のコードを修正すると

<?php

use Illuminate\Database\Eloquent\Model as Eloquent;

class Example extends Eloquent
{
    protected $table = 'examples';
    protected $appends = ['path'];

    public function getPathAttribute() {
        return parse_url($this->url);
    }
}

これで例えば $exampleExample クラスのインスタンス$example->url = 'http://example.com/hoge/fuga' とすると、 $example->path'/hoge/fuga' が取れるようになる。

一応公式ドキュメントにもこうやったらできることは書かれてるんだが、見つけるのが難しいところにある。

laravel.com

After creating the accessor, add the attribute name to the appends property on the model.

しかもサンプルコードはあるけど、これしか書いてない。あるカラムのaccessorを作ると、そのカラムを取り出すときに必ずaccessorに指定した処理が実行されて取り出される。これが上の例でいう getPathAttribute なんだが、 path というカラムがテーブルには存在しない場合 protected $appends = ['path']; と書いて、仮想的なカラムを用意してねとある。これ、できればMutatorsの方に説明を書いてほしい…。

stackoverflow.com

ググってたらこの質問に行き着いて、2013年に立てられたものなので使えるのか不安だったが、今の公式ドキュメントと照らし合わせるとなるほどって感じだった。

ちなみにこの仕組を使って私が書いたコードは ここ においてる。