ざきの学習帳(旧 zackey推し )

日々の学びを書きます

Clean Architecture 第11章「DIP: 依存関係逆転の原則」の読書メモ

現在、自分がいるコミュニティにて、クリーンアーキテクチャの輪読会が行われています。

自分が第10章〜第11章となり、以下についての資料をまとめました。

この記事では、第11章「DIP: 依存関係逆転の原則」の理解を深めるために、
ブログ等の文献を読み漁り、咀嚼した内容をメモしておきたいと思います。

咀嚼した内容

以下のリポジトリディレクトリ内でお試しコードを打ちながら咀嚼しました。

github.com

序章

  • DIPが伝えたいこと
    • 具象ではなく抽象だけを参照しているもの
  • 柔軟なシステム=抽象を参照しているもの
    • 柔軟ではないシステム=具象を参照しているもの
  • 具象(モジュール)の定義
    • 本では、関数が実装されているものを指す
  • 適応範囲
    • すべてに適応するのは現実的ではない
      • String等、OSやプラットフォーム周りについては許容してもOK
    • 適応範囲は、システム内の変化しやすい具象要素
      • 今現在開発しているモジュール
      • 変更が入るモジュール

安定した抽象

  • 優れたソフトウェア設計者は...
  • コーディングレベルでの説明
    • 変化しやすい具象クラスを参照しない
      • 抽象インタフェースを参照する
        • 言語関係なし
      • AbstractFactoryパターンを用いるとよい
        • というか、それしかないらしい
    • 変化しやすい具象クラスを継承しない
      • 静的型付言語の継承は協力かつ幻覚なもののため、十分に注意すること
        • おそらく、意図しない動きをさせる危険性があるためと思われる
    • 具象関数をオーバーライドしない
      • オーバーライドしたい場合は、元の関数を抽象関数にして、パターン毎の実装をすべき
    • 変化しやすい具象を名指しで参照しない
      • DIPの言い換え

Factory

安定した抽象に従うと、具象オブジェクトを生成する際に特別な処理が必要。

事実上、すべての言語において、オブジェクトの具象定義を含むソースコードの依存は避けられない。

そのため、大半のオブジェクト指向言語ではAbstractFactoryを用いて、依存性を管理する。

Abstract Factoryについて

まとめ

咀嚼した結果、

  • Abstract FactoryのcreateFactoryあたりは、もっとスマート(依存しないような形)で実装できたら良さそう
    • Railsconstantizeのように、文字列からクラス名を生成する仕組みがあると便利かも
  • DIPは原則(規則)、DIやAbstract Factoryはそれに準拠するための手法

のようなイメージでインプットしました。

もし、気になる点等ありましたら、FBいただけると助かります。🙇‍♂️

じぶん Release Notes ver 0.30.3

f:id:kic-yuuki:20200202082051p:plain

2020/01の取り組みの成果を書いていきます。

先月分はこちら -> じぶん Release Notes ver 0.30.2 - zackey推し

  • 開発・技術
  • 勉強会・コミュニティ
    • 勉強会
    • コミュニティ
  • プライベート
    • 記事(じぶんリリースノートを除く)
    • PV数
  • Challenge Every Month
    • 2020/01の結果
      • ⭕️プロを目指す人のためのRuby入門の読破
      • ❎プロを目指す人のためのRuby入門の記事を書く
    • 2020/02の目標
      • DesignIt!を読破する
      • すぐ分かる音楽理論#7 まで完了する
  • おわりと所感
    • ギター
    • 仕事とか
続きを読む

GitHub Actionsを使って、MarkdownファイルからPDF(職務経歴書)を生成する

この記事では、以下のことを記載します。

  • はじめに(職務経歴書Markdownで記述、GitHubで管理する)
  • GitHub ActionsでPDFを生成する
    • md-to-pdfでMarkdown→PDF出力
    • 手順
      • 1. README.mdに職務経歴書を記述する
      • 2. md-to-pdfをインストール、PDF出力するスクリプトを作成する
      • 3. ワークフローを記述する
      • 4. git pushでワークフローを実行、PDFがダウンロードできるか確認する
  • おわり
    • 参考文献
