面白駆動人生

やっほー

【読書メモ】実践ドメイン駆動設計 ~第5章~ 「エンティティ」

前回 【読書メモ】実践ドメイン駆動設計 ~第4章~ 「アーキテクチャ」

What is 「エンティティ」

DDDにおいて「エンティティ」は一意なものを示す概念。長期に渡り、変化する可能性がある。
一意ではなく、変化しないものは「値オブジェクト」と呼ばれる。

ドメインモデル貧血症

DBのプロパティをpublicなプロパティーとして保持し、そのgetter/setterのみから構成されるモデル。 オブジェクトとしての「振る舞い」がほとんどない状態で、「単なる手続き型設計」になっている点が、アンチパターンとされる。

エンティティ設計

一意な識別子

  • ユーザが入力する。一意性はアプリケーション側が担保する。
  • アプリケーションが内部で生成。
  • データベースなどに生成を任せる。
  • 別の境界づけられたコンテキストが生成した識別子を、ユーザが入力する。

生成タイミング

  • 早期生成: エンティティを永続化する前に、生成と割り当てを行う。

  • 遅延生成: エンティティを永続化する時に、生成と割り当てを行う。

代理識別子

エンティティが保持する識別子とは別に、オブジェクトの識別子を別の方式で管理したい時に利用。例えば、ORMツールのHibernateは、データベースに依存した型で識別子を持つ必要がある。

レイヤスーパータイプを利用することで解決する。

エンティティの生成方法

  • コンストラクタ
  • ファクトリ
  • コンストラクタから「自己カプセル化」での呼び出し

自己カプセル化・・・ クラス内部からフィールドにアクセスする際もアクセサメソッドを利用する方法。

バリデーション

  • 自己カプセル化によって、セッター呼び出し時にアサーション。
  • 契約による設計の、事前条件としてアサーションを記述。
    • 事前条件: 呼び出し側が開始時に保証する条件
    • 事後条件: 呼び出される側がメソッドの終了時に保証する条件
    • 不変条件: データが常に満たすべき条件

以上

【読書メモ】実践ドメイン駆動設計 ~第4章~ 「アーキテクチャ」

1. What is Architecture

2. アーキテクチャの種類

Layers

特徴

クライアント -> サーバ -> DB のように、層に分けるパターン。名前空間の分割、各レイヤの依存関係、責務の明確化。

問題点

ドメイン層がインフラ層に依存するため、ドメインの実装が、インフラ層の実装に依存してしまう。

解決策

DIP(Dependency Inversion Principle)を用いる。
インフラ層の実装をドメイン層の抽象に依存させ、ドメイン層を独立させる。

Hexagonal or Ports and Adapters

特徴

システムを内部と外部の領域に分け、外部からの入力をアダプタが変換し、内部のAPIの形式に合わせる。
テスト用のアダプターが容易に作れる点が利点。 クライアント、永続化の種類が未定のうちから、暫定的なアダプターを作ればドメインの実装を進められる。

Service-Oriented

SOAの8つの原則

原則 説明
Standardized Service Contracts サービスは契約(インターフェース)によって説明される
Loose Coupling of Service 疎結合であり、外部への依存は最低限にする
Service Abstraction インターフェース(契約)のみ公開し、内部の詳細は見せない
Service Re-Usability 実装は一つで、他サービスから再利用可能である
Service Autonomy サービスが独立して存在し、一貫性と信頼性を保っている
Service Statelessness サービスを利用する側が状態を管理する
Service Discoverability サービスをメタデータで記述し、発見可能にする
Service Composability サービスはより大きなサービスの一部に組み込み可能である

Representational State Transfer (REST)

RESTの定義

RESTとは、Fieldingが博士論文として提唱してアーキテクチャスタイル。
https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm

RESTに従っていることをRESTfulと呼ぶ。

  • point1 リソースはURI(Uniform Resource Identifer)により、一意に識別される。
  • point2 一つのHTTPリクエストに、サーバ側での処理に必用な情報を全て含める。サーバは個別のリクエストに依存しない。
  • point3 全てのオブジェクトが同じインターフェースを持ち、決められたメソッドで操作される。(特に重要なメソッドとして、GET, PUT, POST, DELETE)
  • point4 レスポンスに他のリソースの情報を埋め込める。Hypermedia as the Engine of Application State(HATEOAS)

