SlideShare a Scribd company logo
1 of 95
Download to read offline
Gitと出会って人生変わった
       梅田昌太
     CROOZ, Inc.
     @umesho1




          1
エンターテインメント企業
    CROOZ, Inc.




         2
• 梅田昌太(34歳)
    • 技術統括本部という所でFW開発とか
     ミドルの保守とか開発のサポートとか
     とかとかとかとか色々やってます


    • 最近若い子がsublimeマンセーなのが
     ちょっと悔しい


    • LL房

3
まえがき



 4
今日は



 5
GHEとGITLabの話は
 出来ませんしません


      6
pull requestな
 環境については


      7
この2人に聞いて下さい


• @koichiroo(GHEの野良エバンジェリストじゃね?)
• @onk(GitLab&モダンなRailsエンジニア)


                  8
アジェンダ

• 第一章 ∼技術的負債∼
• 第二章 ∼ヤク刈りな日々∼
• 第三章 ∼Gitと出会って人生変わった∼
• 最終章 ∼組織に新しいツールを導入するためのヒント∼
               9
技術的負債
 第一章




  10
そんな格好良いもんじゃない



      11
とあるtimestampでの
   弊社開発環境


      12
Subversionを導入してるが



        13
技術的負債

• 使用しているのはtrunkのみ、開発ブランチは無い
• 何故か開発用と検証用とsvnリポジトリが別に有る
• 神がかり的な手動diff作業

                14
大まかに図解してみましょう



      15
開発環境




 svn
repo




       local PC




          16
tru
開発環境




     nk
on
 svn
repo




   ly!
       local PC




          17
開発環境



we don't have branch
            svn checkout trunk
      svn       svn commit
     repo


            のみ><
             local PC




                18
開発環境              検証環境




 svn
repo




       local PC




          19
なぜお前がいる?
 開発環境                    検証環境




  svn                     svn
 repo   not svn   svnsyncrepo




             local PC




                  20
loc
      al
          PC
  開発環境              検証環境



 dif
     f取     で
        って
   svn               svn



co
  repo              repo




   mm
         it
         local PC




            21
技術的負債

• Appの環境差異出るの当たり前ですよね
• もうバージョン管理とか遥か彼方
• バージョン管理出来ないからソースがコメントアウトだらけ
 • とあるPJでは48%がコメントだった
              22
ひかないで下さい



   23
とはいえ



 24
技術的負債

• 今あるアーキテクチャは誰かが試行錯誤した結果
 • って偉い人が言ってた
• 正しい事がわかってるからといってそう簡単に移行は出来ない

              25
安易な否定は良くない



    26
でも



27
さすがにsvnでメンテナンス
 し続ける気にはなれない


      28
Git導入にかこつけて
まとめてやっつちゃえ!


     29
技術的負債の要約

• ブランチ開発出来てない問題
• バージョン管理出来てない問題
• 環境差異が出てる問題

               30
提案



31
提案
• 「Gitにしましょう!」(流行だし)
• 「ブランチ開発しましょう!」(svnでも出来るけど)
• 「ついでにRedmineも使ってTiDDにしましょう!」(古!)


                 32
偉い人



 33
「やれば良いじゃん」



    34
ヽ( ^∀^)ノ



   35
甘かった



 36
ヤク刈りな日々
  第二章




   37
ヤク刈り(yak shaving )とは



         38
Satoru Takabayashi曰く


• 「一見無関係に見えるけど、真の問題を解くのに必要な問題を
 解くのに必要な(これが何段階も続く)問題を解くのに必要な
 活動」




              39
Satoru Takabayashi曰く


• 「ある問題を解こうと思ったら別の問題が出てきて、それを解
 こうと思ったらさらに別の問題が出てきて…」ということが
 延々と続く状況を表しています。ちなみに、ヤクとは毛が長
 い、牛の一種です。




              40
現れたyak


• ブランチ開発環境の問題
• デプロイの問題


                41
ブランチ開発環境の問題



     42
ブランチの実行環境が無い


• アプリケーションフレームワークが単一のブランチで開発する
 事しか考慮されていない

• リポジトリとappServerが同居しているのも問題

                43
AppFWのバージョンアップ



      44
最初    開発環境



     svnRepository




      WebServer
第一段階            開発環境


               GitRepository

     AppFWのアップデートも行って
   バーチャルホストへルーティングさせて開発
 virtualhost    virtualhost      virtualhost
 (workRepo)    (masterRepo)    (feautureRepo)
第一段階
          ブラ    開発環境




         開発  ンチGitRepository




 virtualhost
   (work)
            開始  virtualhost
                 (master)
                               virtualhost
                               (feauture)
第二段階
                                      Repository
                開発環境
