Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

Perl オ ン プ レ コメントの無いコード 歴史が長いが故の問題・・・ オーパーツ化したツール 野 生 化 し た 仕 様 肥大化したベースクラス

Slide 6

Slide 6 text

逃避したい現実・・・

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

まずは要件を満たそう

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

Dokkuを使う

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

今回作った環境 Dokku

Slide 24

Slide 24 text

できた!

Slide 25

Slide 25 text

本当に?

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

Ansibleを使う

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

依存性のインストール(抜粋) - 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で依存するパッケージを指定

Slide 31

Slide 31 text

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のインストールコマンドを実行

Slide 32

Slide 32 text

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をインストール

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

おわり