2024.10.10
将来は卵1パックの価格が2倍に? 多くの日本人が知らない世界の新潮流、「動物福祉」とは
リンクをコピー
記事をブックマーク
大嶋勇樹氏:では、「改めて整理するアプリケーション設計の基本」ということでお話しします。(スライドを示して)最初に私の自己紹介ですが、名前は大嶋勇樹と申します。最近はよく“しまさん”とか“しまちゃん”とか、そんなふうに呼ばれることが多いです。
キャリアは新卒で都内のあるIT企業に入って、その後フリーランスエンジニアとして独立して、今は会社を設立していろいろしています。今は実務に就き始めぐらいのエンジニアの方のスキルアップのサポートで、研修や勉強会、あと最近は「Udemy」講座をいくつか作ったりしています。
今日の発表に関連する分野ではいくつか記事を書いていて。(スライドを示して)ここにQiitaで書いた記事があります。もしかしたら見たことがある方もいるかもしれませんが、今日はこういった内容に、プラスアルファの話をできればと思っています。
(スライドを示して)1個紹介です。私は最近Udemy講座をいくつか出していて、Dockerの入門やWebアプリの基礎知識、あとつい先日は「『リバーシ』で学ぶアプリケーション設計入門」という、今日のテーマにも関係する講座を出しています。
今日の発表は一部こちらの資料から抜粋したような話もあるので、例として「『リバーシ』だったらどうだよね」みたいな話も少し出てきます。誰でも知っているようなアプリケーションなので、わりとイメージがつきやすいかなというところもあって、今日の話の例にそういうところも出します。
ということで「改めて整理するアプリケーション設計の基本」に入っていきます。(スライドを示して)最近はプログラミングの入門のハードルがとても低くなっていると思います。そして、Webアプリやモバイルアプリをなんとなく作れる人は、すごく増えているんじゃないかと思います。
しかし実際にコードを実務で書くようになると、「なんとかアーキテクチャ」みたいな言葉、例えばMVC(Model、View、Controller)でもそうだし、「3層アーキテクチャがどう」とか、「クリーンアーキテクチャがどう」とかという言葉を聞くことがあったり。
「ビジネスロジックがどう」とか、「コントローラにビジネスロジック書くな」と言われたり、「Serviceクラス使ってみたらどう?」と言われて、なにを指しているのかよくわからなかったり。
ほかにも、1ファイルに大量に書かれているコードをなんとかして変更しないといけなくて、すごく苦しいと感じたり。あとは「ドメイン駆動設計やクリーンアーキテクチャみたいなものを勉強しようとしたけれども、なにがなんだかよくわからない」みたいなことは、けっこうよくあるんじゃないかと思います。私自身、けっこうこういうことはあったかなと思っています。
このあたりにはアプリケーションアーキテクチャという分野がすごく関わってきます。その分野の基礎を学んで、実際にコードもいろいろ書いたりしてみるとけっこうわかってくることが多かったなというのが、自分の経験です。
今日はコードまで見せるわけにはいかないのですが、このアプリケーションアーキテクチャという分野について、基礎的なところをいろいろ押さえられるような会にしていければなと思っています。
(スライドを示して)ということで、「そもそもアプリケーションアーキテクチャって何?」というところから始めて、私が「これが最も基本だな」と思っている3層アーキテクチャについて触れていきます。
3つ目に、すごく大事なキーワードの「ビジネスロジックって何ですか?」という話をして、最後に「Controllerに全部書く」みたいなところからどうやってステップアップしていくかみたいなところまでを話そうと思っています。
最初の案内にもありましたが、質問などはQ&Aにもらえれば適宜回答いたします。
(スライドを示して)今日の発表内容についてですが、どうしても分野の特性上、用語の使い方などで、「自分とは違うな」とか「それは違うと思う」とかの指摘事項を感じる方もいると思いますが、入門のために説明を簡略化している箇所や、私個人の意見が含まれる箇所がこのテーマだとどうしても多くなってしまいます。その点はご了承ください。
もし指摘事項などがあれば、Q&Aにもらえれば確認して回答しようと思います。
その他、気になったことは、例えばTwitterに「#StudyCo」というハッシュタグで投稿してもらえれば、そちらも見ようと思っています。
ということで、さっそく最初の「アプリケーションアーキテクチャとは」から話に入っていこうと思います。私の顔が映っていてもしょうがないと思うので、画面から消して。
「アプリケーションアーキテクチャとは」(について)、少し話します。(スライドを示して)そもそも「アーキテクチャ」という言葉ですが、これを日本語にすると、「建築様式」などと訳される言葉です。ソフトウェア開発では、「構造」や「構成」ぐらいのざっくりした意味で使われていると思います。
ソフトウェア開発と関連する範囲でも、いろいろな“なんとかアーキテクチャ”というものがあります。例えばコンピュータアーキテクチャ。CPUアーキテクチャと言ってもいいかもしれません。そういうものがあれば、今日の主題のアプリケーションアーキテクチャもあれば、インテグレーションアーキテクチャ、インフラアーキテクチャなど、いろいろな“なんとかアーキテクチャ”があります。
今回はアプリケーションを実装するような人に多く参加してもらっていると思うので、その中でも特に関係してくるアプリケーションアーキテクチャ、インテグレーションアーキテクチャ、インフラアーキテクチャ周りだけを、もう少し掘り下げてみようと思います。
(スライドを示して)まずはアプリケーションアーキテクチャについてです。これ自体はやはりどうしても曖昧な言葉ですが、ざっくり言うと「開発するアプリケーションの構造」のことだと思ってもらうのがいいと思います。
広い範囲では、ある目的で開発する要素全体の構成が論点です。どういうことかというと、Webアプリを作るとなった時に、フロントがあってサーバーサイドがあって、データベースがあります。モバイルアプリでもモバイルのフロントがあってサーバーサイドがあって、データベースがあるとか、そういうふうになると思います。
「その構成をどうするか」みたいなのも論点の1つです。例えば、最近だとマイクロサービスなどの用語もちょっと出てくるようなところですかね。
そしてもう1つ狭い範囲だと、独立して動く1つの要素の中をどう構成するかという論点もあります。例えば、このサーバーサイドのコードの中をどう整理するか。RailsなりLaravelなりSpringなりなんなりでサーバーサイドのコードを実装するとして、その中のクラス分けというか、構造をどう整理するかみたいな観点もあります。
今日のテーマは、1個の要素の内部をどう整理するかみたいなことです。最近はやはりフレームワークを使って開発することが多いと思いますが、その中をどう整理するかというところですね。
(スライドを示して)少し話がそれますが、ほかにも「なんとかアーキテクチャ」の話の続きでいうと、例えばインテグレーションアーキテクチャみたいな分野もあります。
これは、ふだんからあまり使う単語ではないとは思いますが、「システム間の連携をどうやって実現するか」みたいな分野です。例えばキューを挟むのか、APIなのかとかも含め、一応こういう言葉もあるそうです。僕も仕事上でそんなに使ったことはないですが、こういう言葉もあるみたいですね。
あとは、インフラアーキテクチャというものもあったりしますね。サーバーとネットワークの構成をどうするかとか、サーバーの数や構成をどうするのか。また、そもそもクラウドにするのかどうかとか、最近だとコンテナなのかサーバーレスなのかとかもあると思うのですが、こういった「インフラどうするの?」「作ったアプリケーションをどこで動かすの?」という観点もあります。
こんなふうに、Webアプリケーションの開発というだけでも、いろいろな観点のアーキテクチャがあるわけです。
そんな中で今日のテーマは、アプリケーションアーキテクチャです。インテグレーションアーキテクチャやインフラアーキテクチャではなく、アプリケーションアーキテクチャです。
さらにそのアプリケーションアーキテクチャの中でも、マイクロサービスがどうとかではなくて、1個の独立して動くアプリケーションの中をどうやって動くか。「RailsなりLaravelなり、Springなりで作ったアプリケーションの中のコードをどう整理するか」というのが今日のテーマです。
この分野のキーワードはけっこういろいろあります。例えばMVCとか、MVVM(Mode、View、ViewModel)、MVP(Model、Presenter、View)。トランザクションスクリプト、ドメインモデル、リポジトリ、アクティブレコード、3層アーキテクチャ、レイヤードアーキテクチャ、クリーンアーキテクチャがどうとか。こういうキーワードがいろいろある分野です。
(次回に続く)
関連タグ:
“1つの独立して動く要素”の内部を整理し直す 「改めて整理するアプリケーション設計の基本」で伝えたいこと
アプリケーションアーキテクチャ理解に必要な“3層構造” プレゼンテーション層・ビジネスロジック層・データアクセス層それぞれの役割
3層アーキテクチャで最も謎な「ビジネスロジック層」 “システムのコア”をゲーム「リバーシ」で解説
「ビジネスロジックの処理は2つに分類すると整理しやすい」 4つの例から考える、プレゼンテーション層・データアクセス層の見分け方
ビジネスロジック層内部の2つの実装パターンを比較 選択時に考えたい、アプリケーション設計の観点
「クラスごとの役割を明確化すること」がポイント アプリケーション設計におけるドメインロジックの分離法
重要なのは「基本を押さえ、適したものを採用すること」 “本来の役割”を押さえたアプリケーション設計
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
よってたかってハイリスクのビジネスモデルに仕立て上げるステークホルダー 「社会的理由」が求められる時代の起業戦略