Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ユーザーにサブドメインの ECサイトを提供したい (あるいは) 2026年函館で一番熱くなるか...

ユーザーにサブドメインの ECサイトを提供したい (あるいは) 2026年函館で一番熱くなるかもしれない言語の話

Avatar for uvb_76

uvb_76

May 21, 2025
Tweet

More Decks by uvb_76

Other Decks in Programming

Transcript

  1. 2 ⾃⼰紹介 EC事業部 プロダクトチーム 勝浦 敦 Atsushi Katsuura 函館⼯業⾼等専⾨学校 情報⼯学科卒

    $ dig me.ikaruga.org TXT +short "Twitter=@UVB_76" "Work=GMO Pepabo Inc." "[email protected]" "GitHub=ikaruga777"
  2. こんなサービスに携わっています カラーミーショップ お商売をする⽅のためのECサイト構築サービス 最初のリリース: 2005年2⽉1⽇ 今年で20周年🎉 ご利⽤いただいている道南ゆかりのショップ様 • 五勝⼿屋⽺羹 ◦

    https://gokatteya.co.jp/ • プティメルヴィーユ(メルチーズ) ◦ https://www.petite-merveille.jp/ リリースしたあとに⽣まれた⼈がこの中に存在しているってこと...? 9
  3. マルチテナントアーキテクチャ 13 レベルがある https://web.archive.org/web/20200501000000*/https://www.ibm.com/developerworks/jp/cloud/library/cl-multitenantsaas/ (Internet Archive にしか残ってなさそう) マルチテナンシーには、いくつかのレベルがあります (下記の図を参照)。 


    1. クラウド内での単純な仮想化により、ハードウェアのみを共有 
 2. 1 つのアプリケーションで、テナントごとに異なるデータベースを使用 
 3. 1 つのアプリケーションでデータベースを共有 (最も効率的な真のマルチテナンシー)
  4. カラーミーショップの販売ページ 15 販売に必要なWebサイト⼀式を提供している (user-id = sample-fun-1 としたら) • https://sample-fun-1.shop-pro.jp (販売ページ、決済フォーム)

    • 早い話アカウントを作ったら以下のような販売ページURLが払い出される ◦ https://{user-id}.shop-pro.jp カラーミーショップでできること
  5. カラーミーショップの販売ページ 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
  6. 実現 25 • リクエストのホスト名( {user-id}.shop-pro.jp の部分) を取得 • サブドメイン( {user-id}の部分)を特定

    • サブドメインに紐づくテナント情報をDBから取得 • 販売ページの内容を表⽰ アプリケーションがやること 🌾もちろん間にも色々処理は挟まっているけど単純化するとこう
  7. まとめ ここに注釈を⼊れることができます 27 • サブドメインを使ってユーザーの表⽰を出し分ける場 合は⼀⼯夫が必要 • DNSサーバーやDBの中⾝をアプリケーションで連携さ せることでサブドメインごとに異なるデータを表⽰さ せている

    ◦ これは序の⼝で、ユーザーが所持している独⾃ドメイン に対応するときもDNSレコードを変える必要があるし、 そうすると今度はドメインごとにTLS証明書を発⾏して 適⽤したり更新も⾏う必要があるし、Route53のコスト も気にしないといけないしDNSもメールサーバーを運⽤ していると様々なレコードを登録してetc… まとめ
  8. 29

  9. 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の鍵盤をしばいたりサイコパワーで⾶び道具を ちらしたり初星学園でアイドルをプロデュースしたり笛でモ ンスターの頭を叩いたり
  10. 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の鍵盤をしばいたりサイコパワーで⾶び道具を ちらしたり初星学園でアイドルをプロデュースしたり笛でモ ンスターの頭を叩いたり
  11. こんなところで使われています(偏⾒含) • Ruby on Rails ◦ (Webフレームワーク、GitHub.comもRails) • Homebrew ◦

    (macOS,Linuxのパッケージマネージャ) • fastlane ◦ (モバイルアプリのビルド、リリースツール) 44
  12. オープンクラス いつでもクラスに対する操作が⾏える 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
  13. 尖ったところを紹介したけど... やりたいなと思ったことを簡潔にかけるのは嬉しい • 組み込みメソッドやライブラリが⽐較的豊富 • メソッドを調べる時に標準のREPL(irb)が本当に便利 (Rubyというか) Ruby on Rails

    の魔⼒はすごい • ちゃんと規約に則れば、あっというまにウェブアプリケーションができていく • 本質以外の機能を⼤体カバーしてくれる 53