SlideShare a Scribd company logo
を にしている話
pixiv Inc.
後藤 尚輝
2019.08.24
2
自己紹介
● 2018新卒 / 2年目
● pixiv運営本部 UI/UXチーム所属
● 主にモバイル版pixivの開発を担当
後藤 尚輝
モバイル版 は
年半かけて大方 になりました
3
4
サンプル画像提供 ragrog
● SPA化の過程であった課題と工夫
● SPA化で生まれた今戦っている課題
5
今回話すこと
● スマートフォン向けにUI/UXを最適化したpixiv
● MAU 2200万 - PV 28億/月
● 2010年9月リリース / 2度のデザインリニューアル
● PHP Smarty
● jQueryTemplate / jQueryXHR を用いたpjax
6
モバイル版 について
最初期のモバイル版 pixiv
7
作品画面リニューアル
2018.4
8
9
● 将来的にSPA(PWA)を目指す
○ フロントエンド技術の成熟
○ アプリと同等のUI/UX
● Vue.jsを採用
○ pixiv内の特殊な企画ページでの部分的なVue.jsの採用事例
● フルスクラッチではなく、メイン部分をVueで置き換えてSPAにする方針
リニューアルにあたり を選択
10
SPA化の過程であった
課題と対応
11
● [検出] Sentryの導入
○ エラートラッカのOSS
○ 自前でホストして運用
○ 詳細なユーザ分析・統計
○ ソースマップとの同期
○ slackへの通知
バグが 稀によく 本番環境に入る
12
● [予防] Jest導入
○ フロントのテストが書ける環境を作る
○ Storyshots / ビジュアル回帰テスト
■ StorybookのStoryを定義しておくと
描画結果をテストできる
■ 少ない工数でカバレッジ確保!
○ GitLabCI
バグが 稀によく 本番環境に入る
Storybook
13
● 開発ドキュメントの整備
○ フロントエンジニアならpixivを開発できる状態へ
○ 一通りの作業マニュアル
○ コンポーネントや状態管理(vuex)に対する考え方
● Notion(SaaS)を利用
○ リアルタイム編集
○ 高度なドキュメント編集機能
開発体制の確立
14
● ディレクトリ / コードベースを標準に近づける
○ Nuxt.js等のディレクトリ構成を参考に整理
■ レガシー部分を分けて, SPA系統は標準っぽい構成へ
○ ESLintルールの地道に厳格化
● Typescriptへの移行
○ 型を見れば大体わかる状態
○ ドキュメンテーションとしての型
○ APIClient定義等を優先し, TSへ移行
開発体制の確立
15
SPA化で生まれた
今戦っている課題
16
フロントエンド開発参入障壁
● pixivの開発チームは皆フロント~サーバサイドをさわる人で構成
● フロントエンドエンジニア以外がフロントを触るのは非効率に
○ キャリアパス
○ 学習コスト / レビューコスト
● UI/UXチームを作成。 フロントエンドのリソースを集約
● UX設計とUI実装(それに伴うサーバサイド実装)を行う
● レコメンド(機械学習)チーム等と専門性を分担
17
デスクトップ版 とのコード差異
● デスクトップ版pixiv(React)とモバイル版pixiv(Vue.js)の存在
● 基本的に全機能を2重実装
● Nexus(社内npm repo) / yarn workspace を導入
● APIClient / 翻訳 / Config系 のコード共通化 共通パッケージの一部
18
まとめ
19
まとめ
● コード量変化 (2018.2 => 2019.8)
○ *.vue : 1,938 => 88,924
○ *.js : 18,358 => 23,273
○ *.ts : 2,533 => 16,118
● SPAのフレームに則った開発体制/ 開発効率の向上
● ドキュメントの整備等で新規開発者がJOINして成果を出せる
20
さいご
pixivはレガシーでしたが、

1年半でSPAになりました。

これからもやっていきます。

