SlideShare a Scribd company logo
1 of 105
Download to read offline
マイクロサービス時代の
動画配信基盤 Ruby×Go=∞
DMMでは、動画配信基盤の刷新に取り組んでいます。モノリシックな
システムをマイクロサービス化すべく、Ruby on Rails・AngularJS・
Go を利用しています。本セッションでは、それらのアーキテクトや
開発フローについて判りやすく説明します。
システム本部
デジタル配信開発部
グループ長 兼 チームリーダ
小嶋 聡史
2006年 ネットワークサービス事業者
2011年 ソーシャルゲーム事業者
2014年 ベンチャー企業
2015年 DMM.com ラボ
開発・運用・管理業務に携わり、2015年より DMM.com ラボへ参画していま
す。DMM.comラボで、システムのアーキテクトや組織運営に従事しています。
システム本部
デジタル配信開発部
システムエンジニア
江藤 慎吾
20YY年 WEB 広告
2009年 コミュニティサイト・ソーシャルゲーム
2011年 ECサイト
2013年 DMM.com ラボ
課金基盤のプラットフォーム開発と運用に携わり、半年前よりデジタル配信開
発に参画しています。
アルゴリズムとサービスを考えることが好きで、最近では動画やVR技術を活
かしたコンテンツの自動生成などに興味をもっています。
§1 はじめに
§2 マイクロサービス
§3 動画配信基盤
§4 アーキテクチャ
§5 技術選定
§6 実装詳細
§7 おわりに
動画配信基盤の
マイクロサービス化への取り組み
独立した軽量なシステムをシンプルに連携し構成したアーキテクチャ
マイクロサービスとは
むかし、むかし、DMM は…
巨大な1システムでできていまし
た。会員基盤・課金処理・各種サー
ビス等の処理が密結合で1つの巨
大なリポジトリで運用していまし
た。
MONOLITHIC
ARCHITECTURE
拠点 10以上
海外拠点拡大中
サービス数 40以上
トラフィック 140Gbps以上
1000億円以上売上
従業員数 1250人以上
会員数 1900万人以上
サービス大規模化
システム複雑化
組織巨大化
開発短期化
ニーズとシステムが大きく乖離
マイクロサービスに期待することは?
• 事業成長
• ニーズの多様化
• ニーズの変化の加速
独立した軽量なサービスを
小さなチームで作る。
結果、開発の短期化を実現し
事業スピードを高める。
共通プラットフォーム開発
2015年
Message
Hub
支払
売上
購入
決済
セキュ
リティ
会員
電子
マネー
OpenAPI
BusinessAPI
商品情報
API
アプリ用
API
ブログ
パーツ
Markers
-API
Connect
Gateway
レジ
ログイン
DMMConnect
OpenUI
Cllent
DMM.EVO
動画配信サービス
PC
ゲーム
TV
スマホ
Player
インターネット お客様
動画配信技術#配信種別
動画配信には、VOD と LOD の2種類に分類できます。
今回は LOD について説明します。
VOD (Video On Demand)
あらかじめ録画しておいた動画コンテンツを、
視聴提供するサービス。
LOD (Live On Demand)
あらかじめ録画しておいたものではなく、撮った映像
を随時配信してリアルタイムに視聴提供するサービス。
動画配信サービス#Yellの例
       にて
