2024.12.10
“放置系”なのにサイバー攻撃を監視・検知、「統合ログ管理ツール」とは 最先端のログ管理体制を実現する方法
リンクをコピー
記事をブックマーク
大嶋勇樹氏:では、「改めて整理するアプリケーション設計の基本」ということでお話しします。(スライドを示して)最初に私の自己紹介ですが、名前は大嶋勇樹と申します。最近はよく“しまさん”とか“しまちゃん”とか、そんなふうに呼ばれることが多いです。
キャリアは新卒で都内のある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.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
2024.12.09
10点満点中7点の部下に言うべきこと 部下を育成できない上司の特徴トップ5
2024.12.09
国内の有名ホテルでは、マグロ丼がなんと1杯「24,000円」 「良いものをより安く」を追いすぎた日本にとって値上げが重要な理由
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.29
「明日までにお願いできますか?」ちょっとカチンとくる一言 頭がいい人に見える上品な言い方に変えるコツ
2024.12.06
嫌いな相手の行動が気になって仕方ない… 臨床心理士が教える、人間関係のストレスを軽くする知恵
2024.12.10
職場であえて「不機嫌」を出したほうがいいタイプ NOと言えない人のための人間関係をラクにするヒント
PR | 2024.12.04
攻撃者はVPNを狙っている ゼロトラストならランサムウェア攻撃を防げる理由と仕組み
PR | 2024.11.22
「闇雲なAI導入」から脱却せよ Zoom・パーソル・THE GUILD幹部が語る、従業員と顧客体験を高めるAI戦略の要諦
PR | 2024.11.26
なぜ電話営業はなくならない?その要因は「属人化」 通話内容をデータ化するZoomのクラウドサービス活用術