(構築中)                                   Server
                                       git&svn




  virtualhost   virtualhost   virtualhost
    (work)       (master)     (feauture)
第二段階            リポ
                           ジト
                                       Repository
                 開発環境
(構築中)                                    Server
                                        git&svn



                サー                    リ
                  バー
                分割
  virtualhost    virtualhost   virtualhost
    (work)        (master)     (feauture)
理想
                          GHEorGitLAB




開発環境        開発環境        開発環境

webserver   webserver   webserver
 (work)      (master)   (feauture)
理想
          GH              GHEorGitLAB




        欲し   E
           いお
開発環境        開発環境        開発環境

webserver   webserver   webserver
 (work)      (master)   (feauture)
デプロイの問題



   52
微妙にGit関係ない・・・



      53
rsyncデプロイの限界

• リビジョン(ブランチ)指定のデプロイが出来ない
• 容易にロールバック出来ない
• 拡張性が乏しい

              54
rsync        本番webServer




検証環境         本番webServer




             本番webServer




        55
Capistrano導入



     56
Capistrano

• Ruby製のデプロイツール
• 容易なロールバック
• もちろんリビジョン(ブランチ)指定可
• sshが繋がればOKなので拡張もラクチン
               57
Repository
 Capistrano
                               Server
   Server
                              git&svn




           CheckOut&Deploy
         ロールバックディレクトリ作成



本番WebServer   本番WebServer   本番WebServer
次々出て来るyak

• 今時CIサーバーくらい有るべきだよねー
• 開発と検証の環境差異なんとかしたいねー
• DBスキーマの差異もなんとかしたいよねー

               59
スキーマ差異とか
Git全くかんけーねー


     60
CI導入
     Jenkins




61
CI
    Server



   hooks
build jenkins

  Repository    Reporting




push master

    local
構築中
ごめんなさい




  64
開発環境と検証環境との
   環境差異問題


     65
1.Applicationの差異問題



        66
Gitのパッチでひたすら頑張る
   間違った使い方な気もするけど気にしない




            67
2.DBスキーマの差異問題



      68
ツール作った!
 MySqlDeployUtil




        69
慌てて名前つけた



   70
MySqlDeployUtil
• preとliveのdbスキーマを定期的に差分チェック
• dev,pre,liveのDDLをGitで管理,Redmineへpush
• liveデプロイ前に差分SQLを発行
• 簡易なスコアリング機能
• Perlで実装
                    71
GITと出会って人生変わった
      第三章




       72
Gitの導入それは



    73
負債と向き合う事と



    74
根気よく刈り続ける戦いだった



      75
辛くも直視する負債

• 枯れに枯れてしまった稼働中の愛しいソース達
• 果てしない歴史を持つsvnのコミットログ
• どうしてこうなったのか未だに解らない構成

               76
刈り続けてるyak

• AppFWの問題、実行環境の問題
• デプロイの問題
• CI環境の問題
• 環境間差異の問題
               77
これで人生変わって無いと
言われたら人生辛過ぎです


     78
補足



79
開発者視点



  80
開発者視点

• mergeとcloneが爆速、リビジョン指定?ワロス
• リポジトリの事を気にせずコードを書き始められる
• gitというよりgit-hubの恩恵がハンパ無い

                81
開発者視点


• 日曜プログラマにとって恩恵が大きい
• 何だかんだ言ってもミーハーでありたいという気持ちが強い
•   .gitkeepの使用はいかがなもんですかね。。。




                                82
最後に



 83
組織に新しいツールを導入するための
       ヒント
       最終章




        84
こんな事ありませんか?



     85
新しい事やりたいと
 お願いしに行くと


    86
めん      色々言われる

         どく
• 「やる意味あるの?」
           さい
• 「メンバーのチケット消化してやれ」
• 「メリットを数値化しろ」

               87
怠惰で或る事は
PGの美徳です
   88
Q.どうする?



   89
A.勝手に作る

   90
偉い人には解らんのですよ

• ある程度動くものが無いと聞いてくれない
• メリットが有ると思わせるのも俺たちの仕事
• どや顔出来る

               91
Q.会社に居づらくなったら
    どーすんだよ


      92
A.CROOZ, Inc.では
エンジニアの採用を強化中です


        93
仲間を待ってます
僕を助けて下さい
  @umesho1




     94
ありがとうございました



     95

More Related Content

What's hot

やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013DQNEO
 
Redmine + gitlab: merge base development
Redmine + gitlab: merge base developmentRedmine + gitlab: merge base development
Redmine + gitlab: merge base developmentsmdkk
 
GitとCIとかチャットとかをオンプレで運用する話
GitとCIとかチャットとかをオンプレで運用する話GitとCIとかチャットとかをオンプレで運用する話
GitとCIとかチャットとかをオンプレで運用する話mdome
 
