Slide 1

Slide 1 text

1 ユーザーにサブドメインの ECサイトを提供したい 〜カラーミーショップの場合〜 Atsushi Katsuura GMO PEPABO,inc. 2025.05.17 未来⼤×企業エンジニア ⼤LT2025

Slide 2

Slide 2 text

2 ⾃⼰紹介 EC事業部 プロダクトチーム 勝浦 敦 Atsushi Katsuura 函館⼯業⾼等専⾨学校 情報⼯学科卒 $ dig me.ikaruga.org TXT +short "Twitter=@UVB_76" "Work=GMO Pepabo Inc." "[email protected]" "GitHub=ikaruga777"

Slide 3

Slide 3 text

GMOペパボ 3

Slide 4

Slide 4 text

4 私たちは「⼈類のアウトプットを増やす」ことをミッションとし、 インターネットやテクノロジーの⼒で情報発信のハードルを下げる⽀援をしています。

Slide 5

Slide 5 text

こんな会社です 最近のあれこれ 5

Slide 6

Slide 6 text

こんな会社です 最近のあれこれ 新卒説明会をVR Chatでやったり https://news.mynavi.jp/article/20250311-3148695/ 6

Slide 7

Slide 7 text

7 GMOペパボ 新卒採⽤ 募集中! 2025年 新卒初任給ランキング1位! ペパボ  新卒採用  ※詳細については「GMOペパボ 採用サイト」をご覧ください 新卒年収710万円!

Slide 8

Slide 8 text

宣伝おわり 8

Slide 9

Slide 9 text

こんなサービスに携わっています カラーミーショップ お商売をする⽅のためのECサイト構築サービス 最初のリリース: 2005年2⽉1⽇ 今年で20周年🎉 ご利⽤いただいている道南ゆかりのショップ様 ● 五勝⼿屋⽺羹 ○ https://gokatteya.co.jp/ ● プティメルヴィーユ(メルチーズ) ○ https://www.petite-merveille.jp/ リリースしたあとに⽣まれた⼈がこの中に存在しているってこと...? 9

Slide 10

Slide 10 text

カラーミーショップのアーキテクチャ 10 カラーミーショップのアーキテクチャ https://speakerdeck.com/kenchan/the-new-architecture-of-colorme-shop-in-the-post-covid-19-world?slide=9 ユーザー(ショップオーナー様 )が それぞれ独自の販売ページ を 公開できる

Slide 11

Slide 11 text

カラーミーショップのアーキテクチャ 11 カラーミーショップのアーキテクチャ https://speakerdeck.com/kenchan/the-new-architecture-of-colorme-shop-in-the-post-covid-19-world?slide=9 ● Webアプリケーション ● データベース ● メールサーバー は各ショップオーナー様で共有

Slide 12

Slide 12 text

マルチテナントアーキテクチャ 12 (ウェブアプリケーションの⽂脈では) 複数のユーザーが同⼀のリソースを共有するモデルや、そ れらを統⼀された体験を通じて管理する仕組み (「マルチテナントSaaSアーキテクチャの構築」より) マルチテナント

Slide 13

Slide 13 text

マルチテナントアーキテクチャ 13 レベルがある https://web.archive.org/web/20200501000000*/https://www.ibm.com/developerworks/jp/cloud/library/cl-multitenantsaas/ (Internet Archive にしか残ってなさそう) マルチテナンシーには、いくつかのレベルがあります (下記の図を参照)。 
 1. クラウド内での単純な仮想化により、ハードウェアのみを共有 
 2. 1 つのアプリケーションで、テナントごとに異なるデータベースを使用 
 3. 1 つのアプリケーションでデータベースを共有 (最も効率的な真のマルチテナンシー)

Slide 14

Slide 14 text

マルチテナントアーキテクチャ 14 レベルが低いとより分離された環境となる ● DBが分離されればデータの混同のリスクが下がる ● アプリケーションが分離されれば障害時に他のテナントへの影響リスクが下がる 代わりにテナントごとの管理コストが上がる カラーミーショップでは 3 を採用 1,2の話は今回割愛 レベルがある https://web.archive.org/web/20200501000000*/https://www.ibm.com/developerworks/jp/cloud/library/cl-multitenantsaas/ (Internet Archive にしか残ってなさそう)