アイドル・有名人を
ライブ配信します
動画配信技術#LOD仕組み
動画配信者
カメラマン
トランスレコーダー
CDN
ストリーミングサーバー
サーバー運用者
プレイヤー
プレイヤー
プレイヤー
お客様
動画配信監視者
サービス運営者
撮影現場 データセンター インターネット
動画配信運用#構成
利用者
配信機器
動画配信管理
動画配信者 カメラマン サーバ運用者 サービス運営者 動画配信監視者 お客様
ストリーミング
サーバー
(Origin)
ストリーミング
サーバー
(Edge)
CDN チャット
サーバー
ストレージサーバ
(動画コンテンツ保管)
チャンネルサービス 番組 ストリーム プレイヤー
動画配信運用#流れ
動画配信者
カメラマン
トランスレコーダー
サーバー運用者
プレイヤー
プレイヤー
視聴者が
一万人です
番組の音と絵が
ずれています
撮影現場 データセンター インターネット
動画配信監視者
明日
番組配信します
番組が
見れないです
サーバー
構築します!
どのサーバーに
配信しますか?
サービス運営者
プレイヤー
お客様
ストリーミングサーバー
CDN
サーバー
増設実施します
サービス間の一貫性
API のオーバヘッド
セキュリティへの配慮
デバッグのしにくさ
導入課題
ポチッと押すと、動画配信できるシステム。
今までのレガシーシステムを改善し、
あらゆるサービスで動画配信リソースを即時に
提供可能なオープン化された BaaS。
15分
マイクロ
サービス
TIPS
DMM.com ラボ
1. サブシステム切り出し
2. API ポリシー定義
3. 技術選定
15分
マイクロ
サービス
TIPS
DMM.com ラボ
DMM.com ラボ マイクロサービスTIPS
マイクロサービス化するために
巨大なモノリシックシステムから
サブシステムを切り出します。
シンプルに RESTful API over HTTP(s) 等を
利用して機能提供することを前提とします。
15分
サブシステム切り出し#階層化
どのように切り出すか?
DMM.com ラボ マイクロサービスTIPS
15分
サブシステム切り出し#階層化
① 論理的な独立性を考慮する。
② 物理的な独立性を考慮する。
DMM.com ラボ マイクロサービスTIPS
15分
サブシステム切り出し#階層化
DMM.com ラボ マイクロサービスTIPS
15分
サブシステム切り出し#階層化
Streaming Servers
Live
Manager
Master
Controller
Server
Manager
Player
Manager
PC
ゲーム
TV
スマホ
Job
Handler
サーバオペレーション
どのように実装したか?
DMM.com ラボ マイクロサービスTIPS
15分
サブシステム切り出し#階層化
DMM.com ラボ マイクロサービスTIPS
15分
サブシステム切り出し#階層化
Streaming Servers
Live
Manager
Master
Controller
Server
Manager
Player
Manager
PC
ゲーム
TV
スマホ
Go
Job
Handler
1 つの変更が他に波及すること
ありませんか?
DMM.com ラボ マイクロサービスTIPS
15分
サブシステム切り出し#プラグイン
字幕
課金
サムネイル
広告
PCプレイヤー
課金
サムネイル
サービスA
携帯プレイヤー
DMM.com ラボ マイクロサービスTIPS
15分
サブシステム切り出し#プラグイン
サービスBサービスA
PCプレイヤー
モジュールモジュールモジュール
今後も変更が多そう。困った。
DMM.com ラボ マイクロサービスTIPS
15分
サブシステム切り出し#プラグイン
DMM.com ラボ マイクロサービスTIPS
15分
サブシステム切り出し#プラグイン
PLAYER
<CORE SYSTEM>
PLAYER Manager
字幕
<Plugin Module>
課金
<Plugin Module>
サムネイル
<Plugin Module>
広告
<Plugin Module>
DMM.com ラボ マイクロサービスTIPS
15分
サブシステム切り出し#プラグイン
プロトコルシーケンスはこんな感じです。
プレイヤー API プラグインA プラグインB
番組2を配信したい
プラグインAとBを
利用して配信して
番組2に有効な
プラグインを確認
Streaming Servers
Live
Manager
Master
Controller
Server
Manager
Player
Manager
PC
ゲーム
TV
スマホ
Job
Handler
サーバオペレーション
DMM.com ラボ マイクロサービスTIPS
15分
サブシステム切り出し#PUB / SUB
PUB/SUB メッデージングモデルは、非同期メッセージ
ングパラダイムの一種であり、メッセージの送信者(出
版側)が特定の受信者(購読側)を想定せずにメッセー
ジを送るようプログラムされたものである
引用:https://ja.wikipedia.org/wiki/出版-購読型モデル
DMM.com ラボ マイクロサービスTIPS
15分
サブシステム切り出し#PUB / SUB
DMM.com ラボ マイクロサービスTIPS
15分
サブシステム切り出し#PUB / SUB
Streaming Servers
Publisher
Wowza
Streaming Servers
Red5
Streaming Servers
Wowza
社内DC社外DC
Message
Queue
Subscriber
Capistrano
Subscriber
Capistrano
Enqueue
Denqueue
Cluster1から
動画配信
Subscriber
Capistrano
設定投入
RESTful API over HTTP(s) で設計します。
今回は Twitter REST API を参考にしました。
DMM.com ラボ マイクロサービスTIPS
15分
APIポリシー定義
詳細は
「Web API The Good Parts」
でお願いします。
HATEOAS に習いクライアントサイドに必要な前提
条件を減らすことで、サーバサイドでURIを制御でき
るようになります。
HATEOAS (hypermedia as the engine of application state)
RESTful API を拡張したアーキテク
チャパターン。具体的には、レスポ
ンス値にリンクが付与される。よっ
て、クライアントサイドで次にする
事をリンクから選べるようになる。
{
"name": "DMM",
"links": [ {
"rel": "self",
"href": “http://www.dmm.com”
} ]
}
DMM.com ラボ マイクロサービスTIPS
15分
APIポリシー定義
⑥ TraceID をつけてログ出力
④ URL + TraceID
① URL
③ なければ TraceID を生成
トレース ID をつけることでデバッグしやくすなります。
DMM.com ラボ マイクロサービスTIPS
15分
APIポリシー定義
System ‘A’
System ‘B’
System ‘C’
② X-DMM-
TRACEIDが
あるか
⑤ HTTP
ヘッダー を
参照
技術選定で、大事にしたいこと…
DMM.com ラボ マイクロサービスTIPS
15分
技術選定
エンジニアに
習得できるか?
エンジニアを
確保できるか?
エンジニアが
成長できるか?
評 価 軸 名 説 明
開 発 コ ス ト 実 装 に 必 要 な コ ー ド 量 。 ツ ール ( イ ンス ト ール ・ 環 境 構 築 ・
デバ ッ グ 等 ) が 充 実 して い る か な ど
環 境 適 応 ブ ラ ウ ザ の 互 換 性 な ど 、 ユ ー ザ 環 境 が 絞 ら れ な い か
機 能 何 が で き る か 。 ど こ の レ イ ヤ ー ま で 網 羅 して い る か
拡 張 性 他 の ラ イ ブ ラ リ や フ レ ームワ ー ク と の 親 和 性 。 一 部 、 ラ イ ブ
ラ リ を 変 え た と し た 時 の コ ス ト が 低 い か
将 来 性 メ ン テ ナ ンス さ れて い る か + 今 後 も さ れ る か 。 技 術 が 古 く な
い か 。 イ ン タ ー ネ ッ ト 上 で 話 題 に な って い る か 。 世 界 的 に 普
及 して い る か
学 習 コ ス ト 該 当 の 技 術 を 習 得 す る た め に 要 す る 時 間 ・ お 金 。 日 本 語 ド キ
ュ メ ン ト ・ 難 易 度 な ど
信 頼 性 リ リ ース か ら ど れ ほ ど た って い る か 。 脆 弱 性 が な い か 。 利 用
実 績
レス ポ ンス 速 度 全 体 の サ イ ズ 。 レン ダ リ ン グ ・ ブ ラ ウ ザ の 動 作 レス ポ ンス
 ISO/IEC9126(JIS X 0129-1)ソフトウェア品質特性と副特性 から抜粋
