😅

自作のOSSライブラリを公開した振り返り

2022/03/06に公開

自己紹介

みなさんん。こんにちは!
tyamahori です。

  • Laravel/PHPが親です。
  • PhpStormを愛しています。
  • APIや管理画面作ってます。
  • フロントエンドは苦手です。
  • DDD的なことや、クリーンアーキテクチャ的なことに思いを馳せるのが好きです。
  • メンテナンス性や拡張性があるシステムをどうやって作っていくか頭を悩ませています。
  • 最近はデータベースの設計やSQLの組み立てに関して意識することが多くなりました。

今回の記事の内容

先日に自作のOSSライブラリを公開しました。ちょっと時間が立ったので、自分がどのように考えて設計や実装をしたのかを振り返ろうと思ったのがきっかけです。

まずは成果物

機能

西暦を和暦に、和暦を西暦に変換すること。

GitHub

https://github.com/tyamahori/koyomi-converter

作成した理由

  • 業務の要件で必要だったため。
  • ライブラリとして公開すれば、今後同じ様な状況があっても使い回せると考えたため。
  • 自分の実績にもなると考えたため。

参考にしたもの

デザインパターンを改めて確認してみました。お気に入りにのサイトはこちらです。
https://designpatternsphp.readthedocs.io/en/latest/README.html

増田本も改めて参考にしています。
https://www.amazon.co.jp/現場で役立つシステム設計の原則-変更を楽で安全にするオブジェクト指向の実践技法-増田-亨/dp/477419087X/ref=sr_1_1?keywords=現場で役立つシステム設計の原則&qid=1646497685&s=books&sprefix=現場で%2Cstripbooks%2C222&sr=1-1

考えたこと

責務、関心事、クラス設計については以下のように考えてみました。元号について改めて考えてみると、特に以下のポイントに付いて悩みました。

  • 同じ西暦でも、複数の元号があり得ること。
  • タイミングによっては、存在しない組み合わせがあり得ること
    • 平成1年1月1日や令和1年1月1日は存在しない
  • 値オブジェクトを利用する。
    • インターフェースを使い、ポリモーフィズムを意識する
  • 日付をもとに、新しい順番に元号をチェックして、引っかかたものを返すイメージ
    • factoryクラスを用いて、引数チェックを行い、適切な元号クラスを返す

関心事

元号に関する情報がまさしく関心事になると考えました。具体的には、

  • 漢字表記、
  • ローマ字表記、
  • 開始日
  • 西暦年数と元号年数の差分

といったところかなと思います。

責務

  • 西暦の日付をもとに対応する元号と元号年数を返す
  • 元号と元号年数をもとに、対応する西暦年数を返す

クラス設計

  • 静的と動的の使い分けを意識する。
    • 令和、平成といった元号名は変わることはないので、元号名を返すメソッドは静的にする。
    • 日付に応じてそれに対応する元号を返す場合、動的なメソッドにする。

失敗したこと

月、日を算出するメソッドをもたせたため、責務が少々過大になってしまった点。月日があったほうがべんりかなぁ。。という筆者の気持ちがありました。

Discussion