SlideShare una empresa de Scribd logo
1 de 32
Descargar para leer sin conexión
2015/10/06
株式会社インタースペース
沖本 勇矢
 元々はSIerにてJava、C#を中心に開発
 Scala歴はまだ数カ月の駆け出し
 酒が大好き酒飲みエンジニア
沖本 勇矢(Yuya Okimoto)
 Playframeworkとは
 なぜPlayを選んだのか
 環境構築方法
 初歩的な使い方
 弊社導入事例
 バージョン2.4へアップデート
 まとめ
 ScalaとJava言語で書かれたオープンソースのWebア
プリケーションフレームワーク
 Ruby on Railsをご存じの方は、まさにそれと似た感
じのMVCデザインパターン
 Typesafe社がサポート(scala言語の開発を主導して
いる企業)
※参照 https://www.playframework.com/
 とにかく構築がかんたん(内蔵webサーバ、インメモリ
DB利用可)
 シンプルで軽量(リソース消費が最小限)
 scalaのwebフレームワークとしては一番メジャー
 弊社の現行システムで使用しているJava以外にも、
scalaという技術的資産を残したかった
 準備するもの
jdk8(事前にPATHは通しておく)
 Typesafe activatorのダウンロード
https://www.playframework.com/download
(任意のフォルダに解凍しておく)
 事前にダウンロードして解凍したフォルダから、
activator new <プロジェクト名> play-scala
C:¥Users¥public¥workspace>C:¥activator-1.3.5¥activator new sample-project play-scala
※Windowsの場合のパス表記ですが、コマンドはOSに差異はありません
 ステップ1で作成されたプロジェクトフォルダに移動し、
activator run
C:¥Users¥public¥workspace¥sample-project¥activator run
※Windowsの場合のパス表記ですが、コマンドはOSに差異はありません
 ブラウザでhttp://localhost:9000でアクセス出来
れば、環境構築完了です
※ただし初回は関連モジュールのDLで時間かかります
app → アプリケーションのソースコード(ここにすべてのソースコード配置)
└ controllers → アプリケーションのコントローラ
└ models → アプリケーションのビジネスロジック層
└ views → テンプレート
build.sbt → アプリケーションビルドスクリプト
conf → 設定ファイル
└ application.conf → メイン設定ファイル
└ routes → ルート定義
public → 公開アセット(静的なコンテンツはここに配置)
└ stylesheets → CSS ファイル
└ javascripts → JavaScript ファイル
└ images → 画像ファイル
project → sbt 設定ファイル
└ build.properties → sbt プロジェクトの基本ファイル
└ plugins.sbt → Play 自身の定義を含む sbt プラグイン
lib → 管理されないライブラリ依存性
logs → デフォルトのログ保存場所
└ application.log → デフォルトのログファイル
target → Play により生成されたファイル
test → 単体テストや機能テストのソースフォルダ
 controllerを作成
 ビジネスロジックを作成(model)
 テンプレートを作成(view)
 作成したcontrollerと、紐づけるURLを設定ファイル
