SlideShare a Scribd company logo
1 of 20
Download to read offline
NuxtでChrome拡張をつくってみた
NuxtでChrome拡張をつくってみた
⾃⼰紹介
千⽥恭兵(ちだ きょうへい)
株式会社シムネット
UXシステム開発部
元々バックエンドメインだったけど最近はフロントエ
ンドに⽚⾜突っ込んできた
PHP(5年くらい)
html / javascript / vue / nuxt(1年くらい)
個⼈では Go / python / Rust(どれも浅
い)
2019茨城国体ぷよぷよ宮城県代表
NuxtでChrome拡張をつくってみた
Chrome拡張といえば
Vuejsで開発した経験のある⽅にはおなじみのこの画⾯
⾒やすいし欲しい機能が潤沢だしでこのUI素晴らしいですよね。
NuxtでChrome拡張をつくってみた
・・・真似してDevToolに置けないかな
NuxtでChrome拡張をつくってみた
やってみた(WIP)
NuxtでChrome拡張をつくってみた
構成
Nuxtjs v2.11
TypeScript
Vuetify
バックエンドからカスタムヘッダを経由して
データを取得し、整形して表⽰するだけのもの。
NuxtでChrome拡張をつくってみた
どうやって作ったのか
chrome拡張は⼀定の構成さえ抑えておけば
簡単な manifest.json を書けば作れちゃいます。
詳しいことは公式ドキュメントに。(English Only)
NuxtでChrome拡張をつくってみた
vue-web-extensionを参考にしつつ作成。
manifest.jsonを書いて、 /static/ 直下に設置。
devtools.html を読み込みます。
{
"name": "profile_viewer",
"version": "0.0.0.2",
"manifest_version": 2,
"browser_action": {
"default_title": "plz press F12"
},
"devtools_page": "devtools.html",
"permissions": [
"activeTab",
"webRequest"
]
}
NuxtでChrome拡張をつくってみた
devtools.htmlの中⾝はdevtools.jsを呼ぶだけ
<script src="devtools.js"></script>
devtools に panels を create するよって書いて nuxt generate
devtools.js
chrome.devtools.panels.create(
'ProfilerViewer', // title
'icon.png', // icon
'index.html', // first page
(panel) => {} // callback function
)
こんな感じの構成に。
NuxtでChrome拡張をつくってみた
chrome://extensions を開き、「パッケージ化されていない拡張機能を読み込む」からさきほど作成
した manifest.json が含まれるフォルダを選択し、再起動。
NuxtでChrome拡張をつくってみた
できました
NuxtでChrome拡張をつくってみた
ハマりどころ1. ルーティング
・普通に nuxt generate しただけだと、恐らく page not found エラーが発⽣する。
→devToolsで表⽰する部分のURLは chrome-extention://~~~~~~~~/index.html のようになって
いる。
→ index.vue で作られるファイルは index.html 。
しかし、Vue Routerのルーティングは /
→devToolsにはDirectoryIndexが存在しないため、発⽣。
NuxtでChrome拡張をつくってみた
ハマリどころ1の対策
index.html がリクエストされたら pages/index.vue を呼び出すようにする。
nuxt.config.js
router: {
extendRoutes(routes, resolve) {
routes.push({
name: 'index.html',
path: '*',
component: resolve(__dirname, 'pages/index.vue')
})
}
},
NuxtでChrome拡張をつくってみた
ハマりどころ2. ディレクトリ構成
・ nuxt generate 時に設定されている publicPath は /_nuxt/
(js、ライセンスファイルの設置先)
→アンダースコアから始まるディレクトリが正常に読み込めない仕様
NuxtでChrome拡張をつくってみた
ハマりどころ2の対策
ビルド時の出⼒先を変えてあげればOK
nuxt.config.js
build: {
/*
** You can extend webpack config here
*/
extend(config, ctx) {},
publicPath: process.env.NODE_ENV === 'dev' ? '/_nuxt/' : 'pb'
}
NuxtでChrome拡張をつくってみた
この⼆点さえ抑えておけばあとは普通のWebページ作る要領でOK
vuexもvue routerもそのまま利⽤できるので、考えることが少なくメンテナブルに実装できます。
※余談: vuex-module-decorators めっちゃいいです
NuxtでChrome拡張をつくってみた
宣伝
宣伝
シムネットは、業界 No.1のブリーダー仲介サイト(みんなのブリーダー)やペットのECサイト/コミュニティ
サイトを完全⾃社開発・運営している会社です。
エンジニア/デザイナー/ディレクター/ライター/コールセンター/倉庫など⾃社サービス運営に必要な部署が
全て揃っており連携しながらサービス運営しています。
業績も連続で上がっており、⾃社開発のため厳しい納期がなく残業少なめです!
宣伝
こんな環境で開発/運営しています
今後も⾊々やりたいことがありますが、エンジニアが⾜りていません!
サービスを育てたい
勉強会や⾃学⾃習で学んだ知識を業務に挑戦できる現場で働きたい
⽇々技術の話題が⾶び交う刺激的な現場で働きたい
⾊々挑戦してフルスタックエンジニアを⽬指したい
かわいい動物の画像/動画に癒やされながら仕事がしたい
Mac/Win慣れている環境で働きたい
こんな⽅は、是⾮⼀緒に働きましょう!ご応募お待ちしております!
宣伝
ご静聴ありがとうございました
宣伝

