SlideShare une entreprise Scribd logo
1  sur  26
アプリケーション
アーキテクチャ
Shinichiro Yoshida @ Studio Arcana co.,Ltd.
Arcana Meetup #43 @ 2018/10/25
自己紹介
• よしだ しんいちろう(34)
• (株)スタジオ・アルカナ 取締役
• 趣味で、IPA プロジェクトマネージャ, アプリケーションエンジニア, データベーススペ
シャリスト, ネットワークスペシャリスト, 情報セキュリティスペシャリスト保有
• むすこ(9)むすめ(5)保有
• むすこがScratchでゲーム作ってて不明点を手伝ったところ「パパのつけたココの変数名
わかりにくいよねぇ。」と独り言を言われて手抜きで手伝ったことを見透かされていた
ことが最近のかなしみです。
とは?
2020年卒登録数
30,000名突破!
2018/10/25現在
アプリケーション
アーキテクチャ
使用技術/ツール
Amazon Web Service
キミスカのインフラはすべてAWSで
構築されています。構成は次のページで紹介。
Chef
AWS上のサーバー構築はChefによって
自動的なプロビジョニングができる
構成になっています。
Laravel
アプリケーションはPHPで開発され、
フレームワークはLaravelを採用しています。
PhpStorm
ローカルの開発環境はPhpStormを
使用しています。
Cacoo by nulab
インフラの構成図などダイアグラムを
記述するツールとしてCacooを使用しています。
Backlog by nulab
プロジェクト管理にはBacklogを使用しています。
ドキュメンテーションはWiki、SCMはGitリポジトリ
を使用しています。
本番環境・ステージング環境
・DNSはRoute53で管理
・ELBで負荷分散しつつSSL Terminate
・SSL証明書はACMで発行&管理
・アプリケーションはEC2で稼働
・静的コンテンツはNginxで返却
・動的コンテンツはApacheにリバースプロキシ
・DBはEC2上にMySQLを構築している
・RDSだと細かい調整がしにくいため自前で構築
・リードレプリカとしてSlaveも用意
・参照系のクエリはSlaveへ流している
・サーバーはOpsWorksを使って自動構築
・バージョンはChef 12の方で運用中
・コードのデプロイは全てOpsWorks経由
・画像の保存はStorageGatewayを使用
・過去の仕様に引きずられてしぶしぶNFS
・本来はS3のみで完結させたい
・メールはSES経由で送信している
・その他、外部連携サービスもあるが割愛
・安定志向なのでEC2で稼働させているが、
そのうちECS/Fargateに移行していきたい
BacklogのGitリポジトリ
・コード管理はBacklogのGitリポジトリを活用
・Git flowに準拠した開発フローを採用している
・Source Treeを使ってる人が多い
・CloudWatchでエラー拾ったらBacklogに自動で起票
ローカル開発環境
・Vagrantで差異のない環境を用意
・Chefレシピは本番環境と共用している
・vagrant-omnibusプラグインを使っている
Laravelの通常のアーキテクチャ
ルーティング
コントローラビュー
モデル DB
発生しうる課題
ルーティング
コントローラビュー
モデル DB
コントローラーの肥大化
バリデーションの複雑化
RDBとの高い結合度
ビジネスロジック肥大化
トランザクション制御
重複したコード
Laravelのコンポーネントを拡張し、責務を明確にする
• サービスレイヤーを導入
• → ビジネスロジックの責務を負う
• リポジトリレイヤーを導入
• → RDBへの依存度を抽象化する
レイヤーの概念を導入し、責務を明確にする
• バリデーションを実行する責務をどこに置く?
• → Requestクラスを拡張して責務を負う
• 権限チェックなど認可の処理はどこに置く?
• → Middlewareがその責務を負う
• ヘッダーやフッターの共通処理はどこに記述する?
• → ViewComposerがその責務を負う
アーキテクチャ構造を拡張した設計
Router
Controller
Response
Model
KVS
Client UI Application Domain Data Source
RDB
Search
Engine
Object
Storage
Request
View
Middlewaer
ViewComposer
Model LayerRepository LayerService Layer
RepositoryService
コンポーネント・レイヤーの役割の明確化
Router
Controller
Response
Model
UI-inputApplicationDomain
Request
View
Middlewaer
ViewComposer
Repository
Service
UI-output
URLとコントローラのマッピング、コマンドライン実行のマッピング
リクエストパラメータの形式バリデーション、重複チェック等のDBアクセス処理はしない
認可、CSRFチェック、CORS設定、共通ロギング処理、IP制限処理、TrustProxies設定、共通例外処理
リクエストの受け付け、サービスクラス呼び出し、レスポンス(ViewやJSON)の返却、ロジックは記載しない
サービスクラス呼び出し(ヘッダ、フッタ、サイドバーなど、共通パーツのみで使用)
重複チェックなど複雑なバリデーション、Transaction処理、ビジネスロジック実装、リポジトリの呼び出し
複雑なSQL/Criteriaの組み立て、必要に応じたキャッシング処理、モデルの呼び出し
Eloquent O/Rマッパー、シンプルなクエリ、RDB/KVSなどへの接続と操作
Bladeテンプレートエンジンによる画面のHTMLレンダリング
RESTfulなAPIのレスポンス(JSONやXMLなど、データ連携フォーマット)
参考文献
エンタープライズアプリケーショ
ンアーキテクチャパターン(PoEAA)
マーチン・ファウラー氏によるエンタープ
ライズアプリケーションを設計する上での
アーキテクチャのカタログ。
日本語版は2005年に出版された本だが、書
かれている考え方は現在も通用する。
抽象的な言葉が連発されるので非常に読み
解きにくい。
一言で表すと「関心事に沿ってレイヤー定
義して分離させていこうぜ」というノリ。
Service Layer
エンタープライズアプリケー
ションアーキテクチャパター
ンに掲載れているパターンの
ひとつ。
“一連の利用可能な操作を確
立し、各操作でアプリケー
ションの応答を調整する一連
のサービスで、アプリケー
ションの境界を定義しま
す。”
https://martinfowler.com/eaaCa
talog/serviceLayer.html
Repository
エンタープライズアプリケー
ションアーキテクチャパターン
に掲載れているパターンのひと
つ。
“ドメインオブジェクトにアクセ
スするためのコレクションのよ
うなインターフェイスを使用し
て、ドメインとデータマッピン
グレイヤ間を仲介します。”
https://martinfowler.com/eaaCatalo
g/repository.html
ご静聴
ありがとう
ございました