DMM.com ラボ マイクロサービスTIPS
15分
技術選定
評価軸名 言語1 言語2 言語3 言語4 言語5
開発コスト 3 4 4 4 4
環境適応 4 5 3 4 5
機能 5 3 4 3 3
拡張性 4 3 2 4 2
将来性 3 4 3 4 4
学習コスト 6 6 8 8 10
信頼性 4 4 4 4 3
レスポンス速度 4 3 5 4 4
33 32 33 35 35
例
DMM.com ラボ マイクロサービスTIPS
15分
技術選定
5点満点で、案件によっては評価軸のスコアを倍にし、その合計値で決定します。
将来性は、GoogleTrend や Qiitaトレンド、信頼性は ダウンロード数やメンテナンス
頻度で判断します。
結果、Ruby + Go + AngularJS を採用しました。
DMM.com ラボ マイクロサービスTIPS
15分
技術選定
AngularJS
{wrap} bootstrap
Go
Ruby
+
+
RDOC
JSON
Hyper Schema
新たなプロジェクトへの参画
大規模で高負荷が予想される
新システムの設計に抜 されました!
新たなプロジェクトへの参画
大規模?
高負荷?
設計したことない…
一体何をすれば???
新たなプロジェクトへの参画
• DMM.comの重要サービスである
 動画配信システムのリプレース
• プレイヤーと動画を橋渡しするためのAPIと管理機能
Streaming Servers
Live
Manager
Master
Controller
Server
Manager
Player
Manager
PC
ゲーム
TV
スマホ
Job
Handler
新たなプロジェクトへの参画
技術選定 ∼ 管理系システム
配信情報やサーバー設定をするためのAPI + 管理Portal
• 負荷は少ないと予想される
• 柔軟なシステムであることが求められる
• サービスとのビジネスロジックは分離する
• 変更に即座に対応する
• ライブラリを活用して柔軟性を持たせる
技術選定 ∼ 管理系システム
Ruby / Node.js / PHP7 などが候補にあがりましたが
今まではPHP中心でした。
しかし、あるメンバーの Railsやりたい! という
高いモチベーションにより…
Ruby on Railsに決まりました!
技術選定 ∼ バックエンドAPI
プレイヤーに再生情報を返すためのAPI
• 高負荷が予想される
• 堅牢なシステムである必要がある
• ビジネスロジックは分離し、変更は少なくする
• プラグインアーキテクチャで柔軟性を持たせる
技術選定 ∼ バックエンドAPI
Java / Go / Erlang / Cなどが思いつきましたが、
いずれも業務で使ったコトがないのでよくわかりません。
(PHPやRubyでは無理そうです。。)
楽しい言語選定
【必須条件1】
容易に高負荷をさばけること(毎秒数千リクエスト以上)
C
D
Erlang
node.js
Scala
Elixir
Go
Java (vertex)
楽しい言語選定
【必須条件2】 
開発・保守しやすいこと
○ Go
○ Java
☓ C
☓ D
☓ Erlang
☓ Elixir
? node.js
▲ Scala
楽しい言語選定
【条件3】
これから盛り上がりそうなこと
楽しい言語選定
Go言語がよさそう!
楽しい言語選定
さらに詳しく調べてみました。
Go言語とは?
• 2009年にGoogleが開発した言語
• 静的型付・コンパイル型
• ネットワークプログラミングに向いている
• 標準ライブラリが充実
• Googleを始め国内でも採用実績多数
※画像引用元 : https://github.com/golang-samples/gopher-vector
Go言語とは? ∼その独自の文化∼
シンプルかつ厳格なルール
• 標準のコードフォーマット
• 標準のコーディングスタイル
• ファイル名やメソッド名の命名規則による意味付け
• コンパイル時Warningという考え方はない。
• 未使用変数や無駄なインポートは許さない
Go言語とは? ∼その独自の文化∼
シンプルな文化を強いられますが
ツールによるサポートがあります。
gofmtが自動的にソースコードをフォーマットする。

