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

日々の学びを書きます

Object-Oriented Conference 2020 ( OOC ) の当日スタッフ参加させていただいたときの学びなど #ooc_2020

2020/02/16(日)に行われた、
Object-Oriented Conference 2020 ( 以降OOC ) に当日スタッフとして
参加させていただきました。

ooc.dev

ooc.connpass.com

当日の映像はYoutube Liveで配信されており、以下から視聴することも可能です。

www.youtube.com

この記事では、

  • 参加したきっかけ
  • 当日の雰囲気
  • 当日スタッフとして得られたこと
  • 感想・所感

を自分のメモ用に書いておきます。

続きを読む

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とかで設定できるといいけど、できるのかな... 🤔

参考記事