(routes)に記述
今回はメッセージを表示するだけのごく簡単な一例
Playへのリクエストの玄関口
i18n対応の為、MessageApiをDIし、I18nSupportをmixin
※messagesを外部化しない場合は不要
package controllers
import play.api._
import play.api.mvc._
import play.api.i18n._
import javax.inject._
import models.SampleModel
class Application @Inject() (val messagesApi: MessagesApi)
extends Controller with I18nSupport {
def now = Action {
Ok(views.html.now(SampleModel.getDateTime))
}
}
ビジネスロジックを記述
ServiceやDAOを配置して処理を行う
ルール的に必ずしも分ける必要はないが、modelとして
切り離すのが一般的
package models
import org.joda.time.DateTime
object SampleModel {
def getDateTime(): DateTime = {
DateTime.now
}
}
プレゼンテーションレイヤー
暗黙パラメータとしてMessagesを受け取る
※Messagesを使用しない場合は不要
@import org.joda.time.DateTime
@(datetime: DateTime)(implicit messages: Messages)
<div>@Messages("message.now")</div>
<div>@datetime</div>
ルーティング処理の設定
この設定ファイルでURLとcontrollerを紐づけることで
リクエストの受け付けを行う
※リバースルーティングも可能
# Home page
GET / controllers.Application.now
# Map static resources from the /public folder to the /assets URL path
GET /assets/*file controllers.Assets.versioned(path="/public", file: Asset)
 開発体制
人員:2名(内、協力会社1名)
期間:約5カ月
規模:10k弱(画面数で約30画面)
 開発内容
広告関連データをセグメント化して管理するに当たり、
マスタ登録、レポート表示といった機能を提供
※それほど大規模ではないアプリケーション(akka等
の並行処理は行っていない)
今回弊社としては初めてscalaとplayへの挑戦だった為、
いくつか問題点が浮かび上がる
 scala関数型プログラミングに難航
 Playの効果的な使い方がわからない(どういう構築&
開発方法がマッチベターなのか)
元々がJava使いだったので、どうしても関数型には
大きな戸惑いがあったが、その中で特に以下を
意識して実装した
 型を有効利用する
→Typeやclassなどで定義しておく(コンパイルエラーで拾える)
 副作用を避ける
→式を意識して、メソッドを実装するとreturnなども不要で簡潔に
 グッバイvar
→immutableな実装に努める為、極力val変数を使用
ある程度の使い方はわかるのだが、
どういう構築&開発方法がマッチベターなのか?
 とにかく公式ドキュメントを読み込む
→まずは基本はドキュメントが推奨している手法をベー
スにする
 勉強会やセミナーに参加
→他社事例を参考にし、別のアプローチがないか検討
今回弊社では、外部の経験豊富なエンジニアに
参画して頂き、先ほどからお話した問題も含め、
技術支援を頂きながら、すべての課題を解決し、
無事に開発&構築を行うこともできた
→独学でやることも大事だが、やはり有識者は必要
特にライブラリ周りなどの助言は非常に助かった
 構築が簡単で、モジュールのデプロイも楽
 シンプルを謳っているだけあって、動作的には軽さを
感じた
 ただしその一方でコンパイルの時間は少し長く感じた
 またはIDEにEclipseを使用していたが、プラグインが
事前コンパイルエラーを正しく検知しないなど、ちょっ
と使いづらさはあった(IntelliJも試したい所)
 scalikejdbc(データベースアクセス)
 play-flyway(データベースマイグレーション)
 play2-auth(認証ライブラリ)
 scalatest(テスト支援ツール)
 scoverage(カバレッジ取得ツール)
 scalaliform(ソースコードフォーマッタ)
 当初は2.3.7で構築
 今セミナーで何かしらの情報共有が出来るようにと、
早めにバージョンアップ作業をしてみた
 しかし、いきなりコンパイルエラーが500件以上出る
など、少し難航・・・
 対応した内容を簡単にご紹介します
 build.sbtの変更
 あとはひたすら置換
routesGenerator := InjectedRoutesGenerator
object Login extends Controller {
↓
class Login extends Controller {
 Messagesのインタフェースが変更になり、コンパイル
エラーの原因はこれが9割だった
 こちらはMessageApiのDIと、I18nSupportをmixin
し、テンプレートの引数をLangからMessagesに変更
import play.api.i18n._
import javax.inject._
class Login @Inject() (val messagesApi: MessagesApi)
extends Controller with I18nSupport {
 2.4から非推奨になったGlobalSettingsで使用して
いたCSRFFilterを、 HttpFiltersに移行
package global
import play.api.http.HttpFilters
import play.filters.csrf.CSRFFilter
import javax.inject.Inject
class Filters @Inject() (csrfFilter: CSRFFilter) extends HttpFilters {
def filters = Seq(csrfFilter)
}
play.http.filters = "global.Filters"
 application.confには以下を追記
 plugInが非推奨になり、使用していた外部ライブラリ
のmodule化に伴い、application.conf変更
 2.4対応のために更新しているライブラリも多い為、使
用しているライブラリは漏れなくチェック
play.modules.enabled += "scalikejdbc.PlayModule"
play.modules.disabled += "play.api.db.DBModule"
 logger.xml→ logback.xmlの置き換え
 application.confの設定値名変更(play.crypto.secret、
play.i18n.langsなど)
 controllers.Assets.at→controllers.Assets.versione
d
 play.PlayImport.PlayKeys.routesImport→
play.sbt.routes.RoutesKeys.routesImport
弊社システムで行った変更以外にも、数多くの
変更点があります。詳しくはマイグレーションガイドを
参照してください
 とにかく、まずはマイグレーションガイドを穴があくまで
読みましょう
 それでもわからないor私のように英語の読解が不得
意の方は、playのソースを見ましょう
※経験上、その方が解決が早い場合もありました
GithubのURL
https://github.com/playframework/playframework
 Play構築かんたん、シンプルで使いやすい
 知識ゼロベースで作る場合、ごくごくシンプルなシステ
ムなら問題ないが、凝ったことをする際は、無理せず
有識者に知見を求めましょう(gitter等のコミュニティも
あります)
 これから導入する方でplay2.4を使う場合、ネットの
情報が古い場合があるので、必ずバージョンを確認
株式会社インタースペース 沖本様 登壇資料

Más contenido relacionado

La actualidad más candente

ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説
Akira Inoue
 
IaaSクラウド比較'14
IaaSクラウド比較'14IaaSクラウド比較'14
IaaSクラウド比較'14
Kazunori Inaba
 
JavaからScalaへ
JavaからScalaへJavaからScalaへ
JavaからScalaへ
takezoe
 
ASP.NET習得の最短経路を考察する
ASP.NET習得の最短経路を考察するASP.NET習得の最短経路を考察する
ASP.NET習得の最短経路を考察する
Masaki Takeda
 

La actualidad más candente (20)

ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説
 
IaaSクラウド比較'14
IaaSクラウド比較'14IaaSクラウド比較'14
IaaSクラウド比較'14
 
JavaからScalaへ
JavaからScalaへJavaからScalaへ
JavaからScalaへ
 
WebAssembly text format で画像処理を書くぞ
WebAssembly text format で画像処理を書くぞWebAssembly text format で画像処理を書くぞ
WebAssembly text format で画像処理を書くぞ
 
DevLOVE関西2016.2.5 地道にAWS構築自動化に取り組んでいるお話し
DevLOVE関西2016.2.5 地道にAWS構築自動化に取り組んでいるお話しDevLOVE関西2016.2.5 地道にAWS構築自動化に取り組んでいるお話し
DevLOVE関西2016.2.5 地道にAWS構築自動化に取り組んでいるお話し
 
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話す
 
はじめてのASP.NET MVC5
はじめてのASP.NET MVC5はじめてのASP.NET MVC5
はじめてのASP.NET MVC5
 
Application Bootstrap
Application BootstrapApplication Bootstrap
Application Bootstrap
 
JAWS-UG京王線 レッツラーニング LT AWS+WAFなお話
JAWS-UG京王線 レッツラーニング LT AWS+WAFなお話JAWS-UG京王線 レッツラーニング LT AWS+WAFなお話
JAWS-UG京王線 レッツラーニング LT AWS+WAFなお話
 
Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~
Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~
Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~
 
Build Node.js-WASM/WASI Tiny compiler with Node.js
Build Node.js-WASM/WASI Tiny compiler with Node.jsBuild Node.js-WASM/WASI Tiny compiler with Node.js
Build Node.js-WASM/WASI Tiny compiler with Node.js
 
BaaSでゲームサーバを作る話
BaaSでゲームサーバを作る話BaaSでゲームサーバを作る話
BaaSでゲームサーバを作る話
 
AWS+WordPressでつくるFirefoxアプリ
AWS+WordPressでつくるFirefoxアプリAWS+WordPressでつくるFirefoxアプリ
AWS+WordPressでつくるFirefoxアプリ
 
SoftLayer API で資産管理をお手伝い!
SoftLayer API で資産管理をお手伝い!SoftLayer API で資産管理をお手伝い!
SoftLayer API で資産管理をお手伝い!
 
ASP.NET習得の最短経路を考察する
ASP.NET習得の最短経路を考察するASP.NET習得の最短経路を考察する
ASP.NET習得の最短経路を考察する
 
XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論
XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論
XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論
 
baserCMSテーマ制作チュートリアル
baserCMSテーマ制作チュートリアルbaserCMSテーマ制作チュートリアル
baserCMSテーマ制作チュートリアル
 
ASP.NET WEB API 開発体験
ASP.NET WEB API 開発体験ASP.NET WEB API 開発体験
ASP.NET WEB API 開発体験
 
どうなる?Visual Studioの クライアントサイド web開発の今後
どうなる?Visual Studioの クライアントサイド web開発の今後どうなる?Visual Studioの クライアントサイド web開発の今後
どうなる?Visual Studioの クライアントサイド web開発の今後
 
WordPress JSON REST API 〜さらばPHP、さらばWordPressテーマ
WordPress JSON REST API 〜さらばPHP、さらばWordPressテーマWordPress JSON REST API 〜さらばPHP、さらばWordPressテーマ
WordPress JSON REST API 〜さらばPHP、さらばWordPressテーマ
 

Similar a 株式会社インタースペース 沖本様 登壇資料

福岡Ruby会議01 20121201 LT
福岡Ruby会議01 20121201 LT福岡Ruby会議01 20121201 LT
福岡Ruby会議01 20121201 LT
学 松崎
 
クラウドカンファレンスIn静岡 r cloud
クラウドカンファレンスIn静岡 r cloudクラウドカンファレンスIn静岡 r cloud
クラウドカンファレンスIn静岡 r cloud
Kazuki Aranami
 

Similar a 株式会社インタースペース 沖本様 登壇資料 (20)

Spring frameworkが大好きなおはなし
Spring frameworkが大好きなおはなしSpring frameworkが大好きなおはなし
Spring frameworkが大好きなおはなし
 
PlayFramework1.x基礎編
PlayFramework1.x基礎編PlayFramework1.x基礎編
PlayFramework1.x基礎編
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発
 
Single Command Deployのための gradle-aws-plugin講座
Single Command Deployのための gradle-aws-plugin講座Single Command Deployのための gradle-aws-plugin講座
Single Command Deployのための gradle-aws-plugin講座
 
Apex Test Plusの紹介
Apex Test Plusの紹介Apex Test Plusの紹介
Apex Test Plusの紹介
 
Play frameworkの概要
Play frameworkの概要Play frameworkの概要
Play frameworkの概要
 
Talk: serverless-express
Talk: serverless-expressTalk: serverless-express
Talk: serverless-express
 
Introduction to web development 1
Introduction to web development 1Introduction to web development 1
Introduction to web development 1
 
play framework 勉強会 in 関西
play framework 勉強会 in 関西play framework 勉強会 in 関西
play framework 勉強会 in 関西
 
One ASP.NET, OWIN & Katana
One ASP.NET, OWIN & KatanaOne ASP.NET, OWIN & Katana
One ASP.NET, OWIN & Katana
 
OWIN - .NETにおけるPSGI -
OWIN - .NETにおけるPSGI -OWIN - .NETにおけるPSGI -
OWIN - .NETにおけるPSGI -
 
Play jjug2012spring
Play jjug2012springPlay jjug2012spring
Play jjug2012spring
 
20130520 実例で見るAWSの特徴と活用方法@JAWS-UG青森 第1回勉強会
20130520 実例で見るAWSの特徴と活用方法@JAWS-UG青森 第1回勉強会20130520 実例で見るAWSの特徴と活用方法@JAWS-UG青森 第1回勉強会
20130520 実例で見るAWSの特徴と活用方法@JAWS-UG青森 第1回勉強会
 
【資料】【Web開発者向け】クラウドセミナー@渋谷 #2【Azure入門】
【資料】【Web開発者向け】クラウドセミナー@渋谷 #2【Azure入門】【資料】【Web開発者向け】クラウドセミナー@渋谷 #2【Azure入門】
【資料】【Web開発者向け】クラウドセミナー@渋谷 #2【Azure入門】
 
Web matrix2とvisual studio
Web matrix2とvisual studioWeb matrix2とvisual studio
Web matrix2とvisual studio
 
Ansible provisioning
Ansible provisioningAnsible provisioning
Ansible provisioning
 
20110406aws accenture
20110406aws accenture20110406aws accenture
20110406aws accenture
 
福岡Ruby会議01 20121201 LT
福岡Ruby会議01 20121201 LT福岡Ruby会議01 20121201 LT
福岡Ruby会議01 20121201 LT
 
AWSでシステム構築工数を1/10にしつつ、高品質化も実現した枠組みのご紹介
AWSでシステム構築工数を1/10にしつつ、高品質化も実現した枠組みのご紹介AWSでシステム構築工数を1/10にしつつ、高品質化も実現した枠組みのご紹介
AWSでシステム構築工数を1/10にしつつ、高品質化も実現した枠組みのご紹介
 
クラウドカンファレンスIn静岡 r cloud
クラウドカンファレンスIn静岡 r cloudクラウドカンファレンスIn静岡 r cloud
クラウドカンファレンスIn静岡 r cloud
 

Más de leverages_event

Más de leverages_event (20)

Ac tsumugu 20170712
Ac tsumugu 20170712Ac tsumugu 20170712
Ac tsumugu 20170712
 
20171206 tsumugu4 人工知能特集_v1.00_抜粋
20171206 tsumugu4 人工知能特集_v1.00_抜粋20171206 tsumugu4 人工知能特集_v1.00_抜粋
20171206 tsumugu4 人工知能特集_v1.00_抜粋
 
【ヒカ☆ラボ】アーキテクト養成講座「入門編」 折田 武己 氏 登壇資料 20171205
【ヒカ☆ラボ】アーキテクト養成講座「入門編」 折田 武己 氏 登壇資料 20171205【ヒカ☆ラボ】アーキテクト養成講座「入門編」 折田 武己 氏 登壇資料 20171205
【ヒカ☆ラボ】アーキテクト養成講座「入門編」 折田 武己 氏 登壇資料 20171205
 
【ヒカ☆ラボ】 dely株式会社 梅森 翔氏 登壇資料 20171121
【ヒカ☆ラボ】 dely株式会社 梅森 翔氏 登壇資料 20171121【ヒカ☆ラボ】 dely株式会社 梅森 翔氏 登壇資料 20171121
【ヒカ☆ラボ】 dely株式会社 梅森 翔氏 登壇資料 20171121
 
【ヒカ☆ラボ】 dely株式会社 大竹 雅登氏 登壇資料 20171121
【ヒカ☆ラボ】 dely株式会社 大竹 雅登氏 登壇資料 20171121【ヒカ☆ラボ】 dely株式会社 大竹 雅登氏 登壇資料 20171121
【ヒカ☆ラボ】 dely株式会社 大竹 雅登氏 登壇資料 20171121
 
【ヒカ☆ラボ】 dely株式会社 深尾 もとのぶ氏 登壇資料 20171121
【ヒカ☆ラボ】 dely株式会社 深尾 もとのぶ氏 登壇資料 20171121【ヒカ☆ラボ】 dely株式会社 深尾 もとのぶ氏 登壇資料 20171121
【ヒカ☆ラボ】 dely株式会社 深尾 もとのぶ氏 登壇資料 20171121
 
【ヒカ☆ラボ】 dely株式会社 三笠 斉輝氏 登壇資料 20171121
【ヒカ☆ラボ】 dely株式会社 三笠 斉輝氏 登壇資料 20171121【ヒカ☆ラボ】 dely株式会社 三笠 斉輝氏 登壇資料 20171121
【ヒカ☆ラボ】 dely株式会社 三笠 斉輝氏 登壇資料 20171121
 
【ヒカ☆ラボ】 株式会社AMG Solution 山口 博史氏登壇資料 20170817
【ヒカ☆ラボ】 株式会社AMG Solution 山口 博史氏登壇資料 20170817【ヒカ☆ラボ】 株式会社AMG Solution 山口 博史氏登壇資料 20170817
【ヒカ☆ラボ】 株式会社AMG Solution 山口 博史氏登壇資料 20170817
 
【ヒカ☆ラボ】株式会社ライナフ 登壇資料
【ヒカ☆ラボ】株式会社ライナフ 登壇資料【ヒカ☆ラボ】株式会社ライナフ 登壇資料
【ヒカ☆ラボ】株式会社ライナフ 登壇資料
 
【ヒカ☆ラボ】株式会社エアー様~ETLツール活用法について~
【ヒカ☆ラボ】株式会社エアー様~ETLツール活用法について~【ヒカ☆ラボ】株式会社エアー様~ETLツール活用法について~
【ヒカ☆ラボ】株式会社エアー様~ETLツール活用法について~
 
インスタグラムを活用した、マーケティングについて
インスタグラムを活用した、マーケティングについてインスタグラムを活用した、マーケティングについて
インスタグラムを活用した、マーケティングについて
 
ヒカ☆ラボ ユニティ・テクノロジーズ・ジャパン合同会社 安原 祐二氏登壇資料_20170119
ヒカ☆ラボ ユニティ・テクノロジーズ・ジャパン合同会社 安原 祐二氏登壇資料_20170119ヒカ☆ラボ ユニティ・テクノロジーズ・ジャパン合同会社 安原 祐二氏登壇資料_20170119
ヒカ☆ラボ ユニティ・テクノロジーズ・ジャパン合同会社 安原 祐二氏登壇資料_20170119
 
ヒカ☆ラボ 株式会社PR TIMES 山田 和広氏登壇資料 20161129
ヒカ☆ラボ 株式会社PR TIMES 山田 和広氏登壇資料 20161129ヒカ☆ラボ 株式会社PR TIMES 山田 和広氏登壇資料 20161129
ヒカ☆ラボ 株式会社PR TIMES 山田 和広氏登壇資料 20161129
 
ヒカ☆ラボ 株式会社PR TIMES 新井 隆士氏登壇資料 20161129
ヒカ☆ラボ 株式会社PR TIMES 新井 隆士氏登壇資料 20161129ヒカ☆ラボ 株式会社PR TIMES 新井 隆士氏登壇資料 20161129
ヒカ☆ラボ 株式会社PR TIMES 新井 隆士氏登壇資料 20161129
 
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
 
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」UIデザイナー
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」UIデザイナー ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」UIデザイナー
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」UIデザイナー
 
初心者向けGo言語勉強会
初心者向けGo言語勉強会初心者向けGo言語勉強会
初心者向けGo言語勉強会
 
DMM.comラボはなぜSparkを採用したのか?レコメンドエンジン開発の裏側をお話します!
DMM.comラボはなぜSparkを採用したのか?レコメンドエンジン開発の裏側をお話します!DMM.comラボはなぜSparkを採用したのか?レコメンドエンジン開発の裏側をお話します!
DMM.comラボはなぜSparkを採用したのか?レコメンドエンジン開発の裏側をお話します!
 
Node.js×mongo dbで3年間サービス運用してみた話
Node.js×mongo dbで3年間サービス運用してみた話Node.js×mongo dbで3年間サービス運用してみた話
Node.js×mongo dbで3年間サービス運用してみた話
 
株式会社waja 安藤様 登壇資料
株式会社waja 安藤様 登壇資料株式会社waja 安藤様 登壇資料
株式会社waja 安藤様 登壇資料
 

株式会社インタースペース 沖本様 登壇資料