Slide 1

Slide 1 text

3"*-4Ͱͭ͘Δ ͳΜͪΌͬͯ4&37&3-&44$.4 ʙίʔϙϨʔταΠτฤʙ 2020.08.28(Fri.) 銀座Rails#24 @free_world21

Slide 2

Slide 2 text

■ ⼩林 ノエル(36) ■ 職業︓ソフトウェアエンジニア – フリーランス – エメラダ株式会社 (emerada.co.jp) 執⾏役員 ■ 2008: フリーランスエンジニアとして独⽴ – flash/C#/rails/iOS/Androidなどなど ■ 2009: ⼤学院修了(情報理⼯学修⼠) ■ 2009: IPA未踏事業に採択される ■ 2016: エメラダ株式会社に参画 ■ 2018: 同社執⾏役員 ■ 〜現在: フリーランス&会社員として活動中 ■ 趣味︓旅⾏・世界のコワーキングスペースめぐり (ワーケーション︖) @free_world21 ANA B777-300 NH11 THE FARM@NY nomad works@NY CARR WORKPLACE@Chicago

Slide 3

Slide 3 text

前回までの あらすじ とあるフリーランス案件の場合

Slide 4

Slide 4 text

TTC(Total Trafic Control) PTC(Programed Trafic Control) TID(Traffic Information Display) TID server TID client 鉄道システムの雑な説明

Slide 5

Slide 5 text

TTC(Total Trafic Control) PTC(Programed Trafic Control) TID(Traffic Information Display) TID server client 鉄道システムの雑な説明 ⽬的 スマホアプリとして 表⽰したい︕ *スクショは既存アプリの例

Slide 6

Slide 6 text

Serverless技術を活⽤したアーキテクチャ TID server TID clientもどき VPN Amazon VPC Amazon S3 Bucket JSONに変換 CI/CDでデプロイ アプリに配信 HTML内 のJSが 取 得 *スクショは既存アプリの例

Slide 7

Slide 7 text

会社員としての とある案件 時は進み

Slide 8

Slide 8 text

エメラダ株式会社 ■ 2016年創業 ■ ⾦融分野で3業種の登録をし、1業種は売却・廃業 クラウドファンディング形式で 個⼈投資家が未上場のベンチャーに 投資できるサービス 2017年11⽉リリース *2019年10⽉事業譲渡 *証券業を廃業 2018年5⽉リリース 成⻑中⼩企業を中⼼に 累計10億円を融資実⾏ 成⻑中⼩企業向け オンラインレンディング サービス 銀⾏と中⼩企業を結ぶ 資⾦繰り管理&モニタリング サービス 2019年5⽉リリース 地銀&信⾦を中⼼に数⼗⾏(庫)に 導⼊済み emerada-bank.com emerada-marketplace.com

Slide 9

Slide 9 text

背景 ■ EMERADA EQUITY (クラウドファンディング・証券業) をたちあげるまで – テザーサイト件コーポレートサイトを最初wordpressで構築 – その裏で実際のサービスをrailsで開発。完成したらwordpressの サイトと切り替えた。 ■ サービスサイト兼コーポレートサイト ■ EMERADA BANK (オンラインレンディング・貸⾦業) をたちあげるまで – 新規サービスなのでrailsでフルスクラッチで実装 – 完成後はそのまま公開 ■ サービスサイトが2つあり、うち1つがコーポレートサイトを兼ねて いる状態 ■ しかし会社としてはむしろレンディングのほうをメインにしたかっ た ■ コーポレートサイトは別で必要だろうという結論

Slide 10

Slide 10 text

クラウドファンディング形式で 個⼈投資家が未上場のベンチャーに 投資できるサービス 成⻑中⼩企業向け オンラインレンディング サービス emerada-bank.com emeradaco.com コーポレートサイト emerada.co.jp こんなかんじにしたい!

Slide 11

Slide 11 text

ではコーポレートサイトをどう作る︖ ■ ⼀番簡単でありがちなのはやっぱりwordpress ■ ただエンジニアのリソースは本来のサービス開発に集中させたかった ■ ⼀⽅社内的にも「そろそろインターンとったら︖」という雰囲気があった ■ エンジニアインターンを雇ってwordpressでコーポレートサイト構築というのも 1つの案としてはありだった ■ ただ「せっかく優秀な学⽣やとってwordpressのメンテの仕事とかさせるのって どうなの︖」という思い – 幸いにして情報系の⼤学⽣・⼤学院⽣からの応募が数件あった – 注︓wordpressをdisる意図はございません ■ ってかコーポレートサイトなんだし、基本静的コンテンツしかないんだから serverlessでよくない︖ ■ せっかく優秀な学⽣雇えるなら電⾞アプリの時にやったような、railsでコンテ ンツを管理して(HTML/CSS/JSを⽣成して)、それをAWSにデプロイするような serverlessなコーポレートサイトを作るほうが⾯⽩いと思う

Slide 12

Slide 12 text

AWS 閲覧 https://emerada.co.jp 社員 コンテンツの 管理 ユーザ HTMLを配置する コーポレートサイト 管理アプリ なんちゃってserverless CMS CloudFront (CDN)

Slide 13

Slide 13 text

コーポレートサイトの要件など ■ 動的にコンテンツ管理したいのはとりあえず2つ(管理画⾯で管理したい) – メディア実績のCRUD – プレスリリースのCRUD – トップページ ■ 管理者アカウントの管理機能 – 管理者アカウントを作れるアカウント (super_admin) – メディア実績とプレスリリースを作成・編集できるアカウント (editor) – メディア実績とプレスリリースを承認・公開できるアカウント (authorizer) ■ その他のページは静的でOK(HTMLの直書きコーディング) – 会社概要 – サービス内容 – メンバー紹介 – 求⼈情報 ■ インターン学⽣さんへの教育的観点からも、RailsとAWS、with-server(?)とserverlessの 両⽅を触れ、⾃分で作ったものを世に公開できる経験はとても良いと思った – ⼩林とインターンの学⽣さんの2⼈プロジェクトとしてスタート