(エディタで保存するたびに自動実行させましょう)
Before
1 package main
2 import ("fmt"); func main() {
3 fmt.Printf("hello, worldn")//print
4 }
Go言語とは? ∼その独自の文化∼
gofmtが自動的にソースコードをフォーマットする。

(エディタで保存するたびに自動実行させましょう)
After
1 package main
2
3 import (
4 "fmt"
5 )
6
7 func main() {
8 fmt.Printf("hello, worldn") //print
9 }
Go言語とは? ∼その独自の文化∼
goimportsが自動的にimportの過不足を修正する。
Before
1 package main
2 import (
3 "fmt"
4 "reflect" // not used. error!!!!!
5 "strconv"
6 // "strings" // need!!!!!
7 )
8 func main() {
9 ary := strings.Split("0120-123-456", "-")
10 fmt.Println(ary)
11 for _, num := range ary {
12 n, err := strconv.Atoi(num)
13 fmt.Println(n + 1)
14 }
15 }
Go言語とは? ∼その独自の文化∼
goimportsが自動的にimportの過不足を修正する。
After
1 package main
2 import (
3 "fmt"
4 "strconv"
5 "strings" // added
6 // "strings" // need!!!!!!!
7 )
8 func main() {
9 ary := strings.Split("0120-123-456", "-")
10 fmt.Println(ary)
11 for _, num := range ary {
12 n, _ := strconv.Atoi(num)
13 fmt.Println(n + 1)
14 }
15 }
Go言語とは? ∼その独自の文化∼
golintがコーディング規約違反を指摘する。

(コミット前に叩きましょう)
Go言語とは? ∼その独自の文化∼
楽しい言語選定
実行ツール類もシンプルです!
go get が依存ライブラリをダウンロードする
go get と打つだけ!
設定ファイル不要!
Go言語とは? ∼その独自の文化∼
go build がプログラムをビルドする。
go build と打つだけ!
Makefileファイル不要!
Go言語とは? ∼その独自の文化∼
go run がプログラムをすぐに実行する。
go run main.goと打つだけ!
Go言語とは? ∼その独自の文化∼
go test がプログラムをテストする。
go test パッケージ名/.. と打つだけ!
Go言語とは? ∼その独自の文化∼
go rename がソースをリファクタリングする。
gorename -from ‘変更前’
-to ‘変更後’
と打つだけ!
Go言語とは? ∼その独自の文化∼
楽しい言語選定
良さそうです。
ではなぜGoが良いのか?
まとめましょう。
なぜGo言語なのか?
PHPやRubyと逆の発想 - メリット
• 実行速度が速い
• 環境構築がものすごく楽!!
• バージョン依存の問題が少ない!
• バグになりそうなコードは除外される
• アセンブリにコンパイルすることができる
なぜGo言語なのか?
PHPやRubyと逆の発想 - デメリット
• JSONなどの動的データの扱いは不向き
• 戻り値によるエラーチェックが必須で冗長になりがち
• ライブラリやノウハウが少ない
• デバッガやロガー周りが充実していない
なぜGo言語なのか?
最終的な決定要素
• ハイパフォーマンスであること
• システムコールまで追えること
• 実用環境で十分な採用実績があること
• 学習が容易で保守しやすいこと
• ノウハウが資産になること
• 今後もビジネスニーズがあること
Ruby vs Go!
イメージ的な違い
Ruby Go
富豪的プログラミング
動的スクリプト
おもてなし
オブジェクト指向
メソッドチェーン
豊富なライブラリ
大変なバージョン依存
環境構築でハマる
シンプルさを追求
静的コンパイル
郷に入っては郷に従え
並行プログラミング
C言語的
必要十分な標準ライブラリ
徹底した後方互換性
バイナリ一つ置くだけ
Ruby vs Go!
フレームワーク
Go
Rails or Sinatra
フレームワークのルールに従う
フレームワークとgemで賄う
言語仕様のルールに従う
いろいろ

