SlideShare uma empresa Scribd logo
1 de 49
Baixar para ler offline
Takayuki Shimizukawa
2021/7/3(土)
DjangoCongress JP 2021
RLSを用いたマルチテナント実装
for Django
1
@shimizukawa (清水川)
● BeProud 取締役 / IT Architect
○ 受託開発(Webアプリ / 機械学習 / 数理最適化)
○ 自社サービス(connpass / PyQ / TRACERY)
○ Python研修(Python基礎、Django、Pandas、その他)
● 一般社団法人PyCon JP Association 会計理事
○ PyCon JP 年次イベントの見守り
○ Python Boot Camp 主催
● Sphinx (コミッター休業中)
おまえ誰よ / Who are you
2
1版: 2010/5/28
2版: 2018/2/26
3版: 2021/7/30
1版: 2013/09/12
2版: 2017/10/20
2018/02/23
2020/02/27
1版: 2012/03/27
2版: 2015/02/27
3版: 2018/06/12
執筆・翻訳した書籍
3
NEW
年
このトークで紹介すること
マルチテナントアーキテクチャにおけるデータ分割アプロー
チのひとつ「共有アプローチ」を、PostgresのRow Level
Security (RLS)を用いてDjangoで安全に実現する方法を紹介
します。
またこの方法のメリット、デメリットを紹介します。
4
アジェンダ
● マルチテナント概要と課題
● RLS: Row Level Security
● DjangoではRLSどうなるの?
● Djangoデモ
● マルチテナントの開発と運用
● まとめ
● 参考資料
5
マルチテナントの概要と課題
6
マルチテナントの概要
マルチテナントは、複数のテナント(チーム・組織)向けにサービスを提供
するシステムです。
● マルチテナント
○ 1つのシステムに複数の顧客
○ 顧客同士はデータが隔離されている
○ 顧客同士は存在を知らない
● 対義語: シングルテナント
○ 1つのシステムに1つの顧客
● それ以外:
○ 複数の組織/グループがサービス上共存している
7
Multi-Tenant Magic: Under the Covers of the Force.com data
Architecture より
8
シングルテナントアーキテクチャ
ユーザー企業ごとにデータベースを用
意すると、データベースごとに管理者
が必要となるため多くのシステム管理
者が必要となり、またインフラの利用
効率をあげることも難しい。
マルチテナントアーキテクチャ
全ユーザーが1つのインフラを共有する
ため管理者が少なくて済み、インフラ
の稼働効率も高くなる
マルチテナントの課題
マルチテナントによって、運用時の費用を下げたい。
しかし導入においては、テナント相互の情報分離、つまりデータ混濁が発生
しないと保証されていることが大事です。
「各プログラマが努力して実装する」戦略でもマルチテナントを実現できま
すが、努力だけでデータ混濁を避けるのはとても難しいです。
9
小 難易度 大
大 運用コスト 小
図は Web アプリケーションをマルチテナント型 SaaS ソリューションに変換する より引用
データ混濁
提供するデータに期待しないデータが混ざり込むこと。
ある顧客データのなかに別の顧客データが混ざりこむ等。
● 個人情報が他の会社に見えちゃった
● 売上額の集計値に他の会社の売上が混ざる
マルチテナントアーキテクチャは、データ混濁を避けるため
の戦略
10
マルチテナントアーキテクチャ
データ混濁を避ける、複数のマルチテナントアーキテクチャが考案されています
。
マルチテナント SaaS パターン - Azure SQL Database | Microsoft Docs による分
類では、マルチテナントは以下の3つのモデルに分けられる。
1. スタンドアロンアプリ
2. テナント単位データベース
3. シャードマルチテナント
図は Web アプリケーションをマルチテナント型 SaaS ソリューションに変換する より引用 11
マルチテナントアーキテクチャ
1. スタンドアロンアプリ(DB分離、アプリ分離)
○ DB・アプリもテナント毎に用意、ユーザーには極めて柔軟
○ 運用コストはもっともかかる
2. テナント単位データベース(DB分離/準分離、アプリ共有)
○ DBは分けつつ、アプリは共有
○ 運用は、アプリが分かれてない分楽
○ (清水川所感:Web記事、スライド等ではこのパターンが多い)
3. シャードマルチテナント(DB共有、アプリ共有)
○ 同じDB・アプリのリソースを利用
○ 最も効率的で「真のマルチテナント」と呼ばれる
○ (今日紹介するのはこの方式)
12
DB分割アプローチ
DB層でデータ混濁を避けるための、3つのDB分割アプローチ
1. 分離(isolated)
○ DBを分ける(≒ シングルテナントDB)
2. 準分離(semi-isolated)
○ DBは1つ、スキーマ/名前空間を分ける
3. 共有(shared)
○ DB/スキーマを分けない
13
DB準分離アプローチの特徴
● 1つのDBインスタンス内に、テナント別スキーマ
○ ただし、一部のテーブルはPublicスキーマに配置
● 仕組みが複雑で、通常運用が基本大変
● アプリからは、スキーマ指定でDBにアクセス
○ Django拡張いくつかあり
採用例は多いが、保守停止時間はテナント数に比例
● マイグレーション 30秒 x 5,000テナント = 42時間
● 例: つらくないマルチテナンシーを求めて: 全て見せま
す! SmartHR データベース移行プロジェクトの裏側
DB準分離アプローチ
14
DB共有アプローチ
DB共有アプローチの特徴
● DB、スキーマが全体で1つ
● 仕組みがシンプルで、通常運用が基本楽
● WHERE句にTenantIDを指定必須
○ Django拡張はあまりない
採用を避ける理由
● ミスると、データ混濁が発生
○ ORM実装で、WHERE句付け忘れ
○ 保守で生SQLを書いて、WHERE句付け忘れ
● 直感に反する(分かれてないので、危なそう)
15
DB分割アプローチ, Pros, Cons
5000テナントの場合の例
(django-easy-tenants · PyPIを元に追記)
16
メリット
● テーブルがスキーマ単位で分かれている(データ隔離)
○ データ混濁が発生しにくい、複数スキーマのデータが混在しない
● テナント個別の制御がしやすい
○ バックアップ、リストアが容易
○ 負荷が高いテナントがあるとき、DB分離に切り替えやすい
デメリット
● テーブルがスキーマ単位で分かれている(同じテーブルがたくさん)
○ 各スキーマにマイグレーションが必要、時間はテナント数に比例
● テナント個別の制御が必要
○ 管理ユーザーが、テナントそれぞれに必要
○ 管理コストがテナントの数だけかかる
DB準分離アプローチのメリデメ
17
by @kashew_nuts
メリット
● スキーマはひとつ、テーブル構造もひとつ
● テナント個別の制御が不要
○ 管理ユーザーは、テナントをまたいで管理しやすい
○ 大抵はマルチテナントを忘れられるため、通常の実装 & 管理コストが低い
デメリット
● テナント個別の制御がしづらい
○ バックアップ・リストア
○ 特定テナントだけをメンテナンス
○ 個別カスタマイズ
■ 保守運用が死ぬので、どのアプローチでもやめましょう!JSON型カラムで回避
● ミスった時のデータ混濁が致命的
○ RLS: Row Level Security (行レベルアクセス制御)を導入しましょう!
18
DB共有アプローチのメリデメ
by @shimizukawa
DB準分離 vs DB共有
19
django-tenantsのような拡張も公開
されてますし!
コードレベルで変更が必要な箇所は
分かってます!
準分離はテナント数が増えた場合の運用コス
トが大きい!
DB共有なら省リソース・省コストで、RLSを
使えば安全に実現できるはず!
(真のマルチテナント、やってみたいなー)
RLS: Row Level Security
RLS: Row Level Securityとは
● Row Level Security = 行レベルのアクセス制御
● データベース層でデータ混濁を回避する技術
○ SQL実行時に、アクセス権限のある行だけが返される
○ WHERE句の指定は不要
○ アクセス権限は、DB接続ユーザー または ロール で決まる
RLSを使えば、
「シャードマルチテナント(真のマルチテナント)」
を安全に実現できる
21
customers テーブル
id name tenant_id
1 customer_1 2
2 customer_2 2
3 customer_3 3
4 customer_4 1
5 customer_5 3
6 customer_6 1
7 customer_7 1
8 customer_8 2
tenant=2 で
ログイン
2
SELECT * FROM customers;
RLS利用時は権限のある行のみ取得
22
SQL実行時に、WHERE句を指定しなくても、アクセス権限の
ある行だけが返される。
tenant_id =2 の全行
つまり、アプリ各所でのSQL書き換えが不要
■User ■Role ■RLS
23
どういう仕組み?
db=# CREATE TABLE rls (id SERIAL PRIMARY KEY, tenant_id INTEGER);
db=> INSERT INTO rls (tenant_id) VALUES (1),(2),(3),(1),(2),(3);
db=> SELECT * FROM rls;
id | tenant_id
----+-----------
1 | 1
2 | 2
...
6 | 3
(6 rows)
実験用テーブル rls を作る
24
rls テーブル
id tenant_id
1 1
2 2
3 3
4 1
5 2
6 3
db=# CREATE ROLE “1”; -- tenant_id=1 の行のみアクセスできるROLE(予定)
db=# SET ROLE “1”;
db=> SELECT * FROM rls;
ERROR: permission denied for table customers
db=# RESET ROLE; -- 接続ユーザー権限に戻る
新規のロール "1" を作る
25
rls テーブル
id tenant_id
1 1
2 2
3 3
4 1
5 2
6 3
Postgres users
“db” User
“1” Role
OK
NG
■User ■Role ■RLS
https://www.postgresql.org/docs/13/sql-set-role.html
USER でも ROLE でも可能ですが、ROLE で制御する
理由は29スライド付近で説明します。
PostgreSQLのロール - Qiita
db=# GRANT ALL ON ALL TABLES IN SCHEMA public TO ”1”;
db=# GRANT ALL ON ALL SEQUENCES IN SCHEMA public TO ”1”;
db=# SET ROLE “1”;
db=# SELECT * FROM rls;
1 | 1
2 | 2
...
6 | 3
(6 rows)
db=# RESET ROLE; -- 接続ユーザー権限に戻る
"1" に全権限を付ける
26
全権限があるので、全行見えてます rls テーブル
id tenant_id
1 1
2 2
3 3
4 1
5 2
6 3
Postgres users
“db” User
“1” Role
OK
OK
■User ■Role ■RLS
https://www.postgresql.org/docs/13/sql-grant.html
db=# ALTER TABLE rls ENABLE ROW LEVEL SECURITY;
db=# SET ROLE “1”;
db=# SELECT * FROM rls;
id | tenant_id
----+-----------
(0 rows)
db=# RESET ROLE; -- 接続ユーザー権限に戻る
rls テーブルのRLSを有効化
27
SELECT権限はありますが、
RLSによって制限されました
rls テーブル
id tenant_id
1 1
2 2
3 3
4 1
5 2
6 3
Postgres users
“db” User
“1” Role
OK
OKだが
1行も見
えない
■User ■Role ■RLS
https://www.postgresql.org/docs/13/ddl-rowsecurity.html
db=# CREATE POLICY foo ON rls USING(tenant_id::text = current_user);
db=# SET ROLE “1”;
db=# SELECT * FROM rls;
id | tenant_id
----+-----------
1 | 1
4 | 1
(2 rows)
rls テーブルのRLSポリシーを設定
28
rls テーブル
id tenant_id
1 1
2 2
3 3
4 1
5 2
6 3
Postgres users
“db” User
“1” Role
SELECT権限がありますが、
RLSポリシーによって
対象行が制限されました
OK
OK
■User ■Role ■RLS
https://www.postgresql.org/docs/13/ddl-rowsecurity.html
DjangoではRLSどうなるの?
29
tenant=2 で
ログイン
2
dbで接続
セッションでのSELECT
30
全行
■User ■Role ■RLS
customers テーブル
id name tenant_id
1 customer_1 2
2 customer_2 2
3 customer_3 3
4 customer_4 1
5 customer_5 3
6 customer_6 1
7 customer_7 1
8 customer_8 2
Postgres users
“db” User
“1” User
“2” User
“3” User
SELECT * FROM customers;
customers テーブル
id name tenant_id
1 customer_1 2
2 customer_2 2
3 customer_3 3
4 customer_4 1
5 customer_5 3
6 customer_6 1
7 customer_7 1
8 customer_8 2
tenant=2 で
ログイン
2
Postgres users
“db” User
“1” User
“2” User
“3” User
セッション+RLSでのSELECT
31
CREATE POLICY foo ON customers USING(tenant_id::text = session_user);
接続Userで制御
■User ■Role ■RLS
SELECT * FROM customers;
tenant_id =2 の全行
“2” で接続
ログインユーザー毎に、
DjangoからDBへ接続する
ユーザーを切り替えるのは難しい
tenant=2 で
ログイン
2
tenant_id =2 の全行
Postgres users
“db” User
“1” Role
“2” Role
“3” Role
dbで接続
SET ROLE “2”;
SELECT * FROM customers;
RLS+Roleを介したSELECT(Role密結合)
32
CREATE POLICY foo ON customers USING(tenant_id::text = current_user);
CREATE ROLE “1”;
GRANT ALL ON TABLES ... TO “1”;
GRANT ALL ON SCHEMAS ... TO “1”;
-- 2, 3, 以下繰り返し
customers テーブル
id name tenant_id
1 customer_1 2
2 customer_2 2
3 customer_3 3
4 customer_4 1
5 customer_5 3
6 customer_6 1
7 customer_7 1
8 customer_8 2
Roleで制御
■User ■Role ■RLS
ログインユーザーのHTTPリクエスト毎に、
Roleを切り替えるMiddlewareを用意
DjangoからDBへの接続は、
常に1つのuser/passwordを使う
customers テーブル
id name tenant_id
1 customer_1 2
2 customer_2 2
3 customer_3 3
4 customer_4 1
5 customer_5 3
6 customer_6 1
7 customer_7 1
8 customer_8 2
tenant=2 で
ログイン
2
Postgres users
“db” User
“tenantuser” Role
“1” Role
“2” Role
“3” Role
dbで接続
SET ROLE “2”;
SELECT * FROM customers;
RLS+Roleを介したSELECT(Role疎結合)
33
CREATE POLICY foo ON customers USING(tenant_id::text = current_user);
CREATE ROLE “tenantuser”;
GRANT ALL ON TABLES … TO “tenantuser”;
GRANT ALL ON SCHEMAS … TO “tenantuser”;
GRANT “tenantuser” TO "1";
-- 以下繰り返し
Roleで制御
■User ■Role ■RLS
テナントのRoleは、代理ロール ”tenantuser” 経由でテー
ブルへのアクセスが許可される
tenant_id =2 の全行
Django でRLSを使うには(まとめ)
34
初期化
1. 代理ROLEを作成し、全テーブルのGRANT ALLを設定
2. テナント制御するテーブルにRLS有効化&ポリシー設定
都度
1. CREATE ROLE -- テナント追加時
2. SET ROLE -- テナント判別し、ROLEを設定
■User ■Role ■RLS
1 & 2. 初期化
35
db=# CREATE ROLE “tenantuser”;
db=# GRANT ALL ON ALL TABLES IN SCHEMA public TO ”tenantuser”;
db=# GRANT ALL ON ALL SEQUENCES IN SCHEMA public TO ”tenantuser”;
※ 初期化は、後から追加されたテーブルにも個別適用が必要
■User ■Role ■RLS
-- for <table> in <tables_to_enable_rls>:
db=# ALTER TABLE <table> ENABLE ROW LEVEL SECURITY;
db=# CREATE POLICY <name> ON <table> USING(tenant_id::text = current_user);
1. 代理ROLEを作成し、全テーブルのGRANT ALLを設定
2. テナント制御するテーブルにRLS有効化&ポリシー設定
3. CREATE ROLE -- テナント追加時
36
■User ■Role ■RLS
from django.db.models.signals import post_save
def on_create_tenant(sender, instance, created, **kwargs):
if created: # レコード追加時
tenant_id = instance.tenant_id
with connection.cursor() as cursor:
cursor.execute(f'CREATE ROLE "{tenant_id}"')
cursor.execute(f'GRANT "tenantuser" TO "{tenant_id}"')
# DBにレコードが追加された後に実行する
post_save.connect(on_create_tenant, sender=models.Tenant)
https://docs.djangoproject.com/ja/3.2/topics/signals/
4. SET ROLE -- Middlewareでテナント判別
37
■User ■Role ■RLS
https://docs.djangoproject.com/ja/3.2/topics/http/middleware/
class RlsMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
tenant_id = getattr(request.user, 'tenant_id', None)
if tenant_id: # テナントに所属しないスーパー管理者はROLE設定不要
with connection.cursor() as cursor:
cursor.execute(f'SET ROLE "{tenant_id}" ')
response = self.get_response(request)
return response
※ Middlewareを通らない処理では個別に SET ROLE が必要
4. SET ROLE -- Middleware以外でもテナント設定
38
■User ■Role ■RLS
https://django-tenants.readthedocs.io/en/latest/use.html#tenant_context
@contextmanager
def tenant_context(tenant_id: int):
with connection.cursor() as cursor:
cursor.execute(f'SET ROLE "{tenant_id}" ')
Yield
cursor.execute(f'RESET ROLE')
# バッチや非同期呼び出し等、Middlewareを経由しない場合の呼び出し
def some_command(tenant_id):
with tenant_context(tenant_id): # SET ROLE される
objs = DjangoModel.objects.all()
デモ
39
マルチテナントの開発と運用
40
各RDBMSのRLS対応状況
2021/05 調査時点
● PostgreSQL 9.5 (2016) 以降
○ https://www.postgresql.org/docs/9.5/ddl-rowsecurity.html
設定方法などのサンプルコード付き
● SQL Server 2016 (13.x) 以降
○ https://docs.microsoft.com/ja-jp/sql/relational-databases/security/row-level-security?view=sql-server-ver15
● Oracle 10g Release 2 (10.2) (2005) 以降
○ https://docs.oracle.com/cd/B19306_01/network.102/b14267/intro.htm
● MySQL
○ 8.0.25 (2021-05-11) では非対応
● MariaDB
○ 10.5.10 (2021-05-07) では非対応
● SQLite
○ 3.36.0 (2021-06-18) 非対応
41
シングルテナント < マルチテナント
● 分離 = シングルテナントの場合
○ データ混濁について考える必要はない
● 準分離(スキーマ分離)アプローチにした場合
○ 共有するテーブルと分離するテーブルを管理し、専用のマイグレーション手順を用意
● 共有アプローチにした場合
○ 複数テナントを前提にしたテーブル設計が必要、RLSの導入が必要
開発コスト
42
DB分離アプローチ
DB共有アプローチ
テナント数の増加に合わせて変化
● 運用では、テナント数と管理対象が比例する
● DBやアプリのインスタンス毎に担当者が必要
運用コスト
43
少 テナント数 多
大 DB数 小
大 運用・改修コスト 小
大 リソース 小
● パフォーマンス測定を行い、N+1等は解消しておく
○ RLSにより負荷は上がるため、顕著になってしまう
● 作り方によってはINDEXが効かない等の問題がある
○ ROLE名によるPOLICY適用時に、フルスキャンが発生等
● コネクションをテナント別に用意しない(できない)
○ そもそもDBの接続数上限を100や1000にするのは厳しい(デフォルトは10)
○ Postgresは、コネクション生成コストが高いため、都度生成は負荷が高い
○ データ混濁を避けたいとしても、コネクションは共有するしかない
○ (なお、Djangoではテナント別コネクション利用がそもそも難しい)
● Citus / Hyperscale の利用を検討する
○ 特定カラムの値(tenant_id等)をキーに、ノード分散によって負荷分散できる
RLS利用時の負荷対策
44
● ROLE設定を忘れないようにする
○ 今回のデモではMiddlewareで自動設定した
○ 管理コマンド等Middlewareを通らないケースがあるので、そこは実装で努力
○ ROLE設定を忘れると、「全テナントのデータが漏洩する」
■ SET ROLEを忘れたら全部見れない方が安全 -> 今後の課題
● バックアップをテナント単位でやりたい
○ DB全体のバックアップで。リストア方法は要検討
● PITR(Point In Time Recovery)をテナント単位でやりたい
○ DB内の特定レコード群だけを巻き戻す、のは難しい。
○ DB準分離ならスキーマ単位で独立のため、多少楽(publicスキーマのデータとの不整合に注意)
● 高負荷テナントのリソースを隔離をしたい
○ Citus / Hyperscale の利用を検討する
■ 特定カラムの値(tenant_id等)をキーに、ノード分散によって負荷分散できる
RLS/DB共有のデメリット対策
45
まとめ
RLSのメリット
● コンピューターリソースを無駄なく最大限活用できる
● マイグーレーション時間が線形増加しない
● テナント個別の特別対応をしない、という潔さ
RLSのデメリット
● クエリ負荷の上昇は避けられない
● テナント個別の特別対応が難しい
○ バックアップ、リストア、負荷の高いテナントの分離
46
参考資料
マルチテナント
● マルチテナント SaaS パターン - Azure SQL Database | Microsoft Docs
● Web アプリケーションをマルチテナント型 SaaS ソリューションに変換する IBM Developer Works (WebArchive)
● Multi-Tenant Data Architecture Microsoft (WebArchive)
● つらくないマルチテナンシーを求めて: 全て見せます! SmartHR データベース移行プロジェクトの裏側 / builderscon 2018 - Speaker
Deck
RLS
● Django + RLS でマルチテナント - 清水川のScrapbox /デモコード https://github.com/shimizukawa/django-pg-rls
● Using Postgres Row-Level Security in Python and Django
● 行レベルのセキュリティ - SQL Server
● PostgreSQL の行レベルのセキュリティを備えたマルチテナントデータの分離 | Amazon Web Services ブログ
● Row Level Securityはマルチテナントの銀の弾丸になりうるのか / Row Level Security is silver bullet for multitenancy? - Speaker Deck
● PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
Citus (Hyperscale)
● Azure Database for PostgreSQL Hyperscale(Citus)しらべてみた - Qiita
● チュートリアル:マルチテナント データベースを設計する - Hyperscale (Citus) - Azure Database for PostgreSQL | Microsoft Docs
47
Special Thanks! -- Review頂いたみなさん
BeProud slack
● kashew, delhi09, susumuis, tell-k, mtb_beta, altnight
django-ja Discord
● hirokiky, tokibito
48
and…
Thanks for all attendees!!
by @shimizukawa
49