21
22
● pixivメディアガイド:
https://pixon.ads-pixiv.net/click?format=js&ad_group_id=2270&campaign_id=182
&creative_id=3674&zone_id=click
● 11歳のpixivが迎えた3度のリニューアル:
https://logmi.jp/tech/articles/320459
● チームごとに色づいたピクシブのStorybook運用  
https://inside.pixiv.blog/do7be/5950
●
参考

More Related Content

What's hot

サービス作る系 20110128
サービス作る系 20110128サービス作る系 20110128
サービス作る系 20110128skdmai
 
20160621 KDL_monacaソリューションセミナー
20160621 KDL_monacaソリューションセミナー20160621 KDL_monacaソリューションセミナー
20160621 KDL_monacaソリューションセミナー
kdl_yamanaka
 
アナザーエデンを支える技術〜効率的なコンテンツ制作のための開発基盤〜
アナザーエデンを支える技術〜効率的なコンテンツ制作のための開発基盤〜アナザーエデンを支える技術〜効率的なコンテンツ制作のための開発基盤〜
アナザーエデンを支える技術〜効率的なコンテンツ制作のための開発基盤〜
gree_tech
 
Monacaソリューションセミナー20160621
Monacaソリューションセミナー20160621Monacaソリューションセミナー20160621
Monacaソリューションセミナー20160621
アシアル株式会社
 
20201126GAS活#7「【祝】詳解! Google Apps Script完全入門第2版」
20201126GAS活#7「【祝】詳解! Google Apps Script完全入門第2版」20201126GAS活#7「【祝】詳解! Google Apps Script完全入門第2版」
20201126GAS活#7「【祝】詳解! Google Apps Script完全入門第2版」
Noriaki Takahashi
 
Bot Builder V4 SDK + QnA Maker / LUIS
Bot Builder V4 SDK  + QnA Maker / LUISBot Builder V4 SDK  + QnA Maker / LUIS
Bot Builder V4 SDK + QnA Maker / LUIS
Yoshitaka Seo
 
Pixateワークショップ―アプリケーションの概要とpixateの使い方 初級編―.pdf
Pixateワークショップ―アプリケーションの概要とpixateの使い方 初級編―.pdf Pixateワークショップ―アプリケーションの概要とpixateの使い方 初級編―.pdf
Pixateワークショップ―アプリケーションの概要とpixateの使い方 初級編―.pdf
theguild
 
Web制作で培ってきたFlashのリッチな表現力をモバイルアプリに
Web制作で培ってきたFlashのリッチな表現力をモバイルアプリにWeb制作で培ってきたFlashのリッチな表現力をモバイルアプリに
Web制作で培ってきたFlashのリッチな表現力をモバイルアプリに
invogue
 

What's hot (8)

サービス作る系 20110128
サービス作る系 20110128サービス作る系 20110128
サービス作る系 20110128
 
20160621 KDL_monacaソリューションセミナー
20160621 KDL_monacaソリューションセミナー20160621 KDL_monacaソリューションセミナー
20160621 KDL_monacaソリューションセミナー
 
アナザーエデンを支える技術〜効率的なコンテンツ制作のための開発基盤〜
アナザーエデンを支える技術〜効率的なコンテンツ制作のための開発基盤〜アナザーエデンを支える技術〜効率的なコンテンツ制作のための開発基盤〜
アナザーエデンを支える技術〜効率的なコンテンツ制作のための開発基盤〜
 
Monacaソリューションセミナー20160621
Monacaソリューションセミナー20160621Monacaソリューションセミナー20160621
Monacaソリューションセミナー20160621
 
20201126GAS活#7「【祝】詳解! Google Apps Script完全入門第2版」
20201126GAS活#7「【祝】詳解! Google Apps Script完全入門第2版」20201126GAS活#7「【祝】詳解! Google Apps Script完全入門第2版」
20201126GAS活#7「【祝】詳解! Google Apps Script完全入門第2版」
 
Bot Builder V4 SDK + QnA Maker / LUIS
Bot Builder V4 SDK  + QnA Maker / LUISBot Builder V4 SDK  + QnA Maker / LUIS
Bot Builder V4 SDK + QnA Maker / LUIS
 