RESTとDDD

RESTとDDDをどう組み合わせるか? ドメインモデルをRESTful HTTPで直接公開するのは悪手。ドメインモデルに手を加えるたびに、システムのインターフェースにも手を加える必用が出てくる。

システムのインターフェースレイヤを、境界づけられたコンテキストとして分離する方法が一般的に使われる。

Command-Query Responsibility Segregation (CQRS)

解決したい課題

  • 読み取りと書き込みのデータの形は一死するとは限らない。
  • 同じデータセットに、並列で操作が実行されると競合が発生する可能性がある。
  • データストアとデータアクセス層への負荷、クエリの複雑さによって、パフォーマンスに悪影響が出る可能性がある。
  • 読み取りと書き込みが同じデータに行われるため、アクセス許可の管理が複雑になる。

参考: CQRSパターン - Azure Architecture Center

What is CQRS?

「更新」を行う「コマンド」と、データを「参照」する「クエリ」に、異なるモデルを使うアーキテクチャ

アクションを実行する「コマンド」と、データを呼び出し元に戻す「クエリ」をメソッドとして分離するという、 CQS(Command Query Separation)の考えを、アーキテクチャに持ち込んだもの。

f:id:yktm31:20210606192406p:plain

CQRSのメリット - スケーリング - 読み取り、書き込みそれぞれを個別にスケーリングできる。

  • パフォーマンス

    • 読み取り側はクエリ用に最適化できる。
  • セキュリティ

    • 適切なエンティティのみが、書き込みできる状態を維持しやすい。
  • 関心の分離

    • シンプルな読み取りの実装と、ビジネスロジックが含まれる書き込みの実装を分離でき、保守性・柔軟性を向上できる。

参考: CQRSパターン 解決策 - Azure Architecture Center

CQRSのデメリット - 複雑さ - イベントソーシングが含まれる場合、特に設計が複雑になりやすい。

  • メッセージング

    • コマンド発行・イベント更新にメッセージングが使われることがある。
    • その際、メッセージのエラー・重複処理が必要になる。
  • 一貫性

    • 読み取りデータが古くなる可能性がある。
    • 結果整合性を採用することがある。
      • サーバ側から更新のメッセージをUIに送り、リアルタイム更新する(WebSocket等)
      • UIに、最終更新日時を表示する。
      • UI上で擬似的に表示を更新する。

参考: CQRSパターン 実装に関する問題と注意事項 - Azure Architecture Center

Event-Driven Architecture (EDA)

  • イベントを受け取り、受け取ったイベントに応じて反応するアーキテクチャ
  • システム間の結合を切り離せる。

パイプ & フィルター方式

cat phone_numbers.txt | grep 303 | wc -l

上記のLinuxコマンドのパイプ・フィルターのように、イベントを送信->イベント受信->処理実行->イベント送信という流れを、システム間のやりとりとして表現する方式。

業務プロセスにおけるアクティビティの発生をモデリングしたものになる。

サーガ(長期プロセス)方式

パイプ&フィルターを拡張したもの。複数の処理を分散して処理したい場合に利用。

長期プロセスの設計方法

  • 実行者コンポーネントに、各タスクをトレースさせる。

  • パートナーアクティビティ という方法。Pat Hellandが推奨。

  • イベントを運メッセージに、プロセスの状態を保持させ、プロセスはステートレスとなるように設計する。メッセージを受け取るハンドラが、受け取ったイベントに情報を付与して、次のメッセージとして送出する。

イベントソーシング方式

  • 履歴管理に利用可能。
  • Gitのように、過去の状態を復元するような概念に類似
  • 発生したすべてのイベントを、イベントストアに格納。

データファブリック / グリッドベース分散コンピューティング

  • Pivotal社のGemFireや、Oracle社のCoherenceといった製品で使われる概念。

【読書メモ】実践ドメイン駆動設計 ~第3章~ 「コンテキストマップ」

復習

  • 問題空間: 解決すべきビジネス上の課題 (問題空間 = コアドメイン + サブドメイン)

  • 解決空間: ソフトウェアをどう実装して課題を解決するか (解決空間 = 境界づけられたコンテキスト)

目次

1. Why コンテキストマップ?

  • マップを書く主たる理由は、解決空間の全体像を見れるようにすること。

  • コンテキストマップは、現状を姿を捉えるためのもの。理想・期待する姿を書くわけではない。

  • シンプルかつアジャイルに進める。

  • コンテキストマップは組織の動きを示す。