Mais conteúdo relacionado

Mais procurados

マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことAmazon Web Services Japan
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話Koichiro Matsuoka
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)Takuto Wada
 
GraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ることGraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ることShingo Fukui
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!kwatch
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティスAmazon Web Services Japan
 
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきことこれからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと土岐 孝平
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -onozaty
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドAkihiro Suda
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーyoku0825
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門泰 増田
 
分散トレーシングAWS:X-Rayとの上手い付き合い方
分散トレーシングAWS:X-Rayとの上手い付き合い方分散トレーシングAWS:X-Rayとの上手い付き合い方
分散トレーシングAWS:X-Rayとの上手い付き合い方Recruit Lifestyle Co., Ltd.
 
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけRDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけRecruit Technologies
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?Yoshitaka Kawashima
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意Yoshitaka Kawashima
 

Mais procurados (20)

マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 
GraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ることGraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ること
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
 
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきことこれからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
 
Infrastructure as Code (IaC) 談義 2022
Infrastructure as Code (IaC) 談義 2022Infrastructure as Code (IaC) 談義 2022
Infrastructure as Code (IaC) 談義 2022
 
分散トレーシングAWS:X-Rayとの上手い付き合い方
分散トレーシングAWS:X-Rayとの上手い付き合い方分散トレーシングAWS:X-Rayとの上手い付き合い方
分散トレーシングAWS:X-Rayとの上手い付き合い方
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
 
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけRDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
 