(revel, gorilla, goji, gin,
gizmo, gocraft, go kit…)
必要なものを組み立てる
Ruby
Ruby vs Go!
開発方法の比較
(なし)
rails / runner / rake …
bundle / gems / gulp …
RSpec

便利だが覚えることが多い
RCover
Autodoc
peek / New Relicなど
go build
go run hoge.go
go get (バージョン管理不要)
go test

普通のプログラム(assertなし)
go test -cover
go doc
go test -pprof
ビルド
実行
依存設定
単体テスト
カバレッジ
ドキュメント
プロファイラ
Ruby vs Go! ∼ コードの比較
数字の文字配列を2倍にしてカンマ区切りの文字列を表示
Ruby
1 p ["1","2","3","4","5"].map {|n| n.to_i * 2}.join(‘,')
> "2,4,6,8,10"
Ruby vs Go! ∼ コードの比較
数字の文字配列を2倍にしてカンマ区切りの文字列を表示
Go
1 package main
2
3 import (
4 "fmt"
5 "strconv"
6 "strings"
7 )
8
9 func main() {
10 ary := [...]string{"1", "2", "3", "4", "5"}
11 nums := make([]string, len(ary))
12
13 for i, n := range ary {
14 if num, err := strconv.Atoi(n); err == nil {
15 nums[i] = strconv.Itoa(num * 2)
16 }
17 }
18
19 fmt.Printf("%+vn", strings.Join(nums, ","))
20 }
Ruby vs Go!
心配事
GoRuby
バージョンアップについていけ
るか?
もっとベストプラクティスがあ
るのでは? (疑心暗鬼)
Ruby vs Go!
言語に対する批判
Go
自由すぎるシンタックス
黒魔術メタプログラミング
突如襲い掛かる のエラー
言語として退化している
ツール類はよく変わる
デフォルト引数がない
Ruby
const引数がない
Classがない
継承がない
オーバーロードがない
三項演算子がない
そんな異なる二つの言語ですが
一つだけ共通点が…
開発していて楽しい!
Goを活かしたアーキテクチャ
KVSとしてAerospikeを採用
• JSONオブジェクトをmsgpackして利用
• 1ms程度の低レイテンシーを実現
• クラスタリングの運用が非常に楽
• Go言語用の公式ライブラリあり
Goのツボ ∼ configリロード
configファイルの扱い
設定はconfigファイルにしておいて読み込みたい
しかしファイルをリクエストごとに読み込むのは
コストが高い。
Go言語は並行プログラミングに向いている

そこでLinuxシグナルを利用したhot reloadを実装した。
参考 : http://openmymind.net/Golang-Hot-Configuration-Reload/
Goのツボ ∼ configリロード
config hotリロードの手順
1. 初期化時にconfigを読み込み失敗したらプロセスを終了
2. シグナルを待ち受けるgoroutineを作成
3. シグナルが来たらロックをかけてconfigをリロード
4. 読み込みに失敗したら元のデータをそのまま使う
Goのツボ ∼ configリロード1/2
1 func init() {
2 loadConfigs(true)
3
4 s := make(chan os.Signal, 1)
5 signal.Notify(s, syscall.SIGHUP)
6 go func() {
7 defer handleRuntimeError() // point!
8 for {
9 <-s
10 loadConfigs(false) // 3
11 }
12 }()
13 }
14
15 func handleRuntimeError() {
16 if r := recover(); r != nil {
17 log.Printf("Error : Recover from error! ", r)
18 }
19 }
←1. 初期化時にconfig読み込み
←2.SIGHUPを待ち受ける
←エラー対策
←3. configをリロード
←エラーはログを残して続行
Goのツボ ∼ configリロード2/2
1 func loadKVS(fail bool) {
2
3 temp = loadFile(fail, kvsFn)
4 if env.Env == env.Development {
5 tempHosts = temp.Development
6 }
7
8 client, err := as.Connection(nil, tempHosts...)
9 if err != nil {
10 if fail {
11 os.Exit(1)
12 }
13 return
14 }
15 kvsLock.Lock()
16 kvsHosts = tempHosts
27 kvsLock.Unlock()
18 }
←configファイル読み込み
←環境ごとに切り替え
←動作確認
←初期化時エラーなら終了
←リロード時エラーなら無視
←ロックして更新
Goのツボ ∼ 悪魔のデーモン化
悪魔のデーモン化
Goは公式にはfork()できない。
そのためデーモン化は完全にはできない。
今回はfacebookgo/graceを使ってgracefulがしたい。
しかし、PIDが変わってしまいSupervisordが使えない!
ベストプラクティスを探し求めて長い旅へ…
Goのツボ ∼ 環境変数
環境変数の変え方
コンパイル時にタグを使う。
タグを使うとコンパイルするファイルを選択できる。
ファイルをわけておくと定数の定義を変えられる。
…しかし、実行コストが気になりませんか?
Goのツボ ∼ 環境変数
定数が最適化されるか試してみました! (何もしないコード)
1 package main
2
3 import "log"
4
5 const flag = false
6
7 func emptyFunc(msg string) {
8 if flag { // is false
9 log.Println(msg)
10 }
11 }
12
13 func main() {
14 emptyFunc("hello world!") // do nothing
15 }
←このコードは消えて欲しい
Goのツボ ∼ 環境変数
最適化されました!(但し関数呼び出しは残ります。) 
素敵な開発フローお見せします
素敵な開発フロー
APIの開発方法はさまざまですが…
• API仕様書を先に書く?
• テストを先に書く?
• モックアップサービスを使う?
素敵な開発フロー
LL系の開発などでこんな経験ありませんか?
1. APIのパラメータ名が変更になりました。
2. ドキュメントを修正します。
3. バリデーションファイルも忘れずに修正します。
4. プログラムのリクエストやレスポンスの整形部分も変え
ます。
5. ロジックも変更しました。(が一部修正し忘れました)
6. テストが通りました。
7. いざ本番にデプロイすると、 Undefinedエラーが発生!
素敵な開発フロー
API定義を書くだけでよい自動変換ツールを取り入れました!
1. APIごとにJSON Hyper SchemaでYAMLを書く
2. ドキュメント(API仕様書)が自動的に生成される
3. バリデーション定義のJSONが自動的に生成される
4. Go言語の構造体定義が自動的に生成される
5. APIごとのバリデーションとハンドラ登録処理が自動的に
生成される
参考 : http://blog.wacul.co.jp/blog/2014/10/28/go-rest-api/
素敵な開発フロー
メタデータ
API1.yml
API2.yml
API3.yml
開発者
API定義
手動管理
編集
パラメーター・レスポンス
構造体定義
バリデーション定義
API1 ハンドリング処理
API3 ハンドリング処理
API4 ハンドリング処理
API仕様書
API定義
ファイル
API1 ロジック
API2 ロジック
API3 ロジック
GOソース
GOソース
手動管理
自動生成
パッチによる
自動変換
自動生成PRMDX
により結合
JSON Hyper Achemaによる開発フロー
素敵な開発フロー
メリット
• ロジックファイルの分離でバシバシ定義を修正できる
• 構造体の生成と静的チェックでしっかり修正漏れを防げる
工夫したところ
• バリデーションはAPI定義をJSON化しconfigと共にリロードできる!
JSON Hyper Schemaって素敵!
お見せします! (WebAPIパラメータ名の変更)
1. API定義を修正
2. ツールを実行
3. ロジックを修正
4. コンパイルして修正漏れがないかチェック
5. 完成!
詳しくは3月3日(木)の勉強会で!
新しいプロジェクトが
続々と進行中!
よりよいプロダクトを目指して。
さらなる開発効率を求めて。
貴方の「やりたい!」をDMMで!!
ご静聴ありがとうございました。

More Related Content

What's hot

とにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みるとにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みるMasatoshi Tada
 
日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについてkumake
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションMasahiko Sawada
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学MITSUNARI Shigeo
 
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮Hibino Hisashi
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法Tetsutaro Watanabe
 
FastAPIのテンプレートプロジェクトがいい感じだった話
FastAPIのテンプレートプロジェクトがいい感じだった話FastAPIのテンプレートプロジェクトがいい感じだった話
FastAPIのテンプレートプロジェクトがいい感じだった話NipponAlgorithm
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムMySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムKouhei Sutou
 
MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法yoku0825
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話Kumazaki Hiroki
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ増田 亨
 
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)NTT DATA Technology & Innovation
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術Takuto Wada
 