2. コンテキストマップと組織パターン/結合パターン

組織パターン

パートナーシップ

成功/失敗の運命をともにする関係がある。インターフェース部分も共に検討して前に進める。

別々の道

協力体制なく、統合しない。

顧客/供給者の開発

上流・下流の関係。

順応者

上流・下流の関係だが、上流側が下流の要求に応えようとしない。

結合パターン

共有カーネル

明示的な境界を定め、共有部分を合意する。ソースコードレベルで共有。

公開ホストサービス (Open Host Service)

サブシステムへのアクセスのためのプロトコルを公開。RESTが主流。

公表された言語 (Published Language)

明確にドキュメント化された共有言語を利用。JSONXMLを利用。

腐敗防止層 (Anti-Corruption Layer)

パートナーシップ、顧客/供給者といった関係を築けなかった際に、上流システムの機能を、独自のドメインモデルで表現するためのレイヤ。

巨大な泥団子

大規模でモデルも混在している。他のコンテキストに影響をださないように注意。

【読書メモ】実践ドメイン駆動設計 ~第2章~ 「ドメイン、サブドメイン、境界づけられたコンテキスト」

1. ドメインサブドメイン・境界づけられたコンテキストについて

2. 問題空間と解決空間

  • 問題空間 ・・・解決すべきビジネス上の課題

問題空間 = コアドメイン + サブドメイン

  • 解決空間 ・・・ソフトウェアをどう実装して課題を解決するか

解決空間 = 境界づけられたコンテキスト

それぞれのサブドメインに、境界づけられたコンテキストが、1対1で対応するのが望ましいゴール。

3. 境界づけられたコンテキストの意味

  • 境界づけられたコンテキストとは、ドメインモデルがどこに属すのかを表すもの。
  • コンテキストによって、モデルの概念・操作・プロパティは変わってくるので、明示的に境界を引く。
  • 境界づけられたコンテキストにより、ユビキタス言語・ドメインモデルをカプセル化することが主目的。

境界づけられたコンテキストとは異なるもの

のような技術的な境界。

  • 開発要因へのタスク割り当て
  • 開発要因の管理のしやすさ

というような偽の境界。

【読書メモ】実践ドメイン駆動設計 ~第1章~「DDDへの誘い」

1. Why DDD?

  • ドメインエキスパートと開発者を一つのまとまったチームにする。
  • チーム全体が理解できる共通言語に基づいて開発を進められる。
  • 設計がコードであり、コードが設計でもある。
  • 戦略設計と戦術的設計の両面で、健全なソフトウェア開発を支える。

目指すは、事業価値をもたらすソフトウェア開発

事業価値をもたらさない、ソフトウェア開発とは?

  • ドメインエキスパートと開発者との断絶
  • ドメインエキスパート同士の意見の相違と、矛盾したソフトウェアモデル
  • 技術解をベースに進め、事業・業務が間違った方向に向かう

2. どんな時にDDDを使うのか?

  • 事業における、もっとも重要な領域。
  • 置き換えが簡単な領域ではなく、複雑で投資の見返りが一番大きな部分。 ・・・コアドメイン
  • 重要な支援的な領域  ・・・サブドメイン

3. どのようにDDDを使うのか?

ユビキタス言語を作ることが第一歩。

ユビキタス言語 == ドメインエキスパート・ソフトウェア開発者を含めたチームで作り上げる共通言語

どのようにユビキタス言語を作っていくか。

  1. ドメインについて図示し、名前とアクションをつける。
  2. 定義をまとめた用語集、もしくは概念に関するスケッチなどのドキュメントを作る。
  3. 作成した用語・フレーズをレビューしてもらう。

point1. ユビキタス言語・コードは変化するもの。

  • ドキュメントをつくって終わりではない。
  • コード内のモデル・チーム内での会話が、最もユビキタス言語の現状を表す。

最初に作ったドキュメントを常に最新の状態に更新するのは非現実的。 いつでも捨てられるようにと考える。    

point2. ユビキタス != ユニバーサル

ユビキタスは、業界全体・世界中で、という意味ではない。 境界づけられたコンテキストごとに、ユビキタス言語が存在する。

4. 導入する際の課題は?