Vacuum徹底解説
Vacuum徹底解説Vacuum徹底解説
Vacuum徹底解説
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 

Semelhante a RLSを用いたマルチテナント実装 for Django

進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜Michitoshi Yoshida
 
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -歩 柴田
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)NTT DATA Technology & Innovation
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLakirahiguchi
 
130522 rt講習会(説明用)
130522 rt講習会(説明用)130522 rt講習会(説明用)
130522 rt講習会(説明用)openrtm
 
20190119 aws-study-pg-extension
20190119 aws-study-pg-extension20190119 aws-study-pg-extension
20190119 aws-study-pg-extensionToshi Harada
 
LLVM overview 20110122
LLVM overview 20110122LLVM overview 20110122
LLVM overview 20110122nothingcosmos
 
QoS for ROS 2 Dashing/Eloquent
QoS for ROS 2 Dashing/EloquentQoS for ROS 2 Dashing/Eloquent
QoS for ROS 2 Dashing/EloquentHideki Takase
 
PostgreSQL Conference Japan 2021 B2 Citus 10
PostgreSQL Conference Japan 2021 B2 Citus 10PostgreSQL Conference Japan 2021 B2 Citus 10
PostgreSQL Conference Japan 2021 B2 Citus 10Noriyoshi Shinoda
 