Slide 15

Slide 15 text

カラーミーショップの販売ページ 15 販売に必要なWebサイト⼀式を提供している (user-id = sample-fun-1 としたら) ● https://sample-fun-1.shop-pro.jp (販売ページ、決済フォーム) ● 早い話アカウントを作ったら以下のような販売ページURLが払い出される ○ https://{user-id}.shop-pro.jp カラーミーショップでできること

Slide 16

Slide 16 text

カラーミーショップの販売ページ 16 テナントごとに異なる販売ページURL https://{user-id}*.shop-pro.jp https://sample-fun-1.shop-pro.jp

Slide 17

Slide 17 text

カラーミーショップの販売ページ 17 テナントごとに異なる販売ページURL https://{user-id}*.shop-pro.jp https://sample-fun-1.shop-pro.jp https://{user-id}*.shop-pro.jp https://{user-id}*.shop-pro.jp https://{user-id}*.shop-pro.jp https://{user-id}*.shop-pro.jp https://{user-id}*.shop-pro.jp https://{user-id}*.shop-pro.jp https://{user-id}*.shop-pro.jp https://{user-id}*.shop-pro.jp https://{user-id}*.shop-pro.jp https://{user-id}*.shop-pro.jp https://{user-id}*.shop-pro.jp https://{user-id}*.shop-pro.jp

Slide 18

Slide 18 text

どう区別するか 18

Slide 19

Slide 19 text

テナントをどう区別するか 19 ディレクトリでテナントを区別する https://example.com/sample-fun-1 https://example.com/sample-fun-2 この場合はアプリケーションルーティングで完結で きるが...

Slide 20

Slide 20 text

テナントをどう区別するか 20 サブドメインでテナントを区別する https://sample-fun-1.example.com https://sample-fun-2.example.com ● テナントごとにFQDN(ドメイン)が変わるので、独⾃性 を持たせることができる(独⾃ドメインの対応も楽) ● ドメインが増えるということはIPアドレスとの対応が 増えるということ

Slide 21

Slide 21 text

前提知識として 21 ● ドメインからサーバーのIPアドレスを特定(名前解決)する仕組み ● ネームサーバー(DNSサーバー)にドメインとIPの対応を登録する ● 詳細を話すには(あまりにも)時間が⾜りなすぎる DNS https://students.fun.ac.jp/lesson/Syllabus?lesson_id=114901&year=2025&from=SyllabusList.aspx ネットワークの授業で扱ったりされるんですかね ?

Slide 22

Slide 22 text

テナントをどう区別するか? 22 ● 各テナントのドメインにアクセスした時にWebアプリ ケーションがあるサーバーのあるIPアドレスに辿り着 いてほしい ● アプリケーションはリクエストがきた時、対応するテ ナントのデータを取得して表⽰してほしい

Slide 23

Slide 23 text

実現 23 DNSサーバーを運⽤する shop-pro.jp 以下のドメインに対して名前解決ができる ようにDNSサーバーを⽤意している ● AWS Route 53 ● PowerDNS

Slide 24

Slide 24 text

実現 24 アカウント登録時 テナントで利⽤するサブドメインのレコードを動的に登録する データベースにもサブドメインの情報を登録して特定可能にする

Slide 25

Slide 25 text

実現 25 ● リクエストのホスト名( {user-id}.shop-pro.jp の部分) を取得 ● サブドメイン( {user-id}の部分)を特定 ● サブドメインに紐づくテナント情報をDBから取得 ● 販売ページの内容を表⽰ アプリケーションがやること 🌾もちろん間にも色々処理は挟まっているけど単純化するとこう

Slide 26

Slide 26 text

実現 26 販売ページ表⽰時

Slide 27

Slide 27 text

まとめ ここに注釈を⼊れることができます 27 ● サブドメインを使ってユーザーの表⽰を出し分ける場 合は⼀⼯夫が必要 ● DNSサーバーやDBの中⾝をアプリケーションで連携さ せることでサブドメインごとに異なるデータを表⽰さ せている ○ これは序の⼝で、ユーザーが所持している独⾃ドメイン に対応するときもDNSレコードを変える必要があるし、 そうすると今度はドメインごとにTLS証明書を発⾏して 適⽤したり更新も⾏う必要があるし、Route53のコスト も気にしないといけないしDNSもメールサーバーを運⽤ していると様々なレコードを登録してetc… まとめ