Contenu connexe

Plus de Shinichiro Yoshida

TV会議をオープンソースで実現!RED5によるストリーミング配信講座
TV会議をオープンソースで実現!RED5によるストリーミング配信講座TV会議をオープンソースで実現!RED5によるストリーミング配信講座
TV会議をオープンソースで実現!RED5によるストリーミング配信講座
Shinichiro Yoshida
 

Plus de Shinichiro Yoshida (14)

インターネッツの繋がるしくみ(TCP/IP編) #sa_study
インターネッツの繋がるしくみ(TCP/IP編) #sa_studyインターネッツの繋がるしくみ(TCP/IP編) #sa_study
インターネッツの繋がるしくみ(TCP/IP編) #sa_study
 
インターネッツの繋がるしくみ(物理層編) #sa_study
インターネッツの繋がるしくみ(物理層編) #sa_studyインターネッツの繋がるしくみ(物理層編) #sa_study
インターネッツの繋がるしくみ(物理層編) #sa_study
 
AWS Opsworksを使ってPHPとLaravelが動くサーバーを構築してみよう!at phpstudy#97
AWS Opsworksを使ってPHPとLaravelが動くサーバーを構築してみよう!at phpstudy#97AWS Opsworksを使ってPHPとLaravelが動くサーバーを構築してみよう!at phpstudy#97
AWS Opsworksを使ってPHPとLaravelが動くサーバーを構築してみよう!at phpstudy#97
 