Git flowの活用事例
Git flowの活用事例Git flowの活用事例
Git flowの活用事例Hirohito Kato
 
一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理Takafumi Yoshida
 
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
 
GitLabを16万8千光年ワープさせた話(改)
GitLabを16万8千光年ワープさせた話(改)GitLabを16万8千光年ワープさせた話(改)
GitLabを16万8千光年ワープさせた話(改)Wataru NOGUCHI
 
はじめてのGit forデザイナー&コーダー
はじめてのGit forデザイナー&コーダーはじめてのGit forデザイナー&コーダー
はじめてのGit forデザイナー&コーダーSaeko Yamamoto
 
【社内勉強会】弊社でGit!実案件での運用
【社内勉強会】弊社でGit!実案件での運用【社内勉強会】弊社でGit!実案件での運用
【社内勉強会】弊社でGit!実案件での運用Reimi Kuramochi Chiba
 
GitHubで学ぶバージョン管理
GitHubで学ぶバージョン管理GitHubで学ぶバージョン管理
GitHubで学ぶバージョン管理Masafumi Yokoyama
 
Git flowについてまとめてみた
Git flowについてまとめてみたGit flowについてまとめてみた
Git flowについてまとめてみたhiroyuki koga
 
はじめようGit
はじめようGitはじめようGit
はじめようGittechscore
 
RedmineとGitとスクラム
RedmineとGitとスクラムRedmineとGitとスクラム
RedmineとGitとスクラムTakashi Okamoto
 
WindowsでGitを使う際のベストプラクティス
WindowsでGitを使う際のベストプラクティスWindowsでGitを使う際のベストプラクティス
WindowsでGitを使う際のベストプラクティスRyo Sumasu
 
ポイントをおさえて移行しよう!Git乗り換え超初級
ポイントをおさえて移行しよう!Git乗り換え超初級ポイントをおさえて移行しよう!Git乗り換え超初級
ポイントをおさえて移行しよう!Git乗り換え超初級Kouji Matsui
 
いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0Masakazu Matsushita
 

What's hot (20)

やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013
 
Redmine + gitlab: merge base development
Redmine + gitlab: merge base developmentRedmine + gitlab: merge base development
Redmine + gitlab: merge base development
 
GitとCIとかチャットとかをオンプレで運用する話
GitとCIとかチャットとかをオンプレで運用する話GitとCIとかチャットとかをオンプレで運用する話
GitとCIとかチャットとかをオンプレで運用する話
 
Git flowの活用事例
Git flowの活用事例Git flowの活用事例
Git flowの活用事例
 
一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理
 
GitLab Meetup Tokyo #1 LT:「わりと大きい会社でGitLabをホスティングしてみた話」
GitLab Meetup Tokyo #1 LT:「わりと大きい会社でGitLabをホスティングしてみた話」GitLab Meetup Tokyo #1 LT:「わりと大きい会社でGitLabをホスティングしてみた話」
GitLab Meetup Tokyo #1 LT:「わりと大きい会社でGitLabをホスティングしてみた話」
 
GitLabを16万8千光年ワープさせた話(改)
GitLabを16万8千光年ワープさせた話(改)GitLabを16万8千光年ワープさせた話(改)
GitLabを16万8千光年ワープさせた話(改)
 
Git勉強会
Git勉強会Git勉強会
Git勉強会
 
はじめてのGit forデザイナー&コーダー
はじめてのGit forデザイナー&コーダーはじめてのGit forデザイナー&コーダー
はじめてのGit forデザイナー&コーダー
 
【社内勉強会】弊社でGit!実案件での運用
【社内勉強会】弊社でGit!実案件での運用【社内勉強会】弊社でGit!実案件での運用
【社内勉強会】弊社でGit!実案件での運用
 
GitHubで学ぶバージョン管理
GitHubで学ぶバージョン管理GitHubで学ぶバージョン管理
GitHubで学ぶバージョン管理
 
Git flowについてまとめてみた
Git flowについてまとめてみたGit flowについてまとめてみた
Git flowについてまとめてみた
 
ドリコムJenkins勉強会資料
ドリコムJenkins勉強会資料ドリコムJenkins勉強会資料
ドリコムJenkins勉強会資料
 
はじめようGit
はじめようGitはじめようGit
はじめようGit
 
RedmineとGitとスクラム
RedmineとGitとスクラムRedmineとGitとスクラム
RedmineとGitとスクラム
 
WindowsでGitを使う際のベストプラクティス
WindowsでGitを使う際のベストプラクティスWindowsでGitを使う際のベストプラクティス
WindowsでGitを使う際のベストプラクティス
 
Jenkins 再入門
Jenkins 再入門Jenkins 再入門
Jenkins 再入門
 