Kibanaでsysstatを可視化する
Kibanaでsysstatを可視化するKibanaでsysstatを可視化する
Kibanaでsysstatを可視化するKensuke Maeda
 
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけらAtsushi Nakamura
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装infinite_loop
 
Amazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデート
Amazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデートAmazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデート
Amazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデートAmazon Web Services Japan
 

What's hot (20)

At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
とにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みるとにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みる
 
日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについて
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
 
FastAPIのテンプレートプロジェクトがいい感じだった話
FastAPIのテンプレートプロジェクトがいい感じだった話FastAPIのテンプレートプロジェクトがいい感じだった話
FastAPIのテンプレートプロジェクトがいい感じだった話
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムMySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
 
MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
 
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
 
実践 NestJS
実践 NestJS実践 NestJS
実践 NestJS
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
 
Kibanaでsysstatを可視化する
Kibanaでsysstatを可視化するKibanaでsysstatを可視化する
Kibanaでsysstatを可視化する
 
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
 
Amazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデート
Amazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデートAmazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデート
Amazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデート
 

Similar to マイクロサービス時代の動画配信基Ruby×go=∞

Quipperエンジニアセミナー 20121107
Quipperエンジニアセミナー 20121107Quipperエンジニアセミナー 20121107
Quipperエンジニアセミナー 20121107Akifumi Yokoi
 
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGGroovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGUehara Junji
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力ThinReports
 