Rails3.2ってどう変わるの?
Rails3.2ってどう変わるの?Rails3.2ってどう変わるの?
Rails3.2ってどう変わるの?Takafumi ONAKA
 
20181110 fok2018-pg-extension
20181110 fok2018-pg-extension20181110 fok2018-pg-extension
20181110 fok2018-pg-extensionToshi Harada
 
Handlersocket 20110517
Handlersocket 20110517Handlersocket 20110517
Handlersocket 20110517akirahiguchi
 
ROS Tutorial 02 - CIT
ROS Tutorial 02 - CITROS Tutorial 02 - CIT
ROS Tutorial 02 - CITDaiki Maekawa
 
これからLDAPを始めるなら 「389-ds」を使ってみよう
これからLDAPを始めるなら 「389-ds」を使ってみようこれからLDAPを始めるなら 「389-ds」を使ってみよう
これからLDAPを始めるなら 「389-ds」を使ってみようNobuyuki Sasaki
 
20130329 rtm3
20130329 rtm320130329 rtm3
20130329 rtm3openrtm
 
NGS解析を始めた時にぶつかりがちな小さい壁あれこれ
NGS解析を始めた時にぶつかりがちな小さい壁あれこれNGS解析を始めた時にぶつかりがちな小さい壁あれこれ
NGS解析を始めた時にぶつかりがちな小さい壁あれこれDNA Data Bank of Japan center
 