Slide 28

Slide 28 text

おわり? 28

Slide 29

Slide 29 text

29

Slide 30

Slide 30 text

2026-04-22 ~ 2026-04-24 30

Slide 31

Slide 31 text

2026-04-22 ~ 2026-04-24 31

Slide 32

Slide 32 text

2026-04-22 ~ 2026-04-24 32 https://rubykaigi.org/2026/

Slide 33

Slide 33 text

Ruby 33

Slide 34

Slide 34 text

34 2026年函館で⼀番熱くなるかもし れない⾔語の話 Atsushi Katsuura|GMO PEPABO,inc. 2025.05.17 未来⼤×企業エンジニア ⼤LT2025

Slide 35

Slide 35 text

35 ⾃⼰紹介 EC事業部 プロダクトチーム 勝浦 敦 (ikaruga) require'resolv';Resolv::DNS.new.getresources( 'me.ikaruga.org', Resolv::DNS::Resource::IN::TXT ).map(&:data) => ["Twitter=@UVB_76", "Work=GMO Pepabo Inc.", "[email protected]", "GitHub=ikaruga777"] 普段は7or14の鍵盤をしばいたりサイコパワーで⾶び道具を ちらしたり初星学園でアイドルをプロデュースしたり笛でモ ンスターの頭を叩いたり

Slide 36

Slide 36 text

36 私たちは「⼈類のアウトプットを増やす」ことをミッションとし、 インターネットやテクノロジーの⼒で情報発信のハードルを下げる⽀援をしています。

Slide 37

Slide 37 text

こんな会社です GMOペパボはRubyKaigiを応援してい ます 37

Slide 38

Slide 38 text

インターン 38

Slide 39

Slide 39 text

実施予定です! (続報をお待ち ください) 39

Slide 40

Slide 40 text

Ruby 40

Slide 41

Slide 41 text

Ruby プログラミング⾔語Ruby まつもとゆきひろ(Matz)さんによって作成されたオー プンソースのプログラミング⾔語 最初の公開が1995年→30周年 🎉 スクリプト⾔語であり、オブジェクト指向⾔語である 41

Slide 42

Slide 42 text

42 ⾃⼰紹介 EC事業部 プロダクトチーム 勝浦 敦 (ikaruga) 普段は7or14の鍵盤をしばいたりサイコパワーで⾶び道具を ちらしたり初星学園でアイドルをプロデュースしたり笛でモ ンスターの頭を叩いたり require'resolv';Resolv::DNS.new.getresources( 'me.ikaruga.org', Resolv::DNS::Resource::IN::TXT ).map(&:data) => ["Twitter=@UVB_76", "Work=GMO Pepabo Inc.", "[email protected]", "GitHub=ikaruga777"]

Slide 43

Slide 43 text

43 ⾃⼰紹介 EC事業部 プロダクトチーム 勝浦 敦 (ikaruga) require'resolv';Resolv::DNS.new.getresources( 'me.ikaruga.org', Resolv::DNS::Resource::IN::TXT ).map(&:data) => ["Twitter=@UVB_76", "Work=GMO Pepabo Inc.", "[email protected]", "GitHub=ikaruga777"] 普段は7or14の鍵盤をしばいたりサイコパワーで⾶び道具を ちらしたり初星学園でアイドルをプロデュースしたり笛でモ ンスターの頭を叩いたり

Slide 44

Slide 44 text

こんなところで使われています(偏⾒含) ● Ruby on Rails ○ (Webフレームワーク、GitHub.comもRails) ● Homebrew ○ (macOS,Linuxのパッケージマネージャ) ● fastlane ○ (モバイルアプリのビルド、リリースツール) 44

Slide 45

Slide 45 text

特徴 45

Slide 46

Slide 46 text

全てがオブジェクト 数値も⽂字列もオブジェクト 46 'asdf'.size => 4 12345.even? # boolを返すメソッドは?つける「風習」 => false