5. アジャイルとDDD

DDDはアジャイルを想定している。 テストファーストでモデルの検討をする。

  • チームでモデルを検討
  • モデルに対するテストコードを実装
  • ドメインモデルを実装
  • リファクタ
  • ユビキタス言語の認識が正しいか確認する。

ペルシャ風ラム肉の煮込み

はじめに

GW、どこにも行けない代わりに、普段作らないような手間のかかる手の込んだ料理を作ろう。 そう思っていたところに思いつきました。「イラン料理だ!」

学生時代、第二外国語ペルシャ語をやっていたのと、その授業で連れて行ってもらったペルシャ料理屋。 その味をもう一度食べたい。

というわけで今回、ペルシャ風ラム肉の煮込みを失敗覚悟で作ってみたら、思いのほか美味しくできたので、記録としてレシピを残します。

作ったものは、以下の3つ。

  • ラム肉の煮込み
  • シーラージサラダ(Shirazi salad)
    • イラン北部にあるシーラーズが由来になっているサラダ
  • Jeweled rice(もどき)
    • ハーブやレーズン、ナッツ、ザクロを混ぜてつくるライス。今回は、ザクロは利用せず。

準備〜片付けまで、大体1時間くらいでできました。

参考レシピ

日本語で書かれたレシピは、ほぼ見つからなかったので、以下の動画を参考にしました。 www.youtube.com

副菜として作ったシーラージサラダは、以下の動画を参考にしました。 www.youtube.com

材料

ラム肉の煮込み

材料 分量
玉ねぎ 1玉
ラム肉(肩) 300g
シナモン スプーン2杯
ターメリック スプーン2杯
カルダモン スプーン1杯
ナツメグ スプーン0.5杯
サフラン ひとつまみ
ライム 1/2
レモン 1/2 (or 1/4 )
タイム 適量

シーラージサラダ

材料 分量
きゅうり 1本
パプリカ(赤・黄) 1/2
レッドオニオン 1玉
トマト (今回は切らしていたので無し) 1個
レモン 1/2
オリーブオイル 大さじ3
ブラックペッパー 適量

Jeweled rice(もどき)

材料 分量
バスマティライス 1合
ルッコラ 4~6本
イタリアンパセリ 4~6本
レーズンミックス 適量
ピスタチオ 適量
レッドオニオン 1/2

手順

1. バスマティライスを炊く。

使ったのは、こちら。

炊飯器で、日本のお米と同じように炊きます。 日本の米の時と同じ量の水だと、やや硬めになるとパッケージに書いてありました。 今回は、水を1.1倍ほど入れたところ、もちもち感が出ました。

炊飯器のボタンを押したら、炊き上がるまでにメインを作っていきます。

2. ラム肉の煮込みを作る。

①. 玉ねぎを切る

f:id:yktm31:20210502230137j:plain

②. 香り付け水を作る

熱湯 180mlに、サフランをひとつまみ入れる。 香りが立ってくる程度。 Do not Overuse. f:id:yktm31:20210502230516j:plain

レモンとライムの皮をすりおろしたものと、絞り汁を加える。 f:id:yktm31:20210502230527j:plain

※参考にしている動画では、Rose Waterを入れてますが、用意できなかったので省略。

③. ラム肉をスパイスでコーティングしていく。

スパイスは、ターメリック(左上)、シナモン(右上)、カルダモン(左下)、ナツメグ(右下) f:id:yktm31:20210502231126j:plain

上記のスパイスに塩を少々加えて混ぜ、ラム肉に馴染ませていく。 f:id:yktm31:20210502231137j:plain 少し余らせて、火を通した後再度使う。

④. ラム肉に火を通し、一旦取り出すし、スパイスを再度馴染ませていく。

f:id:yktm31:20210502231431j:plain

⑤. 玉ねぎを、香り付け水・タイム・ベイリーフとともにを炒める。

f:id:yktm31:20210502231605j:plain

⑥. 玉ねぎが飴色になる前に、ラム肉を入れる。

f:id:yktm31:20210502231745j:plain

⑦. 熱湯400mlとコンソメの素を入れ、弱火で蓋をして煮込む(約10 ~ 15分)

f:id:yktm31:20210502232142j:plain

3. シーラージサラダを作る。

ラム肉を煮込んでいる間に、サラダを作っていきます。

①. 材料を用意します。

