Submit Search
Upload
真っ当な技術を使ったふつうのWebサービス開発
•
4 likes
•
1,350 views
Shota Nozaki
Follow
ログミーTech Live #2「レガシーシステムのリニューアル」公園資料
Read less
Read more
Software
Report
Share
Report
Share
1 of 26
Download now
Download to read offline
Recommended
Yii紹介
Yii紹介
ngi group.
3流プログラマーから見たPhalconとWISP
3流プログラマーから見たPhalconとWISP
YamaYamamoto
知識もモチベーションも無い3流PGがこんな構成を使うことになった背景、そしてその3流な環境構築からデプロイのやり方を赤裸々に公開
PHP最速フレームワークPhalconの紹介
PHP最速フレームワークPhalconの紹介
Yuji Iwai
PHP Phalconの紹介
Redmine本家コピー+投票サイト作成(Python-Redmine利用事例)
Redmine本家コピー+投票サイト作成(Python-Redmine利用事例)
Yuuki Nara
Python-Redmineを利用し、Redmine本家とunofficialcookingのコピー+投票サイトを作成した事例 Redmine本家チケットのコピー/VoteCount集計 (詳細、ソースコード) https://redmine.tokyo/issues/902 本スライドで紹介しているデモサイトは下記に移転しています。 http://demo1.unofficial-redmine.org/redmine/
スクリプト言語PHP攻略法
スクリプト言語PHP攻略法
Rui Hirokawa
2000年5月23日 Project Blueで行ったPHP4紹介とデモ
PhpStormで始める快適なWebアプリケーション開発 #phpcon2013
PhpStormで始める快適なWebアプリケーション開発 #phpcon2013
晃 遠山
2013/09/14の#phpcon2013での資料です。
テクてく Lotus 技術者夜会 03/16 Lotus Notes/Domino Upgrade Pack とは
テクてく Lotus 技術者夜会 03/16 Lotus Notes/Domino Upgrade Pack とは
Hiroaki Komine
Ruby で ffmpeg の filter_complex と戯れる話
Ruby で ffmpeg の filter_complex と戯れる話
ssuser551c92
Ruby で ffmpeg の filter_complex と戯れる話
Recommended
Yii紹介
Yii紹介
ngi group.
3流プログラマーから見たPhalconとWISP
3流プログラマーから見たPhalconとWISP
YamaYamamoto
知識もモチベーションも無い3流PGがこんな構成を使うことになった背景、そしてその3流な環境構築からデプロイのやり方を赤裸々に公開
PHP最速フレームワークPhalconの紹介
PHP最速フレームワークPhalconの紹介
Yuji Iwai
PHP Phalconの紹介
Redmine本家コピー+投票サイト作成(Python-Redmine利用事例)
Redmine本家コピー+投票サイト作成(Python-Redmine利用事例)
Yuuki Nara
Python-Redmineを利用し、Redmine本家とunofficialcookingのコピー+投票サイトを作成した事例 Redmine本家チケットのコピー/VoteCount集計 (詳細、ソースコード) https://redmine.tokyo/issues/902 本スライドで紹介しているデモサイトは下記に移転しています。 http://demo1.unofficial-redmine.org/redmine/
スクリプト言語PHP攻略法
スクリプト言語PHP攻略法
Rui Hirokawa
2000年5月23日 Project Blueで行ったPHP4紹介とデモ
PhpStormで始める快適なWebアプリケーション開発 #phpcon2013
PhpStormで始める快適なWebアプリケーション開発 #phpcon2013
晃 遠山
2013/09/14の#phpcon2013での資料です。
テクてく Lotus 技術者夜会 03/16 Lotus Notes/Domino Upgrade Pack とは
テクてく Lotus 技術者夜会 03/16 Lotus Notes/Domino Upgrade Pack とは
Hiroaki Komine
Ruby で ffmpeg の filter_complex と戯れる話
Ruby で ffmpeg の filter_complex と戯れる話
ssuser551c92
Ruby で ffmpeg の filter_complex と戯れる話
Ruby で ffmpeg の filter_complex と戯れる話
Ruby で ffmpeg の filter_complex と戯れる話
Yoshikazu Kawashima
Ruby で ffmpeg の filter_complex と戯れる話
ユーザ・デザイナーから見たPlone CMSのアピールポイント
ユーザ・デザイナーから見たPlone CMSのアピールポイント
Masaki NIWA
オープンソースカンファレンス2011 Tokyo/Fallでお話ししたPloneについてのプレゼンテーションです。
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
Rui Hirokawa
Summary of recent activity in the PHP community, new feature of PHP 5.3, 5.4 and 5.5. This presentation is written by Japanese.
20190427 global azurebootcamp
20190427 global azurebootcamp
Tomoyuki Obi
Global Azure Bootcamp で利用したスライド。Logic Apps で AppService コンテンツの監視と処理の自動化について
GitHubで見つかるFileMaker関連ソフトウェア
GitHubで見つかるFileMaker関連ソフトウェア
Atsushi Matsuo
2012/10/20 カスタムWeb勉強会 LT発表資料
NAO/Pepper 開発環境 について
NAO/Pepper 開発環境 について
Takuji Kawata
2017/2/21 会津大学で行った NAO/Pepper のワークショップ資料後半部分です。
20090415 すばらしきSymfonyの世界へようこそ
20090415 すばらしきSymfonyの世界へようこそ
Hiromu Shioya
最強のPHP統合開発環境 PHPStorm
最強のPHP統合開発環境 PHPStorm
晃 遠山
2012-08-25 社内勉強会LT資料
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版
DIVE INTO CODE Corp.
就職に強いプログラミングスクール「DIVE INTO CODE(ダイブ・イントゥ・コード)」 ★ホームページ : https://diveintocode.jp/ ★電話番号 : 03-5459-1808 10:00-22:00まで営業中!!(木曜休業) 人材紹介会社と連携した、本気のカリキュラムと手厚いサポートで、わずか6ヶ月でRailsエンジニアに転職することをご支援しております。 ご入校の無料説明会を開催しております。お気軽にお電話ください。
CakePHP PHP Framework
CakePHP PHP Framework
ryota ichie
Php development efficiency improvement
Php development efficiency improvement
伸幸 茂木
PHPの開発効率を向上させるためのナレッジをまとめています。
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
ThinReports
2011.11.12島根県松江市で開催された「OSC2011 Shimane」で発表した際のスライドです。ThinReports0.7の機能と今後、そしてThinReportsを支えるOSSや技術を紹介しています。
コンテナーによるIT基盤変革 - IT infrastructure transformation -
コンテナーによるIT基盤変革 - IT infrastructure transformation -
日本ヒューレット・パッカード株式会社
- IT infrastructure transformation - Container Technology and business - HPE Ezmeral Container Platform
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
Toru Yamaguchi
特定のプロジェクトがあり、要件定義をし概要設計をする。 それがアーキテクトの仕事だと思われがちですが、大きな視点を持ち様々な課題を自らリードして解決していく立場としても絶好のポジションです。 このセッションでは、Mobage オープンプラットフォームの立ち上げから、 グローバルプラットフォーム展開、さらには mixi 社との共同プラットフォーム構築、 JavaScript SDK と認証技術の組み合わせによる新しい HTML5 プラットフォーム構築をアーキテクトという立場でリードし続けた立場から、技術選択のみならず実現したい事に対する俯瞰的な捉え方を、これまでの実例と共に紹介し、アーキテクトという役割について、お話します。
Web is the OS (Firefox OS)
Web is the OS (Firefox OS)
dynamis
エフスタ と HTML5とか勉強会 − ふくしまの春風 で使用したスライド (当日割愛した追加セクションあり) http://kokucheese.com/event/index/74303/
5分でわかるphalcon php
5分でわかるphalcon php
Yusaku Kinoshita
2015/06/11 teratail Meetup "集まっtail"における、 泰昌平氏のLTの資料です。
5分でわかるPhalconPHP
5分でわかるPhalconPHP
Shohei Tai
集まっtailでやらせていただいたLTのスライドです。
KLab Social Game Platform ~Symfony1.4活用事例~
KLab Social Game Platform ~Symfony1.4活用事例~
KLab株式会社
2010年4月16日の開催された「KAYAC×KLab合同勉強会」のKLabセッションです。
Flumeを活用したAmebaにおける大規模ログ収集システム
Flumeを活用したAmebaにおける大規模ログ収集システム
Satoshi Iijima
Hadoop Conference Japan 2013 Winterの資料です。Flume再起動時のIndex再構築の表現は若干補足修正しました。
FuelPHP活用事例
FuelPHP活用事例
Yusuke Naka
FuelPHP&CodeIgniter ユーザの集い #7 発表資料
More Related Content
Similar to 真っ当な技術を使ったふつうのWebサービス開発
Ruby で ffmpeg の filter_complex と戯れる話
Ruby で ffmpeg の filter_complex と戯れる話
Yoshikazu Kawashima
Ruby で ffmpeg の filter_complex と戯れる話
ユーザ・デザイナーから見たPlone CMSのアピールポイント
ユーザ・デザイナーから見たPlone CMSのアピールポイント
Masaki NIWA
オープンソースカンファレンス2011 Tokyo/Fallでお話ししたPloneについてのプレゼンテーションです。
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
Rui Hirokawa
Summary of recent activity in the PHP community, new feature of PHP 5.3, 5.4 and 5.5. This presentation is written by Japanese.
20190427 global azurebootcamp
20190427 global azurebootcamp
Tomoyuki Obi
Global Azure Bootcamp で利用したスライド。Logic Apps で AppService コンテンツの監視と処理の自動化について
GitHubで見つかるFileMaker関連ソフトウェア
GitHubで見つかるFileMaker関連ソフトウェア
Atsushi Matsuo
2012/10/20 カスタムWeb勉強会 LT発表資料
NAO/Pepper 開発環境 について
NAO/Pepper 開発環境 について
Takuji Kawata
2017/2/21 会津大学で行った NAO/Pepper のワークショップ資料後半部分です。
20090415 すばらしきSymfonyの世界へようこそ
20090415 すばらしきSymfonyの世界へようこそ
Hiromu Shioya
最強のPHP統合開発環境 PHPStorm
最強のPHP統合開発環境 PHPStorm
晃 遠山
2012-08-25 社内勉強会LT資料
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版
DIVE INTO CODE Corp.
就職に強いプログラミングスクール「DIVE INTO CODE(ダイブ・イントゥ・コード)」 ★ホームページ : https://diveintocode.jp/ ★電話番号 : 03-5459-1808 10:00-22:00まで営業中!!(木曜休業) 人材紹介会社と連携した、本気のカリキュラムと手厚いサポートで、わずか6ヶ月でRailsエンジニアに転職することをご支援しております。 ご入校の無料説明会を開催しております。お気軽にお電話ください。
CakePHP PHP Framework
CakePHP PHP Framework
ryota ichie
Php development efficiency improvement
Php development efficiency improvement
伸幸 茂木
PHPの開発効率を向上させるためのナレッジをまとめています。
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
ThinReports
2011.11.12島根県松江市で開催された「OSC2011 Shimane」で発表した際のスライドです。ThinReports0.7の機能と今後、そしてThinReportsを支えるOSSや技術を紹介しています。
コンテナーによるIT基盤変革 - IT infrastructure transformation -
コンテナーによるIT基盤変革 - IT infrastructure transformation -
日本ヒューレット・パッカード株式会社
- IT infrastructure transformation - Container Technology and business - HPE Ezmeral Container Platform
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
Toru Yamaguchi
特定のプロジェクトがあり、要件定義をし概要設計をする。 それがアーキテクトの仕事だと思われがちですが、大きな視点を持ち様々な課題を自らリードして解決していく立場としても絶好のポジションです。 このセッションでは、Mobage オープンプラットフォームの立ち上げから、 グローバルプラットフォーム展開、さらには mixi 社との共同プラットフォーム構築、 JavaScript SDK と認証技術の組み合わせによる新しい HTML5 プラットフォーム構築をアーキテクトという立場でリードし続けた立場から、技術選択のみならず実現したい事に対する俯瞰的な捉え方を、これまでの実例と共に紹介し、アーキテクトという役割について、お話します。
Web is the OS (Firefox OS)
Web is the OS (Firefox OS)
dynamis
エフスタ と HTML5とか勉強会 − ふくしまの春風 で使用したスライド (当日割愛した追加セクションあり) http://kokucheese.com/event/index/74303/
5分でわかるphalcon php
5分でわかるphalcon php
Yusaku Kinoshita
2015/06/11 teratail Meetup "集まっtail"における、 泰昌平氏のLTの資料です。
5分でわかるPhalconPHP
5分でわかるPhalconPHP
Shohei Tai
集まっtailでやらせていただいたLTのスライドです。
KLab Social Game Platform ~Symfony1.4活用事例~
KLab Social Game Platform ~Symfony1.4活用事例~
KLab株式会社
2010年4月16日の開催された「KAYAC×KLab合同勉強会」のKLabセッションです。
Flumeを活用したAmebaにおける大規模ログ収集システム
Flumeを活用したAmebaにおける大規模ログ収集システム
Satoshi Iijima
Hadoop Conference Japan 2013 Winterの資料です。Flume再起動時のIndex再構築の表現は若干補足修正しました。
FuelPHP活用事例
FuelPHP活用事例
Yusuke Naka
FuelPHP&CodeIgniter ユーザの集い #7 発表資料
Similar to 真っ当な技術を使ったふつうのWebサービス開発
(20)
Ruby で ffmpeg の filter_complex と戯れる話
Ruby で ffmpeg の filter_complex と戯れる話
ユーザ・デザイナーから見たPlone CMSのアピールポイント
ユーザ・デザイナーから見たPlone CMSのアピールポイント
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
20190427 global azurebootcamp
20190427 global azurebootcamp
GitHubで見つかるFileMaker関連ソフトウェア
GitHubで見つかるFileMaker関連ソフトウェア
NAO/Pepper 開発環境 について
NAO/Pepper 開発環境 について
20090415 すばらしきSymfonyの世界へようこそ
20090415 すばらしきSymfonyの世界へようこそ
最強のPHP統合開発環境 PHPStorm
最強のPHP統合開発環境 PHPStorm
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版
CakePHP PHP Framework
CakePHP PHP Framework
Php development efficiency improvement
Php development efficiency improvement
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
コンテナーによるIT基盤変革 - IT infrastructure transformation -
コンテナーによるIT基盤変革 - IT infrastructure transformation -
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
Web is the OS (Firefox OS)
Web is the OS (Firefox OS)
5分でわかるphalcon php
5分でわかるphalcon php
5分でわかるPhalconPHP
5分でわかるPhalconPHP
KLab Social Game Platform ~Symfony1.4活用事例~
KLab Social Game Platform ~Symfony1.4活用事例~
Flumeを活用したAmebaにおける大規模ログ収集システム
Flumeを活用したAmebaにおける大規模ログ収集システム
FuelPHP活用事例
FuelPHP活用事例
真っ当な技術を使ったふつうのWebサービス開発
1.
真っ当な技術を使ったふつうの Webサービス開発 ログミー株式会社 / 野崎翔太 1
/ 26
2.
野崎翔太 / @emonkak Vimmer
/ Haskeller ログミー唯一のエンジニア OSS Feedpon - LDRライクなフィードリーダー emonkak/php-di - 高速なDIフレームワーク emonkak/php-orm - object-mapperスタイルの軽量ORM emonkak/php-enumerable - LINQ to ObjectsのPHP移植 自己紹介 2 / 26
3.
世界をログする書き起こしメディア ログミー:IT、スタートアップ関係のイベントの書き起こし ログミーTech:エンジニア勉強会の書き起こし ログミーファイナンス:決算説明会の書き起こし ログミーについて 3 / 26
4.
WordPressで独自にテーマ、プラグインを開発して運用 開発・運用・デザインは社外に依頼 現在はログミーファインスについてのみこの旧システムで動作 リニューアル以前のシステム 4 / 26
5.
極度にグローバル変数に依存した設計 テンプレート主体の設計でView以外のロジックを書くべき場所がない とにかく遅い、キャッシュが必須 平均レスポンスタイムが約2000msだったことも(今は約400msまでは 改善) WordPressのつらみ 5 / 26
6.
開発者主導で仕様はほぼなし WordPressから必要な機能だけを抽出してLaravelで再実装 技術的な課題の解決を優先、ビジネスサイドの要望は後回し しかし新ためてヒアリングしてみると、同じシステムを再発明する意義 は薄かった 一度目のリニューアル 6 / 26
7.
開発の内製化 ドメイン駆動設計の導入 ユビキタス言語定義してそこからドメインモデルを構築 開発体制の変更 7 / 26
8.
基本的にシステム上での業務に関しては記事を作成して公開するという 単純なもの しかしログミーには独自の概念「シリーズ」があった 「シリーズ」は日本語で言う「連載」という続きもの記事の集合、とい うのは正確ではなかった 「シリーズ」は親子関係を持つことができる 親子関係は多いものでも3代まで 3代というのが理解の鍵に ドメインモデルの構築 8 / 26
9.
三代のそれぞれの「シリーズ」は役割が違っていた 異なる概念を同じ「シリーズ」という言葉でまとめて親子関係にしてい た 親シリーズ:イベントの主催者(コミュニティ) 子シリーズ:コニュニティによって開催されたイベント(イベント) 孫シリーズ:イベントで行なわれたセッションを記録した記事の集 合(ログ) ドメイン知識の蒸留 9 / 26
10.
リニューアルするサービスは売り上げが立っている 売り上げが立っているサービスは継続可能性が高い 長期間の保守に耐えられる設計が必要 一方、売れるかわからない新規のサービスはスピードが重要 リニューアルのための技術設計 10 / 26
11.
真っ当な技術・実装を選択する 標準化・規格化された技術 デファクトスタンダートの技術 捨てられる実装 真っ当な技術≠枯れた技術 有用な枯れた技術はあまりない 保守性を担保するための技術選択 11 / 26
12.
バックエンドの構成 12 / 26
13.
構成技術 PHP(FastCGI) nginx MySQL memcached crond モノリシックシステム 今後はレコメンド処理をマイクロサービス化を予定 バックエンドの構成 13 / 26
14.
PHP-FIG(PHP Framework Interop
Group)という組織が出している PSR(PHP Standard Recommendation)という標準勧告がある Javaで言う所のJSR(Java Specification Request) PSRはPHPコミュニティでかなりの影響力がある HTTPサーバーのインターフェイスを定義したPSR-15(HTTP Server Request Handlers)がある PHPにおける標準化 14 / 26
15.
interface RequestHandlerInterface { public
function handle( ServerRequestInterface $request ): ResponseInterface; } interface MiddlewareInterface { public function process( ServerRequestInterface $request, RequestHandlerInterface $handler ): ResponseInterface; } PSR-15のインターフェイス 15 / 26
16.
Webフレームワークは使わずにPSR-15に準拠した形でアプリを実装 フルスタックのWebフレームワークは便利だが最新版に追従するのが 大変 ルーティングはTrie木を利用した独自の仕組みをPSR-15のミドルウェ アとして実装 emonkak/routerを利用 パスを/区切リにして木を構築してキャッシュ それに対してマッチングをかけることで高速なルーティングを実現 PSR-11(Container interface)のDIコンテナのインターフェイスも利用 実装としては依存グラフを丸ごとキャッシュすることでが高速なイ ンスタンス化ができるemonkak/diを利用 Frameworkless PHP 16
/ 26
17.
JavaのPersistence API(JPA)のような永続化に関するPSRはない Object-MapperスタイルのシンプルなORM emonkak/orm
を独自開 発 Entityはプレーンなオブジェクトとして定義可能 このORMに依存するのはRepositoryの実装のみ 永続化とORM 17 / 26
18.
public function articleOfId(ArticleId
$articleId): ?Article { return $this->grammer ->getSelect() ->with(Relations::oneToOne( 'eye_catch', 'images', 'eye_catch_id', 'image_id', $this->pdo, new ObjectFetcher(Image::class), $this->grammer->getSelect() )) ->from('articles') ->where('articles.article_id', '=', $articleId->getId()) ->getResult($this->pdo, new ObjectFetcher(Article::class)) ->firstOrDefault(); } Repositoryの実装 18 / 26
19.
ユーザーにはドメインモデルで表現される形とは違う見せ方をしたい場 合がある CQRS(Command Query Responsibility
Segregation)の考え方を活 用してコマンドモデルとクエリモデルに分ける データの更新を対応するコマンドモデルはドメイン知識を反映したドメ インモデル データの読取を対応するクエリモデルをプレゼンテーション用のモデル として新たに実装 実装としてはアプリケーション層に FooData、FooQueryService と いう名称で作成 これはドメイン層における Entity と Repository の関係と一緒 CQRSの活用 19 / 26
20.
フロントエンドの構成 20 / 26
21.
ビルドツール Webpack Babel TypeScript MPA(Multi Page Application) フロントエンドの構成 21
/ 26
22.
jQueryの時代はこんなコードを各所に書いていました $('#js-button').on('click', function() { ... }); コンポーネント単位での再利用が難しい 要素とJSのコードが離れてしまっていて管理が難しい Reactなら
ReactDOM.render() をどこに書くべきかとう問題が生じ る JSのブートストラップをどこでやる か問題 22 / 26
23.
Web Componentsはカスタム要素(タグ)を作るためのAPI群 モダンブラウザはネイティブサポート IE11はPolyfill必須 Custom Elementのみ使用 Shadow
DOMは使わない HTMLElementを継承したComponent実装のための基底クラス StatefulComponentを作成 ReactライクコンポーネントAPI テンプレートの描画にはlit-htmlを利用 コンポーネント間のメッセージングにはCustomEventを活用 全部で400行程度のコンパクトな実装 WebComponents + lit-html 23 / 26
24.
インフラ構成 24 / 26
25.
Pull RDS(MySQL) ECS Service(Fargate) S3 Cloudflare Application Load
balancer App Container (PHP-FPM) ElastiCache (Memcached) Proxy Container (nginx) Scheduler Container (PHP+crond) CodePipeline Push GitHub CodeBuild Deploy Lambda ECR インフラ構成 25 / 26
26.
リニューアルするサービスは継続可能性が高いので保守性を重視して開 発 サーバーサイドはPSRの標準化技術を使って、フルスタックのフレーム ワークの利用を避けた フロントエンドはブラウザの組込みの機能であるWebComponentsと lit-htmlを使ってコンポーネントを実装 インフラはコンテナ技術とデプロイの自動化をすることで運用コストを 削減 長文を掲載するメディアなので読み易くなるようなUIデザイン まとめ 26 / 26
Download now