A Tour of PostgreSQL
A Tour of PostgreSQLA Tour of PostgreSQL
A Tour of PostgreSQLEDB
 
db tech showcase 2019 D10 Oracle Database New Features
db tech showcase 2019 D10 Oracle Database New Featuresdb tech showcase 2019 D10 Oracle Database New Features
db tech showcase 2019 D10 Oracle Database New FeaturesNoriyoshi Shinoda
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, CodereadingHiro Yoshioka
 
PostgreSQL13 新機能紹介
PostgreSQL13 新機能紹介PostgreSQL13 新機能紹介
PostgreSQL13 新機能紹介Satoshi Hirata
 

Semelhante a RLSを用いたマルチテナント実装 for Django (20)

進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
 
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
 
130522 rt講習会(説明用)
130522 rt講習会(説明用)130522 rt講習会(説明用)
130522 rt講習会(説明用)
 
20190119 aws-study-pg-extension
20190119 aws-study-pg-extension20190119 aws-study-pg-extension
20190119 aws-study-pg-extension
 
LLVM overview 20110122
LLVM overview 20110122LLVM overview 20110122
LLVM overview 20110122
 
QoS for ROS 2 Dashing/Eloquent
QoS for ROS 2 Dashing/EloquentQoS for ROS 2 Dashing/Eloquent
QoS for ROS 2 Dashing/Eloquent
 