More Related Content

What's hot

私にとってのテスト
私にとってのテスト私にとってのテスト
私にとってのテストTakuto Wada
 
半日でわかる コンテナー技術 (入門編)
半日でわかる コンテナー技術 (入門編)半日でわかる コンテナー技術 (入門編)
半日でわかる コンテナー技術 (入門編)Toru Makabe
 
Steam ゲーム内購入 サーバーサイド実装について
Steam ゲーム内購入 サーバーサイド実装についてSteam ゲーム内購入 サーバーサイド実装について
Steam ゲーム内購入 サーバーサイド実装についてKLab Inc. / Tech
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ増田 亨
 
GLSLtech2018 レイマーチングで半歩差のつく小技集
GLSLtech2018 レイマーチングで半歩差のつく小技集GLSLtech2018 レイマーチングで半歩差のつく小技集
GLSLtech2018 レイマーチングで半歩差のつく小技集Kei Mesuda
 
ワタシはSingletonがキライだ
ワタシはSingletonがキライだワタシはSingletonがキライだ
ワタシはSingletonがキライだTetsuya Kaneuchi
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメYoji Kanno
 
アプリ屋もDockerをドカドカ使おう ~ Docker入門
アプリ屋もDockerをドカドカ使おう ~ Docker入門アプリ屋もDockerをドカドカ使おう ~ Docker入門
アプリ屋もDockerをドカドカ使おう ~ Docker入門Hori Tasuku
 
Riverpodでテストを書こう
Riverpodでテストを書こうRiverpodでテストを書こう
Riverpodでテストを書こうShinnosuke Tokuda
 
脱RESTful API設計の提案
脱RESTful API設計の提案脱RESTful API設計の提案
脱RESTful API設計の提案樽八 仲川
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021Hiroshi Tokumaru
 
ゼロ幅スペースという悪夢
ゼロ幅スペースという悪夢ゼロ幅スペースという悪夢
ゼロ幅スペースという悪夢swamp Sawa
 
Clojureに入門してみた、2017年秋
Clojureに入門してみた、2017年秋Clojureに入門してみた、2017年秋
Clojureに入門してみた、2017年秋Satoshi KOBAYASHI
 
hooks riverpod + state notifier + freezed でのドメイン駆動設計
hooks riverpod + state notifier + freezed でのドメイン駆動設計hooks riverpod + state notifier + freezed でのドメイン駆動設計
hooks riverpod + state notifier + freezed でのドメイン駆動設計Shinnosuke Tokuda
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までMasahito Zembutsu
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使うKazuhiro Suga
 
.NET Core時代のCI/CD
.NET Core時代のCI/CD.NET Core時代のCI/CD
.NET Core時代のCI/CDYuta Matsumura
 

