SlideShare uma empresa Scribd logo
1 de 28
第41回 Alfresco勉強会
Share UIカスタマイズ
Widget 編
2017年10月25日
Moritaka Soma
自己紹介
相馬 盛孝
オープンソースコンサルティングチーム所属
Alfrescoのカスタマイズやサポートをしています
最近はVR技術に興味があります
本日の発表内容
本日の発表内容:
これからAlfresco ShareのUIカスタマイズを
行おうと考えている方の参考となりそうな
内容をご紹介
※前半の説明はAlfresco勉強会39回
「Share UIカスタマイズの第一歩」の内容と同じです
• Surf Extension Modulesの紹介
• UI挙動の変更(不具合修正)
環境
環境:
Alfresco SDK 3.0 (All-In-One Project)
• Alfresco Platform 5.2.e
• Alfresco Share 5.2.d
*共にAlfresco SDK 3.0のデフォルトで
選択されているバージョンです
Alfresco SDKの使い方については割愛します…
環境
現状のAlfresco SDK 3.0 AIOの注意点:
Share Servicesが適用されているのに、
「Alfresco is running without Share Services.
See your System Administrator for more details.」
というメッセージが出てしまう。
https://github.com/Alfresco/alfresco-sdk/issues/445
src/test/resources/share/share-config-custom.xml の
<endpoint-url>${alfresco.repo.url}/alfresco/api</endpoint-url> を
<endpoint-url>${alfresco.repo.url}/api</endpoint-url> と修正することで
対処可能です。
Surf Extension Modules
Surf Extension Modulesとは?:
Surf Extension Modules are the main tool
to use when adding, updating, or hiding content
in the Share User Interface (UI). *
* http://docs.alfresco.com/5.2/concepts/dev-extensions-share-surf-extension-modules.html
意訳:
Share UIで、要素の追加・更新・削除(隠蔽)
カスタマイズを行う上でのメインツール
Surf Extension Modules
Surf Extension Modules:
RuntimeにModuleデプロイの有効/無効を切り替える
ことが可能です。
http://<host>:<port>/share/page/modules/deploy
デバッグやテストの際、便利です。
Surf Extension Modules
Alfresco SDKでは
<artifactId>-share-jar/src/main/resources/alfresco/
web-extension/site-data/extensions
フォルダにモジュール定義のxmlを配置します。
例: custom-header-extension-modules.xml
<extension>
<modules>
<module>
<id>Custom Share Header Menu</id>
<version>1.0</version>
<auto-deploy>true</auto-deploy>
<customizations>
<customization>
<targetPackageRoot>org.alfresco.share.header</targetPackageRoot>
<sourcePackageRoot>jp.aegif.share.header</sourcePackageRoot>
</customization>
</customizations>
</module>
</modules>
</extension>
Surf Extension Modules
モジュール定義の説明:
:
<customizations>
<customization>
<targetPackageRoot>org.alfresco.share.header</targetPackageRoot>
<sourcePackageRoot>jp.aegif.share.header</sourcePackageRoot>
</customization>
</customizations>
:
この例では、Alfresco Shareの
WEB-INF/classes/alfresco/site-webscripts/org/alfresco/share/header/
以下に配置される、WebScriptのjavascriptに対して、
Alfresco SDK上で
<artifactId>-share-jar/src/main/resources/alfresco/web-extension/
site-webscripts/jp/aegif/share/header/
以下の、同名のjavascriptファイルを追加して実行することで、
カスタマイズを行う定義となります。
他にも様々な定義を行うことができますが、今回は割愛します…
Share Headerのカスタマイズ
Share Header:
比較的カスタマイズの要望が多い部分です。
• 不要なメニュー項目を隠したい
• ワークフローは使わないのでタスク項目を隠したい
• SSOを使うので明示的にログアウトさせたくない
• よく使う項目を追加したい
• ごみ箱へ1クリックで移動したい
• 検索フィールドのメッセージが中途半端なので修正したい
etc…
Share Headerのカスタマイズ
カスタマイズ方法:
Share HeaderはAikauのWidgetとして実装されているため、
Share HeaderのWebScriptが作成するオリジナルのWidget
モデルを、Surf Extension Modulesを利用して変更することで
カスタマイズを行います。
Share Header
WebScript
Original
Widget
モデル
Surf Extension
Module
作成 変更
Customized
Widget
モデル
Share Headerのカスタマイズ
対象Widgetの調査:
ShareでClient Debug Modeを有効*にし、Debug Menuの
「Toggle Developer View」で、対象項目を調べるのが簡単です。
アイコンをクリックすることで、WidgetのIDと取得のための
Snippetを確認できます。
*SDKから起動した場合Client Debug Modeは有効化されています。
Share Headerのカスタマイズ
Surf Extension Module作成:
Share Headerのモデルを返すWebScriptのJavascriptは
WEB-INF/classes/alfresco/site-webscripts/org/alfresco/share/header/share-header.get.js
なので、以下のSurf Extension Moduleを作成。
<artifactId>-share-jar/src/main/resources/alfresco/web-extension/site-data/extensions
custom-header-extension-modules.xml :
<extension>
<modules>
<module>
<id>Custom Share Header Menu</id>
<version>1.0</version>
<auto-deploy>true</auto-deploy>
<customizations>
<customization>
<targetPackageRoot>org.alfresco.share.header</targetPackageRoot>
<sourcePackageRoot>jp.aegif.share.header</sourcePackageRoot>
</customization>
</customizations>
</module>
</modules>
</extension>
Share Headerのカスタマイズ
• 項目の消去
• 項目の追加
• (オプションで設定可能な)挙動の変更
上記内容については39回で発表していますので
以下の資料をご参照下さい。
弊社 Labo Blog:
第39回Alfresco勉強会 Share UIカスタマイズの第一歩
Share Headerのカスタマイズ
検索フィールドのカスタマイズ:
検索フィールドのWidgetを調べると
alfresco/header/SearchBox というWidgetであることが分かる
Alfresco ShareのソースコードからこのWidgetを調べると、
aikau-1.0.101.3.jar に含まれる
META-INF/js/aikau/1.0.101.3/alfresco/header/SearchBox.js
がWidgetの実体であることがわかる。
Share Headerのカスタマイズ
検索フィールドの不具合(?)修正:
Share Headerの検索フィールドは日本語IMEと相性が悪く
日本語変換の確定のEnterキーを押すと、そのまま検索が
実行されてしまう*。
* Firefox/IE11/Safariで発生、Chromeでは発生しない
参考: 弊社Blog Alfresco Community 5.0の検索BOXとIMEの相性が悪い
Share Headerのカスタマイズ
検索フィールドの不具合(?)修正:
Widgetの実体であるSearchBox.jsを確認すると
検索フィールドの検索実行のトリガーとしてKeyUpイベントを
利用していることが原因で発生。
(Alfresco Community 4.2系まではKeyDownをトリガーとしていて問題は発生しなかったのに…)
SearchBox.js Line:1129-
onSearchBoxKeyUp: function alfresco_header_SearchBox__onSearchBoxKeyUp(evt) {
var terms = lang.trim(this._searchTextNode.value);
switch (evt.keyCode)
{
// Enter key press
case 13:
if (terms.length !== 0 && this.suppressRedirect !== true)
{
this.onSaveLastUserSearch();
// ACE-1798 - always close the live search drop-down on enter keypress..
this.clearResults();
this.alfLog("log", "Search request for: ", terms);
var url = this.generateSearchPageLink(terms);
this.alfPublish("ALF_NAVIGATE_TO_PAGE", {
url: url,
type: urlTypes.PAGE_RELATIVE,
target: "CURRENT"
});
}
break;
Share Headerのカスタマイズ
検索フィールドの不具合(?)修正:
前述の弊社BlogでのSearchBox.jsを書き換える対応方法は
Alfresco Share 5.2.d では利用できない。
• SearchBox.jsがjarファイル中に配置されているため、
直接書き換え不可
• SDKを利用してオリジナルのSearchBox.jsを置き換えるのは
簡単にはできない(そもそも可能かどうか不明)
Share Headerのカスタマイズ
検索フィールドの不具合(?)修正:
修正方針:
検索実行のトリガーとしてKeyDownイベントを利用するように
修正を行ったSearchBox Widgetを作成し、こちらを利用する
ように置き換える。
Share Header
WebScript
Original
Widget
モデル
Surf Extension
Module
作成 変更 Customized
Widget
モデル
Original
SearchBox
Widget
Customized
SearchBox
Widget
参照 参照
継承
Share Headerのカスタマイズ
検索フィールドの不具合(?)修正:
SearchBox Widgetの修正 :
検索実行のトリガーとしてKeyDownイベントを利用するように
修正を行ったSearchBox Widgetを作成。
オリジナルのSearchBoxを継承し、修正の必要なメソッドを
上書きする。
Share Headerのカスタマイズ
検索フィールドの不具合(?)修正:
オリジナルのSearchBoxを継承し、修正の必要なメソッドを上書きする。
/src/main/resources/META-INF/js/aikau/1.0.101.3/alfresco/customize/CustomizedSearchBox.js:
/**
* Customized SearchBox module
* Extends module:alfresco/header/SearchBox
* @module alfresco/customize/CustomizedSearchBox
*/
define(["dojo/_base/declare",
"dojo/_base/lang",
"alfresco/enums/urlTypes",
"alfresco/header/SearchBox"],
function(declare, lang, urlTypes, SearchBox) {
return declare([SearchBox], {
/**
* 日本語変換時のEnterキー入力で検索が行われないように修正
* override alfresco/header/SearchBox#onSearchBoxKeyDown
*/
onSearchBoxKeyDown: function alfresco_header_SearchBox__onSearchBoxKeyDown(evt) {
<次ページ参照>
},
/**
* 日本語変換時のEnterキー入力で検索が行われないように修正
* override alfresco/search/SearchBox#onSearchBoxKeyUp
*/
onSearchBoxKeyUp: function alfresco_header_SearchBox__onSearchBoxKeyUp(evt) {
<次々ページ参照>
}
});
}
);
Widgetの指定は相対パスで行わ
れているため、オリジナルの
ファイルと同じパスの下に配置
Share Headerのカスタマイズ
検索フィールドの不具合(?)修正:
オリジナルのSearchBoxを継承し、修正の必要なメソッドを上書きする。
CustomizedSearchBox.js#onSearchBoxKeyDown:
/**
* 日本語変換時のEnterキー入力で検索が行われないように修正
* override alfresco/header/SearchBox#onSearchBoxKeyDown
*/
onSearchBoxKeyDown: function alfresco_header_SearchBox__onSearchBoxKeyDown(evt) {
// jshint maxcomplexity:false
var searches;
switch (evt.keyCode)
{
<オリジナルと同じため省略>
case 13:
var terms = lang.trim(this._searchTextNode.value);
if (terms.length !== 0 && this.suppressRedirect !== true)
{
this.onSaveLastUserSearch();
// ACE-1798 - always close the live search drop-down on enter keypress..
this.clearResults();
this.alfLog("log", "Search request for: ", terms);
var url = this.generateSearchPageLink(terms);
this.alfPublish("ALF_NAVIGATE_TO_PAGE", {
url: url,
type: urlTypes.PAGE_RELATIVE,
target: "CURRENT"
});
}
break;
}
},
追加
Share Headerのカスタマイズ
検索フィールドの不具合(?)修正:
オリジナルのSearchBoxを継承し、修正の必要なメソッドを上書きする。
CustomizedSearchBox.js#onSearchBoxKeyUp:
/**
* 日本語変換時のEnterキー入力で検索が行われないように修正
* override alfresco/search/SearchBox#onSearchBoxKeyUp
*/
onSearchBoxKeyUp: function alfresco_header_SearchBox__onSearchBoxKeyUp(evt) {
var terms = lang.trim(this._searchTextNode.value);
switch (evt.keyCode)
{
// Enter key press
case 13:
// Do nothing
// if (terms.length !== 0 && this.suppressRedirect !== true)
// {
// this.onSaveLastUserSearch();
// // ACE-1798 - always close the live search drop-down on enter keypress..
// this.clearResults();
// this.alfLog("log", "Search request for: ", terms);
// var url = this.generateSearchPageLink(terms);
// this.alfPublish("ALF_NAVIGATE_TO_PAGE", {
// url: url,
// type: urlTypes.PAGE_RELATIVE,
// target: "CURRENT"
// });
// }
break;
<オリジナルと同じため省略>
}
}
削除
Share Headerのカスタマイズ
検索フィールドの不具合(?)修正:
Share Headerのモデル作成部分からid: HEADER_SEARCHを定義している部分を探す。
WEB-INF/classes/alfresco/site-webscripts/org/alfresco/share/imports/share-header.lib.js
Line: 1723-
var headerModel = [{
id: "SHARE_HEADER",
name: "alfresco/header/Header",
config: {
<省略>
widgets: [
{ id: "HEADER_APP_MENU_BAR”, <省略> },
{ id: "HEADER_USER_MENU_BAR”,<省略> },
{
id: "HEADER_SEARCH",
name: "alfresco/header/SearchBox",
align: "right",
config: {
id: "HEADER_SEARCH_BOX",
site: page.url.templateArgs.site,
siteName: siteTitle,
enableContextLiveSearch: true,
linkToFacetedSearch: true,
sitePage: ""
}
}
]
}
},
HEADER_SEARCH定義部
Share Headerのカスタマイズ
検索フィールドの不具合(?)修正:
定義部を参考にShare Headerのモデルを修正するJavascriptにSearchBox Widgetの
実装を入れ替えるする処理を追加。
/src/main/resources/alfresco/web-extension/site-webscripts/jp/aegif/share/header/share-header.get.js:
//Change SearchBox to Customized Module
widgetUtils.findObject(model.jsonModel, "id", "HEADER_SEARCH").name
= "alfresco/customize/CustomizedSearchBox”;
デモ
ご質問など
ありがとうございました。

Mais conteúdo relacionado

Mais procurados

Alfresco勉強会#33 alfresco 5.1でコンテンツ自動削除を実装してみた
Alfresco勉強会#33 alfresco 5.1でコンテンツ自動削除を実装してみたAlfresco勉強会#33 alfresco 5.1でコンテンツ自動削除を実装してみた
Alfresco勉強会#33 alfresco 5.1でコンテンツ自動削除を実装してみたTasuku Otani
 
Alfresco勉強会#28 alfresco 5.0の検索機能をみてみよう
Alfresco勉強会#28 alfresco 5.0の検索機能をみてみようAlfresco勉強会#28 alfresco 5.0の検索機能をみてみよう
Alfresco勉強会#28 alfresco 5.0の検索機能をみてみようTasuku Otani
 
Alfresco勉強会#28 メタデータテンプレート
Alfresco勉強会#28 メタデータテンプレートAlfresco勉強会#28 メタデータテンプレート
Alfresco勉強会#28 メタデータテンプレートJun Terashita
 
Alfresco勉強会#24 コンテンツのライフサイクル
Alfresco勉強会#24 コンテンツのライフサイクルAlfresco勉強会#24 コンテンツのライフサイクル
Alfresco勉強会#24 コンテンツのライフサイクルJun Terashita
 
0からわかるAlfresco
0からわかるAlfresco0からわかるAlfresco
0からわかるAlfrescoMoritakaSoma
 
Moving Gigantic Files Into and Out of the Alfresco Repository
Moving Gigantic Files Into and Out of the Alfresco RepositoryMoving Gigantic Files Into and Out of the Alfresco Repository
Moving Gigantic Files Into and Out of the Alfresco RepositoryJeff Potts
 
Jose portillo dev con presentation 1138
Jose portillo   dev con presentation 1138Jose portillo   dev con presentation 1138
Jose portillo dev con presentation 1138Jose Portillo
 
Alfresco Share - Recycle Bin Ideas
Alfresco Share - Recycle Bin IdeasAlfresco Share - Recycle Bin Ideas
Alfresco Share - Recycle Bin IdeasAlfrescoUE
 
Collaborative Editing Tools for Alfresco
Collaborative Editing Tools for AlfrescoCollaborative Editing Tools for Alfresco
Collaborative Editing Tools for AlfrescoAngel Borroy López
 
Intro to the Alfresco Public API
Intro to the Alfresco Public APIIntro to the Alfresco Public API
Intro to the Alfresco Public APIJeff Potts
 
Nextcloud と Libreoffice online について
Nextcloud と Libreoffice online についてNextcloud と Libreoffice online について
Nextcloud と Libreoffice online についてTetsurou Yano
 
Alfresco Backup and Disaster Recovery White Paper
Alfresco Backup and Disaster Recovery White PaperAlfresco Backup and Disaster Recovery White Paper
Alfresco Backup and Disaster Recovery White PaperToni de la Fuente
 
Alfresco DevCon 2019 - Alfresco Identity Services in Action
Alfresco DevCon 2019 - Alfresco Identity Services in ActionAlfresco DevCon 2019 - Alfresco Identity Services in Action
Alfresco DevCon 2019 - Alfresco Identity Services in ActionFrancesco Corti
 
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころShinsuke Sugaya
 
Replacing Your Shared Drive with Alfresco - Open Source ECM
Replacing Your Shared Drive with Alfresco - Open Source ECMReplacing Your Shared Drive with Alfresco - Open Source ECM
Replacing Your Shared Drive with Alfresco - Open Source ECMAlfresco Software
 
Ef09 installing-alfresco-components-1-by-1
Ef09 installing-alfresco-components-1-by-1Ef09 installing-alfresco-components-1-by-1
Ef09 installing-alfresco-components-1-by-1Angel Borroy López
 

Mais procurados (20)

AlfrescoとSolr(中編)
AlfrescoとSolr(中編)AlfrescoとSolr(中編)
AlfrescoとSolr(中編)
 
Alfresco勉強会#33 alfresco 5.1でコンテンツ自動削除を実装してみた
Alfresco勉強会#33 alfresco 5.1でコンテンツ自動削除を実装してみたAlfresco勉強会#33 alfresco 5.1でコンテンツ自動削除を実装してみた
Alfresco勉強会#33 alfresco 5.1でコンテンツ自動削除を実装してみた
 
【第1.5回勉強会】後編 alfrescoの基本操作
【第1.5回勉強会】後編 alfrescoの基本操作【第1.5回勉強会】後編 alfrescoの基本操作
【第1.5回勉強会】後編 alfrescoの基本操作
 
Alfresco勉強会#28 alfresco 5.0の検索機能をみてみよう
Alfresco勉強会#28 alfresco 5.0の検索機能をみてみようAlfresco勉強会#28 alfresco 5.0の検索機能をみてみよう
Alfresco勉強会#28 alfresco 5.0の検索機能をみてみよう
 
Alfresco勉強会#28 メタデータテンプレート
Alfresco勉強会#28 メタデータテンプレートAlfresco勉強会#28 メタデータテンプレート
Alfresco勉強会#28 メタデータテンプレート
 
Alfresco勉強会#24 コンテンツのライフサイクル
Alfresco勉強会#24 コンテンツのライフサイクルAlfresco勉強会#24 コンテンツのライフサイクル
Alfresco勉強会#24 コンテンツのライフサイクル
 
0からわかるAlfresco
0からわかるAlfresco0からわかるAlfresco
0からわかるAlfresco
 
Moving Gigantic Files Into and Out of the Alfresco Repository
Moving Gigantic Files Into and Out of the Alfresco RepositoryMoving Gigantic Files Into and Out of the Alfresco Repository
Moving Gigantic Files Into and Out of the Alfresco Repository
 
Jose portillo dev con presentation 1138
Jose portillo   dev con presentation 1138Jose portillo   dev con presentation 1138
Jose portillo dev con presentation 1138
 
Alfresco Share - Recycle Bin Ideas
Alfresco Share - Recycle Bin IdeasAlfresco Share - Recycle Bin Ideas
Alfresco Share - Recycle Bin Ideas
 
Alfresco紹介
Alfresco紹介Alfresco紹介
Alfresco紹介
 
Collaborative Editing Tools for Alfresco
Collaborative Editing Tools for AlfrescoCollaborative Editing Tools for Alfresco
Collaborative Editing Tools for Alfresco
 
Intro to the Alfresco Public API
Intro to the Alfresco Public APIIntro to the Alfresco Public API
Intro to the Alfresco Public API
 
Nextcloud と Libreoffice online について
Nextcloud と Libreoffice online についてNextcloud と Libreoffice online について
Nextcloud と Libreoffice online について
 
Alfresco Backup and Disaster Recovery White Paper
Alfresco Backup and Disaster Recovery White PaperAlfresco Backup and Disaster Recovery White Paper
Alfresco Backup and Disaster Recovery White Paper
 
Alfresco DevCon 2019 - Alfresco Identity Services in Action
Alfresco DevCon 2019 - Alfresco Identity Services in ActionAlfresco DevCon 2019 - Alfresco Identity Services in Action
Alfresco DevCon 2019 - Alfresco Identity Services in Action
 
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
 
Replacing Your Shared Drive with Alfresco - Open Source ECM
Replacing Your Shared Drive with Alfresco - Open Source ECMReplacing Your Shared Drive with Alfresco - Open Source ECM
Replacing Your Shared Drive with Alfresco - Open Source ECM
 
Ef09 installing-alfresco-components-1-by-1
Ef09 installing-alfresco-components-1-by-1Ef09 installing-alfresco-components-1-by-1
Ef09 installing-alfresco-components-1-by-1
 
Goss入門
Goss入門Goss入門
Goss入門
 

Semelhante a Share UIカスタマイズ Widget編

Share UIカスタマイズの第一歩
Share UIカスタマイズの第一歩Share UIカスタマイズの第一歩
Share UIカスタマイズの第一歩MoritakaSoma
 
Azure DevOpsとVisual Studio App CenterをモバイルアプリのCI/CDに活用しよう
Azure DevOpsとVisual Studio App CenterをモバイルアプリのCI/CDに活用しようAzure DevOpsとVisual Studio App CenterをモバイルアプリのCI/CDに活用しよう
Azure DevOpsとVisual Studio App CenterをモバイルアプリのCI/CDに活用しようShinya Nakajima
 
ASP. NET Core 汎用ホスト概要
ASP. NET Core 汎用ホスト概要ASP. NET Core 汎用ホスト概要
ASP. NET Core 汎用ホスト概要TomomitsuKusaba
 
Flash Builder4 と FlashCatalyst を使ってみた
Flash Builder4 と FlashCatalyst を使ってみたFlash Builder4 と FlashCatalyst を使ってみた
Flash Builder4 と FlashCatalyst を使ってみたguest0ba46c3
 
7/7 WordBench kobe dreamweaver seminar
7/7 WordBench kobe dreamweaver seminar7/7 WordBench kobe dreamweaver seminar
7/7 WordBench kobe dreamweaver seminarAtushi Sugiyama
 
Elastic on Azure Integration & Building React UI Based Search App Using Azure...
Elastic on Azure Integration & Building React UI Based Search App Using Azure...Elastic on Azure Integration & Building React UI Based Search App Using Azure...
Elastic on Azure Integration & Building React UI Based Search App Using Azure...Shotaro Suzuki
 
Unity + PlayFab + Azure Functions
Unity + PlayFab + Azure FunctionsUnity + PlayFab + Azure Functions
Unity + PlayFab + Azure FunctionsYutoNishine
 
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた日本マイクロソフト株式会社
 
App Service の DevOps と Visual Studio Team Services 最新アップデート
App Service の DevOps と Visual Studio Team Services 最新アップデートApp Service の DevOps と Visual Studio Team Services 最新アップデート
App Service の DevOps と Visual Studio Team Services 最新アップデートMicrosoft Azure Japan
 
Visual studio extensibility
Visual studio extensibilityVisual studio extensibility
Visual studio extensibilityTakeshi Fujimoto
 
Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」
Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」
Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」Kazumi IWANAGA
 
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発日本マイクロソフト株式会社
 
はじめての Azure 開発
はじめての Azure 開発はじめての Azure 開発
はじめての Azure 開発Yoshitaka Seo
 
Toolkit for CreateJSで作るリッチコンテンツ
Toolkit for CreateJSで作るリッチコンテンツToolkit for CreateJSで作るリッチコンテンツ
Toolkit for CreateJSで作るリッチコンテンツYasunobu Ikeda
 
シンプルなNFTをMintするアプリケーション作ってみた - Solana Developer Hub Online 5 #SolDevHub
シンプルなNFTをMintするアプリケーション作ってみた - Solana Developer Hub Online 5 #SolDevHubシンプルなNFTをMintするアプリケーション作ってみた - Solana Developer Hub Online 5 #SolDevHub
シンプルなNFTをMintするアプリケーション作ってみた - Solana Developer Hub Online 5 #SolDevHubK Kinzal
 
ゆるふわAzure Functions
ゆるふわAzure FunctionsゆるふわAzure Functions
ゆるふわAzure FunctionsKeiji Kamebuchi
 
アプリ開発&チーム管理で 役立った拡張機能
アプリ開発&チーム管理で役立った拡張機能アプリ開発&チーム管理で役立った拡張機能
アプリ開発&チーム管理で 役立った拡張機能Masaki Suzuki
 
Fireworksの潜在能力を拡張機能で引き出そう!
Fireworksの潜在能力を拡張機能で引き出そう!Fireworksの潜在能力を拡張機能で引き出そう!
Fireworksの潜在能力を拡張機能で引き出そう!Akira Maruyama
 

Semelhante a Share UIカスタマイズ Widget編 (20)

Share UIカスタマイズの第一歩
Share UIカスタマイズの第一歩Share UIカスタマイズの第一歩
Share UIカスタマイズの第一歩
 
Azure DevOpsとVisual Studio App CenterをモバイルアプリのCI/CDに活用しよう
Azure DevOpsとVisual Studio App CenterをモバイルアプリのCI/CDに活用しようAzure DevOpsとVisual Studio App CenterをモバイルアプリのCI/CDに活用しよう
Azure DevOpsとVisual Studio App CenterをモバイルアプリのCI/CDに活用しよう
 
ASP. NET Core 汎用ホスト概要
ASP. NET Core 汎用ホスト概要ASP. NET Core 汎用ホスト概要
ASP. NET Core 汎用ホスト概要
 
Flash Builder4 と FlashCatalyst を使ってみた
Flash Builder4 と FlashCatalyst を使ってみたFlash Builder4 と FlashCatalyst を使ってみた
Flash Builder4 と FlashCatalyst を使ってみた
 
7/7 WordBench kobe dreamweaver seminar
7/7 WordBench kobe dreamweaver seminar7/7 WordBench kobe dreamweaver seminar
7/7 WordBench kobe dreamweaver seminar
 
Elastic on Azure Integration & Building React UI Based Search App Using Azure...
Elastic on Azure Integration & Building React UI Based Search App Using Azure...Elastic on Azure Integration & Building React UI Based Search App Using Azure...
Elastic on Azure Integration & Building React UI Based Search App Using Azure...
 
Unity + PlayFab + Azure Functions
Unity + PlayFab + Azure FunctionsUnity + PlayFab + Azure Functions
Unity + PlayFab + Azure Functions
 
テスト
テストテスト
テスト
 
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
 
App Service の DevOps と Visual Studio Team Services 最新アップデート
App Service の DevOps と Visual Studio Team Services 最新アップデートApp Service の DevOps と Visual Studio Team Services 最新アップデート
App Service の DevOps と Visual Studio Team Services 最新アップデート
 
Visual studio extensibility
Visual studio extensibilityVisual studio extensibility
Visual studio extensibility
 
[Japan Tech summit 2017] CLD 006
[Japan Tech summit 2017]  CLD 006[Japan Tech summit 2017]  CLD 006
[Japan Tech summit 2017] CLD 006
 
Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」
Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」
Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」
 
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
 
はじめての Azure 開発
はじめての Azure 開発はじめての Azure 開発
はじめての Azure 開発
 
Toolkit for CreateJSで作るリッチコンテンツ
Toolkit for CreateJSで作るリッチコンテンツToolkit for CreateJSで作るリッチコンテンツ
Toolkit for CreateJSで作るリッチコンテンツ
 
シンプルなNFTをMintするアプリケーション作ってみた - Solana Developer Hub Online 5 #SolDevHub
シンプルなNFTをMintするアプリケーション作ってみた - Solana Developer Hub Online 5 #SolDevHubシンプルなNFTをMintするアプリケーション作ってみた - Solana Developer Hub Online 5 #SolDevHub
シンプルなNFTをMintするアプリケーション作ってみた - Solana Developer Hub Online 5 #SolDevHub
 
ゆるふわAzure Functions
ゆるふわAzure FunctionsゆるふわAzure Functions
ゆるふわAzure Functions
 
アプリ開発&チーム管理で 役立った拡張機能
アプリ開発&チーム管理で役立った拡張機能アプリ開発&チーム管理で役立った拡張機能
アプリ開発&チーム管理で 役立った拡張機能
 
Fireworksの潜在能力を拡張機能で引き出そう!
Fireworksの潜在能力を拡張機能で引き出そう!Fireworksの潜在能力を拡張機能で引き出そう!
Fireworksの潜在能力を拡張機能で引き出そう!
 

Share UIカスタマイズ Widget編