~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-
~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-
~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-
 
【DevLOVE現場甲子園2014】【守】「テレビ×スマホで視聴者が番組に参加!そのメディア体験を支えるインフラと運用の舞台裏」
【DevLOVE現場甲子園2014】【守】「テレビ×スマホで視聴者が番組に参加!そのメディア体験を支えるインフラと運用の舞台裏」【DevLOVE現場甲子園2014】【守】「テレビ×スマホで視聴者が番組に参加!そのメディア体験を支えるインフラと運用の舞台裏」
【DevLOVE現場甲子園2014】【守】「テレビ×スマホで視聴者が番組に参加!そのメディア体験を支えるインフラと運用の舞台裏」
 
簡単/動画共有サービス『REPRE(リプレ)』の紹介|第75回PHP勉強会LT@EngineYard
簡単/動画共有サービス『REPRE(リプレ)』の紹介|第75回PHP勉強会LT@EngineYard簡単/動画共有サービス『REPRE(リプレ)』の紹介|第75回PHP勉強会LT@EngineYard
簡単/動画共有サービス『REPRE(リプレ)』の紹介|第75回PHP勉強会LT@EngineYard
 
リアルタイム通信アプリはつくれる!『Red5 Media Server』の機能と事例のご紹介
リアルタイム通信アプリはつくれる!『Red5 Media Server』の機能と事例のご紹介リアルタイム通信アプリはつくれる!『Red5 Media Server』の機能と事例のご紹介
リアルタイム通信アプリはつくれる!『Red5 Media Server』の機能と事例のご紹介
 
【OSC2011広島】Red5デモ(日本Red5ユーザー会)
【OSC2011広島】Red5デモ(日本Red5ユーザー会)【OSC2011広島】Red5デモ(日本Red5ユーザー会)
【OSC2011広島】Red5デモ(日本Red5ユーザー会)
 
【OSC2011広島】共有アプリで遊ぼう!(日本Red5ユーザー会)
【OSC2011広島】共有アプリで遊ぼう!(日本Red5ユーザー会)【OSC2011広島】共有アプリで遊ぼう!(日本Red5ユーザー会)
【OSC2011広島】共有アプリで遊ぼう!(日本Red5ユーザー会)
 
TV会議をオープンソースで実現!RED5によるストリーミング配信講座
TV会議をオープンソースで実現!RED5によるストリーミング配信講座TV会議をオープンソースで実現!RED5によるストリーミング配信講座
TV会議をオープンソースで実現!RED5によるストリーミング配信講座
 
オープンソースカンファレンス2011 Kansai@Kobe
オープンソースカンファレンス2011 Kansai@Kobeオープンソースカンファレンス2011 Kansai@Kobe
オープンソースカンファレンス2011 Kansai@Kobe
 
Osc2011 kobe 20110416_01
Osc2011 kobe 20110416_01Osc2011 kobe 20110416_01
Osc2011 kobe 20110416_01
 
OSC2011 Tokyo/Spring 『Red5とFlexで「簡易電子会議室システム」を作ってみよう!』
OSC2011 Tokyo/Spring 『Red5とFlexで「簡易電子会議室システム」を作ってみよう!』OSC2011 Tokyo/Spring 『Red5とFlexで「簡易電子会議室システム」を作ってみよう!』
OSC2011 Tokyo/Spring 『Red5とFlexで「簡易電子会議室システム」を作ってみよう!』
 
Red5とFlexで作るmixiアプリ「ビデオチャット」事例紹介
Red5とFlexで作るmixiアプリ「ビデオチャット」事例紹介Red5とFlexで作るmixiアプリ「ビデオチャット」事例紹介
Red5とFlexで作るmixiアプリ「ビデオチャット」事例紹介
 

Dernier

Dernier (11)

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 

『キミスカ』アプリケーションアーキテクチャ #sa_study