Slide 14

Slide 14 text

+ app + models - admin_user.rb - press_release.rb - media_record.rb + controllers + admin - home_controller.rb - admin_users_controller.rb - press_releases_controller.rb - media_records_controller.rb - publishes_controller.rb - home_controller.rb - company_info_controller.rb - members_controller.rb - careers_controller.rb - services_controller.rb - press_releases_controller.rb - media_records_controller.rb + services - s3_publisher.rb Railsアプリの構成

Slide 15

Slide 15 text

Railsアプリの構成 + app + models - admin_user.rb - press_release.rb - media_record.rb + controllers + admin - home_controller.rb - admin_users_controller.rb - press_releases_controller.rb - media_records_controller.rb - publishes_controller.rb - home_controller.rb - company_info_controller.rb - members_controller.rb - careers_controller.rb - services_controller.rb - press_releases_controller.rb - media_records_controller.rb + services - s3_publisher.rb • admin_userはdeviseのモデル • press_releaseとmedia_recordは ActiveRecordのモデル

Slide 16

Slide 16 text

Railsアプリの構成 + app + models - admin_user.rb - press_release.rb - media_record.rb + controllers + admin - home_controller.rb - admin_users_controller.rb - press_releases_controller.rb - media_records_controller.rb - publishes_controller.rb - home_controller.rb - company_info_controller.rb - members_controller.rb - careers_controller.rb - services_controller.rb - press_releases_controller.rb - media_records_controller.rb + services - s3_publisher.rb • /admin 以下はdeviseの認証を 通してアクセス • 3つのcontrollerは各モデルの CRUDを担当 • publishes_controller はS3への デプロイ処理(s3_publisher)を 呼び出す処理を担当

Slide 17

Slide 17 text

Railsアプリの構成 + app + models - admin_user.rb - press_release.rb - media_record.rb + controllers + admin - home_controller.rb - admin_users_controller.rb - press_releases_controller.rb - media_records_controller.rb - publishes_controller.rb - home_controller.rb - company_info_controller.rb - members_controller.rb - careers_controller.rb - services_controller.rb - press_releases_controller.rb - media_records_controller.rb + services - s3_publisher.rb • ⼀般ユーザ向けのページ • 動的にページの内容が変わるのは • トップページ • メディア実績⼀覧・詳細 • プレスリリース⼀覧・詳細 • その他は静的なので純粋な HTML(haml)/JS/CSS コーディング

Slide 18

Slide 18 text

first_5_press_releases = PressRelease.where(status: :published).first(5) first_5_media_records = MediaRecord.where(status: :published).first(5) renderer = ActionView::Base.new("#{Rails.root}/app/views/") renderer.assign(press_releases: first_5_press_releases) renderer.assign(media_records: first_5_media_records) html = renderer.render(template: "home.html.haml", layout: "layouts/application.html.haml") s3_client = Aws::S3::Client.new s3_client.put_object( acl: "private", body: html, bucket: "stg-cosmos-assets", content_type: "text/html; charset=UTF-8", cache_control: "no-store, no-cache", key: "index" ) s3_publisher.rb (トップページの例)

Slide 19

Slide 19 text

AWS 閲覧 https://emerada.co.jp ユーザ AWS側の構成 CloudFront (CDN) Route53 S3 ■ S3, CloudFront, Route53という 極めてシンプル構成 ■ co.jpドメインはお名前.comで購⼊ ■ S3内の各オブジェクトはCloudFrontを 経由してのみアクセス許可 (S3へのダイレクトアクセスは不許可)

Slide 20

Slide 20 text

CloundFrontからのみ許可 ■ CloudFrontの画⾯からorigin access identity(OAI) を作成 ■ そのOAIからのみアクセスを許可するbuket policyをS3に設定する https://aws.amazon.com/premiumsupport/knowledge- center/cloudfront-access-to-amazon-s3/

Slide 21

Slide 21 text

という感じでできあがり。ね?簡単でしょ? emerada.co.jp

Slide 22

Slide 22 text

AWS 閲覧 https://emerada.co.jp 社員 コンテンツの 管理 ユーザ HTMLを配置する 完全serverless CMSという野望 CloudFront (CDN) API Gateway AWS Labmda Amazon DynamoDB

Slide 23

Slide 23 text

AWS 閲覧 https://emerada.co.jp 社員 コンテンツの 管理 ユーザ HTMLを配置する 完全serverless CMSという野望 CloudFront (CDN) API Gateway AWS Labmda Amazon DynamoDB コンテンツの 管理側もserverlessにすること が可能︕ ↓ 完全serverless CMS 合⾔葉は NO MORE WORDPRESS!! オープンソースプロジェクトとしてやりた いと思ってる

Slide 24

Slide 24 text

まとめ ■ 電⾞アプリで培ったserverless技術を駆使してなんちゃってserverless CMSを 構築しました ■ RailsとAWS、with-serverとserverlessの両方を体験できる良いプロジェク トとだったと思っている ■ 完全serverless CMSという構想のご紹介 ■ 次回 – Railsとkubernetesについて︖ ■ ご意⾒、ご感想、ご質問、飲みのお誘い、猫・⽝・トカゲなど⾃慢のペッ ト写真は是⾮twitterへリプください @free_world21