SlideShare ist ein Scribd-Unternehmen logo
1 von 91
Downloaden Sie, um offline zu lesen
play2-memcached 
supports Play 2.4 
! 
~ Play 2.4モジュールのつくりかた ~ 
@mumoshu
九岡 佑介(くおか ~) 
https://www.wantedly.com/users/392910
@mumoshu 
• 2008年~ NECビッグローブ (JavaScript) 
• 2010年~ フリュー (JavaScript/Scala) 
• 2013年~ グリー (Scala/Ruby/インフラ) 
• 2014年~ クラウドワークス(Ruby/インフラ)
福井県出身 
おろし蕎麦が好き
クラウドワークス 
クラウドソーシングサービス 
http://crowdworks.jp/
仕事を探す・仕事をする・報酬をもらう 
インターネット上で完結
仕事の発注と受注ができる 
リモートワーク前提
188種類の仕事が発注できる
“クラウドソーシングは労働の 
「オープンソース化」” 
ジェフ・ハウ 
http://crowdworks.jp/adviser
“自分が将来リモートワークを 
する際の下地づくり” 
@mumoshu
「働く」を通して人々に笑顔を 
クラウドワークスのスローガン 
http://crowdworks.co.jp/
「ありがとう」ボタン 
感謝の気持ち 
の可視化
アジェンダ 
• play2-memcachedについて 
• Playプラグイン?モジュール? 
• Play 2.3までのキャッシュプラグイン 
• Play 2.4からのキャッシュモジュール 
• Play 2.4でキャッシュモジュールを書くときに知ってお 
きたいこと
play2-memcached
play2-memcached 
• https://github.com/mumoshu/play2- 
memcached 
• Play2向けキャッシュ実装の一つ
play2-memcached 
• Play2標準はEhCacheベースのキャッシュ 
• EhCacheはJavaベースのキャッシュ。Playではインメモ 
リキャッシュとして、Play 1の時代から利用されている 
• play2-memcachedを使うと、標準のキャッシュと同じイ 
ンタフェースでMemcachedベースのキャッシュが使える 
• Play2.0時代から存在。そこそこ歴史あり
アジェンダ 
• play2-memcachedについて 
• Playプラグイン?モジュール? 
• Play 2.3までのキャッシュプラグイン 
• Play 2.4からのキャッシュモジュール 
• Play 2.4でキャッシュモジュールを書くときに知ってお 
きたいこと
Playプラグイン?モジュール?
Playプラグイン?モジュール? 
• Playのバージョンによって、Playの拡張方法が 
異なります
Playプラグイン?モジュール? 
• Play 2.3まで 
• Playプラグインでフレームワークを拡張する 
• Play 2.4から 
• Playモジュールで拡張する 
• 2.4.0-M2時点ではプラグインもまだ使えるようだが、既に 
Playの組み込みプラグインはモジュールに置き換えされてい 
る
Playプラグイン?モジュール? 
• キャッシュプラグイン/モジュールでPlayを拡 
張すると、EhCache以外のキャッシュを使え 
るようになる 
• 例えばplay2-memcached
アジェンダ 
• play2-memcachedについて 
• Playプラグイン?モジュール? 
• Play 2.3までのキャッシュプラグイン 
• Play 2.4からのキャッシュモジュール 
• Play 2.4でキャッシュモジュールを書くときに知ってお 
きたいこと
Play 2.3までのキャッシュプ 
ラグイン
Play 2.3までのキャッシュ 
• play.api.cache.CachePlugin 
• play.api.cache.CacheAPI
Play 2.3までのキャッシュ 
• play.api.cache.CachePlugin 
• play.api.cache.CacheAPIの実装を返す 
• Playの起動・終了時に処理をフックできる 
• play.api.cache.CacheAPI 
• キャッシュの読み書きのインタフェース
Play 2.3までのキャッシュ 
• イメージ 
• EhcachePluginがEhcacheCacheAPIImplを提供 
• MemcachedPluginがMemcachedCacheAPIImplを 
提供 
• RedisPluginがRedisCacheAPIImplを提供 
• みんなCacheAPIで同様に扱える!
Play 2.3までのキャッシュ 
• Playプラグインの機構で、PlayにCachePlugin 
をロードさせる 
• 標準のEhCachePluginを無効化して 
MemcachedPluginを有効化すれば、Playは 
Memcachedの方を使う
CacheAPIをロードしてみよう 
• 突然のScalaコード
# application.confに設定が書かれている前提で… 
val app = new 
play.core.StaticApplication(new 
java.io.File(“.”)) 
# 2.3までの、Playがプラグイン経由でMemcachedベー 
スのキャッシュ実装をロードする方法 
play.api.Play.current.plugin[play.api.cache 
.CachePlugin] 
//=> Option[play.api.cache.CachePlugin] = 
Some(com.github.mumoshu.play2.memcached.Mem 
cachedPlugin@47afef67)
# テストならapplication.confに相当する設定をもと 
に… 
val app = play.api.test.FakeApplication( 
additionalConfiguration = Map( 
"ehcacheplugin" -> "disabled", 
"memcached.host" -> "127.0.0.1:11211" 
) 
) 
play.api.Play.current.plugin[play.api.cache 
.CachePlugin]
アジェンダ 
• play2-memcachedについて 
• Playプラグイン?モジュール? 
• Play 2.3までのキャッシュプラグイン 
• Play 2.4からのキャッシュモジュール 
• Play 2.4でキャッシュモジュールを書くときに知ってお 
きたいこと
Play 2.4からのキャッシュモ 
ジュール
Play 2.4からのキャッシュ 
• play.api.inject.Module 
• play.api.inject.ApplicationLifecycle
Play 2.4からのキャッシュ 
• play.api.inject.Module 
• play.api.cache.CacheApiの実装を返す(2.3まで 
はCachePluginでしたね) 
• play.api.inject.ApplicationLifecycle 
• Playの終了時に処理をフックできる(2.3までは 
CachePluginでしたね)
Play 2.4からのキャッシュ 
• プラグインとは別の「Playモジュール」の機構 
を使って、Playの標準モジュールを入れ替えた 
り、追加したりできる。 
• 標準のEhCacheModuleを無効化して、代わり 
にMemcachedModuleを追加すればCacheApi 
の実装を変えることができる
CacheApiをロードしてみよう 
• 突然のScalaコード
# 2.4からの、Playがモジュール経由でMemcachedベー 
スのキャッシュ実装をロードする方法 
app.injector.instanceOf(classOf[play.api.ca 
che.CacheApi]) 
//=> play.api.cache.CacheApi = 
com.github.mumoshu.play2.memcached.Memcache 
dCacheApi@52556f47
Play 2.3との違い 
• 突然のScalaコード
# 2.3までの、Playがプラグイン経由でMemcachedベー 
スのキャッシュ実装をロードする方法 
play.api.Play.current.plugin[play.api.cache 
.CachePlugin].get.api 
//=> play.api.cache.CacheAPI = 
com.github.mumoshu.play2.memcached.Memcache 
dPlugin$$anon$2@6ba816fe
# 2.4からの、Playがモジュール経由でMemcachedベー 
スのキャッシュ実装をロードする方法 
app.injector.instanceOf(classOf[play.api.ca 
che.CacheApi]) 
//=> play.api.cache.CacheApi = 
com.github.mumoshu.play2.memcached.Memcache 
dCacheApi@52556f47
Play 2.3との違い 
• これだけだと書き方の違いだけ、という印象
テスト中でCacheApiを使いたい 
とき 
• 突然のScalaコード
val app = play.api.test.FakeApplication( 
additionalConfiguration = Map( 
"play.modules.enabled" -> 
List("com.github.mumoshu.play2.memcached.Memcach 
edModule"), 
"play.modules.disabled" -> 
List("play.api.cache.EhCacheModule"), 
"play.modules.cache.defaultCache" -> 
“default”, 
"memcached.1.host" -> memcachedHost 
) 
) 
val cacheApi = 
app.injector.instanceOf(classOf[play.api.cache.C 
acheApi])
アジェンダ 
• play2-memcachedについて 
• Playプラグイン?モジュール? 
• Play 2.3までのキャッシュプラグイン 
• Play 2.4からのキャッシュモジュール 
• Play 2.4でキャッシュモジュールを書くときに知ってお 
きたいこと
Play 2.4でキャッシュ関連のモ 
ジュールを書くときに知っておき 
たいこと ~パッケージ編~
これだけは知っておきたい 
パッケージ 
• play.api.inject 
• play.api.cache
これだけは知っておきたい 
クラス 
• play.api.inject.Module 
• play.api.cache.CacheApi
play.api.inject
play.api.inject 
• Play2のDependency InjectionのAPI 
• Play2にはDIフレームワークのラッパとなるAPIと、デ 
フォルトの実装が同梱 
• デフォルト実装はGoogleのDIフレームワーク Guice 
ベース 
• Play 2.4からはPluginは非推奨になり、 
play.api.inject.ModuleによってPlayを拡張
play.api.cache
play.api.inject 
• Play2のDependency InjectionのAPI 
• Play2にはDIフレームワークのラッパとなるAPIと、デ 
フォルトの実装が同梱 
• デフォルト実装はGoogleのDIフレームワーク Guice 
ベース 
• Play 2.4からはPluginは非推奨になり、 
play.api.inject.ModuleによってPlayを拡張
Play 2.4でキャッシュ関連のモ 
ジュールを書くときに知っておき 
たいこと ~クラス編~
play.api.cache.CacheAPI 
/ 
play.api.cache.CacheApi
CacheAPI/CacheApi 
• Play2のキャッシュが満たすべきインタフェー 
ス 
• CacheAPIを実装していればEhCache、 
Memcached、Redisなど同じように扱えるう 
れしさ 
• Play 2.4で少し変わります
CacheAPI/CacheApi 
• 新(2.4から)・旧(2.3まで)のソースを見てみま 
しょう
# Play 2.3まで 
trait CacheAPI { 
def set(key: String, value: Any, 
expiration: Int) 
def get(key: String): Option[Any] 
def remove(key: String) 
}
# Play 2.4から 
trait CacheApi { 
def set(key: String, value: Any, 
expiration: Duration = Duration.Inf) 
def get[T: ClassTag](key: String): 
Option[T] 
def remove(key: String) 
def getOrElse[A: ClassTag](key: String, 
expiration: Duration = Duration.Inf)(orElse: 
=> A): A 
}
CacheAPI/CacheApi 
• get…値の取得 
• set…値の設定 
• remove…値の削除 
• getOrElse…値があれば取得、なければ値を指 
定したデフォルト値で更新して返す
CacheAPI/CacheApi 
• 本質的にはこれらのメソッドを実装すれば、標準的 
なインタフェースでEhCache以外のキャッシュが使 
えます 
• 簡単そう 
• これをPlayのDependency Injectionの仕組みを活用 
して、Playモジュールにまとめ上げるのが最初大変 
かも?
play.api.cache.CachePlugin
play.api.cache.CachePlugin 
• Play2.3までのキャッシュのインタフェース 
• これを実装して標準外のキャッシュを提供
play.api.inject.ApplicationLi 
fecycle
ApplicationLifecycle 
• Play 2.4版play2-memcachedではPlay終了時 
にMemcachedクライアントのリソースを解放 
するため、ApplicationLifecycleを利用 
• Play 2.3版まではPlugin中で同様の処理 
• Play 2.4版からはMemcachedClientProviderで
trait ApplicationLifecycle { 
def addStopHook(hook: () => Future[Unit]): 
Unit 
def addStopHook(hook: 
Callable[F.Promise[Void]]): Unit = { 
import 
play.api.libs.iteratee.Execution.Implicits.tra 
mpoline 
addStopHook(() => 
hook.call().wrapped().map(_ => ())) 
} 
}
ApplicationLifecycle 
• Play 2.4版play2-memcachedではPlay終了時 
にMemcachedクライアントのリソースを解放 
するため、ApplicationLifecycleを利用
val lifecycle: 
play.api.inject.ApplicationLifecycle 
val memcachedClient: 
net.spy.memcached.MemcachedClient 
!!! 
lifecycle.addStopHook(() => 
Future.successful { 
logger.info("Stopping MemcachedPlugin.") 
client.shutdown() 
})
ApplicationLifecycle 
• Play 2.3版まではPlugin中で同様の処理 
• Play 2.4版からはMemcachedClientProvider 
で
ApplicationLifecycle 
• 詳しくは↓ 
https://github.com/playframework/ 
playframework/blob/2.4.0-M2/framework/ 
src/play/src/main/scala/play/api/inject/ 
ApplicationLifecycle.scala
play.api.inject.Module
play.api.inject.Module 
• 型からインスタンスへのバインディングの集 
合体 
• Playはモジュールを使って依存性を解決
play.api.inject.Module 
• bind[CacheApi].to(new 
MemcachedCacheApiProvider(…)) 
で「CacheApiの実装はMemcachedApiProvider 
から得られますよ」ということをPlayに伝える 
• Playに「CacheApiの実装ください」というと、 
MemcachedApiProviderから得たCacheApiの実 
装を返す
Playモジュールをつくりたく 
なってきましたね?
Playモジュールをつくるとき 
に参考になるソース
play.api.cache.EhCacheModu 
le 
• Play2.4標準のEhCacheベースのキャッシュを 
提供するModule 
https://github.com/playframework/ 
playframework/blob/2.4.0-M2/framework/ 
src/play-cache/src/main/scala/play/api/ 
cache/Cache.scala 
• 実質的にリファレンス実装ですよね
play.api.cache.EhCachePlugin 
• Play 2.3まで標準のEhCacheベースのキャッシュを提供 
するPlugin 
• https://github.com/playframework/playframework/ 
blob/2.3.7/framework/src/play-cache/src/main/scala/ 
play/api/cache/Cache.scala 
• ModuleよりPlugin時代のほうがとっつきやすいと思う 
ので、まずPlay 2.3向けにプラグイン書くことからはじ 
めてもいいかも
play2-memcachedのコード 
• https://github.com/mumoshu/play2- 
memcached/tree/play-2.4/plugin/src/main/ 
play_2.4/com/github/mumoshu/play2/ 
memcached
Playモジュールってどうなの? 
• Playプラグインからモジュールに変わって、結 
局何がうれしいの?
Playモジュールってどうなの? 
• Pluginに集中しがちだったコードが綺麗に別れる 
• これまでPluginにはCacheAPI実装の提供と、 
Playのライフサイクルイベントにフックした処 
理、という2つの役割があった 
• これがプラグイン以外のクラスに別れて、複雑 
なPlay2モジュールが作りやすくなってるはず
Playモジュールってどうなの? 
• これまでPlugin化されていないPlayのコア機能 
が多く、込み入った拡張ができないケースがあっ 
た 
• Module導入を機に、DIできる箇所が増えた模 
様。結果的にModuleを使うと、いままでより 
込み入った拡張がしやすくなってると思われる
trait Plugin { 
/** 
* Called when the application starts. 
*/ 
def onStart() {} 
/** 
* Called when the application stops. 
*/ 
def onStop() {} 
/** 
* Is the plugin enabled? 
*/ 
def enabled: Boolean = true 
}
Playモジュールってどうなの?
Playモジュールってどうなの? 
• よさそう
そろそろまとめ
TODO 
• Moduleによる実行時の依存性解決だけでなく、コ 
ンパイル時に依存性解決にも対応する(CakePattern) 
• 必須ではないがPlay2のドキュメントでも推奨さ 
れている 
• https://www.playframework.com/ 
documentation/2.4.0-M2/ 
ScalaCompileTimeDependencyInjection
TODO 
• Play 2.0.x, 2.1.x, 2.2.x, 2.3.x, 2.4.x向けのクロスビ 
ルド 
• 2.3と2.4間で互換性のない変更があるので、同 
じソースではコンパイルエラー。ソースわけない 
とだめ 
• 今はPlayバージョン毎にブランチを分けててメ 
ンテがつらい
TODO 
• Play 2.0.x, 2.1.x, 2.2.x, 2.3.x, 2.4.x向けのクロ 
スビルド 
• 最新ブランチでは以下のようにビルド仕分 
けられるようにした 
PLAY_VERSION=2.3.0 sbt 
PLAY_VERSION=2.4.0-M2 sbt
まとめ 
• Playプラグインは2.4からPlayモジュールに 
• play.api.{cache, inject}パッケージ 
• play.api.inject.{Module, ApplicationLifecycle} 
• play.api.cache.CacheApi 
• play2-memcachedはPlay 2.4に対応してます
まとめ 
• コンパイル時の依存性解決に対応 
• 複数バージョンのPlayとクロスビルドしたい
Playモジュールをつくろう!
We are hiring! 
https://crowdworks.co.jp/recruit/engineer/
質疑応答

Weitere ähnliche Inhalte

Was ist angesagt?

明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy
Takeshi Komiya
 
Pythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacPythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapac
Takeshi Komiya
 
20130723 ecシステムにchefを導入してみた v1.0
20130723 ecシステムにchefを導入してみた v1.020130723 ecシステムにchefを導入してみた v1.0
20130723 ecシステムにchefを導入してみた v1.0
NIFTY Cloud
 

Was ist angesagt? (20)

Ansible troubleshooting 101_2021
Ansible troubleshooting 101_2021Ansible troubleshooting 101_2021
Ansible troubleshooting 101_2021
 
明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy
 
Pythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacPythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapac
 
AzureでLaravel動かしてみた
AzureでLaravel動かしてみたAzureでLaravel動かしてみた
AzureでLaravel動かしてみた
 
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsugSpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
 
20130723 ecシステムにchefを導入してみた v1.0
20130723 ecシステムにchefを導入してみた v1.020130723 ecシステムにchefを導入してみた v1.0
20130723 ecシステムにchefを導入してみた v1.0
 
StackStormを活用した運用自動化の実践
StackStormを活用した運用自動化の実践StackStormを活用した運用自動化の実践
StackStormを活用した運用自動化の実践
 
Windows7でもchefしたい!
Windows7でもchefしたい!Windows7でもchefしたい!
Windows7でもchefしたい!
 
Cedec2013 photon network engine
Cedec2013 photon network engineCedec2013 photon network engine
Cedec2013 photon network engine
 
開発環境をVagrantからdockerに移行してみた
開発環境をVagrantからdockerに移行してみた開発環境をVagrantからdockerに移行してみた
開発環境をVagrantからdockerに移行してみた
 
Infrastructure as Codeの取り組みと改善
Infrastructure as Codeの取り組みと改善Infrastructure as Codeの取り組みと改善
Infrastructure as Codeの取り組みと改善
 
Chef社内勉強会(第1回)
Chef社内勉強会(第1回)Chef社内勉強会(第1回)
Chef社内勉強会(第1回)
 
UE4 MultiPlayer Online Deep Dive: 実践編1 (Byking様ご講演) #UE4DD
UE4 MultiPlayer Online Deep Dive: 実践編1 (Byking様ご講演)  #UE4DDUE4 MultiPlayer Online Deep Dive: 実践編1 (Byking様ご講演)  #UE4DD
UE4 MultiPlayer Online Deep Dive: 実践編1 (Byking様ご講演) #UE4DD
 
Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう!
Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう!Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう!
Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう!
 
Ansible tower 構築方法と使い方
Ansible tower 構築方法と使い方Ansible tower 構築方法と使い方
Ansible tower 構築方法と使い方
 
Spring Framework ふりかえりと4.3新機能
Spring Framework ふりかえりと4.3新機能Spring Framework ふりかえりと4.3新機能
Spring Framework ふりかえりと4.3新機能
 
Photon Webhooks & IPv6対応の最新情報
Photon Webhooks & IPv6対応の最新情報Photon Webhooks & IPv6対応の最新情報
Photon Webhooks & IPv6対応の最新情報
 
Laravel heroku-push
Laravel heroku-pushLaravel heroku-push
Laravel heroku-push
 
Ansibleで味わうHelion OpenStack
Ansibleで味わうHelion OpenStackAnsibleで味わうHelion OpenStack
Ansibleで味わうHelion OpenStack
 
Chef windows linux環境構築
Chef windows linux環境構築Chef windows linux環境構築
Chef windows linux環境構築
 

Ähnlich wie 2014/12/13 第1回 Scala関西勉強会 play2-memcached supports Play 2.4 ~Play 2.4モジュールのつくりかた~

Playbay Play 2.0 plugin イロハのイ
Playbay Play 2.0 plugin イロハのイPlaybay Play 2.0 plugin イロハのイ
Playbay Play 2.0 plugin イロハのイ
Kazuhiro Hara
 
環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介
Etsuji Nakai
 
Personal Cloud Automation
Personal Cloud AutomationPersonal Cloud Automation
Personal Cloud Automation
Etsuji Nakai
 
Djangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込むDjangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込む
2bo 2bo
 
3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfes3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfes
Takeshi Komiya
 

Ähnlich wie 2014/12/13 第1回 Scala関西勉強会 play2-memcached supports Play 2.4 ~Play 2.4モジュールのつくりかた~ (20)

Playbay Play 2.0 plugin イロハのイ
Playbay Play 2.0 plugin イロハのイPlaybay Play 2.0 plugin イロハのイ
Playbay Play 2.0 plugin イロハのイ
 
sbtマルチプロジェクトビルドの使いどころ
sbtマルチプロジェクトビルドの使いどころsbtマルチプロジェクトビルドの使いどころ
sbtマルチプロジェクトビルドの使いどころ
 
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードPlay framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレード
 
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC WebアプリケーションPlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
 
環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介
 
Scala 初めての人が Heroku で Web アプリを公開するまで
Scala 初めての人が Heroku で Web アプリを公開するまでScala 初めての人が Heroku で Web アプリを公開するまで
Scala 初めての人が Heroku で Web アプリを公開するまで
 
dodaiのProvisioning周辺探訪 - dodai勉強会 #4
dodaiのProvisioning周辺探訪 - dodai勉強会 #4dodaiのProvisioning周辺探訪 - dodai勉強会 #4
dodaiのProvisioning周辺探訪 - dodai勉強会 #4
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
 
Personal Cloud Automation
Personal Cloud AutomationPersonal Cloud Automation
Personal Cloud Automation
 
Windows Azure PHP Tips
Windows Azure PHP Tips Windows Azure PHP Tips
Windows Azure PHP Tips
 
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
 
microPCFを使ってみよう
microPCFを使ってみようmicroPCFを使ってみよう
microPCFを使ってみよう
 
CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1
 
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
 
Djangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込むDjangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込む
 
Capistrano
CapistranoCapistrano
Capistrano
 
Azure PlayFab Unity SDK vs C# SDK
Azure PlayFab Unity SDK vs C# SDK Azure PlayFab Unity SDK vs C# SDK
Azure PlayFab Unity SDK vs C# SDK
 
3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfes3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfes
 
Grails 2.0.0.M1の話
Grails 2.0.0.M1の話 Grails 2.0.0.M1の話
Grails 2.0.0.M1の話
 
Spring native について
Spring native についてSpring native について
Spring native について
 

Mehr von 佑介 九岡

Mehr von 佑介 九岡 (11)

今日から始める人のための Kubernetes on AWS ベストプラクティス 2018版
今日から始める人のための Kubernetes on AWS ベストプラクティス 2018版今日から始める人のための Kubernetes on AWS ベストプラクティス 2018版
今日から始める人のための Kubernetes on AWS ベストプラクティス 2018版
 
Continuous Deployments to Multiple Kubernetes Clusters
Continuous Deployments to Multiple Kubernetes ClustersContinuous Deployments to Multiple Kubernetes Clusters
Continuous Deployments to Multiple Kubernetes Clusters
 
From dev to prod: Kubernetes on AWS (short ver.)
From dev to prod: Kubernetes on AWS (short ver.)From dev to prod: Kubernetes on AWS (short ver.)
From dev to prod: Kubernetes on AWS (short ver.)
 
Auto-scaled Concourse CI on AWS w/o BOSH
Auto-scaled Concourse CI on AWS w/o BOSHAuto-scaled Concourse CI on AWS w/o BOSH
Auto-scaled Concourse CI on AWS w/o BOSH
 
AWS re:Invent 2015に初参戦→気づいたらOSS二つ作ってた
AWS re:Invent 2015に初参戦→気づいたらOSS二つ作ってたAWS re:Invent 2015に初参戦→気づいたらOSS二つ作ってた
AWS re:Invent 2015に初参戦→気づいたらOSS二つ作ってた
 
Elasticsearch at CrowdWorks
Elasticsearch at CrowdWorksElasticsearch at CrowdWorks
Elasticsearch at CrowdWorks
 
Basics of Akka
Basics of AkkaBasics of Akka
Basics of Akka
 
Scala-driven Engineering Life
Scala-driven Engineering LifeScala-driven Engineering Life
Scala-driven Engineering Life
 
IDEALIZE YOU
IDEALIZE YOUIDEALIZE YOU
IDEALIZE YOU
 
[Start] Scala
[Start] Scala[Start] Scala
[Start] Scala
 
[Start] Playing
[Start] Playing[Start] Playing
[Start] Playing
 

Kürzlich hochgeladen

Kürzlich hochgeladen (12)

Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 

2014/12/13 第1回 Scala関西勉強会 play2-memcached supports Play 2.4 ~Play 2.4モジュールのつくりかた~