Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Travis__Jenkins_によるCI導入_ディレクターズカット版_.pdf
Search
Jun Nishikawa
June 16, 2014
Technology
190
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Travis__Jenkins_によるCI導入_ディレクターズカット版_.pdf
Jun Nishikawa
June 16, 2014
More Decks by Jun Nishikawa
See All by Jun Nishikawa
NAND memory supercycle — Part 3: Edge, Autonomous Machines, and the Military
topaz2
0
5
NANDメモリ・スーパーサイクル — 第3部:エッジと軍事
topaz2
0
3
NAND memory supercycle — Part 2: Frontier Compute and Memory
topaz2
0
13
NANDメモリ・スーパーサイクル — 第2部:フロンティアの計算とメモリ
topaz2
0
8
なぜ今、NANDなのか?
topaz2
0
10
Why NAND, why now?
topaz2
0
10
Travis__Jenkins_によるCI導入_劇場公開版_.pdf
topaz2
0
75
Other Decks in Technology
See All in Technology
Post AI時代のリファクタリング実践記 / Refactoring in the post AI era
kaminashi
1
280
USB PDを使ってスマホを労わりたい
raspython3
0
180
古い指輪から広がった JAVA コミュニティ とのつながり
yamad
0
130
フィンテック養成勉強会#68
finengine
0
140
React改造してみた
tsukina_7mochi
0
110
その Valkey 使いこなしていますか?
onk
PRO
5
1.6k
Temporal 最高!でも改めて「日付」について調べたら人類の負債すぎる件
riyaamemiya
0
180
サブエージェントと Claude Mods で作る独自 Advisor ツールの話
kenichiodo
2
170
Refining Active Record
shugo
0
160
Browser Spec: Testing Hotwire with Ruby
takahashim
1
130
スプシの手作業からの解脱 ~更新はClaude Codeに、見せ方と使い方はGASアプリに任せる~
kentarofujii
0
160
PagerDuty Tech Hub-鳴らすけれど、人は動かない
ezaki
0
180
Featured
See All Featured
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
2
330
The Curious Case for Waylosing
cassininazir
1
570
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.9k
SEO for Brand Visibility & Recognition
aleyda
0
4.8k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
[RailsConf 2023] Rails as a piece of cake
palkan
59
7.1k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
460
How to make the Groovebox
asonas
2
2.5k
A Modern Web Designer's Workflow
chriscoyier
699
190k
Ruling the World: When Life Gets Gamed
codingconduct
0
400
Tell your own story through comics
letsgokoyo
1
1.1k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
570
Transcript
Travis, Jenkins による Continuous Integration 導入 ( 継続的インテグレーション )
自己紹介 • お仕事 – フリーランスの Web エンジニア • 前職 –
ヤフオク、ヤフーメール • 得意分野 – php, ruby, インフラ • 昨年 10 月から join してます • https://twitter.com/topaz2_3333 • https://www.facebook.com/jun.nishikawa.967
Join 直後 • 一つのデータを DB から引っ張ってブラウザ に表示するまでに 1000 行オーバーの関数を 5
個も経由 • 1 関数の中で foreach, while が計 7 個 – 各ループで連想配列を書き換えてるが意図が全く 伝わってこない • 1 関数がデカイ割にコメントも無い
None
おいコラ
… せめてコードを自動チェックできる仕組みぐらいは整えよう
Jenkins 立てれるサーバも無いし、 Travis でも使うか
• Continuous Integration の SaaS • 料金 – オープンソース •
無料 – プライベート • $129 / month 〜 • フリートライアル 100 ビルドまで無料 概要
利用状況 • Rails • Symfony • Cakephp • オープンソースで有名どころのライブラリ –
Gem – Packagist
• 1コミット毎に指定した環境分の新規 vm 作 成 – pull request 含む •
ビルド実行 – 中身はただのシェルスクリプト • 実行結果の通知 ( メールなど ) 仕組み
None
Pros, Cons • Pros – SaaS なので思い立った時にすぐ試せる – phpenv, mysql,
memcached, rabbitmq 等、一般的な web アプリケ ーションのビルドに必要なミドルウェアが大体最初から入ってる – ビルドスクリプトはただのシェルなので、 linux を使い慣れている 人なら習得は容易 • Cons – Jenkins のように自前のサーバにログインしてビルドの状態を見 れないので、デバッグが少々面倒 – vagrant up, kitchen test など vm 上に vm を作成するようなビルド が不可能
None
CI って何が嬉しいの?
実例1 NC2 で重大なバグが報告された B: やっと修正出来ました! A: できるだけ早く直して! A: じゃあ今日修正版リリースして! B:
あと動作検証に 20 日かかります。 A: えっ ( 3 週間後)
実例2 PHP の重大な脆弱性が修正された B: 環境用意して試してみないと分かりません。 B: 動作検証には最低3日かかります。 A: PHP のバージョン上げても問題ない?
A: えっ
なんでそんなに時間がかかるの?
1 プラグイン > 認証コア Auth 2 ヘッダー Header 3 パスワードリマインダ
PasswordReminder 4 プラグイン > システム管理 Administrator 5 プラグイン > 会員管理 Users 6 プラグイン > 会員自動登録 UserAutoRegistration 7 プラグイン > パブリック PublicSpaces 8 プラグイン > いいね Likes 9 プラグイン > 汎用フォーム FlexibleForms 10 プラグイン > 共通 × 11 プラグイン > アンケート Questionnaires 12 プラグイン > 小テスト Workbooks 13 プラグイン > 検索 Search 14 プラグイン > ブログ Blogs 15 プラグイン > 掲示板 BBS 16 プラグイン > お知らせ Announcements 17 プラグイン > ファイル管理 FileManager 18 プラグイン > レポート Reports 19 プラグイン > オンライン状況 OnlineStatuses 20 プラグイン > RSS RSSReader 21 プラグイン > 汎用データベース FlexibleDatabases 22 プラグイン > フォトアルバム PhotoAlbums 23 プラグイン > メニュー Menu 24 プラグイン > FAQ FAQ 25 プラグイン > 多言語化 M17n 26 プラグイン > カレンダー Calendars 27 プラグイン > リンクリスト LinkLists 28 プラグイン > アクセスカウンタ AccessCounters 29 プラグイン > チャット Chat 30 プラグイン > TODO TODO 31 プラグイン > 新着 News 32 プラグイン > ページメニュー PageMenu 33 プラグイン > パンくず Breadcrumb 34 プラグイン > マイポータル MyPortals 35 トップ TopPage 36 プラグイン > プライベートルーム PrivateRooms 37 プラグイン > 権限コア Privilege 38 管理画面 未定 39 プラグイン > ルーム管理 Rooms 40 プラグイン > 学校権限 PrivilegeEducational 41 プラグイン > プラグイン管理 PluginManager 42 プラグイン > グループ Communities 43 プラグイン > マイポータルルーム MyPortalRooms 44 プラグイン > メール設定 MailSettings 45 プラグイン > 個人情報管理 PersonalInformationManager 46 ページレイアウト PageLayouts 47 フレームレイアウト FrameLayouts 48 プラグイン > ブロックショートカット BlockShortcuts 49 フレーム Frames 50 プラグイン > フレームスタイル FrameStyles 51 ブロック Blocks 52 プラグイン > 配置ブロック一覧 ActiveBlockLists 53 ページ Pages 54 ページショートカット PageShortcuts 55 プラグイン > パート GroupPrivileges 56 プラグイン > ルームプラグイン管理 PluginManagerForRooms 57 ブロック管理 - 58 プラグイン > ブックマーク Bookmarks 59 プラグイン > ページ情報 PageInformations 60 プラグイン > テーマ設定 Theme 61 プラグイン > ページレイアウト PageLayouts 62 プラグイン > ページカラム PageColumns 63 プラグイン > モバイル管理 MobileSettings 64 プラグイン > 緊急連絡網 EmergencyAddresses 65 プラグイン > 祝日設定 HolidaySettings 66 プラグイン > セキュリティ管理 SecurityManager 67 プラグイン > ページフォント設定 PageFontSettings 68 プラグイン > ページ背景設定 PageBackgroundSettings 69 プラグイン > ページ表示位置 PagePositionSettings 70 WYSIWYG RichTextEditor 71 プラグイン > マイルーム MyRoomSpaces 72 プラグイン > プライベート PrivateSpaces 73 プラグイン > 施設管理 FacilityManager 74 プラグイン > 動画配信 Streaming 75 プラグイン > 会員情報変更 未定 76 プラグイン > 回覧板 CircularNotices 77 プラグイン > 標準認証 AuthGeneral 78 プラグイン > LDAP 認証 AuthLDAP 79 Sandbox Sandbox 80 インストール Install 81 データ移行 DataMigration 82 iframe Iframe 83 キャビネット Cabinets
プラグイン 80 個もあるのに 土台修正したら全部動く訳ねーだろ
ではどうするか?
何かが起こってから対応 何かが起こる前に対応
やってること • phpunit – 自動テスト • phpcs – コーディング規約チェッカ •
phpmd – 一般的なコーディング作法のチェッカ • phpcpd – コピペディテクタ
CI の重要性 • テスト、静的コード解析を義務付けることによってコード 自体の品質が向上する – 運用コストの削減 • 新機能追加時には既存機能を破壊していないことを保証 •
bug 発見時に、 bug を再現するテストを書けば同じ過ちを繰り返さずに 済む – 仕様レベルの bug 、単純な bug の早期発見 • 病気と同じで、早期発見された bug は多様な直し方 ( 治療法 ) が選択で きます • 早期発見された bug は直すのも簡単 ( 喉がおかしい時に、すぐのど飴舐 めれば治るのと似てる ) • その bug が存在することで成り立っている機能が大量にある場合 ( 様々 な臓器と一体化した末期癌 ) … は – 謹んでお悔やみ申し上げます
CI の重要性 • 教育 – 人間の能力には差があります • できる人からスキルのおこぼれをもらえるチャンス – 人間は嘘をつきます
• 「大体完成したのでレビューして下さい!」 – 人間は忘れます • 「半年前同じようなバグ直したって言ってなかったっけ?」 • 「 A ってバグを、 B … ってバグに変えただけじゃんコレ 」 – 人間は怠けます • 画面上は問題無く見えるけど、中のコードは悲惨なんてケースはよく ある – DB 不整合、ゴミクエリ、不十分なエラーハンドリング、仕様の穴を放置 – 「スケジュールがー」、「手間がかかるからー」、「勉強時間がなくてー」 – コードレビューの省力化
サルでも分かる魔法のバッジ!
None
コードレビューも大事だよ!
None