Jenkinsはじめました - Yahoo! JAPANのCI+CD -
Jenkinsはじめました - Yahoo! JAPANのCI+CD -Jenkinsはじめました - Yahoo! JAPANのCI+CD -
Jenkinsはじめました - Yahoo! JAPANのCI+CD -
 
ポイントをおさえて移行しよう!Git乗り換え超初級
ポイントをおさえて移行しよう!Git乗り換え超初級ポイントをおさえて移行しよう!Git乗り換え超初級
ポイントをおさえて移行しよう!Git乗り換え超初級
 
いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0
 

Similar to Gitと出会って人生変わった テックヒルズ2013-03-22

Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!ymmt
 
"Continuous Publication" with Python: Another Approach
"Continuous Publication" with Python: Another Approach"Continuous Publication" with Python: Another Approach
"Continuous Publication" with Python: Another ApproachDaisuke Miyakawa
 
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードPlay framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードKazuhiro Hara
 
アカツキはどのようにAWSを活用しているか #jawsug
アカツキはどのようにAWSを活用しているか #jawsugアカツキはどのようにAWSを活用しているか #jawsug
アカツキはどのようにAWSを活用しているか #jawsugaktsk
 
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -Yukihiko SAWANOBORI
 
Multibranch Pipeline with Docker 入門編
Multibranch Pipeline with Docker 入門編Multibranch Pipeline with Docker 入門編
Multibranch Pipeline with Docker 入門編kimulla
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入Yu Nobuoka
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) Akihiro Kuwano
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングterurou
 
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏Developers Summit
 
作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていくRyo Mitoma
 
Build insider offline session チームでのgit
Build insider offline session チームでのgitBuild insider offline session チームでのgit
Build insider offline session チームでのgitTadahiro Ishisaka
 
Python for Data Analysis第1回勉強会(+git入門)
Python for Data Analysis第1回勉強会(+git入門)Python for Data Analysis第1回勉強会(+git入門)
Python for Data Analysis第1回勉強会(+git入門)Makoto Kawano
 
ALMツールたべくらべ
ALMツールたべくらべALMツールたべくらべ
ALMツールたべくらべKaoru NAKAMURA
 
Rancher2.0で実現する Managed Kubernetes Service
Rancher2.0で実現する Managed Kubernetes ServiceRancher2.0で実現する Managed Kubernetes Service
Rancher2.0で実現する Managed Kubernetes ServiceLINE Corporation
 
Voicepic@FukuiMASeminar
Voicepic@FukuiMASeminarVoicepic@FukuiMASeminar
Voicepic@FukuiMASeminarManabu Shimobe
 

Similar to Gitと出会って人生変わった テックヒルズ2013-03-22 (20)

Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!
 
"Continuous Publication" with Python: Another Approach
"Continuous Publication" with Python: Another Approach"Continuous Publication" with Python: Another Approach
"Continuous Publication" with Python: Another Approach
 
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードPlay framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレード
 
Gitを使った運用方法
Gitを使った運用方法Gitを使った運用方法
Gitを使った運用方法
 
アカツキはどのようにAWSを活用しているか #jawsug
アカツキはどのようにAWSを活用しているか #jawsugアカツキはどのようにAWSを活用しているか #jawsug
アカツキはどのようにAWSを活用しているか #jawsug
 
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
 
Multibranch Pipeline with Docker 入門編
Multibranch Pipeline with Docker 入門編Multibranch Pipeline with Docker 入門編
Multibranch Pipeline with Docker 入門編
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
Play ja 3_update
Play ja 3_updatePlay ja 3_update
Play ja 3_update
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
 
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
 
作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく
 
恋するJenkins
恋するJenkins恋するJenkins
恋するJenkins
 
Build insider offline session チームでのgit
Build insider offline session チームでのgitBuild insider offline session チームでのgit
Build insider offline session チームでのgit
 
Python for Data Analysis第1回勉強会(+git入門)
Python for Data Analysis第1回勉強会(+git入門)Python for Data Analysis第1回勉強会(+git入門)
Python for Data Analysis第1回勉強会(+git入門)
 
Play jjug2012spring
Play jjug2012springPlay jjug2012spring
Play jjug2012spring
 
ALMツールたべくらべ
ALMツールたべくらべALMツールたべくらべ
ALMツールたべくらべ
 
Rancher2.0で実現する Managed Kubernetes Service
Rancher2.0で実現する Managed Kubernetes ServiceRancher2.0で実現する Managed Kubernetes Service
Rancher2.0で実現する Managed Kubernetes Service
 
Voicepic@FukuiMASeminar
Voicepic@FukuiMASeminarVoicepic@FukuiMASeminar
Voicepic@FukuiMASeminar
 

Gitと出会って人生変わった テックヒルズ2013-03-22