オープンハードで、こんなガジェット欲しくね~?(2010 03-06)
オープンハードで、こんなガジェット欲しくね~?(2010 03-06)オープンハードで、こんなガジェット欲しくね~?(2010 03-06)
オープンハードで、こんなガジェット欲しくね~?(2010 03-06)博宣 今村
 
Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介Yasushi Ishikawa
 
Site Reliability Engineering (SRE)を可能にするOpenPIEのご紹介
Site Reliability Engineering (SRE)を可能にするOpenPIEのご紹介Site Reliability Engineering (SRE)を可能にするOpenPIEのご紹介
Site Reliability Engineering (SRE)を可能にするOpenPIEのご紹介OSSラボ株式会社
 
ABEMA を次のフェーズへ進化させる技術への取り組み
ABEMA を次のフェーズへ進化させる技術への取り組みABEMA を次のフェーズへ進化させる技術への取り組み
ABEMA を次のフェーズへ進化させる技術への取り組みYusuke Goto
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~infinite_loop
 
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?Developers Summit
 
SIG-Glocalization #13「アプリの海外展開、どうしていますか?」講演スライド
SIG-Glocalization #13「アプリの海外展開、どうしていますか?」講演スライドSIG-Glocalization #13「アプリの海外展開、どうしていますか?」講演スライド
SIG-Glocalization #13「アプリの海外展開、どうしていますか?」講演スライドIGDA JAPAN
 
SkyWay国内唯一のCPaaS
SkyWay国内唯一のCPaaSSkyWay国内唯一のCPaaS
SkyWay国内唯一のCPaaSKensaku Komatsu
 
WebRTCを始めよう! HTML5fun 第一回勉強会
WebRTCを始めよう! HTML5fun 第一回勉強会WebRTCを始めよう! HTML5fun 第一回勉強会
WebRTCを始めよう! HTML5fun 第一回勉強会Yusuke Naka
 
Opa - Cloud Language
Opa - Cloud LanguageOpa - Cloud Language
Opa - Cloud LanguageTozo Tanaka
 
HTML5時代のネット動画技術〜良い子悪い子普通の子(増補改訂版)
HTML5時代のネット動画技術〜良い子悪い子普通の子(増補改訂版)HTML5時代のネット動画技術〜良い子悪い子普通の子(増補改訂版)
HTML5時代のネット動画技術〜良い子悪い子普通の子(増補改訂版)Teiichi Ota
 
Robomec2014 rtm講習会第1部(その1)
Robomec2014 rtm講習会第1部(その1)Robomec2014 rtm講習会第1部(その1)
Robomec2014 rtm講習会第1部(その1)openrtm
 
2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについてMasahito Zembutsu
 
Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486Tsunenori Oohara
 
2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMFAtomu Hidaka
 
Getting Started .NET Core
Getting Started .NET CoreGetting Started .NET Core
Getting Started .NET CoreYuta Matsumura
 

Similar to マイクロサービス時代の動画配信基Ruby×go=∞ (20)

Quipperエンジニアセミナー 20121107
Quipperエンジニアセミナー 20121107Quipperエンジニアセミナー 20121107
Quipperエンジニアセミナー 20121107
 
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGGroovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUG
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
 
オープンハードで、こんなガジェット欲しくね~?(2010 03-06)
オープンハードで、こんなガジェット欲しくね~?(2010 03-06)オープンハードで、こんなガジェット欲しくね~?(2010 03-06)
オープンハードで、こんなガジェット欲しくね~?(2010 03-06)
 
Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介
 
Site Reliability Engineering (SRE)を可能にするOpenPIEのご紹介
Site Reliability Engineering (SRE)を可能にするOpenPIEのご紹介Site Reliability Engineering (SRE)を可能にするOpenPIEのご紹介
Site Reliability Engineering (SRE)を可能にするOpenPIEのご紹介
 
ABEMA を次のフェーズへ進化させる技術への取り組み
ABEMA を次のフェーズへ進化させる技術への取り組みABEMA を次のフェーズへ進化させる技術への取り組み
ABEMA を次のフェーズへ進化させる技術への取り組み
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
 
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
 