f:id:yktm31:20210502232623j:plain 本当はここに、トマトが入ります。 レッドオニオンは、ライスでの使うので少し多めに切る。

②. 材料を賽の目に切ります。

f:id:yktm31:20210502232605j:plain

③. オリーブオイル・レモンの絞り汁・ブラックペッパーを加え、よく混ぜます。

f:id:yktm31:20210502232630j:plain

サラダはこれで完成です。 そうしている間に、ライスが炊けている頃合いなので、続いてライスに手を加えていきます。

4. Jeweled riceを作る。

参考の動画ではザクロを入れたりして、Jeweled riceにしていますが、今回は色々簡略化します。

①. レッドオニオン・ルッコライタリアンパセリを切る。

f:id:yktm31:20210502233151j:plain

②. バターをフライパンで熱して、1で切った材料を炒める。

f:id:yktm31:20210502233355j:plain

③. ライスを入れ、お好みでレーズン・ピスタチオ等を入れる。

f:id:yktm31:20210502233426j:plain

これで調理は完了です。 最後に盛り付けていきます。

盛り付け / 終わりに

f:id:yktm31:20210503000608j:plain f:id:yktm31:20210503000619j:plain

本場の味とまではいかずとも、スパイスの香りと、柑橘系の酸味・甘味がいい感じにミックスされて楽しめました。

在宅中心になって、自炊するようになりましたが、代わり映えのないレシピ。 今回、普段使ってこなかったスパイス・ハーブを使って調理したのは、新鮮でした。

ハーブ・スパイス、果物・ナッツを多く使うというイラン料理、 まだまだ色々ディグり甲斐がありそうです。

ちなみに学生時代に行ったイラン料理のレストランは、日暮里の「ザクロ」 でした。 COVID-19がもし落ち着いたら、また行きたいです。

さて、次は何を作りますかね。 以上

2020年出会えてよかったものたち

2020年に買ったり、食べたり聴いたりしたもので、特に出会えてよかったというものを振り返りました。
それぞれ、大体5つずつ挙げていきます。

ガジェットとか

ヘッドホン

AONIC50
2020年のベストバイ。有線の煩わしさからの解放、装着感の心地よさ、感動ものの艶・広がり・バランス。 良いお値段ですが、至高の一品です。

オーディオインターフェース

7年前に買った同じくNIのものが壊れたので、リモートワークだし買うか、ということで購入。 スピーカーに繋げたり、趣味で再開したギターのライン録りに利用。肝心のマイクはUSB接続のものを利用という。

NATIVE INSTRUMENTS ネイティブインストゥルメンツ/KOMPLETE AUDIO 6 MK2

NATIVE INSTRUMENTS ネイティブインストゥルメンツ/KOMPLETE AUDIO 6 MK2

  • 発売日: 2019/06/12
  • メディア: エレクトロニクス

シュレッダー

地味に役に立ったもの。 ECやネットスーパー利用が増えて、住所書いてある紙の処分に困っていたのをスッキリ解決。 セールで約3500円で購入。コスパの良い設備投資でした。

Mac Mini(2019)

M1が出る2ヶ月前に買ってしまったもの。 Bluetoothがちょくちょく切れる問題と、排熱が弱い以外は満足です。 ディスク1T、メモリ32G、CPUは3,2GHz 6コア i7

マウス

mx master 3 for mac
横スクロールホイールが結構便利。動画編集とかDAWでとっても役に立ってます。 最初は、でかい!と思ったけど、手に馴染んできて、とても使い心地がいいです。 以前より右腕が痛くなることがなくなったのも嬉しいポイント。

食材

鰹の藁焼き

楽天のセール時期に購入。 肉厚の鰹が最高。ご飯が止まらないですよ。 f:id:yktm31:20201230204224p:plain

ハラミ 1kg

上に同じく楽天のセール時期に購入。 2500円でこんなにハラミを食べていいの!?となります。 塩胡椒で焼いて、白米に乗せる。シンプルだけど最強の焼肉丼が最高です。 f:id:yktm31:20201230204236p:plain

豚の味噌煮

上に同じく楽天のセール時期に購入。 ジューシーで柔らかい、そして味噌の味がよく染み込んでいる一品。 これまたご飯が止まらないですよ。 f:id:yktm31:20201230204212p:plain

ヨーグルト