Slide 47

Slide 47 text

全てがオブジェクト “#class” メソッドでそのクラスオブジェクトが返る 47 'asdf'.class => String 12345.class => Integer

Slide 48

Slide 48 text

全てがオブジェクト クラスオブジェクトのクラスは “Class” クラス 48 String.class => Class 12345.class.class => Class

Slide 49

Slide 49 text

全てがオブジェクト 呼べるメソッドはオブジェクトに聞けばわかる 49 String.instance_methods.take 5 #先頭5つを取得 => [:encoding, :each_grapheme_cluster, :slice, :valid_encoding?, :ascii_only?]

Slide 50

Slide 50 text

オープンクラス いつでもクラスに対する操作が⾏える 50 puts 1 + 2 # => 3 class Integer alias_method 'old_plus', :+ def +(n) self.old_plus(n).old_plus(1) end end puts 1 + 2 # => 4

Slide 51

Slide 51 text

BasicObject#method_missing 呼び出したメソッドがオブジェクトに「なかった時に呼ば れる」メソッド デフォルトだと例外を送出する メソッドなので書き換えももちろん可能 51

Slide 52

Slide 52 text

BasicObject#method_missing 存在しなかったメソッド名が引数となるので、フォールバック処理とかに ここに注釈を⼊れることができます 52 class Integer def method_missing(method, *args) "#{method}がよばれたよー" end end 1.foo # => fooがよばれたよー 1.はこだて未来大学 # => はこだて未来大学がよばれたよー

Slide 53

Slide 53 text

尖ったところを紹介したけど... やりたいなと思ったことを簡潔にかけるのは嬉しい ● 組み込みメソッドやライブラリが⽐較的豊富 ● メソッドを調べる時に標準のREPL(irb)が本当に便利 (Rubyというか) Ruby on Rails の魔⼒はすごい ● ちゃんと規約に則れば、あっというまにウェブアプリケーションができていく ● 本質以外の機能を⼤体カバーしてくれる 53

Slide 54

Slide 54 text

RubyKaigiと は何か? 54

Slide 55

Slide 55 text

OSSプログラミング 言語Rubyに フォーカスした国 際カンファレンス 55

Slide 56

Slide 56 text

Rubyコミュ ニティのお 祭り 56

Slide 57

Slide 57 text

旅 57

Slide 58

Slide 58 text

ってRubyKaigiのチーフオーガナイ ザーが仰っていた(詳しくは資料を) https://speakerdeck.com/a_matsuda/rubykaigi-introduction?slide=6 58

Slide 59

Slide 59 text

登壇するのは Rubyを「使う」人 ではなく、 Rubyを「作る」人 59

Slide 60

Slide 60 text

プログラミング⾔語はコンピューター サイエンスの塊 オートマトン、コンパイラ、パーサー、VM、GC、 並列処理、ネットワーク、プロファイラ、セキュ リティ、WASM etc... 60

Slide 61

Slide 61 text

プログラミング⾔語はコンピューター サイエンスの塊 コミュニティに⾝を置いているだけでもプログラ ミング⾔語そのものに関する話題が(⽇本語で)⾶ん でくるのは貴重(だと思う) 61

Slide 62

Slide 62 text

Q.内容わかるの ? A.普通にわからん 62

Slide 63

Slide 63 text

私とRuby 私はどちらかというと仕事以外でたくさんコードを書いてい るわけではないが...少なくとも、RubyとRailsは「Rubyのコ ミュニティ」で教わって今の⾃分がある 仕事で使っている、楽しくかけるプログラミング⾔語の進化 を⽀えている⼈が⾝近にいるのであればそれはもちろん応援 したい。し、興味持ってくれる⼈を増やしたい。 63

Slide 64

Slide 64 text

RubyKaigi ● プログラミング⾔語そのものに興味がある⼈ ● オートマトンの授業が役に⽴つ瞬間に出会いたい⼈ ● とにかくすごい話を聞きにきたい⼈ おすすめです。近年は複数の企業が学⽣への参加⽀援を⾏ なっています。(続きは空き時間に!) 64

Slide 65

Slide 65 text

2026-04-22 ~ 2026-04-24 65