What's hot (20)

Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
私にとってのテスト
私にとってのテスト私にとってのテスト
私にとってのテスト
 
半日でわかる コンテナー技術 (入門編)
半日でわかる コンテナー技術 (入門編)半日でわかる コンテナー技術 (入門編)
半日でわかる コンテナー技術 (入門編)
 
Steam ゲーム内購入 サーバーサイド実装について
Steam ゲーム内購入 サーバーサイド実装についてSteam ゲーム内購入 サーバーサイド実装について
Steam ゲーム内購入 サーバーサイド実装について
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
 
GLSLtech2018 レイマーチングで半歩差のつく小技集
GLSLtech2018 レイマーチングで半歩差のつく小技集GLSLtech2018 レイマーチングで半歩差のつく小技集
GLSLtech2018 レイマーチングで半歩差のつく小技集
 
ワタシはSingletonがキライだ
ワタシはSingletonがキライだワタシはSingletonがキライだ
ワタシはSingletonがキライだ
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
 
アプリ屋もDockerをドカドカ使おう ~ Docker入門
アプリ屋もDockerをドカドカ使おう ~ Docker入門アプリ屋もDockerをドカドカ使おう ~ Docker入門
アプリ屋もDockerをドカドカ使おう ~ Docker入門
 
Riverpodでテストを書こう
Riverpodでテストを書こうRiverpodでテストを書こう
Riverpodでテストを書こう
 
脱RESTful API設計の提案
脱RESTful API設計の提案脱RESTful API設計の提案
脱RESTful API設計の提案
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
ゼロ幅スペースという悪夢
ゼロ幅スペースという悪夢ゼロ幅スペースという悪夢
ゼロ幅スペースという悪夢
 
Clojureに入門してみた、2017年秋
Clojureに入門してみた、2017年秋Clojureに入門してみた、2017年秋
Clojureに入門してみた、2017年秋
 
Cloud Nativeとは?
Cloud Nativeとは?Cloud Nativeとは?
Cloud Nativeとは?
 
hooks riverpod + state notifier + freezed でのドメイン駆動設計
hooks riverpod + state notifier + freezed でのドメイン駆動設計hooks riverpod + state notifier + freezed でのドメイン駆動設計
hooks riverpod + state notifier + freezed でのドメイン駆動設計
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
 
.NET Core時代のCI/CD
.NET Core時代のCI/CD.NET Core時代のCI/CD
.NET Core時代のCI/CD
 

Similar to NuxtでChrome拡張作ってみた

Nuxt+TypeScript+Class構文のはなし
Nuxt+TypeScript+Class構文のはなしNuxt+TypeScript+Class構文のはなし
Nuxt+TypeScript+Class構文のはなしkyoheichida
 
僕のChrome拡張
僕のChrome拡張僕のChrome拡張
僕のChrome拡張Syo Igarashi
 
How to create your own Azure Pipeline's image
How to create your own Azure Pipeline's imageHow to create your own Azure Pipeline's image
How to create your own Azure Pipeline's imageKazushi Kamegawa
 
XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用Shinya Okano
 
Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)
Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)
Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)mganeko
 
Windows Windows上に作るチーム開発環境
Windows Windows上に作るチーム開発環境Windows Windows上に作るチーム開発環境
Windows Windows上に作るチーム開発環境Tadahiro Ishisaka
 
WebRTC SFU mediasoup sample
WebRTC SFU mediasoup sampleWebRTC SFU mediasoup sample
WebRTC SFU mediasoup samplemganeko
 
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法Naruto TAKAHASHI
 
PyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミングPyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミングRansui Iso
 
最新追従 バリバリの NetCommons3 紹介
最新追従 バリバリの NetCommons3 紹介最新追従 バリバリの NetCommons3 紹介
最新追従 バリバリの NetCommons3 紹介Mitsuru Mutaguchi
 
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話gree_tech
 
Cent osにpyhtonをインストールしてみよう
Cent osにpyhtonをインストールしてみようCent osにpyhtonをインストールしてみよう
Cent osにpyhtonをインストールしてみよう2bo 2bo
 
