SlideShare a Scribd company logo
1 of 96
Download to read offline
あなたの安心を高速に守る
Container-based CI
宮國 渡 (@gongoZ)
2015-4-18
Agenda
ˆ 背景 (過去にあった問題解決の話)
ˆ 新たなる問題
ˆ 振り返らない高速化が生んだ弊害
ˆ 高速と安定の join
ˆ まとめ
自己紹介
社会人
ˆ 宮國 渡 (MIYAGUNI Wataru)
ˆ 株式会社OCC
ˆ PHP な Web アプリケーション開発・運用保守
プライベート
ˆ github.com/gongo
ˆ Just Do Eat
自己紹介
社会人
ˆ 宮國 渡 (MIYAGUNI Wataru)
ˆ 株式会社OCC
ˆ PHP な Web アプリケーション開発・運用保守
ˆ ↑ これにまつわる話します
プライベート
ˆ github.com/gongo
ˆ Just Do Eat
プロローグ(長いです)
Long long ago..
PHP 3, 4, 5 の時代を渡り歩いてきた、とある Web アプリ
ケーションが居ました
ˆ PHP がテンプレートエンジンであった頃
ˆ HTML にビジネスロジックを書き始めた頃
ˆ PHP がアクセス修飾子の無いオブジェクト指向を取り
入れた頃
ˆ 各人から生まれる複数のオレオレフレームワーク
Long long ago..
PHP 3, 4, 5 の時代を渡り歩いてきた、とある Web アプリ
ケーションが居ました
ˆ PHP がテンプレートエンジンであった頃
ˆ HTML にビジネスロジックを書き始めた頃
ˆ PHP がアクセス修飾子の無いオブジェクト指向を取り
入れた頃
ˆ 各人から生まれる複数のオレオレフレームワーク
ˆ 全部混ざってる!
Long long ago..
PHP 3, 4, 5 の時代を渡り歩いてきた、とある Web アプリ
ケーションが居ました
ˆ PHP がテンプレートエンジンであった頃
ˆ HTML にビジネスロジックを書き始めた頃
ˆ PHP がアクセス修飾子の無いオブジェクト指向を取り
入れた頃
ˆ 各人から生まれる複数のオレオレフレームワーク
ˆ 全部混ざってる!
ˆ 何よりテストが無い!
現代の PHP (Versions)
version initial release EOL
5.4 2012/03/01 2015/09/14
5.5 2013/06/20 2016/06/20
5.6 2014/08/28 2017/08/28
(new! →) 7.0 2015/11/xx
via PHP: Supported Versions
現代の PHP (周辺)
ˆ PHP-FIG — PHP Framework Interop Group
ˆ PSR-FIG なるコミュニティが策定する規約
ˆ PSR-0 —Autoloading Standard
ˆ PSR-2 —Coding Style Guide
ˆ PSR-3 —Logger Interface など
ˆ Composer
ˆ パッケージ依存管理ツール (Ruby でいう Bundler)
ˆ Packagist
ˆ Composer リポジトリ (Ruby でいう RubyGems)
やりたいことは
ˆ 例: PHP 5.5 に上げたい
ˆ 例: もうメンテされてないライブラリから移行したい
ˆ 例: リファクタしたい
でも今の僕たちの装備じゃ
現代への 快適でスムーズな移動 のクリア難しい
装備 = 自動テスト
「これまで」
ˆ テスト仕様書 (Excel) を見ながら手動テスト
ˆ 新機能開発であれば手動テストでも良い
ˆ 自動テストの主流である回帰テストはあくまで 回帰
ˆ 新規のバグは発見できない。経験と勘が必要
「これから」
ˆ 中身が変わっても外側が変わらないことを保証したい
ˆ 古いライブラリからの引越しのたびに全手動テスト?
ˆ PHP バージョンアップのたびに全手動テスト?
まずは装備を整える
手動人海戦術はプラン B
via http://migo0110.blog.jp/archives/7187299.html
安心に満たされた穏かな日々を過ごすため
テストの自動化を目指してみることに
前提条件
Resource
ˆ 仕様書はない (ERD 含む)
ˆ 手動テストで使っていた Excel ならある
Policy
ˆ 仕様/UI の変更は無い想定とする
Unit Test ?
テスト書き辛さ問題
ˆ クラスベースなコードの方が少ない
ˆ グローバル関数、グローバル変数が主流
ˆ そもそも <html> の中にビジネスロジックが…
古い PHP に縛られる
ˆ 綺麗に書けなくてイライラ 問題
ˆ trait 使いたいし array(’a’) を [’a’] って書きたい
ˆ バージョンアップに影響をうける
ˆ 本体コード、テストコード両方同時に手を…?
End-to-End test ?
ブラウザ操作してその結果 (画面) をチェック系
ˆ Excel から、ある程度機械的にテストケース作成可能
テストコードが サーバーサイドに依存しない
ˆ 将来的にも使い続けていける可能性が高い
PHP に拘らずに 書ける
ˆ バージョンを気にするのは本体のコードだけ
ˆ テスト環境は現代のツールを導入できる
というわけで
現状の仕様を保ちつつ サーバーサイドの
現代化を行うにはEnd-to-end テストの自
動化が最適と判断
Environment of
integration testing
簡潔に書けそうな Ruby 製を選択
ˆ ブラウザの操作
ˆ Selenium - Web Browser Automation
ˆ Selenium Ruby binding
ˆ RubyBindings - selenium
ˆ Selenium Ruby binding のラッパー
ˆ jnicklas/capybara
ˆ Ruby テストフレームワーク
ˆ RSpec: Behaviour Driven Development for Ruby
Example (Capybara)
構成(個人バージョン)
Next stage after test
automation
テスト実行するのに疲れてしまう (人間だもの)
続けなければ意味がない
自動テストも手動で実行し続けるのはつらい
ˆ たかが「ポチッ」されど「ポチッ」
つらくなるとテストしなくなる
ˆ 「これぐらいの修正なら大丈夫だろう」
自動テストも動かなければただのテキスト
ˆ 動かさないテストは無いほうが良い (メンテ含む)
僕たちがやりたかったのは
テストを実行することなの?
僕たちの力は
テストを動かすためではなく
価値を生み出すため に使うべき
価値を生み出す力を
継続して支えるためには
(機械的な)新たな仕組み
を入れるべき
Continuous Integration
継続したいことは
ˆ コードが commit (push) される度にテスト走るとか
ˆ 深夜に、その日 commit されたコードでテストとか
ˆ 他にもいろいろ定型的な作業とか
via Jenkins CI
構成 -Prologue version-
構成 -Prologue version-
構成 -Prologue version-
構成 -Prologue version-
構成 -Prologue version-
構成を組んだあとは
以下のことが実現
ˆ 深夜に 1 回、全 Integration test を実行
ˆ 前日に master branch にマージされたコードに対して
ˆ 朝、出勤してテストが通ったかどうかチェックできる
ˆ テスト失敗した瞬間のスクショをまとめたレポート
隙があまり生じぬ二段構え
ˆ 「定時内の開発 and レビュー and テスト」
ˆ 「深夜に全テスト」
コアな部分の修正にも安心感が増した
プロローグ
完
本編
テストを書いて
コードを書いて
を繰り返していたある日
速さが足りない!
テストに
1時間半も掛かってる!!
What happened?
テストケースの増大
ˆ テストケースが 600 越えてきた
ˆ 1 テストケース 10 秒で終わるものもあれば 1 分かかる
ものもある
ˆ ログインして 3 画面ぐらい遷移してフォーム入力して…
テストが遅いこと自体は問題ない
 
