Vuetifyのプロジェクトテンプレートが簡単に作れるのだけど、初期テンプレートにあるVuetifyのロゴの解像度が低くてぼやけているのが気になって、「これなら自分でも直せそうだな」と思ったので修正してみることにした。プルリク仕事では相談してわからないことをアドバイスしてもらったりされたことはあるが、プルリクを送ってコードレビューをしてもらった経験はない。リポジトリをフォークして、Qiitaの記事とか過去のクローズされたプルリクのやり取りとか見ながら、ブランチ切って・コード修正・テスト修正・コミット・プッシュして、見様見真似でプルリクを送った。qiita.com拒否されたらどうしようとか、これであってるのかなとか結構不安だったが、2度のレビューの後無事マージされた。学び知らないツールに触れたAVAなんてテストフレームワーク知らなかったし、commitlintなんてものがあるなんて知らなかった。自分が触れることのないツールを使う機会を得て学びになった。していて主語を「あなた」ではなく「私たち」としている部分に、OSSってこういうことなんだなぁと感じさせられた。blog.cybozu.ioissue/PRの発行には、いくつかコツがあります。第一にプロジェクトの中の多くの人が嬉しくなることをアピールしましょう。「このバグが直らないと弊社のシステムが止まるんです!」とみなさんの都合をまくしたてるよりも、コミュニティの中のみんなが遭遇しうる問題だという言い方のほうが反応してもらえる可能性が高いでしょう。この記事の中にも書かれているように、自分の視点だけではなくコミュニティにとって良いことかという視点が重要なんだなと気付かされました。installとかが動くのは誰かがメンテしてくれているおかげなんですよね。11:57初めてOSSにプルリク送って感じたことTweet広告を非表示にする2020-02-09Laravelのコードで学ぶSOLIDの原則LaravelLaravelのコードで学ぶSOLIDの原則たまたま観た動画が、before-after形式でコードサンプルが書かれてあってわかりやすかったのでまとめる。動画内でのコードは、Controller内でバリデーションとDBへの保存を行っている。}Controllerの主な役割は入力(Request)を受けとり出力(Response)すること。Controller内でバリデーションロジックを書いたり、Eloquentを使用して保存・更新している場合、Controllerは責務を負いすぎている。}LaravelはFormRequestがあるのでFormRequestにバリデーションロジックを書くこと。支払い方法のタイプを受けとり、typeに応じて支払い方法を変えるというもの。Requestを受け取っているということは、あるController内に書かれたメソッドなのだと思う。//...}支払い方法が増えるたびに、payメソッド内にif文を追加し、Paymentクラス内に新しい支払い方法に応じた支払いロジックを追加しなければならない。}支払い方法ごとにクラスを分割し、支払い方法が増えるたびにPaymentクラスのコードが長くなることがなくなった。各クラスはPayableInterfaceをimplementsすることで、payメソッドを実装することを強制している。ファクトリパターンを使うことで、利用者が実装の詳細を知る必要がなくなるとともに、新しい支払い方法が増えてもpayメソッドを変更する必要がなくなり変更箇所を一箇所に留めることができる。リスコフの置換原則よくあるアヒルクラスの例。ゴム製のおもちゃのアヒルは飛べないので、派生型(RubberDuckクラス)は基底型(Duckクラス)と置換可能ではないので、リスコフの置換原則に違反している。Duckクラスを継承するのではなく、各ふるまいをクラス化し、implementsすればよい。購読しているユーザに通知を送るコードの例。}}Notificationsクラスのsendメソッドは使う必要のないSubscriberクラスのsubscribeメソッドやunsubscribeメソッドも使用できる。}}NotifiableInterfaceをタイプヒントに与えることで、NotificationsクラスのsendメソッドはgetNotifyEmailメソッドのみを使用する。}ControllerでEloquentを使用して値を取得したりしている場合、単一責任の原則にも違反しているし、依存性逆転の原則にも違反している。GETリクエストをController内でEloquentで取得して返す部分はDBに依存しないように、Repository層を作ってUserRepositoryInterfaceをタイプヒントに指定して抽象に依存するようにしている。UserRepositoryInterfaceに依存するようにすることで、UserRepositoryInterfaceをimplementsしているクラスであればEloquentを使用していようとMongoDBを使用していようとDBを意識しないで$userを使用することができる。principlesというらしいが、principlesってどういう意味なんだろうか。ここでのprinciplesとrulesの違いは何なのか。job.特定の競技や組織、仕事の中で、許されていることやしなければならない方法などを示す公式の教えprinciplesは方針としての原則、rulesは守るべき規約の意味と捉えました。カナヅチを持つとすべてがクギに見えるように、SOLIDの原則を知るとついついなんでも当てはめて使いたくなっちゃいますが、あくまで原則であると。SOLIDは原則であって目的ではないと。実際SOLIDの原則を当てはめるとクラスやファイルが増えてしまいますが、大した規模のアプリでないのならわざわざ分割しないでControllerでEloquentを使用したり、ロジックベタ書きをしてもいいと思う。その時は後で必要になったときに分割しようと思うのだけど、それがなされないままどんどん条件分岐が増えてしまうパターンが経験上多い・・・。「後でやろう」は大体やらないのだから、最初から愚直にちゃんと分割していくべきかなと思う。ユニットテスト書きやすいし。ファイルやクラスが増えるとかえって複雑になるだろへの反論はこのスライド見ればいいと思います。以前から思っていたのだけれど、マネジメントされるではなくマネジメントする側にならないと給料が上がらないと思うので、そういうスキルについて知るために読んだ。人がすべてどんな会社の成功を支えるのも、人だ。マネジャーのいちばん大事な仕事は、部下が仕事で実力を発揮し、成長し、発展できるように手を貸すことだ。支援ツールや情報、トレーニングやコーチングを提供すること。実力を発揮し、成長できるように手助けする。一人ひとりのキャリア目標を理解し、彼らの選択を尊重する。キャリア目標を達成できるように手助けをする。自由に仕事に取り組ませ、決定をくださせること。部下の成功を信じること。コーチング「優れたコーチは選手をどうやってよくするかを、夜も眠らずに考える。選手がもっと力を出せるような環境を作ることに喜びを感じる。コーチというものは、絵に的確に筆を入れようとする画家に似ている。コーチが描くのは人間関係だ。普通の人は、他人をよくする方法を考えるのに時間をかけたりしない。」コーチは教える相手がどれだけ自己認識できているかを知る必要がある。ときに就活で自己分析した内容を先輩に見てもらったら、「自己認識が歪んでいる」と言われたことがある。自分はこういう人間だと言語化したら全然違うと言われたのだ。自分の能力、強みや弱みを的確に認識するということは難しいことだ。強みや弱みというものは他人と相対的に比較しないと見えてこないものだと思う。世界中に自分一人しか存在しないとしたら、自分の背が高いのか、それとも低いのか認識することはできない。何をするにしても現状を正しく認識することは最も大事なことの一つだと思う。地図で例えるなら現在地がずれているようなもので、現在地がズレたまま目的地にきちんとたどり着くことは難しいだろう。優れたコーチングはこの認識のズレを修正し、正しい目的地に到達することを手助けしてくれるのだろう。相手としっかりと向き合うことビルはコーチングのセッションで、いつもじっくり耳を傾けてくれた。うわのそらでスマホのメールをチェックしたり、腕時計をちらっと見たり、窓の外に目をやったりすることは決してなかった。これは実は何よりも重要なことだと思う。「自分の話本当に聞いてくれているのかな?」「話して意味があるのかな」「この人に話しても無駄だな」という疑念が生じると正直に自分のことを話す気を一気に失くさせる。話を聞く「発見や洞察を促すような質問をしょっちゅうする人は、最高の聞き手だと相手に思われる。自分から多くの質問をして、相手の状況を多面的に理解しようとする。することで、用意された質問(や答え)に囚われずに、問題の核心を明らかにすることができるのだ。誰かの話に耳を傾けると、相手は大事にされていると感じる。...従業員の話を聞く、声をかけるといった「ありきたりの何でもないこと」が、すぐれたリーダーシップの重要な側面だという。した行動は従業員に「自分は尊重されていて、目に見えない名も無き存在ではなく、チームワークの一端を担っていると感じ」させることができるからだ。「リーダーの敬意のこもった問いかけ」に効果があるのは、相手の「有能感」(自分は試されていて、それに応えることができるという感覚)、「関係性」(他者とつながっている)、「自立性」(自分が状況をコントロールし、選択しているという感覚)を高めるからだという。コーチングというと相手を指導する、的確なアドバイスをするというイメージを持ちがちだが、相手から話を引き出す、相手に何かを促すということは、的はずれなアドバイスよりも重要。君の家族はどうしている?何が君を駆り立てているのか?まず絆を築き、その理解をもとに仕事にかかるのが、ビルのやり方だった。ビルは人を大切にした。どんな人にも敬意を持って接し、名前を覚え、温かい言葉をかけた。彼らの家族のことを気にかけ、言葉より行動でそれを示した。友人がケガや病気をしたり、なにか助けが必要になったら、何を置いても駆けつけるんだと、ビルは教えてくれた。それがやるべきことだと。