Windowsにpythonをインストールしてみよう
WindowsにpythonをインストールしてみようWindowsにpythonをインストールしてみよう
WindowsにpythonをインストールしてみようKenji NAKAGAKI
 
Linuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書くLinuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書くTetsuyuki Kobayashi
 
Chrome Extensionで スクリーンシェアをやってみる
Chrome ExtensionでスクリーンシェアをやってみるChrome Extensionでスクリーンシェアをやってみる
Chrome Extensionで スクリーンシェアをやってみるYusuke Naka
 
Unityのオンラインゲームをhtmlに移植してわかったこと
Unityのオンラインゲームをhtmlに移植してわかったことUnityのオンラインゲームをhtmlに移植してわかったこと
Unityのオンラインゲームをhtmlに移植してわかったことKouji Hosoda
 
Chainer on Azure 2 年の歴史
Chainer on Azure 2 年の歴史Chainer on Azure 2 年の歴史
Chainer on Azure 2 年の歴史Hirono Jumpei
 
GruntでJavaScript 前作業の自動化!
GruntでJavaScript 前作業の自動化!GruntでJavaScript 前作業の自動化!
GruntでJavaScript 前作業の自動化!leverages_event
 
(たぶん)やさしいUnity
(たぶん)やさしいUnity(たぶん)やさしいUnity
(たぶん)やさしいUnitydj_kusuha
 

Similar to NuxtでChrome拡張作ってみた (20)

Nuxt+TypeScript+Class構文のはなし
Nuxt+TypeScript+Class構文のはなしNuxt+TypeScript+Class構文のはなし
Nuxt+TypeScript+Class構文のはなし
 
僕のChrome拡張
僕のChrome拡張僕のChrome拡張
僕のChrome拡張
 
How to create your own Azure Pipeline's image
How to create your own Azure Pipeline's imageHow to create your own Azure Pipeline's image
How to create your own Azure Pipeline's image
 
XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用
 
Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)
Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)
Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)
 
Windows Windows上に作るチーム開発環境
Windows Windows上に作るチーム開発環境Windows Windows上に作るチーム開発環境
Windows Windows上に作るチーム開発環境
 
WebRTC SFU mediasoup sample
WebRTC SFU mediasoup sampleWebRTC SFU mediasoup sample
WebRTC SFU mediasoup sample
 
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法
 
PyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミングPyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミング
 
最新追従 バリバリの NetCommons3 紹介
最新追従 バリバリの NetCommons3 紹介最新追従 バリバリの NetCommons3 紹介
最新追従 バリバリの NetCommons3 紹介
 
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話
 
Cent osにpyhtonをインストールしてみよう
Cent osにpyhtonをインストールしてみようCent osにpyhtonをインストールしてみよう
Cent osにpyhtonをインストールしてみよう
 
My portfolio
My portfolioMy portfolio
My portfolio
 
Windowsにpythonをインストールしてみよう
WindowsにpythonをインストールしてみようWindowsにpythonをインストールしてみよう
Windowsにpythonをインストールしてみよう
 
Linuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書くLinuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書く
 
Chrome Extensionで スクリーンシェアをやってみる
Chrome ExtensionでスクリーンシェアをやってみるChrome Extensionでスクリーンシェアをやってみる
Chrome Extensionで スクリーンシェアをやってみる
 
Unityのオンラインゲームをhtmlに移植してわかったこと
Unityのオンラインゲームをhtmlに移植してわかったことUnityのオンラインゲームをhtmlに移植してわかったこと
Unityのオンラインゲームをhtmlに移植してわかったこと
 
Chainer on Azure 2 年の歴史
Chainer on Azure 2 年の歴史Chainer on Azure 2 年の歴史
Chainer on Azure 2 年の歴史
 
GruntでJavaScript 前作業の自動化!
GruntでJavaScript 前作業の自動化!GruntでJavaScript 前作業の自動化!
GruntでJavaScript 前作業の自動化!
 
(たぶん)やさしいUnity
(たぶん)やさしいUnity(たぶん)やさしいUnity
(たぶん)やさしいUnity
 

NuxtでChrome拡張作ってみた