Chrome & Firefox 拡張機能で e-Gov 法令検索を使いやすくする(序)
FOLIO Advent Calendar 2021 - Adventar 19日目のエントリです。
法令解釈を仕様におとして実装するという仕事柄、e-Gov法令検索サイトを参照する機会がそれなりにあります。
弊社には優秀なコンプライアンス部門がありますが、なにかサービスをつくりたい場合には協力して仕様を決めていく必要があります。 特に、私の所属する顧客基盤部では、顧客情報管理や口座開設・解約、相続、契約管理などのシステム*1を担当するため、種々の法令*2が絡んできます。
これまでは、法令をPDFにしてiPadでメモをとるなどしていたのですが、あまりにも長大な法令を相手にするには原始的すぎるため、ブラウザの拡張機能(WebExtension)として便利機能をつくればもっと捗るなと常々思っていました。
サッと1日で書けるようなネタが思い浮かばなかったので、 e-Gov 法令検索サイトを使いやすくするべく拡張機能に手を出してみたエントリです。
なお、仕事でフロントエンド技術を触ることはほぼなく、最後の記憶はjQueryというドラゴンボールに例えるとソバくらいのレベルですので、何卒暖かい目でご笑覧ください。
つくったもの
法令では、括弧が多用されます。
これがいくつもネストされていくと非常に読みづらいものです。
そこで、括弧の範囲に色を付けることで読みやすくする機能を実装しました。
明らかに短時間で実装を終わらせたいことがミエミエのお題
「(定義)」まで強調表示されてしまっているあたりに、まだまだ改良余地がうかがえますね…。
それでは、つくり方です。
続きを読むScalaを例に「仕様」パターンを実装する
この記事はFOLIO Advent Calendar 2018の6日目です。
FOLIOでも使っている「仕様」パターンをScalaで実装する方法について紹介します。
「仕様」パターンとは
Eric Evans氏とMartin Fowler氏による仕様パターンに関する論文があります。 https://martinfowler.com/apsupp/spec.pdf ※PDFです
また、DDD本では次のように紹介されています。
特殊な目的を持った述語的な値オブジェクトを明示的に作成すること。仕様とは、あるオブジェクトが何らかの基準を満たしているかどうかを判定する述語である。
(中略)
- オブジェクトを検証して、何らかの要求を満たしているか、何らかの目的のための用意ができているかを調べる。
- コレクションからオブジェクトを選択する(期限が超過した請求書を問い合わせる場合など)。
- 何かの要求に適合する新しいオブジェクトの生成を定義する。
検証、選択、要求に応じた構築という、これら3つの用途は、概念レベルでは同じものである。
今回は1点目のバリデーションに使うケースで考えます。
続きを読むエンティティの同一性を表現するためにequalsをオーバーライドすべきか否か
このエントリは ドメイン駆動設計 #1 Advent Calendar 2018 の5日目です。
4日目は @s_edward さんの「Microservices と DDD」でした。
6日目は @kawakawa さんの ドメインオブジェクトとユースケースの関係について です。
TL;DR
エンティティの同一性を表現するためにequalsをオーバーライドすべき ではない と考えています。
稀によくあるサンプル
次のような実装を目にすることがあります。以降のコードは Scala 2.12.7 で動作確認しています。
※私が書きやすいのでScalaを用いていますが、他言語においても同様のことは言えるかと思います。
trait Identifier trait Entity[ID <: Identifier] { def identifier: ID def canEqual(that: Any): Boolean = this.getClass == that.getClass override final def equals(that: Any): Boolean = { that match { case that: Entity[_] => canEqual(that) && identifier == that.identifier case _ => false } } override final def hashCode(): Int = identifier.hashCode() }
equals
をオーバーライドすることで、エンティティが同じであるかをIdentifierを使って判定できるようになっています。
しかし、この実装は果たして良いのかどうかを考えてみるエントリです。
新しいモデリング手法: EventStorming (イベントストーミング) をはじめるための準備
EventStorming (イベントストーミング) というモデリング手法があります。
EventStorming is a flexible workshop format for collaborative exploration of complex business domains.
EventStormingは、複雑なビジネスドメインを協同的に探求するための柔軟なワークショップ形式のひとつです。(意訳)
考案者はAlberto Brandolini氏で2013年にはブログに最初の投稿がされています。 海外での認知度は高く*1、Eric Evans氏のプレゼンテーションの中でも強力な手法であると言及*2されています。
近々、この手法を試せる機会が来そうなので、そのやり方について(私見を交えつつ)まとめてみるエントリです。
*1:Wikipediaのページがあったり Event storming - Wikipedia
*2:Explore DDD 2018基調講演 Eric Evans - Keynote: DDD Isn't Done: A Skeptical, Optimistic, Pragmatic Look - YouTube