Pixateワークショップ―アプリケーションの概要とpixateの使い方 初級編―.pdf
Pixateワークショップ―アプリケーションの概要とpixateの使い方 初級編―.pdf Pixateワークショップ―アプリケーションの概要とpixateの使い方 初級編―.pdf
Pixateワークショップ―アプリケーションの概要とpixateの使い方 初級編―.pdf
 
Web制作で培ってきたFlashのリッチな表現力をモバイルアプリに
Web制作で培ってきたFlashのリッチな表現力をモバイルアプリにWeb制作で培ってきたFlashのリッチな表現力をモバイルアプリに
Web制作で培ってきたFlashのリッチな表現力をモバイルアプリに
 

Similar to Ll2019 pixivをspaにしている話し

「Kivyによるアプリケーション開発のすすめ」の勧め
「Kivyによるアプリケーション開発のすすめ」の勧め「Kivyによるアプリケーション開発のすすめ」の勧め
「Kivyによるアプリケーション開発のすすめ」の勧め
Jun Okazaki
 
Yapc::Asia 2013
Yapc::Asia 2013Yapc::Asia 2013
Yapc::Asia 2013
Masaru Hoshino
 
OpenCV on mobile
OpenCV on mobileOpenCV on mobile
OpenCV on mobile
Daisuke Yamashita
 
Vue Fes Japan 2018 LINE株式会社 LunchスポンサーLT
Vue Fes Japan 2018 LINE株式会社 LunchスポンサーLTVue Fes Japan 2018 LINE株式会社 LunchスポンサーLT
Vue Fes Japan 2018 LINE株式会社 LunchスポンサーLT
LINE Corporation
 
20220303_SAP AppGyverとSAP CAPで簡単なアプリを作ってみた~市民開発者とプロ開発者で作業を分担してみた~
20220303_SAP AppGyverとSAP CAPで簡単なアプリを作ってみた~市民開発者とプロ開発者で作業を分担してみた~20220303_SAP AppGyverとSAP CAPで簡単なアプリを作ってみた~市民開発者とプロ開発者で作業を分担してみた~
20220303_SAP AppGyverとSAP CAPで簡単なアプリを作ってみた~市民開発者とプロ開発者で作業を分担してみた~
MasashiOtsuka1
 
モバイル対応Ui部品を利用したレスポンシブwebアプリ開発
モバイル対応Ui部品を利用したレスポンシブwebアプリ開発モバイル対応Ui部品を利用したレスポンシブwebアプリ開発
モバイル対応Ui部品を利用したレスポンシブwebアプリ開発
Satoru Yamaguchi
 
kintoneアプリをjavascriptでいじってみよう
kintoneアプリをjavascriptでいじってみようkintoneアプリをjavascriptでいじってみよう
kintoneアプリをjavascriptでいじってみよう
Kyouhei Kitagawa
 
サイネージを使う顧客創出のシナリオ
サイネージを使う顧客創出のシナリオサイネージを使う顧客創出のシナリオ
サイネージを使う顧客創出のシナリオ
CRI Japan, Inc.
 
kintone新機能開発のお仕事_和渕.pptx
kintone新機能開発のお仕事_和渕.pptxkintone新機能開発のお仕事_和渕.pptx
kintone新機能開発のお仕事_和渕.pptx
Cybozu, Inc.
 
Infragistics Ultimate 2019 Vol.1最新機能
Infragistics Ultimate 2019 Vol.1最新機能Infragistics Ultimate 2019 Vol.1最新機能
Infragistics Ultimate 2019 Vol.1最新機能
インフラジスティックス・ジャパン株式会社
 
デバイス時代の Web UI コンポーネント活用
デバイス時代の Web UI コンポーネント活用デバイス時代の Web UI コンポーネント活用
デバイス時代の Web UI コンポーネント活用
インフラジスティックス・ジャパン株式会社
 
