
2025.02.18
AIが「嘘のデータ」を返してしまう アルペンが生成AI導入で味わった失敗と、その教訓
リンクをコピー
記事をブックマーク
大嶋勇樹氏:では、「改めて整理するアプリケーション設計の基本」ということでお話しします。(スライドを示して)最初に私の自己紹介ですが、名前は大嶋勇樹と申します。最近はよく“しまさん”とか“しまちゃん”とか、そんなふうに呼ばれることが多いです。
キャリアは新卒で都内のある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つの実装パターンを比較 選択時に考えたい、アプリケーション設計の観点
「クラスごとの役割を明確化すること」がポイント アプリケーション設計におけるドメインロジックの分離法
重要なのは「基本を押さえ、適したものを採用すること」 “本来の役割”を押さえたアプリケーション設計
2025.02.13
“最近の新人は報連相をしない”という、管理職の他責思考 部下に対する「NG指示」から見る、認識のズレを防ぐコツ
2025.02.13
AIを使いこなせない人が直面する本当の課題 元マッキンゼー・赤羽雄二氏が“英語の情報”を追い続ける理由
2025.02.14
報連相ができない部下に対するコミュニケーションの取り方 「部下が悪い」で終わらせない、管理職のスキル向上のポイント
2025.02.12
マネージャーは「プレイング3割」が適切 チームの業績を上げるためのマネジメントと業務の比率
2025.02.13
上司からは丸投げ、部下からはハラスメント扱い、業務は増加…プレイングマネジャーを苦しめる「6つの圧力」とは
2025.02.12
何度言っても変わらない人への指示のポイント 相手が主体的に動き出す“お願い”の仕方
2025.02.13
「みんなで決めたから」を言い訳にして仲良しクラブで終わる組織 インパクトも多様性も両立させるソース原理
2025.02.06
すかいらーく創業者が、社長を辞めて75歳で再起業したわけ “あえて長居させるコーヒー店”の経営に込めるこだわり
2025.02.10
32歳で「すかいらーく」を創業、75歳で「高倉町珈琲」で再起業 「失敗したからすかいらーくができた」横川竟氏流の経営哲学
2025.01.07
1月から始めたい「日記」を書く習慣 ビジネスパーソンにおすすめな3つの理由
着想から2か月でローンチ!爆速で新規事業を立ち上げる方法
2025.01.21 - 2025.01.21
新人の報連相スキルはマネージメントで引きあげろ!~管理職の「他責思考」を排除~
2025.01.29 - 2025.01.29
【手放すTALK LIVE#45】人と組織のポテンシャルが継承されるソース原理 ~人と組織のポテンシャルが花開く「ソース原理」とは~
2024.12.09 - 2024.12.09
『これで採用はうまくいく』著者が語る、今こそ採用担当に届けたい「口説く」力のすべて
2024.11.29 - 2024.11.29
第20回エクゼクティブメンターイベント「今、「ひと」と組織が共創する〜働き方の未来へ」
2024.12.07 - 2024.12.07