生成していく環境を整えました。限らず辞書型の構造を利用できる別のフォーマットを利用する場合でも、同じようなことは実現できると思います。いう特異メソッドを用意しており、これを呼び出すことで、このリソースに特定のプロパティがあることを宣言します。いう4つのプロパティがあります。それぞれのプロパティがインスタンスメソッドを利用して実装されていることで、プロパティごとに独立して単体テストを行うことができるという利点があります。ドキュメントを付けることで、期待する型を推測しやすいようにしています。発展的な課題として、この型を静的解析することで、クライアントサイドでの型付けとの互換性を検査することができるのではないかと考えています。クラスは、以下のような実装になっています。設計が促進されたり、後述するクライアントサイドでの型検査と協調しやすくなったりと、適切な名前が見出されるという効果も狙っています。設計の話が出たので、ルーティングの話をします。紐付けるか、という話題に集約されます。4種類のみを利用し、操作の種類に合わせて適切なメソッドを割り当てています。次にどのようなパターンのパスを使うかという話ですが、リソース名が分かるパス名にするリソースのネストを許すパラメータ名は種類ごとにアプリケーション内で一意にするという指針で設計しました。いう名前を与えよう、という話です。異なる種類のパラメータであることを明示しています。間で共通化しやすくなるという効果もあります。リソースのネストの仕方に従った名前にしています。名前に現れるようにしています。5種類だけを利用しています。その実現方法として幾つかの選択肢がありますが、今回は以下の記事のような方式で実装しました。サーバサイド側を変更するついでに、クライアント側にも改善を加えました。利用するように変更しました。対策のトークンをリクエストに埋め込んだり、レスポンスを変換したりする用途で使っています。静的型検査器を利用して型検査できるようなコードにしました。型のヒントが付けられているので、これと対応した型の情報をクライアントサイドでも用意しています。サーバサイドとクライアントサイドで型に関する情報が重複しているので、この辺りを共通化できる仕組みを用意できると嬉しいですね。サーバサイドの型情報は「こういう型のデータを返す」という宣言であり、クライアントサイドの型情報は「こういう型のデータが入力される前提で動作する」という表明でもあるので、この宣言と表明に齟齬が生じていないかを確認する、という観点の検査を行う仕組みがあると良いと考えています。2ヶ月ほど掛けて変更作業を行いました。用意し、レビューや検証を行いながら徐々に移行を進めました。個数で言っても数十個程度の変更だったので、そこまで大きな規模の変更ではありませんでした。使われていないコード振り返ってみると、最も苦労を感じた点は、使われていないコードが多く残されていたことでした。実装を全て移行するという観点で作業を行っていたので、使われていないコードについても移行しようとしてしまい、行き詰まった結果社内の詳しい人間に尋ねて作業内容を捨てるというシーンが頻繁にありました。使われているコードについては、コードを見ることでいま現在使われているという事実に確証が持てますが、使われていないコードについては、本当に使われていないコードなのかどうか確証を持つのは難しいものです。呼ばれるような暗黙的な参照方法で対象のコードを利用している可能性も考慮する必要があり、単純に文字列を検索するようなコードの調査方法だけでは確実性に欠けます。多くの場合、もはや使われなくなったコードというのは丸々残される訳ではなく、断片的に残存するわけで、そもそもコードから得られる情報量が乏しいという難しさがあります。バージョン管理をしているとはいえ、無の背景にある履歴を紐解く作業は、存在するコードの履歴を調べる作業に比べ、難易度の高い作業です。いうことを考えさせられました。テストのコードの設計についても別途見直しを行えたので、負債の返済という意味でも良い機会だったのではないかと思っています。設計を変更した話について書きました。やりましたという体裁で書きましたが、あと1割ぐらい変更が残っています。関係者に設計意図をあらためて説明したいという目的もあり、作業が完了するより前にこの記事を書きました。実装について悩んでいるとか、あるいは何らかの設計をベースに議論をしたい方の参考になればと思います。自分は、来年からもしばらくはフリーランスとして活動していく予定です。周りの設計を今一度見直したいとか、あるいは徐々に人が増えつつありコードの品質向上が目下の課題になってきているとか、そういうところで相談に乗れる部分があると思うので、自分でよければぜひお声がけください。