Yahoo!ブラウザーにおける市場環境の分析と戦略化
Yahoo!ブラウザーにおける市場環境の分析と戦略化Yahoo!ブラウザーにおける市場環境の分析と戦略化
Yahoo!ブラウザーにおける市場環境の分析と戦略化
Yahoo!デベロッパーネットワーク
 
ニフクラ mobile backend チームのCIツール活用事例紹介
ニフクラ mobile backend チームのCIツール活用事例紹介ニフクラ mobile backend チームのCIツール活用事例紹介
ニフクラ mobile backend チームのCIツール活用事例紹介
富士通クラウドテクノロジーズ株式会社
 
kintonedevcamp2016s-demo
kintonedevcamp2016s-demokintonedevcamp2016s-demo
kintonedevcamp2016s-demo
kintone papers
 
SpringOne Platform Replay -Pivotal Cloud Foundry-
SpringOne Platform Replay -Pivotal Cloud Foundry-SpringOne Platform Replay -Pivotal Cloud Foundry-
SpringOne Platform Replay -Pivotal Cloud Foundry-
CASAREAL, Inc.
 
みまもりWATニャン
みまもりWATニャンみまもりWATニャン
みまもりWATニャン
K Inoya
 
Webデザインにおける「見えづらい」こだわりハック
Webデザインにおける「見えづらい」こだわりハックWebデザインにおける「見えづらい」こだわりハック
Webデザインにおける「見えづらい」こだわりハック
Flavor Bright
 
Lychee Redmine最新機能紹介とLycheeの未来について
Lychee Redmine最新機能紹介とLycheeの未来についてLychee Redmine最新機能紹介とLycheeの未来について
Lychee Redmine最新機能紹介とLycheeの未来について
agileware_jp
 
【A-4】kintone API、JavaScript APIの実力
【A-4】kintone API、JavaScript APIの実力【A-4】kintone API、JavaScript APIの実力
【A-4】kintone API、JavaScript APIの実力
Cybozucommunity
 
【17-A-1】Mobile Future Conference開会のご挨拶/世界へ挑むDeNAの「X-border」「X-device」戦略
【17-A-1】Mobile Future Conference開会のご挨拶/世界へ挑むDeNAの「X-border」「X-device」戦略【17-A-1】Mobile Future Conference開会のご挨拶/世界へ挑むDeNAの「X-border」「X-device」戦略
【17-A-1】Mobile Future Conference開会のご挨拶/世界へ挑むDeNAの「X-border」「X-device」戦略Developers Summit
 

Similar to Ll2019 pixivをspaにしている話し (20)

「Kivyによるアプリケーション開発のすすめ」の勧め
「Kivyによるアプリケーション開発のすすめ」の勧め「Kivyによるアプリケーション開発のすすめ」の勧め
「Kivyによるアプリケーション開発のすすめ」の勧め
 
Yapc::Asia 2013
Yapc::Asia 2013Yapc::Asia 2013
Yapc::Asia 2013
 
OpenCV on mobile
OpenCV on mobileOpenCV on mobile
OpenCV on mobile
 
Vue Fes Japan 2018 LINE株式会社 LunchスポンサーLT
Vue Fes Japan 2018 LINE株式会社 LunchスポンサーLTVue Fes Japan 2018 LINE株式会社 LunchスポンサーLT
Vue Fes Japan 2018 LINE株式会社 LunchスポンサーLT
 
20220303_SAP AppGyverとSAP CAPで簡単なアプリを作ってみた~市民開発者とプロ開発者で作業を分担してみた~
20220303_SAP AppGyverとSAP CAPで簡単なアプリを作ってみた~市民開発者とプロ開発者で作業を分担してみた~20220303_SAP AppGyverとSAP CAPで簡単なアプリを作ってみた~市民開発者とプロ開発者で作業を分担してみた~
20220303_SAP AppGyverとSAP CAPで簡単なアプリを作ってみた~市民開発者とプロ開発者で作業を分担してみた~
 
