Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Takuya Ueda
2,773 views
Namespace API を用いたマルチテナント型 Web アプリの実践
やっぱり App Engine ja Night #1 で登壇した時の資料です。
Technology
◦
Read more
4
Save
Share
Embed
Embed presentation
Download
Downloaded 10 times
1
/ 25
2
/ 25
3
/ 25
4
/ 25
5
/ 25
6
/ 25
7
/ 25
8
/ 25
9
/ 25
10
/ 25
11
/ 25
12
/ 25
13
/ 25
14
/ 25
15
/ 25
16
/ 25
17
/ 25
18
/ 25
19
/ 25
20
/ 25
21
/ 25
22
/ 25
23
/ 25
24
/ 25
25
/ 25
More Related Content
PDF
粗探しをしてGoのコントリビューターになる方法
by
Takuya Ueda
PDF
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
by
Takuya Ueda
PDF
Cloud functionsの紹介
by
Takuya Ueda
PDF
Cloud Functionsの紹介
by
Takuya Ueda
PDF
goパッケージで型情報を用いたソースコード検索を実現する
by
Takuya Ueda
PDF
Goだけでモバイルアプリを作ろう
by
Takuya Ueda
PDF
GoによるiOSアプリの開発
by
Takuya Ueda
PDF
Google Assistant関係のセッションまとめ
by
Takuya Ueda
粗探しをしてGoのコントリビューターになる方法
by
Takuya Ueda
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
by
Takuya Ueda
Cloud functionsの紹介
by
Takuya Ueda
Cloud Functionsの紹介
by
Takuya Ueda
goパッケージで型情報を用いたソースコード検索を実現する
by
Takuya Ueda
Goだけでモバイルアプリを作ろう
by
Takuya Ueda
GoによるiOSアプリの開発
by
Takuya Ueda
Google Assistant関係のセッションまとめ
by
Takuya Ueda
What's hot
PDF
オススメの標準・準標準パッケージ20選
by
Takuya Ueda
PDF
Goだけでモバイルアプリを作る
by
Takuya Ueda
PDF
Go Friday 傑作選
by
Takuya Ueda
PDF
過去に自作したGoプロダクトの紹介 - Goオールスターズ
by
Shogo Ichinose
PDF
GAE/GoでLINE Messaging API を使う
by
Takuya Ueda
PDF
Goにおけるバージョン管理の必要性 − vgoについて −
by
Takuya Ueda
PDF
Pythonを始めよう
by
shouta yoshikai
PDF
Go goes Mobile: Quick Exploration on Go 1.5 and Gomobile
by
Takahiro Yoshimura
PPTX
ネットワークの切り替えを感知する方法
by
Keisuke Yamaguchi
PDF
Android6.0の機能まとめ 実機でサンプルを動かしてみた
by
Satoshi Noda
PDF
僕がAndroid開発する時にちょっと便利だと思うtips
by
Masataka Kono
PDF
gopher-lua
by
Takuya Ueda
PDF
2017823 pythonを始めよう
by
shouta yoshikai
PPT
Git GUI
by
Meta Meta
PDF
GAE/Goとsyncパッケージ
by
Takuya Ueda
PDF
モバイルVR「Daydream」について
by
Satoshi Noda
PDF
Go MobileでAndroidアプリ開発
by
Takuya Ueda
PDF
WebAssembly with Go
by
Takuya Ueda
PDF
今時のオンプレなgithubクローン環境構築
by
You&I
PDF
5 年続く 「はてなブックマーク」 アプリを継続開発する技術
by
Yu Nobuoka
オススメの標準・準標準パッケージ20選
by
Takuya Ueda
Goだけでモバイルアプリを作る
by
Takuya Ueda
Go Friday 傑作選
by
Takuya Ueda
過去に自作したGoプロダクトの紹介 - Goオールスターズ
by
Shogo Ichinose
GAE/GoでLINE Messaging API を使う
by
Takuya Ueda
Goにおけるバージョン管理の必要性 − vgoについて −
by
Takuya Ueda
Pythonを始めよう
by
shouta yoshikai
Go goes Mobile: Quick Exploration on Go 1.5 and Gomobile
by
Takahiro Yoshimura
ネットワークの切り替えを感知する方法
by
Keisuke Yamaguchi
Android6.0の機能まとめ 実機でサンプルを動かしてみた
by
Satoshi Noda
僕がAndroid開発する時にちょっと便利だと思うtips
by
Masataka Kono
gopher-lua
by
Takuya Ueda
2017823 pythonを始めよう
by
shouta yoshikai
Git GUI
by
Meta Meta
GAE/Goとsyncパッケージ
by
Takuya Ueda
モバイルVR「Daydream」について
by
Satoshi Noda
Go MobileでAndroidアプリ開発
by
Takuya Ueda
WebAssembly with Go
by
Takuya Ueda
今時のオンプレなgithubクローン環境構築
by
You&I
5 年続く 「はてなブックマーク」 アプリを継続開発する技術
by
Yu Nobuoka
Viewers also liked
PDF
HTTP2 RFC 発行記念祝賀会
by
Jxck Jxck
PDF
Javaトラブルに備えよう #jjug_ccc #ccc_h2
by
Norito Agetsuma
PPTX
うしちゃん WebRTC Chat on SkyWayの開発コードw
by
Kensaku Komatsu
PDF
Goにおける静的解析と製品開発への応用
by
Takuya Ueda
PDF
Go静的解析ハンズオン
by
Takuya Ueda
PDF
Static Analysis in Go
by
Takuya Ueda
PDF
Go1.8 for Google App Engine
by
Takuya Ueda
PDF
Mobile Apps by Pure Go with Reverse Binding
by
Takuya Ueda
PDF
条件式評価器の実装による管理ツールの抽象化
by
Takuya Ueda
PDF
メルカリ・ソウゾウでは どうGoを活用しているのか?
by
Takuya Ueda
PDF
HTTP2 時代の Web - web over http2
by
Jxck Jxck
PPTX
WebRTC Browsers n Stacks Implementation differences
by
Alexandre Gouaillard
PDF
Go入門
by
Takuya Ueda
PDF
エキスパートGo
by
Takuya Ueda
PDF
メルカリ カウルのマスタデータの更新
by
Takuya Ueda
PDF
Gopher Fest 2017参加レポート
by
Takuya Ueda
HTTP2 RFC 発行記念祝賀会
by
Jxck Jxck
Javaトラブルに備えよう #jjug_ccc #ccc_h2
by
Norito Agetsuma
うしちゃん WebRTC Chat on SkyWayの開発コードw
by
Kensaku Komatsu
Goにおける静的解析と製品開発への応用
by
Takuya Ueda
Go静的解析ハンズオン
by
Takuya Ueda
Static Analysis in Go
by
Takuya Ueda
Go1.8 for Google App Engine
by
Takuya Ueda
Mobile Apps by Pure Go with Reverse Binding
by
Takuya Ueda
条件式評価器の実装による管理ツールの抽象化
by
Takuya Ueda
メルカリ・ソウゾウでは どうGoを活用しているのか?
by
Takuya Ueda
HTTP2 時代の Web - web over http2
by
Jxck Jxck
WebRTC Browsers n Stacks Implementation differences
by
Alexandre Gouaillard
Go入門
by
Takuya Ueda
エキスパートGo
by
Takuya Ueda
メルカリ カウルのマスタデータの更新
by
Takuya Ueda
Gopher Fest 2017参加レポート
by
Takuya Ueda
More from Takuya Ueda
PDF
静的解析を使った開発ツールの開発
by
Takuya Ueda
PDF
そうだ、Goを始めよう
by
Takuya Ueda
PDF
マスター・オブ・goパッケージ
by
Takuya Ueda
PDF
Goでかんたんソースコードの静的解析
by
Takuya Ueda
PDF
Goでwebアプリを開発してみよう
by
Takuya Ueda
PDF
GAE/GoでWebアプリ開発入門
by
Takuya Ueda
PDF
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
by
Takuya Ueda
静的解析を使った開発ツールの開発
by
Takuya Ueda
そうだ、Goを始めよう
by
Takuya Ueda
マスター・オブ・goパッケージ
by
Takuya Ueda
Goでかんたんソースコードの静的解析
by
Takuya Ueda
Goでwebアプリを開発してみよう
by
Takuya Ueda
GAE/GoでWebアプリ開発入門
by
Takuya Ueda
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
by
Takuya Ueda
Recently uploaded
PDF
Reiwa 7 IT Strategist Afternoon I Question-1 3C Analysis
by
akipii ogaoga
PDF
Reiwa 7 IT Strategist Afternoon I Question-1 Ansoff's Growth Vector
by
akipii ogaoga
PDF
第21回 Gen AI 勉強会「NotebookLMで60ページ超の スライドを作成してみた」
by
嶋 是一 (Yoshikazu SHIMA)
PDF
100年後の知財業界-生成AIスライドアドリブプレゼン イーパテントYouTube配信
by
e-Patent Co., Ltd.
PDF
2025→2026宙畑ゆく年くる年レポート_100社を超える企業アンケート総まとめ!!_企業まとめ_1229_3版
by
sorabatake
PPTX
ddevについて .
by
iPride Co., Ltd.
PDF
さくらインターネットの今 法林リージョン:さくらのAIとか GPUとかイベントとか 〜2026年もバク進します!〜
by
法林浩之
PDF
Starlink Direct-to-Cell (D2C) 技術の概要と将来の展望
by
CRI Japan, Inc.
PDF
Drupal Recipes 解説 .
by
iPride Co., Ltd.
Reiwa 7 IT Strategist Afternoon I Question-1 3C Analysis
by
akipii ogaoga
Reiwa 7 IT Strategist Afternoon I Question-1 Ansoff's Growth Vector
by
akipii ogaoga
第21回 Gen AI 勉強会「NotebookLMで60ページ超の スライドを作成してみた」
by
嶋 是一 (Yoshikazu SHIMA)
100年後の知財業界-生成AIスライドアドリブプレゼン イーパテントYouTube配信
by
e-Patent Co., Ltd.
2025→2026宙畑ゆく年くる年レポート_100社を超える企業アンケート総まとめ!!_企業まとめ_1229_3版
by
sorabatake
ddevについて .
by
iPride Co., Ltd.
さくらインターネットの今 法林リージョン:さくらのAIとか GPUとかイベントとか 〜2026年もバク進します!〜
by
法林浩之
Starlink Direct-to-Cell (D2C) 技術の概要と将来の展望
by
CRI Japan, Inc.
Drupal Recipes 解説 .
by
iPride Co., Ltd.
Namespace API を用いたマルチテナント型 Web アプリの実践
1.
Namespace APIを用いた マルチテナント型Webアプリの実践 2017/03/02(木) @やっぱり App
Engine ja Night #1 The Go gopher was designed by Renee French. The gopher stickers was made by Takuya Ueda. Licensed under the Creative Commons 3.0 Attributions license.
2.
自己紹介 メルカリ/ソウゾウ 上田拓也 twitter: @tenntenn ■ コミュニティ活動 Google
Cloud Platform User Group (GCPUG) Tokyo Goビギナーズ golang.tokyo Go Conference ■ 業務 GAE/Goでメルカリアッテを作ってます GoやGCPコミュニティを盛り上げる仕事 Gopherを描く仕事(LINEスタンプ) 2
3.
アッテ開発の技術 : Golang
と Google App Engine
4.
アジェンダ ■ 複数アプリにバナーを配信するツールの開発 ● バナー配信ツールと必要とされた背景 ●
柔軟さと運用のしやすさの実現 ● 複数アプリから利用する ● デモ ■ Namespace APIとマルチテナント型アプリ ● Namespace APIとは ● マルチテナント型とは ● マルチテナント型アプリの実現 ■ まとめ 4
5.
複数のアプリに バナーを配信するツールを作る 5
6.
バナー配信ツール ■ 何をするツールか? ● モバイルアプリにバナーを配信する ●
バナーの管理や配信条件を設定する 6
7.
バナー配信ツールの要件 ■ 複数のアプリから利用する ● メルカリアッテとメルカリから利用 ●
サービス間で干渉させたくない ● サービスごとの特有の処理は入れない ■ わかりやすいUI ● 非エンジニアが使う ● サービスごとに別な人が入力する ■ デバッグがしやすい ● 個人環境や開発環境が作りやすい 7
8.
柔軟性と運用のしやすさの実現 ■ コア部分は柔軟に ● 配信条件は式で表現 ●
関数や変数も使えるようにする ■ UIはわかりやすく ● JSON Editorを用いて自動生成 ● 複雑な式は入力させず組み合わせる 8 String(os) == "ios" この話は別の機会に!
9.
複数のアプリから利用する ■ Namespace APIを使う ●
Namespaceを分けることで干渉させない ● サービスごとの設定はデータとして保存 ○ ソースコードの中には一切書かない ● 管理コンソールのエンドポイントも分ける 9
10.
デモ 10
11.
Namespace APIと マルチテナント型のWebアプリ 11
12.
Namespace APIとは? 12 ■ Namespace
API ● Namespaceを分けることのできるAPI ● 利用可能なAPI ○ Datastore, Memcache, Task Queue, Search ■ Namespaceを分ける理由 ● Namespace間でデータの干渉を防ぐ ● マルチテナント型のWebアプリを作れる
13.
マルチテナント型のWebアプリとは? ■ マルチテナント型 ● 1つのシステムを複数のユーザ(企業など) に提供する ■
GAEでの実現方法 13 Application Datastore NS1 NS2 NS3 Memcache NS1 NS2 NS3
14.
Namespaceを設定する ■ Contextに埋め込む ■ Datastoreにアクセスする 14 newCtx,
err := appengine.Namespace(ctx, ns) ... err = datastore.Get(newCtx, key, &val) Contextを差し替えるだけ!
15.
Namespaceを取得する ■ 取得する関数はないのでラップする 15 type keyType
string const key keyType = "namespace" func WithContext(ctx context.Context, ns string) (context.Context, error) { c, err := appengine.Namespace(ctx, ns) if err != nil {...} return context.WithValue(c, key, ns), nil } func FromContext(ctx context.Context) string { ns, _ := ctx.Value(key).(string) return ns }
16.
ホスト名でNamespaceを切り替える ■ Context付きのハンドラを作る 16 type AEHandler
interface { ServeHTTP(c context.Context, w http.ResponseWriter, r *http.Request) error } type AEHandlerFunc func(...) error func (f AEHandlerFunc) ServeHTTP(...) error { return f(c, w, r) } 省略
17.
ホスト名でNamespaceを切り替える ■ ミドルウェアでNamespaceを切り替える 17 func WithNS(h
AEHandler) AEHandler { return AEHandlerFunc(func(...){ ns, err := FindNS(c, r.Host) if err != nil {...} c, err = WithNamespace(c, ns) if err != nil {...} }) } ホスト名で探す DatastoreにNamespaceを保存
18.
URLとルーティングルール ■ GAEのURLは以下のようにアクセスできる ● Inst:
インスタンス(数値) ● Ver: バージョン ● Serv: サービス ● AppID: アプリケーションID ■ ゆるいルーティング ● インスタンス、バージョン、サービスが存在しないとデ フォルトのものにルーティングされる ● インスタンスorバージョンの代わりにNamespaceを書く 18 <Inst>-dot-<Ver>-dot-<Serv>-dot-<AppID>.appspot.com <NS>-dot-<Ver>-dot-<Serv>-dot-<AppID>.appspot.com
19.
管理用APIの分離 ■ Namespaceを保存するNamespaceは? ● 管理用のNamespaceは統一しておく ●
アプリ全体の共通設定などに使う ○ Namespaceの管理など ■ 管理用のAPIは管理者権限を要求する ● Namespaceの保存などは管理者だけ ● app.yamlで設定しておく 19 - url: /admin/api/ns/.* script: _go_app login: admin secure: always
20.
Cloud Console上での扱い ■ Cloud
Datastore ■ Memcahe 20
21.
マルチテナント型にした利点 ■ 他のサービス(アプリ)に影響与えない ● 見かけ上別のものになってる ●
データが競合しない ■ 開発環境をすぐ作れる ● Namespaceを登録すれば作れる ● 同じサービス(アプリ)内でも別の用途に環境 を提供できる ○ バナーだけじゃなく、他のコンテンツも 21
22.
マルチテナント型にしときの課題 ■ Namespace間の設定の移行 ● 開発環境を用意する際にほしい ●
移行するAPIを用意する必要がある ■ バグが出ると全滅する ● すべて同じソースコードを使ってる ● バージョンをうまく使って移行する ■ ローカルでのデバッグが面倒 ● ローカルのコンソールのNamespaceの対応が貧弱 ● MemcacheはNamespaceを指定できない 22
23.
まとめ ■ 柔軟さと運用のしやすさのバランスは大事 ● 柔軟でも使いづらかったら意味がない ●
工夫次第で両立することは可能 ■ GAEでマルチテナント型のアプリは簡単 ● Namespace APIが使える ● バージョン/サービスとうまく組み合わせる ■ GAEで社内ツールを作ると便利 ● アクセス制御も簡単 ● G Suite のアカウントも使える 23
24.
golang.tokyo ☓ GCPUG 24 4月開催予定@メルカリ 発表者募集中!
25.
Thank you! twitter: @tenntenn Qiita:
tenntenn connpass: tenntenn 25
Download