2024.10.10
将来は卵1パックの価格が2倍に? 多くの日本人が知らない世界の新潮流、「動物福祉」とは
リンクをコピー
記事をブックマーク
成瀬允宣氏:さぁ、じゃあやっていきましょうか。(コメントで)「Javaより時代はKotlin」。そう、Kotlinね、そうですね。今回はアーキテクチャの話なので、たぶんKotlinとかでも使えると思います。
(コメントで「設計の講座助かります!」)設計の講座はなかなかないですからね。あと、今日最後のほうで「次何やろうか?」って話もしようかなと思っているので、もしよければ、そのときに僕の相談に乗ってください。
よし、じゃあいきましょう。「先行開発!Javaでクリーンアーキテクチャ」。一応JavaではありますけどJava以外にも使える話なので、ぜひともご自身のプロジェクトに当てはめてやってみてください。
今回はキャッチコピーを決めてあります。どういうキャッチコピーかというと、「APIはできてないし、データベースは構築どころか選定も済んでません。だけど、納期だけは決まっているので、よろしく!」。こういうのはよくあるよね。
ただ、ちょっと茶化していますけど、新規開発だとこれはよくあることだと思うんですよね。だって、みんなで「よーい、どん」で同時に開発を始めると、結局APIもデータベースも構築が始まっていないわけだから、まだ何も用意されていない。その段階からプログラムを作り始めなきゃいけないんですよね。
今Twitterで見ましたけど、「YouTuberの生配信って感じがするー」、よかったー。あと「Javaの人間じゃないけれど、勉強になりそう」、まさにそうです。Javaでなくてもできます。
(スライドを表示して)この図を見てほしいんですよ。みなさん、わかりますかね? この図にこう縦に線を引くわけですよ。そして日付をつけるわけですね。フロントとかAPI。進捗表です。このときの進捗表がどんな感じになったかというと、こんな感じです。上フロント。下API。
これを見ておもしろいところは、フロントができたあと、APIが完成するんですね。つまりシステムテストにフロントは関わらない。修正ができない。「ちょっとこれおかしいんじゃない?」という話がありました。おかしいので、これについてはもちろん、いろいろ修正は加えてもらったんですけど。
ただ、普通だったら僕ら、APIができて、データベースができて、それらができあがったあとに、我々、いわゆるフロントエンド側がこれをコーディングする。これが理想なんですね。でも、本当に理想のラインはこの「APIができて、そのあとフロントが開発する」。これが一番素直できれいなかたちです。
でも、現実はこれだから。僕の前にあった現実はこれ。別にそれに文句はなくて、こんな感じでもろもろの事情によって、やっぱり理想どおりにならないことがけっこうあるんですね。
もう1つの問題があるんですよ。どういう問題かというと、プロジェクトリーダー、プロダクトオーナーとかが「画面はこんな感じでお願い」ってきました。そうすると僕とかは「OK、わかりました。やります、やります」。って言ったあと、しばらくして「できましたー」ってもっていくんですね。そうするとだいたいよく言われるのが「うーん、イメージと違うなぁ」って。「やっぱこっちでいい?」「!?」。
よくあるよね。よくある(笑)。別にこれはプロダクトオーナーとかが悪いわけじゃないんですよ。何がいけないかというと、そもそも人間が想像だけで最終形にたどり着くのはすごく難しいんですよね。
だからこんなことを繰り返すわけで、デザインってやっぱり必要なものがあるんですよ。きっとみなさんも何度もやったことがあると思います。プログラムとかでも、最終的にはこういうかたちになる、最終形がわかっているんだけど、そこにたどり着くまでに試行錯誤をするわけですね。
だから、デザインだって同じなんですよ。「プログラムをきれいに書きたい」「こういうふうに書きたい」、そこにたどり着くまでの試行錯誤があり、デザインにもこういうふうにお客さんを誘導したいという、最終的なかたちまでの試行錯誤が必要です。
その試行錯誤のために何をすべきかというと、今回Webの話なんですけど、我々はやっぱりフロントの、とりあえずユーザーが触れる部分のプロトタイプを早く作ろう。とにかく早く作らなきゃいけない。これが今の「やっぱりこれで」というのに対応するには、どんどん作り直して、触らせて、どんどんFIXまで近づけるのが大事なんですね。
私の前にはこの現実がありました。「早いところやらないと間に合わない」という納期と、「試行錯誤させてあげたい」という気持ちですよね。
そのときにじゃあどうすればいいと思ったのかというと、結局はクリティカルパス、例えば我々がAPIを作ってくれるのを待っていますという、そういうのを避けたり、あとは「APIとかデータベースがないからプロトタイプを作れません」じゃなくて、とりあえずプロトタイプだけ作って、そこになんとかして後からうまいことつなぎこむ。そんな方法がないか、と。
いろいろ調べたところ、まあ僕は知っていたんですけど、これ見つけました。(スライドを表示)みなさん、今回のテーマ、この図、見たことありますよね?
新規開発のプロジェクト。納期もタイト。でも、プロトタイプをいっぱい作らせていろいろ触らせてあげて、ちゃんといいもの作らせてあげたいという気持ちがありました。そこがゴールです。
そこのゴールにたどり着くために、今回みなさんに、クリーンアーキテクチャをどうやって使うのか、そのための概要と、重要なのは概要だけじゃなくて、そこにあるメリット・デメリットは何なのか。そのお話をします。
(コメントで)「どうでもいいですけど、今回成瀬さんはズボンをちゃんとはいているんですかね?」。はいています。拾っちゃったじゃん。そんなどうでもいい話を(笑)。
このメリット・デメリットをみなさんが把握すれば、きっとアーキテクチャを取捨選択できると思うんですよ。僕、いろいろとこの業界でやってきて、アーキテクトみたいな立場やっているんですけど、アーキテクチャって取捨選択だと思っています。
そのまま全部もってこれる……デザインパターンとかもそのまま使えないですよね。でもデザインパターンの考え方は大事だから、それをうまいこと当て込む。アーキテクチャもうまいこと当て込む方法をどうすればいいか? それを考えたりする。それがアーキテクトの役目だと思っています。じゃあ、みなさんもそのメリット・デメリットがわかれば、取捨選択ができるようになるでしょう、というのが今日のお話です。
というわけで、アジェンダはこんな感じです。順番に、まずクリーンアーキテクチャの概要をお話しします。たぶんご存じない方も、名前は聞いたことあるけど、どういうものなのかわからない方もいると思うので、説明します。
そして、概要から落とし込んだ実装例を今回お見せします。その後に最後、課題と解決。クリーンアーキテクチャにあった課題、実装したときに見つかった課題、それを解決するためにどうすればいいか。今回新規のサービスを作るときに僕のやったことをお話ししようと思っています。
まずクリーンアーキテクチャ概要からいきます。まず、みなさん、先ほど示した図は見たことあります? 実を言うと、もしもクリーンアーキテクチャを勉強したいんだったら、僕はまずこの図の前に、次のスライドのこっちを勉強したほうが早いと思っています。
何かというと、ヘキサゴナルアーキテクチャというアーキテクチャの図です。ヘキサゴナル、六角形なので六角形の形していますよね。こういうアーキテクチャです。
実際どういったものかというと、順番に説明しますね。まず真ん中、Application、オレンジのところは何かというと、ここがビジネス。我々のいわゆるビジネスロジックというもの。このビジネスを中心に見立てて、それ以外のものを交換可能にしようというアイデアです。
見たことある人、けっこういますね。(コメントで)「むしろほかの図見たことない」(笑)。そうですね、今日その話をしますわ。
この交換可能、プラガプルとも、別名「ポートアンドアダプター」とも言われます。どういったものかというと、コンセントを差すところと、プラグですね。
例え話しましょう。テレビゲームを思い浮かべてください。テレビゲームってあるじゃないですか。ゲーム機があって、あとコントローラとディスプレイがあります。
このコントローラとかディスプレイって、もちろん純正品がありますけど、それ以外にもサードパーティのものとかもありますよね。いろいろなメーカーがあります。これも交換できる。コントローラもディスプレイもサードパーティと変えられます。
もう1個、データを保存する場所です。もちろんゲーム機の中のディスクドライブとかメモリカードとかありますよね。ほかにも最近はクラウドに保存できたりしますよね。これがまさにヘキサゴナルアーキテクチャと同じアイデアです。
どういうものかというと、ゲーム機にポートがあります。そこに差せるもの。コントローラとかディスプレイとか、あと保存媒体。ハードディスクとかも。これもコントローラが交換できますよね。お好きなサードパーティ製品に。ディスプレイも交換できます。最近はハードディスク以外にもクラウドに保存できます。
これをソフトウェアに当てはめましょうねということです。どういうことかというと、我々のビジネスロジック、このときの画面とビジネスロジックとデータを保存する、それがクラウドのサービスなのかハードディスクなのか、これを同じようにヘキサゴナル、さっきと同じように画面とかを差し替え可能にしたり、保存媒体、データストアを変えられるようにしましょうということです。
(コメントで)「わかりやすい」。ありがとうございます。「成瀬さんの本にも書いていましたね!」。そうそう、この例はけっこう本にも書いたぐらいね、わかりやすいと思っています。ただ、ゲームをやったことがない人がいたら、これ伝わらないなというのが難しいと感じています。だから、ヘキサゴナルアーキテクチャを理解するために、まずゲームをやってほしい。
このときに考えるのが、アプリケーション、真ん中にあるソフトです。ビジネスロジックのことです。アプリケーションは入力デバイスのことをまったく知らないし、それがブラウザでもいいし……まぁHTTP通信ですね。ブラウザ経由のHTTP通信でもうまくいくし、コンソールのアプリケーションとか、あとiPhoneのiOSアプリとかでもできるようにしましょう、ということです。
データストア……アプリはあるんだけど、データストアが例えばデータベース、ハードディスクじゃなきゃダメだとかクラウドじゃなきゃダメだというんじゃなくて、「なんでもいいよ」という感じにしましょう、という考えです。
このアプリケーションを中心に見立てて、ポート越しにプラガプル、プラグを付け外しできることを実現する。こうすることによってできることが、ビジネスロジックを点在させない。要するにアプリケーションを真ん中にだけ置いておくことができるというんですね。
ここでクリーンアーキテクチャの話をしていきます。Enterprise Business Rules、黄色いレイヤーのところ。クリーンアーキテクチャは真ん中に置いているんですよ。ビジネスルール、ビジネスロジックを中心に見据える。
つまり何が言いたいかというと、クリーンアーキテクチャのこの図のコンセプトって、ヘキサゴナルアーキテクチャとやりたいことはまったく一緒なんです。
ヘキサゴナルと何が違うのかというと、ヘキサゴナルのイメージ、外側、ポート&アダプターの実際の実装例について、詳細に記載しているのがクリーンアーキテクチャじゃないかなと思っています。ヘキサゴナルでも、ちゃんと調べると非常にわかりやすく書いてはいるんですけど、その具体的な実装をさらにクリーンアーキテクチャは推し進めています。だと僕は認識しています。
もう1個有名なのがオニオンアーキテクチャなんですけど、僕はこれ、逆にヘキサゴナルの内側だと思っています。これちょっと余談なのでね、調べてみてください。オニオンアーキテクチャとほぼ一緒ですよ。みんなが話しています。
関連タグ:
2024.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.12
自分の人生にプラスに働く「イライラ」は才能 自分の強みや才能につながる“良いイライラ”を見分けるポイント
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.11
気づいたら借金、倒産して身ぐるみを剥がされる経営者 起業に「立派な動機」を求められる恐ろしさ
2024.11.11
「退職代行」を使われた管理職の本音と葛藤 メディアで話題、利用者が右肩上がり…企業が置かれている現状とは
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.12
先週まで元気だったのに、突然辞める「びっくり退職」 退職代行サービスの影響も?上司と部下の“すれ違い”が起きる原因
2024.11.14
よってたかってハイリスクのビジネスモデルに仕立て上げるステークホルダー 「社会的理由」が求められる時代の起業戦略