Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Travis__Jenkins_によるCI導入_ディレクターズカット版_.pdf

 Travis__Jenkins_によるCI導入_ディレクターズカット版_.pdf

Jun Nishikawa

June 16, 2014
Tweet

More Decks by Jun Nishikawa

Other Decks in Technology

Transcript

  1. 自己紹介 • お仕事 – フリーランスの Web エンジニア • 前職 –

    ヤフオク、ヤフーメール • 得意分野 – php, ruby, インフラ • 昨年 10 月から join してます • https://twitter.com/topaz2_3333 • https://www.facebook.com/jun.nishikawa.967
  2. Join 直後 • 一つのデータを DB から引っ張ってブラウザ に表示するまでに 1000 行オーバーの関数を 5

    個も経由 • 1 関数の中で foreach, while が計 7 個 – 各ループで連想配列を書き換えてるが意図が全く 伝わってこない • 1 関数がデカイ割にコメントも無い
  3. • Continuous Integration の SaaS • 料金 – オープンソース •

    無料 – プライベート • $129 / month 〜 • フリートライアル 100 ビルドまで無料 概要
  4. • 1コミット毎に指定した環境分の新規 vm 作 成 – pull request 含む •

    ビルド実行 – 中身はただのシェルスクリプト • 実行結果の通知 ( メールなど ) 仕組み
  5. Pros, Cons • Pros – SaaS なので思い立った時にすぐ試せる – phpenv, mysql,

    memcached, rabbitmq 等、一般的な web アプリケ ーションのビルドに必要なミドルウェアが大体最初から入ってる – ビルドスクリプトはただのシェルなので、 linux を使い慣れている 人なら習得は容易 • Cons – Jenkins のように自前のサーバにログインしてビルドの状態を見 れないので、デバッグが少々面倒 – vagrant up, kitchen test など vm 上に vm を作成するようなビルド が不可能
  6. 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
  7. やってること • phpunit – 自動テスト • phpcs – コーディング規約チェッカ •

    phpmd – 一般的なコーディング作法のチェッカ • phpcpd – コピペディテクタ
  8. CI の重要性 • テスト、静的コード解析を義務付けることによってコード 自体の品質が向上する – 運用コストの削減 • 新機能追加時には既存機能を破壊していないことを保証 •

    bug 発見時に、 bug を再現するテストを書けば同じ過ちを繰り返さずに 済む – 仕様レベルの bug 、単純な bug の早期発見 • 病気と同じで、早期発見された bug は多様な直し方 ( 治療法 ) が選択で きます • 早期発見された bug は直すのも簡単 ( 喉がおかしい時に、すぐのど飴舐 めれば治るのと似てる ) • その bug が存在することで成り立っている機能が大量にある場合 ( 様々 な臓器と一体化した末期癌 ) … は – 謹んでお悔やみ申し上げます
  9. CI の重要性 • 教育 – 人間の能力には差があります • できる人からスキルのおこぼれをもらえるチャンス – 人間は嘘をつきます

    • 「大体完成したのでレビューして下さい!」 – 人間は忘れます • 「半年前同じようなバグ直したって言ってなかったっけ?」 • 「 A ってバグを、 B … ってバグに変えただけじゃんコレ 」 – 人間は怠けます • 画面上は問題無く見えるけど、中のコードは悲惨なんてケースはよく ある – DB 不整合、ゴミクエリ、不十分なエラーハンドリング、仕様の穴を放置 – 「スケジュールがー」、「手間がかかるからー」、「勉強時間がなくてー」 – コードレビューの省力化