サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
2024年ランキング
yoskhdia.hatenablog.com
FOLIO Advent Calendar 2021 - Adventar 19日目のエントリです。 法令解釈を仕様におとして実装するという仕事柄、e-Gov法令検索サイトを参照する機会がそれなりにあります。 elaws.e-gov.go.jp 弊社には優秀なコンプライアンス部門がありますが、なにかサービスをつくりたい場合には協力して仕様を決めていく必要があります。 特に、私の所属する顧客基盤部では、顧客情報管理や口座開設・解約、相続、契約管理などのシステム*1を担当するため、種々の法令*2が絡んできます。 これまでは、法令をPDFにしてiPadでメモをとるなどしていたのですが、あまりにも長大な法令を相手にするには原始的すぎるため、ブラウザの拡張機能(WebExtension)として便利機能をつくればもっと捗るなと常々思っていました。 サッと1日で書けるようなネタが思い浮かばなかったので、
FOLIO Advent Calendar 2020 17日目です。 「データ」「情報」「知識」の含意から、ドメイン駆動設計、そして、ソフトウェア設計の現実に存在するインピーダンスミスマッチまでを考えてみるエントリです。 本エントリは、主に次の論文「データ・情報・知識の含意と相互関係の二重性について」(関口 (2016))を多々援用します*1。 これは、情報経営学分野の知見をソフトウェア設計に持ち込む試みです。 「データ」「情報」「知識」 日本語と英語の違い 「データ」と「情報」という言葉はあまり区別されずに使われることが多いものです。 関口 (2016) では、Oxford Dictionaryと広辞苑をひいて次のように分析しています。 「データ・情報・知識・知能の辞書における関係と英語との対比」 関口 (2016) より引用 詳しくは論文を参照してもらうのが良いですが、述べられているこ
この記事はFOLIO Advent Calendar 2018の6日目です。 FOLIOでも使っている「仕様」パターンをScalaで実装する方法について紹介します。 「仕様」パターンとは Eric Evans氏とMartin Fowler氏による仕様パターンに関する論文があります。 https://martinfowler.com/apsupp/spec.pdf ※PDFです また、DDD本では次のように紹介されています。 特殊な目的を持った述語的な値オブジェクトを明示的に作成すること。仕様とは、あるオブジェクトが何らかの基準を満たしているかどうかを判定する述語である。 (中略) オブジェクトを検証して、何らかの要求を満たしているか、何らかの目的のための用意ができているかを調べる。 コレクションからオブジェクトを選択する(期限が超過した請求書を問い合わせる場合など)。 何かの要求に適合する
このエントリは ドメイン駆動設計 #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: An
EventStorming (イベントストーミング) というモデリング手法があります。 www.eventstorming.com EventStorming is a flexible workshop format for collaborative exploration of complex business domains. EventStormingは、複雑なビジネスドメインを協同的に探求するための柔軟なワークショップ形式のひとつです。(意訳) 考案者はAlberto Brandolini氏で2013年にはブログに最初の投稿がされています。 海外での認知度は高く*1、Eric Evans氏のプレゼンテーションの中でも強力な手法であると言及*2されています。 近々、この手法を試せる機会が来そうなので、そのやり方について(私見を交えつつ)まとめてみるエントリです。 注意 現在進行系
DDDネタです。 DDD Community-JPのDiscordで「複数の集約(Aggregate)をまたいで整合性をどう担保するのが良いのか?」という話がされていました。 この話を読んでいて、 yoskhdia.hatenablog.com でもサラッと触れた「トランザクション」をもう少し掘ってみようかなと思い立ったので書いてみるエントリです。 先の記事では次のように書きました。 実業務、ドメインを見れば、本当にまとめて処理しなきゃいけないものは、結構少ないはずです。 働く人たちは、どういう会話をしているのか、仕事の単位は何なのか、によってトランザクションを設計することが、メッセージングシステムを考えるうえで有用だと考えています。 「トランザクション」という言葉は、開発者にとっていくつかの意味を持ちます。 ここでは、 DB操作のトランザクション(以下、DBトランザクション) 業務のうえ
第5回Reactive System Meetup in 西新宿で登壇してきました*1。 reactive-shinjuku.connpass.com 発表資料 docs.google.com 一部表現を変えつつ、補足をして発表資料を公開します*2。 トークスクリプトもつけてありますので併せてどうぞ。 明日から開催のScala Matsuri 2018の弾みになれば幸いです。 泣く泣くカットしたトランザクションの話は続きを読むからどうぞ↓ 番外編)避けては通れないトランザクションの話 docs.google.com トランザクションと一口にいっても、以下のようなものがあります。 相手システムとの間(チャンネルの両端)で協調 受けたメッセージに対して、いくつかのステップの処理を実行 メッセージング基盤としてのメッセージを確かに送受信できるようにすることに対するトランザクションと、ビジネスロジ
高速にIDを採番できる仕組みを検討したとき、Snowflake形式のID生成は選択肢のひとつとして有力です。 Snowflakeを紹介する記事は見つかりますが、実際に採用して苦労した話はあまり聞かないため、備忘的に書いてみるエントリです。 Snowflakeとは 1つのIDは64bit(ScalaではLong型)に収まり、ID採番サービスを複数のデータセンターに分散可能かつ高速に採番可能に設計されたID生成の方式です。 先頭ビットにタイムスタンプを持つため、順序があることも特徴のひとつです。 Twitter社がオリジナルの考案者です。*1 github.com カヤック社からSnowflake形式でID生成可能なKatsubushiというオープンソースのソフトウェアがGithubで公開されています。 発表スライドも参考になります。 github.com 他のID生成方式 他にはDBのシーケ
書籍『Akka実践バイブル』の翻訳レビューに参加してきました。*1 書籍のレビュアーとしては2回め、技術書としては初めてです。 興味のある人を増やせれば良いなーと思い、少しばかり本の紹介をしてみたいと思います。 www.shoeisha.co.jp どんな本か 『Akka実践バイブル』は『Akka in Action』の和訳本です。 詳細は商品ページや著者・翻訳者の紹介をご参照くださいというところですが、一言であらわせば「Akkaをまるっと概観できる」という本です。 原著のAkka in ActionはAkkaを学ぶなら必読書でした。 そもそもAkkaとは、アクターモデルを用いた並行並列処理、耐障害性のあるスケーラブルなアプリケーションを構築するためのツールキットです。 Akkaの公式ドキュメントはトップレベルの充実ぶりですが、ザクッと代表的な機能をおさえたい場合は書籍が良い入り口になりま
Swagger(OpenAPI) Specification 2.0(以下、OAS)を最近触り始めているのですが、Optionalなプロパティに値が無いときのJSONは何が許されるのかを調べたエントリです。 JSON Schema Specificationの requiredキーワード と type: null について確認しました。 OAS2.0ではModelはSchema Objectとして定義されており、これは JSON Schema Specification Draft 4 となっています。 OASでは、Schema Objectのrequiredキーワードおよびnullについて特に言及はありません。 そのため、JSON Schemaの仕様*1に準拠すると解釈し、これを調査しました。*2 TL;DR requiredキーワードに指定されていない(Optional)プロパティは、
JVMにチューニング項目は多々あれど、プロダクションで運用する際に予めおさえておきたい項目をまとめてみるエントリです。*1 勿論、OSもJVMもデフォルトである程度のパフォーマンスは発揮でき、計測を伴わないチューニングは悪手であることはよく知られています。 しかし、設定しておかないとパフォーマンスにそのまま影響すると分かるものを調べないのは裸で戦場に赴くようなものです。*2 どんな項目をどう変更すれば良いのか知っていることは重要な武器なのです。 なぜ調べるのか 今回、チューニングポイントを調べるにあたって、私のモチベーションはどこにあるのかを考えると、以下の要件を満たしたいということがあげられます。 アプリケーションとして求められる品質水準として動作する → 性能目標 異常時に事象を追うことができる ここでいう品質水準・異常とは、パフォーマンスが明らかに低い、アプリケーションがクラッシュす
ScalikeJDBCをReactive Streamsに対応させる記事を公開してから、ScalikeJDBC公式にモジュールが取り込まれる*1こととなり、ついに本日バージョン3.0がリリースされました! github.com この scalikejdbc-streams モジュールの使い方を解説するエントリです。 前置き scalikejdbc-streamsは、全てのResultSetを読み込まずにDBがサポートするCURSORなどの仕組みを使ってストリーム処理を行えるよう設計されたDBアクセスのためのモジュールです。 Reactive Streamsに準拠しており、非同期処理をサポートします。 主にバッチアプリケーションでの利用を想定しています。 現在の実装では、ストリーム処理中にDBコネクションを保持したままとなるため、多くのトラフィックのあるWebアプリケーションでは、コネクショ
Scala Advent Calendar 2016の15日目です。 バッチアプリケーションを作ることになったので、Akka Streamsを使おうかと考えました。 Slickだと標準でstreamメソッドが用意されているため、Akka Streamsとも連携させやすいですが、ScalikeJDBCが学習コストが低くて素敵だったので、コレをAkka Streamsに組み込めないか試したエントリです。 DBはMySQLを使う前提ですので、ご注意ください。 (一部Postgresも引き合いにしてますが、OracleやSQL Server等は調べてません。) TL;DR github.com 2017/05/20 追記 ScalikeJDBC 3.0に公式に取り込まれました。 github.com JDBCブロッキング問題 現在、JDBCは同期インタフェースしか提供されていません。 asyncな
本記事はSupership株式会社 Advent Calendar 2016の12日目の記事になります。 株式会社Socketの @yoskhdia です。 株式会社SocketはSupership株式会社と同じSyn.グループのメンバーであり Web接客と呼ばれるサービスのひとつであるFlipdeskを展開しています。 弊社で3,4ヶ月ほどタスクボードを試験的に導入しました。 現在は一旦おやすみ中ですが、次に活かすための振り返りをしてみるエントリです。 結論としては、ガッツリ転んだけど、次はもっと良くするぞ!という感じです。 背景 弊社は開発チームと一括りにしてもその中には"機能開発チーム"、"品質管理チーム"や"インフラチーム"が存在します。 少ない人数で進めているので開発要望が増えるスピードの方が早く、この溜まりに溜まった開発要望を開発チーム全体で一挙集中して消化しよう期間が企画され
Clean ArchitectureにはUseCase層が定義されていますが、このUseCaseが一体どういうものなのか度々わからなくなるので、自分の考えをまとめてみるエントリです。 Clean Architectureについてはこちら 8thlight.com 日本語訳:クリーンアーキテクチャ(The Clean Architecture翻訳) 以降、概念を”ユースケース”、実装されるモノを”UseCase”と表記することにします。 (同じっちゃ同じなんですが、指してるものがところどころ変わるので表記分けをしています。) また、Webアプリケーションを想定しています。 ユースケースとは何なのか Clean Architectureから抜粋します。 Use Cases The software in this layer contains application specific busi
speakerdeck.com 第3回Reactive System Meetup in 西新宿のLTで発表をしてきました。 reactive-shinjuku.connpass.com LTという都合上、含めたかったけれど泣く泣く削ったボツネタも併せて補足するエントリです。 (例によって長いです。) Reactive Systemの文脈でドメインイベントを使うモチベーション 今回のLTの募集要項が「リアクティブに関連すればなんでも」なのに、思いっきりDDDの話じゃん!というのが、もしかしたらあるかもしれませんので、ここで補足しておきます。 引用:The Reactive Manifesto 上図の通りMessage Drivenがリアクティブシステムでの基盤となります。 このMessageは大きく3種類あることはスライドで述べましたが、その内のEvent Messageはリアクティブシス
Reactive Messaging Patterns読書会のなかで、「マイクロサービスとAkkaとGo」な面白い話題が出たので代表でまとめる試みエントリです。(結構、色々な話題に飛んでいるので難度高い。) まとめ方としては、会話ログを転記して、最後にまとめる形をとっています。また、議論と私の考えが混ざらないように所感は分けておきます。 ddd-cqrs-es.connpass.com TL;DR 要素技術(どんな言語使うとか、どんなアーキテクチャにするとか)の前に、組織やプロダクトの性格を考えて戦略を決めましょう。 そして、その中で最適と思われる戦術をとれるような要素技術を採用しましょう。 Akka良いよ。 ログ(一部抜粋) Slackからの引用のためテキストベースです。 事の始まりは、荒木さん(以下、 @applideveloper )の発言でした。 (この記事絡みですね。 集合知で各
マルチスレッド時代における意外なハマりどころfalse sharingについてまとめておきます。 参考にあげている書籍「Javaパフォーマンス」からのまとめです。 false sharingとは 例えば、以下の様なコードがあるとします。 public class DataHolder { public volatile long l1; public volatile long l2; public volatile long l3; public volatile long l4; } このとき、longは64bit = 8バイトのサイズですが、これらはメモリ上で近接して配置されます。 プログラムがl2を操作しようとすると、ある程度まとまったサイズのメモリが読み込まれます。(※2) 多くの場合、近接するインスタンス変数も操作するため、アクセスはとても高速にでき、パフォーマンスに貢献します
だいぶ時間があいてしまいましたが、ユーザーストーリーのセミナーに参加してきましたので、そのメモです。 アジャイル開発で要望の表現に用いるユーザーストーリー入門 | 株式会社オージス総研 ユーザーストーリーマッピング すでに多くの記事やスライドが公開されていますので、詳細はそちらに譲りますが、すごく大雑把に言えば簡潔なフォーマットでユーザーストーリーを書き出し、それらをリリースや要求種別を軸に並べ替え製品全体のユーザーワークフローを見えるようにしたものをユーザーストーリーマッピングといいます。 参考: speakerdeck.com よくある悩み ユーザーストーリーマッピングはシンプルで素晴らしいものですが、ソフトウェアの機能的な要求ばかりに目が行きがちです。 また、3C(カード、会話、確認)というプロセスはあれど、抜け漏れの防止や発想の仕方まではカバーすることが難しい面があります。 特に実
ddd-zk.connpass.com DDD座談会のパネラーとして登壇させていただきました。 素振り 予め参加者の方々からいただいた質問(テーマ)に対して、予行練習というか、ちょっと自分の考えを先にまとめていたのですが、予想通りテーマひとつひとつが盛り上がったので全部を話しきることができませんでした。 折角なのでここに公開しておきます。 ところどころ、座談会終わっての後書きも追記しています。 なお、あくまで私見ということでよろしくお願いします。座談会のまとめ記事というわけではありませんので、悪しからず。 各人のコンテキストで、こんな解釈あるよ等あると思いますので、Twitterでもコメントでもフィードバックいただければ幸いです。 DDD全般について DDDに向いている要件とは?費用対効果ってどうなの? 継続的に投資したいプロダクトであることが大事だと思っています。 システムは一度作れば費
社内交流会でLTをする機会があったので「ユビキタス言語」についてDDD本を再度読みなおしてみました。 speakerdeck.com 最近、「DDDは負け犬」みたいな話が少しバズりましたが、ユビキタス言語=ユーザの言葉と解釈するのはあまりに勿体無いのではないかなと思います。 ユビキタス言語はより良い・深いモデルを探求するために必要なものです。 スライドの補足 第2章はスライドに書いたことよりも、もっと多くのことについて言及されています。 ここでは、それらの省略してしまった部分を補足しつつ、スライド構成の今ひとつだった部分を正したいと思います。 まず、第2章最初の一文 しなやかで知識豊富な設計を行うには、用途の幅広い、共有されたチームの言語と、その言葉を使った活発な実験が必要である。 – 書籍「ドメイン駆動設計」(p.24) 省略しようがないくらいに、この一文に詰まっているのですが、スライド
このページを最初にブックマークしてみませんか?
『yoskhdia’s diary』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く