モバイル対応Ui部品を利用したレスポンシブwebアプリ開発
モバイル対応Ui部品を利用したレスポンシブwebアプリ開発モバイル対応Ui部品を利用したレスポンシブwebアプリ開発
モバイル対応Ui部品を利用したレスポンシブwebアプリ開発
 
kintoneアプリをjavascriptでいじってみよう
kintoneアプリをjavascriptでいじってみようkintoneアプリをjavascriptでいじってみよう
kintoneアプリをjavascriptでいじってみよう
 
サイネージを使う顧客創出のシナリオ
サイネージを使う顧客創出のシナリオサイネージを使う顧客創出のシナリオ
サイネージを使う顧客創出のシナリオ
 
kintone新機能開発のお仕事_和渕.pptx
kintone新機能開発のお仕事_和渕.pptxkintone新機能開発のお仕事_和渕.pptx
kintone新機能開発のお仕事_和渕.pptx
 
Infragistics Ultimate 2019 Vol.1最新機能
Infragistics Ultimate 2019 Vol.1最新機能Infragistics Ultimate 2019 Vol.1最新機能
Infragistics Ultimate 2019 Vol.1最新機能
 
デバイス時代の Web UI コンポーネント活用
デバイス時代の Web UI コンポーネント活用デバイス時代の Web UI コンポーネント活用
デバイス時代の Web UI コンポーネント活用
 
Yahoo!ブラウザーにおける市場環境の分析と戦略化
Yahoo!ブラウザーにおける市場環境の分析と戦略化Yahoo!ブラウザーにおける市場環境の分析と戦略化
Yahoo!ブラウザーにおける市場環境の分析と戦略化
 
ニフクラ mobile backend チームのCIツール活用事例紹介
ニフクラ mobile backend チームのCIツール活用事例紹介ニフクラ mobile backend チームのCIツール活用事例紹介
ニフクラ mobile backend チームのCIツール活用事例紹介
 
kintonedevcamp2016s-demo
kintonedevcamp2016s-demokintonedevcamp2016s-demo
kintonedevcamp2016s-demo
 
SpringOne Platform Replay -Pivotal Cloud Foundry-
SpringOne Platform Replay -Pivotal Cloud Foundry-SpringOne Platform Replay -Pivotal Cloud Foundry-
SpringOne Platform Replay -Pivotal Cloud Foundry-
 
みまもりWATニャン
みまもりWATニャンみまもりWATニャン
みまもりWATニャン
 
Webデザインにおける「見えづらい」こだわりハック
Webデザインにおける「見えづらい」こだわりハックWebデザインにおける「見えづらい」こだわりハック
Webデザインにおける「見えづらい」こだわりハック
 
Lychee Redmine最新機能紹介とLycheeの未来について
Lychee Redmine最新機能紹介とLycheeの未来についてLychee Redmine最新機能紹介とLycheeの未来について
Lychee Redmine最新機能紹介とLycheeの未来について
 
【A-4】kintone API、JavaScript APIの実力
【A-4】kintone API、JavaScript APIの実力【A-4】kintone API、JavaScript APIの実力
【A-4】kintone API、JavaScript APIの実力
 
【17-A-1】Mobile Future Conference開会のご挨拶/世界へ挑むDeNAの「X-border」「X-device」戦略
【17-A-1】Mobile Future Conference開会のご挨拶/世界へ挑むDeNAの「X-border」「X-device」戦略【17-A-1】Mobile Future Conference開会のご挨拶/世界へ挑むDeNAの「X-border」「X-device」戦略
【17-A-1】Mobile Future Conference開会のご挨拶/世界へ挑むDeNAの「X-border」「X-device」戦略
 

Recently uploaded

「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
嶋 是一 (Yoshikazu SHIMA)
 
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
Osaka University
 
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
tazaki1
 
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobodyロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
azuma satoshi
 
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMMハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
osamut
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
harmonylab
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
Toru Tamaki
 

Recently uploaded (7)

「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
 
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
 
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
 
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobodyロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
 
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMMハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
 

Ll2019 pixivをspaにしている話し