続きを読む

RSpecが特定のファイルしか実行されない(または中断されてしまう)場合は focus: true がないかチェックする

最近、仕事でSSO周りをRuby on Railsで実装しているのですが、
連携先によってロジックが変わります。

そのロジックを誰か(自分)が引き継ぐとなった場合、
何が正と判断するのに、テストコードが非常に参考になるという経験をしました。

テストコードはRSpecで記述しているのですが、
bundle exec rspecを実行しても特定のファイルしかテストされない
という事象に行き当たりました。

今後も同じことに躓く可能性があると感じ、メモとして記事にしておこうと思います。

filter_run_when_matchingfocus: true

RSpecを導入した後、
spec/spec_helper.rbに以下のような設定があります。

# spec/spec_helper.rb
RSpec.configure do |config|
  # 〜省略〜
  config.filter_run_when_matching :focus
  # 〜省略〜
end

この設定により、
RSpec.describe SampleController, type: :request, focus: true do
のように設定したspecファイルに対してのみ、テストを実行するようになります。

focus: trueをmaster / developブランチへ誤ってコミットしてしまうと、
RSpecが特定のファイルしか実行されない...」
というようなことが起きるので、コミット前に focus: true の消し忘れがないか、
確認するようにしましょう。

※rubocopとかで設定できるといいけど、できるのかな... 🤔

参考記事

ギターを始めることにした

※タイトルからわかる通り、技術ネタではないので興味ない方はスルーしてください。🙏

年末年始にずっと続けられる趣味を何か持ちたいな... と、
ふと考えることがあり、色々あって、ギターを始めることにしました。

この記事では、きっかけ等について書きます。

きっかけ

2つあります。

ラジオ(というより生放送)

最近、以下の生放送やアーカイブを聴きながら作業することが多いです。

ch.nicovideo.jp

ざっくり説明すると、以下のような放送をしています。

  • パーソナリティは鷲崎健さん
  • 声優さんやアニソン系歌手の方がゲストにでる
  • 三角コーナーという、一般の方がテーマにそった音楽や音声の音源を送るコーナーがある
  • 弾き語りが行われる

声優さんや歌手の方がゲストに出られる際は、
普段出演されているアニメやイベントについての話や、
苦労話をしてくれます。

人間関係や仕事へのやりがいといったディープな話題が出てくることもあります。

声優や歌手の方も、社会人として同じ苦労しているんだなと共感、
励みになるため、毎回の放送を楽しみに聴いています。

とくに癒される&励みになるのは、鷲崎健さんの弾き語りです。

アニソンに限らず日本・海外音楽をアコースティックギターでかっこよく演奏、
ゲストの方が歌うとような形式で弾き語りされているのですが、
ギターの音色が心地よく、癒されています。

気づけば、放送に触発され、
鷲崎健さんのように弾けるようになるには時間がかかる
(または弾けないかもしれない)けど、
自分もギターを弾いてみたいという気持ちになりました。

仕事以外に趣味を持ちたい

年末年始に帰省し、家族や友人と接して、

  • いまはエンジニアという仕事が好きだから、休日中も勉強や仕事できれば充実できる
    • もし嫌になって息抜きが必要になったらどうするか
    • 別に趣味が必要になるのでは

のような考えが堂々巡りし、新たな趣味を作ることにしました。

練習はどうするか?

しばらくは仕事・プライベートともにドタバタしているため、
音抑えめ・比較的小さめのミニギターを購入、
Youtubeをもとに独学で練習したいと思います。

www.youtube.com

my-best.com

色々落ち着いて、まだ横浜に住んでいるようだったら、
以下のようなギター教室に通おうと思います。

www.eys-musicschool.com