What happened?
テストケースの増大
ˆ テストケースが 600 越えてきた
ˆ 1 テストケース 10 秒で終わるものもあれば 1 分かかる
ものもある
ˆ ログインして 3 画面ぐらい遷移してフォーム入力して…
テストが遅いこと自体は問題ない
テストが実行されていれば
遅いフルテストの
真の弊害
テスト実行するのに疲れてしまう (みんな人間だもの)
CI に任せてるから
大丈夫だよね?
深夜に 1 回走らせてはいるけど
1 時間半も掛かるテストを定時前に走らせるとか無理
僕たちは安心を求めていた
ˆ フルテストによってそれを担保していたはずだった
ˆ フルテストが億劫になると
ˆ 最小限のテストだけ走らせるようになる
ˆ 見ないふりし始める ( まあ大丈夫だろ 問題)
ˆ 深夜のテスト実行まで待てないし手元で動かすのもめ
んどくさい。リリースが大事だろ ( 任務遂行絶対 問題)
ˆ その結果
ˆ エンバグ、デグレード多発
ˆ その他いろいろな事故リスク増大
「これでは駄目だ」
僕たちは安心を取り戻すために高速化を開始した
まず最初に思いついたのは
高速化と言えば並列実行
並列実行 (RSpec)
現状
ˆ Test runner である RSpec を並列実行したい
ˆ 参考: The Ruby Toolbox - Distributed Testing
今回は test-queue を採用
ˆ GitHub 本体のテストにも使われているライブラリ
ˆ 既存 (RSpec) の環境をほぼそのまま使える
ˆ 実行コマンドが rspec-queue に変わるだけ
ˆ 暇なプロセスを作らず、テストをいい感じに分配
実行例
$ bundle exec rspec-queue spec/
※ 数値はてきとうです
並列実行 (Browser)
\ Selenium Grid /
See: Grid2 SeleniumHQ/selenium Wiki
Selenium Grid
Selenium Grid
Selenium Grid
Selenium Grid
構成 -test-queue +
selenium grid-
構成 -test-queue +
selenium grid-
3 プロセスで実行したら
3倍の早さで終わった
10 プロセスで実行したら
8倍ぐらい早く終わった
ぼくたちは
速さを手に入れた
その代わりに
失なったものがある
安定しなくなった
いろいろ原因はあったが
主な原因は、(テストデータの入った)DB の同一テーブルを
閲覧・変更・削除するテストケースが複数あり、それらが
同時に実行されていたため
Application Server と書いてたが実は全部入っていたのさ
主な失敗パターン
主な失敗パターン
主な失敗パターン
回避策思案 -App いっぱい-
「App + DB」で 1 組のサーバを一杯立てれば?
回避策思案 -App いっぱい-
なんとなくいけそう
ˆ test-queue の各プロセス毎に「この URL にアクセス
して」と固定できるので、使えそう
ˆ See: 参考ページ
サーバ管理めんどくさい
ˆ 構築だけでなく起動や終了も
ˆ テストデータが更新されたら全サーバに rsync して
restore して..
「App + DB」を持ってて
テストデータの更新もすぐにできて
遅くてもいい時は3台だったり
早く終わって欲しいときは20台だったり
好きに起動したり停止できる環境を
お手軽にポチッって操作できる
便利なものないかなー
via Docker
Docker
Docker(ドッカー)はソフトウェアコンテナ内の
アプリケーションのデプロイメントを自動化する
オープンソースソフトウェアである。
Linux カーネルにおける LXC と呼ばれる Linux コン
テナ技術と Aufs という特殊なファイルシステムを
利用してコンテナ型の仮想化を行う。
ˆ Docker - Wikipedia
ˆ What Is Docker? An open platform for distributed apps
Docker を採用した理由は
ただひたすら「手軽」に起動できる
ˆ 環境 (コンテナ) の起動や停止が速い
ˆ 「テストしたい時」「特に必要ない時」でカジュアルに
ON/OFF できる (数秒規模)
ˆ やろうと思えば複数プロセス動かせる (※)
ˆ 僕たちが望んだ「App + DB」の 1 環境ができる
※ 「1 コンテナ 1 プロセス」とよく言われるけど
ˆ 起動して数分で消えるテスト環境のために「web」
「app」「db」に分割するのはコストが高すぎる
ˆ 手軽な使い捨て環境 だし全部入りコンテナで良い
構成 -Docker 導入-
構成 -Docker 導入-
(Cont’d 1st)
Dockerfile を作成する
# Dockerfile
FROM centos:centos6
COPY scripts/* /opt/scripts
RUN sh /opt/scripts/install_dependency_libraries.sh 
&& sh /opt/scripts/install_application.sh 
&& sh /opt/scripts/restore_test_data.sh
CMD service postgresql start 
&& service httpd start 
&& tail -f /var/log/httpd/access_log
EXPOSE 80
$ # Docker コンテナイメージをビルド
$ docker build -t app-php55 .
構成 -Docker 導入-
(Cont’d 2nd)
Fig (現 Docker Compose) を使う
# fig.yml
app:
image: app-php55
ports:
- "80"
$ fig scale app=5 # 5 台起動
$ fig scale app=10 # 5 台追加で *計 10 台* 起動
$ fig scale app=3 # 7 台減らして *計 3 台* 起動
アプリコンテナを Docker
で動かしてると
ˆ selenium node も fig scale でぱぱっと起動したい
ˆ この時点では オレオレ.sh で起動してた
探してみた
Docker Hub
ˆ docker build で作成されたイメージが置かれている
ˆ Ubuntu 公式 だったり 個人で作ったもの だったり
ˆ Dockerfile 公開してないとちょっと心配になる
ありました
ˆ registry.hub.docker.com/repos/selenium/
ˆ Selenium 開発コミュニティが出しているイメージ
ˆ Dockerfile も GitHub に公開 されている
最終形態 (準備)
# fig.yml
app:
image: app-php55
ports:
- "80"
node:
image: selenium/node # <= Docker Hub にあるやつ
links:
- hub
hub:
image: selenium/hub
ports:
- "4444:4444"
最終形態 (召喚)
$ fig up -d hub
$ fig scale app=15 node=15
最終形態
最終形態
最終形態
最終形態
最終形態の実行結果
最終形態の実行結果
最終形態の実行結果
エンディング
以下を両立した Container-Based CI の誕生
ˆ テスト 10 分以内に終わる手軽さ
ˆ 「なぜか失敗する」という暗黒の排除
僕たちは
安心と速度の両方を手にした
エピローグ
近況報告
無事 PHP のバージョン上げられました
1 PHP 5.X と PHP 5.Y それぞれの Docker コンテナを用
意して検証
2 両方でテストが通るか。通らないなら何が原因か
ˆ バージョンの違いによるものか、潜在的なバグか
複数バージョンを高速にチェックできてよかった
近況報告 (Cont’d)
開発期間の変化 (高速化する前から取り組んでいましたが)
ˆ 以前までは 3 ヶ月 - 6 ヶ月などの長期間
ˆ 現在は 2、3 週間スプリントで回している
ˆ 開発 (1、2 週間。この間はレビュー & 自動テスト
チェックをメインに)
ˆ 検証 (4 日間。メインの CHANGE に対する手動テスト)
ˆ ふりかえり (1 日。本スプリントでの KPT)
テストの高速化、および安定化の維持は良い効果
現在の開発フロー
1 手元で開発
2 git push
3 GitHub で Pull Request (以下、PR) を作成
4 Jenkins Master が PR(commit) を検知し、そのブランチ
を Jenkins Slave に教える
5 Jenkins Slave が教えられたブランチを元に Docker のア
プリコンテナを起動
ˆ ついでに Selenium Hub/Node も起動 (停止していれば)
6 Integration test に加えて Unit Test も実行
7 約 10 分ぐらいでフルテスト完了
8 もし fail だったら修正を commit 。以後 4 - 7 を繰り
返す
後輩のコメント
ずっと目指していた
via full test also want to end within 50ms // Speaker Deck
まとめ
手持ちのリソースにあった
パターンを
今回は高スペックなワークステーションがあったので
Docker コンテナを大量召喚できた
ˆ 低スペックだがマシンが大量にあるなら、並列化だけ
ではなく 分散化 も考えるべき
勘違いしてはいけないのは
高速化を目指すことでテストが安定しないのであれば
高速化を諦めてテストの安定に集中すべき
ˆ × 目指すはテストの高速化
ˆ ○ 開発者に心の安らぎを
おわり
PEACE OF MIND
安らぎが力になる

More Related Content

What's hot

delayed_jobの自動再起動
delayed_jobの自動再起動delayed_jobの自動再起動
delayed_jobの自動再起動firewood
 
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!Yohei Fushii
 
PyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミングPyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミングRansui Iso
 
Git勉強会 2016 Gitで卒論を管理しよう回
Git勉強会 2016 Gitで卒論を管理しよう回Git勉強会 2016 Gitで卒論を管理しよう回
Git勉強会 2016 Gitで卒論を管理しよう回kinme modoki
 
Jjug 20140430 gradle_basic
Jjug 20140430 gradle_basicJjug 20140430 gradle_basic
Jjug 20140430 gradle_basicTakuma Watabiki
 
GitLab Meetup Tokyo #1 LT:「わりと大きい会社でGitLabをホスティングしてみた話」
GitLab Meetup Tokyo #1 LT:「わりと大きい会社でGitLabをホスティングしてみた話」GitLab Meetup Tokyo #1 LT:「わりと大きい会社でGitLabをホスティングしてみた話」
GitLab Meetup Tokyo #1 LT:「わりと大きい会社でGitLabをホスティングしてみた話」Taisuke Inoue
 
PySide/QtWebkitで楽々 slideshare Hack
PySide/QtWebkitで楽々 slideshare HackPySide/QtWebkitで楽々 slideshare Hack
PySide/QtWebkitで楽々 slideshare HackKazushige TAKEUCHI
 
Git flowの活用事例
Git flowの活用事例Git flowの活用事例
Git flowの活用事例Hirohito Kato
 
バージョン管理
バージョン管理バージョン管理
バージョン管理Misa Kondo
 
Pythonでブラウザをいっぱい動かしたい
Pythonでブラウザをいっぱい動かしたいPythonでブラウザをいっぱい動かしたい
Pythonでブラウザをいっぱい動かしたいKameko Ohmura
 
いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0Masakazu Matsushita
 
【B-1】kintoneでお手軽コールセンター!
【B-1】kintoneでお手軽コールセンター!【B-1】kintoneでお手軽コールセンター!
【B-1】kintoneでお手軽コールセンター!Sakae Saito
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介Shinya Okano
 
Gws 20141024 gradle_intro
Gws 20141024 gradle_introGws 20141024 gradle_intro
Gws 20141024 gradle_introNobuhiro Sue
 
Spring in-summer-gradle-hands on-withanswers
Spring in-summer-gradle-hands on-withanswersSpring in-summer-gradle-hands on-withanswers
Spring in-summer-gradle-hands on-withanswersTakuma Watabiki
 
テストを書こう、Unity編
テストを書こう、Unity編テストを書こう、Unity編
テストを書こう、Unity編Hiroto Imoto
 
Hello. Continuous Integration
Hello. Continuous IntegrationHello. Continuous Integration
Hello. Continuous IntegrationYuki Matsumura
 
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
脆弱性もバグ、だからテストしよう PHPカンファンレス2015脆弱性もバグ、だからテストしよう PHPカンファンレス2015
脆弱性もバグ、だからテストしよう PHPカンファンレス2015ichikaway
 

What's hot (20)

delayed_jobの自動再起動
delayed_jobの自動再起動delayed_jobの自動再起動
delayed_jobの自動再起動
 
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
 
PyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミングPyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミング
 
Jenkins と groovy
Jenkins と groovyJenkins と groovy
Jenkins と groovy
 
Gradle handson
Gradle handsonGradle handson
Gradle handson
 
Git勉強会 2016 Gitで卒論を管理しよう回
Git勉強会 2016 Gitで卒論を管理しよう回Git勉強会 2016 Gitで卒論を管理しよう回
Git勉強会 2016 Gitで卒論を管理しよう回
 
Jjug 20140430 gradle_basic
Jjug 20140430 gradle_basicJjug 20140430 gradle_basic
Jjug 20140430 gradle_basic
 
GitLab Meetup Tokyo #1 LT:「わりと大きい会社でGitLabをホスティングしてみた話」
GitLab Meetup Tokyo #1 LT:「わりと大きい会社でGitLabをホスティングしてみた話」GitLab Meetup Tokyo #1 LT:「わりと大きい会社でGitLabをホスティングしてみた話」
GitLab Meetup Tokyo #1 LT:「わりと大きい会社でGitLabをホスティングしてみた話」
 
PySide/QtWebkitで楽々 slideshare Hack
PySide/QtWebkitで楽々 slideshare HackPySide/QtWebkitで楽々 slideshare Hack
PySide/QtWebkitで楽々 slideshare Hack
 
Git flowの活用事例
Git flowの活用事例Git flowの活用事例
Git flowの活用事例
 
バージョン管理
バージョン管理バージョン管理
バージョン管理
 
Pythonでブラウザをいっぱい動かしたい
Pythonでブラウザをいっぱい動かしたいPythonでブラウザをいっぱい動かしたい
Pythonでブラウザをいっぱい動かしたい
 
いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0
 
【B-1】kintoneでお手軽コールセンター!
【B-1】kintoneでお手軽コールセンター!【B-1】kintoneでお手軽コールセンター!
【B-1】kintoneでお手軽コールセンター!
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介
 
Gws 20141024 gradle_intro
Gws 20141024 gradle_introGws 20141024 gradle_intro
Gws 20141024 gradle_intro
 
Spring in-summer-gradle-hands on-withanswers
Spring in-summer-gradle-hands on-withanswersSpring in-summer-gradle-hands on-withanswers
Spring in-summer-gradle-hands on-withanswers
 
テストを書こう、Unity編
テストを書こう、Unity編テストを書こう、Unity編
テストを書こう、Unity編
 
Hello. Continuous Integration
Hello. Continuous IntegrationHello. Continuous Integration
Hello. Continuous Integration
 
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
脆弱性もバグ、だからテストしよう PHPカンファンレス2015脆弱性もバグ、だからテストしよう PHPカンファンレス2015
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
 

Viewers also liked

スーパー戦隊進化論
スーパー戦隊進化論スーパー戦隊進化論
スーパー戦隊進化論Takuma Watabiki
 
G*におけるソフトウェアテスト・シーズンIII
G*におけるソフトウェアテスト・シーズンIIIG*におけるソフトウェアテスト・シーズンIII
G*におけるソフトウェアテスト・シーズンIIITakuma Watabiki
 
システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法Takuma Watabiki
 
Config rulesを1年ほど使い続けて分かったこと
Config rulesを1年ほど使い続けて分かったことConfig rulesを1年ほど使い続けて分かったこと
Config rulesを1年ほど使い続けて分かったことqtomonari
 
Grailsでドメイン駆動設計を実践する時の勘所
Grailsでドメイン駆動設計を実践する時の勘所Grailsでドメイン駆動設計を実践する時の勘所
Grailsでドメイン駆動設計を実践する時の勘所Takuma Watabiki
 
AWS Black Belt Techシリーズ AWS Management Console
AWS Black Belt Techシリーズ AWS Management ConsoleAWS Black Belt Techシリーズ AWS Management Console
AWS Black Belt Techシリーズ AWS Management ConsoleAmazon Web Services Japan
 
Closures and methodMissing are real
Closures and methodMissing are realClosures and methodMissing are real
Closures and methodMissing are realTakahiro Sugiura
 
Docker勉強会2017 実践編 スライド
Docker勉強会2017 実践編 スライドDocker勉強会2017 実践編 スライド
Docker勉強会2017 実践編 スライドShiojiri Ohhara
 

Viewers also liked (13)

Gws in fukuoka
Gws in fukuokaGws in fukuoka
Gws in fukuoka
 
G*Magazineを読もう
G*Magazineを読もうG*Magazineを読もう
G*Magazineを読もう
 
JGGUG Community LT 2016
JGGUG Community LT 2016JGGUG Community LT 2016
JGGUG Community LT 2016
 
スーパー戦隊進化論
スーパー戦隊進化論スーパー戦隊進化論
スーパー戦隊進化論
 
Spock's world
Spock's worldSpock's world
Spock's world
 
G*におけるソフトウェアテスト・シーズンIII
G*におけるソフトウェアテスト・シーズンIIIG*におけるソフトウェアテスト・シーズンIII
G*におけるソフトウェアテスト・シーズンIII
 
システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法
 
Devsumi2012 JGGUG LT
Devsumi2012 JGGUG LTDevsumi2012 JGGUG LT
Devsumi2012 JGGUG LT
 
Config rulesを1年ほど使い続けて分かったこと
Config rulesを1年ほど使い続けて分かったことConfig rulesを1年ほど使い続けて分かったこと
Config rulesを1年ほど使い続けて分かったこと
 
Grailsでドメイン駆動設計を実践する時の勘所
Grailsでドメイン駆動設計を実践する時の勘所Grailsでドメイン駆動設計を実践する時の勘所
Grailsでドメイン駆動設計を実践する時の勘所
 
AWS Black Belt Techシリーズ AWS Management Console
AWS Black Belt Techシリーズ AWS Management ConsoleAWS Black Belt Techシリーズ AWS Management Console
AWS Black Belt Techシリーズ AWS Management Console
 
Closures and methodMissing are real
Closures and methodMissing are realClosures and methodMissing are real
Closures and methodMissing are real
 
Docker勉強会2017 実践編 スライド
Docker勉強会2017 実践編 スライドDocker勉強会2017 実践編 スライド
Docker勉強会2017 実践編 スライド
 

Similar to あなたの安心を高速に守る Container-based CI

[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)Masanori Ishigami
 
Start python with fastapi
Start python with fastapiStart python with fastapi
Start python with fastapiku_taka
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版DIVE INTO CODE Corp.
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011Hiroh Satoh
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入Yu Nobuoka
 
OpenWhisk - Docker action で MeCab を動かす
OpenWhisk - Docker action で MeCab を動かすOpenWhisk - Docker action で MeCab を動かす
OpenWhisk - Docker action で MeCab を動かすKUNITO Atsunori
 
勉強会 Cvml python基礎
勉強会 Cvml python基礎勉強会 Cvml python基礎
勉強会 Cvml python基礎真哉 杉野
 
テストしなイカ? Seleniumで自動ブラウザテスト
テストしなイカ? Seleniumで自動ブラウザテストテストしなイカ? Seleniumで自動ブラウザテスト
テストしなイカ? Seleniumで自動ブラウザテストOhishi Mikage
 
インフラエンジニアがk8sでアプリを作って見えた今後のインフラ
インフラエンジニアがk8sでアプリを作って見えた今後のインフラインフラエンジニアがk8sでアプリを作って見えた今後のインフラ
インフラエンジニアがk8sでアプリを作って見えた今後のインフラsusumu tanaka
 
Web frontend performance tuning
Web frontend      performance tuningWeb frontend      performance tuning
Web frontend performance tuningssuser3c214d
 
退屈なブラウザ作業をpuppeteerにやらせたいお話
退屈なブラウザ作業をpuppeteerにやらせたいお話退屈なブラウザ作業をpuppeteerにやらせたいお話
退屈なブラウザ作業をpuppeteerにやらせたいお話Tadashi Nemoto
 
Ec cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーEc cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーAyumu Kawaguchi
 
継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキングTakayuki Kondou
 
テスト駆動で行うネットワーク自動化のすすめ
テスト駆動で行うネットワーク自動化のすすめテスト駆動で行うネットワーク自動化のすすめ
テスト駆動で行うネットワーク自動化のすすめkinunori
 
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクションTakahiro Okumura
 
DevOps for Small Starter
DevOps for Small StarterDevOps for Small Starter
DevOps for Small Starter大要 伊藤
 
Getting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnitGetting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnitAtsuhiro Kubo
 
Voicepic@FukuiMASeminar
Voicepic@FukuiMASeminarVoicepic@FukuiMASeminar
Voicepic@FukuiMASeminarManabu Shimobe
 
自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~
自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~
自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~aha_oretama
 

Similar to あなたの安心を高速に守る Container-based CI (20)

[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
 
Start python with fastapi
Start python with fastapiStart python with fastapi
Start python with fastapi
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
OpenWhisk - Docker action で MeCab を動かす
OpenWhisk - Docker action で MeCab を動かすOpenWhisk - Docker action で MeCab を動かす
OpenWhisk - Docker action で MeCab を動かす
 
勉強会 Cvml python基礎
勉強会 Cvml python基礎勉強会 Cvml python基礎
勉強会 Cvml python基礎
 
テストしなイカ? Seleniumで自動ブラウザテスト
テストしなイカ? Seleniumで自動ブラウザテストテストしなイカ? Seleniumで自動ブラウザテスト
テストしなイカ? Seleniumで自動ブラウザテスト
 
インフラエンジニアがk8sでアプリを作って見えた今後のインフラ
インフラエンジニアがk8sでアプリを作って見えた今後のインフラインフラエンジニアがk8sでアプリを作って見えた今後のインフラ
インフラエンジニアがk8sでアプリを作って見えた今後のインフラ
 
Web frontend performance tuning
Web frontend      performance tuningWeb frontend      performance tuning
Web frontend performance tuning
 
退屈なブラウザ作業をpuppeteerにやらせたいお話
退屈なブラウザ作業をpuppeteerにやらせたいお話退屈なブラウザ作業をpuppeteerにやらせたいお話
退屈なブラウザ作業をpuppeteerにやらせたいお話
 
Ec cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーEc cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナー
 
継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング
 
俺とGitHub
俺とGitHub俺とGitHub
俺とGitHub
 
テスト駆動で行うネットワーク自動化のすすめ
テスト駆動で行うネットワーク自動化のすすめテスト駆動で行うネットワーク自動化のすすめ
テスト駆動で行うネットワーク自動化のすすめ
 
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
 
DevOps for Small Starter
DevOps for Small StarterDevOps for Small Starter
DevOps for Small Starter
 
Getting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnitGetting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnit
 
Voicepic@FukuiMASeminar
Voicepic@FukuiMASeminarVoicepic@FukuiMASeminar
Voicepic@FukuiMASeminar
 
自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~
自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~
自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~
 

Recently uploaded

デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 

Recently uploaded (8)

デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 

あなたの安心を高速に守る Container-based CI