PostgreSQL Conference Japan 2021 B2 Citus 10
PostgreSQL Conference Japan 2021 B2 Citus 10PostgreSQL Conference Japan 2021 B2 Citus 10
PostgreSQL Conference Japan 2021 B2 Citus 10
 
Rails3.2ってどう変わるの?
Rails3.2ってどう変わるの?Rails3.2ってどう変わるの?
Rails3.2ってどう変わるの?
 
20181110 fok2018-pg-extension
20181110 fok2018-pg-extension20181110 fok2018-pg-extension
20181110 fok2018-pg-extension
 
Handlersocket 20110517
Handlersocket 20110517Handlersocket 20110517
Handlersocket 20110517
 
ROS Tutorial 02 - CIT
ROS Tutorial 02 - CITROS Tutorial 02 - CIT
ROS Tutorial 02 - CIT
 
これからLDAPを始めるなら 「389-ds」を使ってみよう
これからLDAPを始めるなら 「389-ds」を使ってみようこれからLDAPを始めるなら 「389-ds」を使ってみよう
これからLDAPを始めるなら 「389-ds」を使ってみよう
 
20130329 rtm3
20130329 rtm320130329 rtm3
20130329 rtm3
 
NGS解析を始めた時にぶつかりがちな小さい壁あれこれ
NGS解析を始めた時にぶつかりがちな小さい壁あれこれNGS解析を始めた時にぶつかりがちな小さい壁あれこれ
NGS解析を始めた時にぶつかりがちな小さい壁あれこれ
 