SIG-Glocalization #13「アプリの海外展開、どうしていますか?」講演スライド
SIG-Glocalization #13「アプリの海外展開、どうしていますか?」講演スライドSIG-Glocalization #13「アプリの海外展開、どうしていますか?」講演スライド
SIG-Glocalization #13「アプリの海外展開、どうしていますか?」講演スライド
 
SkyWay国内唯一のCPaaS
SkyWay国内唯一のCPaaSSkyWay国内唯一のCPaaS
SkyWay国内唯一のCPaaS
 
OSC福岡 20111203
OSC福岡 20111203OSC福岡 20111203
OSC福岡 20111203
 
WebRTCを始めよう! HTML5fun 第一回勉強会
WebRTCを始めよう! HTML5fun 第一回勉強会WebRTCを始めよう! HTML5fun 第一回勉強会
WebRTCを始めよう! HTML5fun 第一回勉強会
 
Opa - Cloud Language
Opa - Cloud LanguageOpa - Cloud Language
Opa - Cloud Language
 
HTML5時代のネット動画技術〜良い子悪い子普通の子(増補改訂版)
HTML5時代のネット動画技術〜良い子悪い子普通の子(増補改訂版)HTML5時代のネット動画技術〜良い子悪い子普通の子(増補改訂版)
HTML5時代のネット動画技術〜良い子悪い子普通の子(増補改訂版)
 
Robomec2014 rtm講習会第1部(その1)
Robomec2014 rtm講習会第1部(その1)Robomec2014 rtm講習会第1部(その1)
Robomec2014 rtm講習会第1部(その1)
 
2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて
 
Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486
 
2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF
 
Getting Started .NET Core
Getting Started .NET CoreGetting Started .NET Core
Getting Started .NET Core
 

More from DMM.com

DMM.comにおけるビッグデータ処理のためのSQL活用術
DMM.comにおけるビッグデータ処理のためのSQL活用術DMM.comにおけるビッグデータ処理のためのSQL活用術
DMM.comにおけるビッグデータ処理のためのSQL活用術DMM.com
 
社内向けに恋愛ゲーム作ってみた
社内向けに恋愛ゲーム作ってみた社内向けに恋愛ゲーム作ってみた
社内向けに恋愛ゲーム作ってみたDMM.com
 
20151014 spark勉強会補足資料
20151014 spark勉強会補足資料20151014 spark勉強会補足資料
20151014 spark勉強会補足資料DMM.com
 
Dmmに入社してみた
Dmmに入社してみたDmmに入社してみた
Dmmに入社してみたDMM.com
 
リアルタイムトレンド抽出飛び込み用
リアルタイムトレンド抽出飛び込み用リアルタイムトレンド抽出飛び込み用
リアルタイムトレンド抽出飛び込み用DMM.com
 
It manager in フィリピン
It manager in フィリピンIt manager in フィリピン
It manager in フィリピンDMM.com
 
高速開発を支えるDMMプラットフォームの作り方 ~DMM.makeの場合~
高速開発を支えるDMMプラットフォームの作り方 ~DMM.makeの場合~高速開発を支えるDMMプラットフォームの作り方 ~DMM.makeの場合~
高速開発を支えるDMMプラットフォームの作り方 ~DMM.makeの場合~DMM.com
 

More from DMM.com (7)

DMM.comにおけるビッグデータ処理のためのSQL活用術
DMM.comにおけるビッグデータ処理のためのSQL活用術DMM.comにおけるビッグデータ処理のためのSQL活用術
DMM.comにおけるビッグデータ処理のためのSQL活用術
 
社内向けに恋愛ゲーム作ってみた
社内向けに恋愛ゲーム作ってみた社内向けに恋愛ゲーム作ってみた
社内向けに恋愛ゲーム作ってみた
 
20151014 spark勉強会補足資料
20151014 spark勉強会補足資料20151014 spark勉強会補足資料
20151014 spark勉強会補足資料
 
Dmmに入社してみた
Dmmに入社してみたDmmに入社してみた
Dmmに入社してみた
 
リアルタイムトレンド抽出飛び込み用
リアルタイムトレンド抽出飛び込み用リアルタイムトレンド抽出飛び込み用
リアルタイムトレンド抽出飛び込み用
 
It manager in フィリピン
It manager in フィリピンIt manager in フィリピン
It manager in フィリピン
 
高速開発を支えるDMMプラットフォームの作り方 ~DMM.makeの場合~
高速開発を支えるDMMプラットフォームの作り方 ~DMM.makeの場合~高速開発を支えるDMMプラットフォームの作り方 ~DMM.makeの場合~
高速開発を支えるDMMプラットフォームの作り方 ~DMM.makeの場合~
 

Recently uploaded

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 

Recently uploaded (10)

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 

マイクロサービス時代の動画配信基Ruby×go=∞