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

老舗マッチングサービスとの付き合い方

SAMUKEI
September 28, 2018

 老舗マッチングサービスとの付き合い方

運営実績19年目のサービスであるyoubrideでのやっていきについて話しました

SAMUKEI

September 28, 2018
Tweet

More Decks by SAMUKEI

Other Decks in Technology

Transcript

  1. 老舗マッチングサービス
    との
    付き合い方
    @SAMUKEI

    View Slide

  2. who?
    ● さむけい(藤田 雄大)
    ● 所属はDiverse Inc.とMAEMO LLC
    ● youbrideのサーバ・クライアントやってます
    ● 会社でPodcast配信してます。聴いてください!
    https://podcast.diverse-inc.com/
    ● 名刺作ったので、記念に名刺交換しましょう →→→

    View Slide

  3. オンライン
    カジュアル シリアス
    オフライン

    View Slide

  4. 突然ですが
    youbrideは1819年目のサービスです

    View Slide

  5. Perl




    コメントの無いコード
    歴史が長いが故の問題・・・
    オーパーツ化したツール







    肥大化したベースクラス

    View Slide

  6. 逃避したい現実・・・

    View Slide

  7. 逃避してはいられない!!!

    View Slide

  8. 解決したい課題
    ● Perlからの脱却
    ○ Rubyにすることは確定!
    ○ 全部の置き換えは、コード/仕様が膨大で難しい
    ● 野生化した仕様、複雑なコード
    ○ リニューアルというビッグワードで解決(しない)
    ● オンプレからの脱却
    ○ ハードウェアパワーに頼る部分があるので難しい
    ○ 当分オンプレのままで Ruby書き換え後に検討
    ● オーパーツ化したツール(開発環境)
    ○ メンテナンスがされていない
    ○ 機能としては、現代(2018年)でも十分通用する! (はず)

    View Slide

  9. 解決したい課題
    ● Perlからの脱却
    ○ Rubyにすることは確定!
    ○ 全部の置き換えは、コード/仕様が膨大で難しい
    ● 野生化した仕様、複雑なコード
    ○ リニューアルというビッグワードで解決(しない)
    ● オンプレからの脱却
    ○ ハードウェアパワーに頼る部分があるので難しい
    ○ 当分オンプレのままで Ruby書き換え後に検討
    ● オーパーツ化したツール(開発環境)
    ○ メンテナンスがされていない
    ○ 機能としては、現代(2018年)でも十分通用する(はず)
    => まずはRubyを進めるために、開発環境を整えよう!

    View Slide

  10. 現在の開発環境
    (オーパーツ化したツール)

    View Slide

  11. 実際の動き
    ブランチからサブドメインを振った環境ができる!すごい!
    ※ 元々はlivedoorサービスの開発用環境を輸入したらしいです

    View Slide

  12. 実現している要件
    ● オンプレで動く
    ● リポジトリからブランチ一覧を取ってくる
    ● ブランチを開発環境にデプロイ
    ● サーバにブランチ名のサブドメインを振る
    ● Webフロントでの操作

    View Slide

  13. 課題
    ● メンテナーがいない
    ● Shell & Perlの職人技で、読み解くのが難解
    ● youbrideに特化しているため、汎用的な利用ができない

    View Slide

  14. まずは要件を満たそう

    View Slide

  15. 要件
    ● オンプレで動く
    ● リポジトリからブランチ一覧を取ってくる
    ● ブランチを開発環境にデプロイ
    ● サーバにブランチ名のサブドメインを振る
    ● Webフロントでの操作

    View Slide

  16. Dokkuを使う

    View Slide

  17. Dokkuが満たしてくれる要件
    ● オンプレで動く
    ● リポジトリからブランチ一覧を取ってくる
    ● ブランチを開発環境にデプロイ
    ● サーバにブランチ名のサブドメインを振る
    ● Webフロントでの操作

    View Slide

  18. Dokkuとは
    ● DockerをベースとしたHerokuクローン
    ● DokkuのGitリポジトリにPushするだけでサービスがデプロイされる
    ● もちろんオンプレで動く
    ※ Pivotal Cloud Foundryも有名だが、今回の用途では多機能すぎるため選定候補から除外

    View Slide

  19. Dokkuのインストール(1)
    $ wget https://raw.githubusercontent.com/dokku/dokku/v0.12.12/bootstrap.sh
    $ sudo DOKKU_TAG=v0.12.12 bash bootstrap.sh
    wgetしてコマンド叩くだけ

    View Slide

  20. Dokkuのインストール(2)
    $ cat ~/.ssh/id_rsa.pub | sshcommand acl-add dokku ansible
    dokkuに公開鍵を設定する

    View Slide

  21. 自前で実装する要件
    ● オンプレで動く
    ● リポジトリからブランチ一覧を取ってくる
    ● ブランチを開発環境にデプロイ
    ● サーバにブランチ名のサブドメインを振る
    ● Webフロントでの操作

    View Slide

  22. Webフロント
    Ruby + Sinatraで雑に作るだけ

    View Slide

  23. 今回作った環境
    Dokku

    View Slide

  24. できた!

    View Slide

  25. 本当に?

    View Slide

  26. Webフロント動かす方法は?
    別のサーバでも使える?
    依存関係どうするの?

    View Slide

  27. 本当に必要な要件
    ● オンプレで動く
    ● リポジトリからブランチ一覧を取ってくる
    ● ブランチを開発環境にデプロイ
    ● サーバにブランチ名のサブドメインを降る
    ● Webフロントでの操作
    ● サーバの移転に耐えられる環境構築
    ● ソースをバージョン管理する
    ● 属人化せずに他人がメンテナンスできる

    View Slide

  28. Ansibleを使う

    View Slide

  29. Ansibleとは
    ● 構成管理ツールの1つ
    ● 同じようなツールではChef, Itamaeなどがある
    ● シンプルな記述(yaml)が可能
    ● タスク毎に記述を分けられるので単純に管理可能
    ● エージェントレスで動作する
    といった、インフラ側では有名なツールです
    ※ 今回はAnsible自体は詳しくは説明しませんのでググってください

    View Slide

  30. 依存性のインストール(抜粋)
    - name: install yum repos
    yum:
    name: "{{ item }}"
    state: present
    with_items:
    - epel-release
    - https://centos7.iuscommunity.org/ius-release.rpm
    - name: install dependencies
    yum:
    name: "{{ item }}"
    state: latest
    with_items:
    - redis
    - nss
    - nss-util
    - nspr
    - make
    yumで依存するパッケージを指定

    View Slide

  31. Dokkuのインストール(抜粋)
    - name: get dokku bootstrap
    get_url:
    url: "https://raw.githubusercontent.com/dokku/dokku/v{{ dokku_version }}/bootstrap.sh"
    dest: /tmp
    - name: bootstrap dokku
    shell: "DOKKU_TAG=v{{ dokku_version }} bash /tmp/bootstrap.sh"
    Dokkuのインストールコマンドを実行

    View Slide

  32. Webフロントのインストール(抜粋)
    - name: install yarn
    npm:
    name: yarn
    global: yes
    - name: install bundler
    become_user: "{{ ansible_ssh_user }}"
    gem:
    name: bundler
    user_install: no
    executable: ~/.rbenv/shims/gem
    yarnとbundlerをインストール

    View Slide

  33. 結果的に・・・
    チーム内のメンバーからPRもらえた!
    属人化してないですね!

    View Slide

  34. 公開予定です!(公開時期未定)

    View Slide

  35. おわり

    View Slide