A Tour of PostgreSQL
A Tour of PostgreSQLA Tour of PostgreSQL
A Tour of PostgreSQL
 
db tech showcase 2019 D10 Oracle Database New Features
db tech showcase 2019 D10 Oracle Database New Featuresdb tech showcase 2019 D10 Oracle Database New Features
db tech showcase 2019 D10 Oracle Database New Features
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, Codereading
 
PostgreSQL13 新機能紹介
PostgreSQL13 新機能紹介PostgreSQL13 新機能紹介
PostgreSQL13 新機能紹介
 

Mais de Takayuki Shimizukawa

Navigating Python: Milestones from Essential Reads
Navigating Python: Milestones from Essential ReadsNavigating Python: Milestones from Essential Reads
Navigating Python: Milestones from Essential ReadsTakayuki Shimizukawa
 
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようDjango ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようTakayuki Shimizukawa
 
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022Takayuki Shimizukawa
 
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022Takayuki Shimizukawa
 
Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略Takayuki Shimizukawa
 
『自走プログラマー』 が我々に必要だった理由
『自走プログラマー』 が我々に必要だった理由『自走プログラマー』 が我々に必要だった理由
『自走プログラマー』 が我々に必要だった理由Takayuki Shimizukawa
 
エキスパートPythonプログラミング改訂3版の読みどころ
エキスパートPythonプログラミング改訂3版の読みどころエキスパートPythonプログラミング改訂3版の読みどころ
エキスパートPythonプログラミング改訂3版の読みどころTakayuki Shimizukawa
 
独学プログラマーのその後
独学プログラマーのその後独学プログラマーのその後
独学プログラマーのその後Takayuki Shimizukawa
 
【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWayTakayuki Shimizukawa
 
Sphinx customization for OGP support at SphinxCon JP 2018
Sphinx customization for OGP support at SphinxCon JP 2018Sphinx customization for OGP support at SphinxCon JP 2018
Sphinx customization for OGP support at SphinxCon JP 2018Takayuki Shimizukawa
 
Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?Takayuki Shimizukawa
 
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016Takayuki Shimizukawa
 
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016Easy contributable internationalization process with Sphinx @ PyCon APAC 2016
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016Takayuki Shimizukawa
 
素振りのススメ at Python入門者の集い
素振りのススメ at Python入門者の集い素振りのススメ at Python入門者の集い
素振りのススメ at Python入門者の集いTakayuki Shimizukawa
 