普段食べているもの。はちみつと一緒に食べるととても美味しいです。

おかず畑 ひじきと豆のサラダ

ほぼ毎日1個は食べてる、というくらいお世話になったもの。 そのままでも良し。豆腐と一緒に食べたり、サニーレタスと食べたりしても良し。 アクセントにゆずポン酢を少量かけても良し。食事のおかずにも、小腹が減った時の間食にも。 とってもお世話になりました。 f:id:yktm31:20201230204953p:plain

音楽

The Winking Owl

残念ながら、2020年7月にvo.の脱退により、無期限活動休止に。 もう少し早く見つけていたら、ライブにいきたかったです。

youtu.be

BAND-MAID

最高だっぽ!!! どうしてもっと早くから知っていなかったのか、アンテナの低さを後悔しました。 実は海外のReaction動画がかなり多く、評価が高いバンド。

楽曲もカッコよく、演者全員のレベルも高いだけでなく、 それぞれの個性が見事にアンサンブルされている感じがグッときます。

オンラインお給仕も参加できたし、来年はニューアルバム出るし、めちゃくちゃ楽しみなバンドです。

www.youtube.com

わーすた

アイドルには詳しくないけど、この曲聴いてかっこいいな、と思いました。 今後もフォローしていきたいグループ。 www.youtube.com

Johannes Bornlöf

スウェーデンのコンポーザー。 元々ピアノインストが好きなのですが、Johannesの独特の浮遊感がストライクでした。 集中したい時などにもよく聴いてました。

Spotify My Top Songs 2020

半分くらいはHR/HMメタルコア辺りでした。 鬼滅は見れても読めてもないけど、LiSAの紅蓮花は最高です。 PassCodeも相変わらず最高です。

Youtube

ディスカバリーチャンネル

期間限定公開を謳いながら、ずっと公開し続けている懐が深いチャンネル 金採掘のドキュメンタリーや、サバイバル系などよく見ていました。 www.youtube.com

美人MCのアリーさんのチャンネルも、クスッと笑える動画が多く必見です。 www.youtube.com

THE FIRST TAKE

言わずもがな。 LiSAの紅蓮華、もうすぐ1億再生ですと。。。この企画を立てた人、すごいなと思いまし。 個人的には、小中の頃聴いていたようなYUIの出演は嬉しかったです。 www.youtube.com

Smosh

海外のコメディ集団のチャンネル。 英語の勉強にもなりますし、なによりコンテンツが面白すぎる。 毎回お腹抱えて笑ってます。 www.youtube.com

だいじろー

英語の発音を極めた方のチャンネル。インド人のモノマネがツボです。 イギリス英語の特徴解説など、真面目なコンテンツもあり勉強もなります。 www.youtube.com

MAHOME

デスボを極めた人のチャンネル。ホイッスルボイスで女王蜂の炎歌い上げる変態()
私はデスボを出せないですが、デスボ出したい人は必見です。 www.youtube.com

Podcast

寝る前や、朝早く起きた時など、この辺りをよく聴いてました。

podcasts.google.com

podcasts.google.com

podcasts.google.com

podcasts.google.com

podcasts.google.com

その他

紅茶(ダージリン)

去年伊勢丹地下のNavarasaの紅茶を、売り場のお姉様()にお勧めされて、購入した50gで3,4000円する紅茶。 めちゃうまだったので、今年も欲しいと思ってた中のコロナで伊勢丹はしばらく閉鎖。

ネットを探すと、Navarasaは伊勢丹限定ブランドとして、Leafullが出しているものと判明。 Leafullのサイトから、去年も購入した、キャッスルトンのダージリンをオンラインで購入しました。 【19オータムナル】 キャッスルトン農園 Clonal Tippy DJ-508 | リーフルダージリンハウスオンライン

植物

殺風景な部屋に飾りをと思い、ポトスと購入。 想像の倍以上の、結構いいお値段しましたが、良い買い物でした。

f:id:yktm31:20201230204106p:plain apegoというサイトで購入しました。 www.apego.jp

FFVII REMAKE

ゲームはあまりしない方ですが、FF7Rは買いました。涙ちょちょぎれながらプレイしました。 続きが楽しみです。

ファイナルファンタジーVII リメイク - PS4

ファイナルファンタジーVII リメイク - PS4

  • 発売日: 2020/04/10
  • メディア: Video Game

以上