世界のSphinx事情 @ SphinxCon JP 2015
世界のSphinx事情 @ SphinxCon JP 2015世界のSphinx事情 @ SphinxCon JP 2015
世界のSphinx事情 @ SphinxCon JP 2015Takayuki Shimizukawa
 
JUS関西 Sphinxワークショップ@関西 Sphinx紹介
JUS関西 Sphinxワークショップ@関西 Sphinx紹介JUS関西 Sphinxワークショップ@関西 Sphinx紹介
JUS関西 Sphinxワークショップ@関西 Sphinx紹介Takayuki Shimizukawa
 
Sphinxで作る貢献しやすい ドキュメント翻訳の仕組み
Sphinxで作る貢献しやすいドキュメント翻訳の仕組みSphinxで作る貢献しやすいドキュメント翻訳の仕組み
Sphinxで作る貢献しやすい ドキュメント翻訳の仕組みTakayuki Shimizukawa
 
Sphinx autodoc - automated api documentation - PyCon.KR 2015
Sphinx autodoc - automated api documentation - PyCon.KR 2015Sphinx autodoc - automated api documentation - PyCon.KR 2015
Sphinx autodoc - automated api documentation - PyCon.KR 2015Takayuki Shimizukawa
 
Easy contributable internationalization process with Sphinx @ pyconmy2015
Easy contributable internationalization process with Sphinx @ pyconmy2015Easy contributable internationalization process with Sphinx @ pyconmy2015
Easy contributable internationalization process with Sphinx @ pyconmy2015Takayuki Shimizukawa
 

Mais de Takayuki Shimizukawa (20)

Navigating Python: Milestones from Essential Reads
Navigating Python: Milestones from Essential ReadsNavigating Python: Milestones from Essential Reads
Navigating Python: Milestones from Essential Reads
 
IKEv2-VPN PyHackCon2023
IKEv2-VPN PyHackCon2023IKEv2-VPN PyHackCon2023
IKEv2-VPN PyHackCon2023
 
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようDjango ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
 
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
 
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022
 
Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略
 
『自走プログラマー』 が我々に必要だった理由
『自走プログラマー』 が我々に必要だった理由『自走プログラマー』 が我々に必要だった理由
『自走プログラマー』 が我々に必要だった理由
 
エキスパートPythonプログラミング改訂3版の読みどころ
エキスパートPythonプログラミング改訂3版の読みどころエキスパートPythonプログラミング改訂3版の読みどころ
エキスパートPythonプログラミング改訂3版の読みどころ
 
独学プログラマーのその後
独学プログラマーのその後独学プログラマーのその後
独学プログラマーのその後
 
【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay
 
Sphinx customization for OGP support at SphinxCon JP 2018
Sphinx customization for OGP support at SphinxCon JP 2018Sphinx customization for OGP support at SphinxCon JP 2018
Sphinx customization for OGP support at SphinxCon JP 2018
 
Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?
 
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
 
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016Easy contributable internationalization process with Sphinx @ PyCon APAC 2016
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016
 
素振りのススメ at Python入門者の集い
素振りのススメ at Python入門者の集い素振りのススメ at Python入門者の集い
素振りのススメ at Python入門者の集い
 
世界のSphinx事情 @ SphinxCon JP 2015
世界のSphinx事情 @ SphinxCon JP 2015世界のSphinx事情 @ SphinxCon JP 2015
世界のSphinx事情 @ SphinxCon JP 2015
 
JUS関西 Sphinxワークショップ@関西 Sphinx紹介
JUS関西 Sphinxワークショップ@関西 Sphinx紹介JUS関西 Sphinxワークショップ@関西 Sphinx紹介
JUS関西 Sphinxワークショップ@関西 Sphinx紹介
 
Sphinxで作る貢献しやすい ドキュメント翻訳の仕組み
Sphinxで作る貢献しやすいドキュメント翻訳の仕組みSphinxで作る貢献しやすいドキュメント翻訳の仕組み
Sphinxで作る貢献しやすい ドキュメント翻訳の仕組み
 
Sphinx autodoc - automated api documentation - PyCon.KR 2015
Sphinx autodoc - automated api documentation - PyCon.KR 2015Sphinx autodoc - automated api documentation - PyCon.KR 2015
Sphinx autodoc - automated api documentation - PyCon.KR 2015
 
Easy contributable internationalization process with Sphinx @ pyconmy2015
Easy contributable internationalization process with Sphinx @ pyconmy2015Easy contributable internationalization process with Sphinx @ pyconmy2015
Easy contributable internationalization process with Sphinx @ pyconmy2015
 

Último

PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 

Último (7)

PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 

RLSを用いたマルチテナント実装 for Django