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

1年かけてgemを1つ作りました

 1年かけてgemを1つ作りました

大江戸Ruby会議04 で発表したスライド http://regional.rubykaigi.org/oedo04/

Kunihiko Ito

April 19, 2014
Tweet

More Decks by Kunihiko Ito

Other Decks in Programming

Transcript

  1. 大江戸Ruby会議
    04
    1年かけて1つのgemを作りました
    伊藤 邦彦
    永和システムマネジメント

    View full-size slide

  2. はじめに
    発表する機会をいただき
    ありがとうございます

    View full-size slide

  3. 自己紹介
    Kunihiko Ito
    @kunitoo
    Asakusa.rb歴: 約1年半
    rgitlog を作ってます

    View full-size slide

  4. 今日話すこと
    Asakusa.rb でやっていること
    作ったgemのこと

    View full-size slide

  5. Asakusa.rb でやっている
    こと
    上野会場のドアを開けたり
    他の人の話を聞いたり
    写経したり
    gem を作ったり

    View full-size slide

  6. 上野で会場のドアを開けたり
    ドア番をお願いされたのが Meet
    up に参加するきっかけ

    View full-size slide

  7. 他の人の話を聞いたり
    会話の単語が分からない
    調べながら会話を聞く
    少しずつ慣れて話が分かるよう
    になった

    View full-size slide

  8. 写経したり
    Rails Tutorial
    Rails Guides
    RubyGems Guides

    View full-size slide

  9. gem を作ったり
    自己紹介するときに話せる代表
    作がほしい
    なにを作るか考えるところから
    始めた

    View full-size slide

  10. 作ったgem

    View full-size slide

  11. rgitlog
    rails アプリの git log をブラウ
    ザで見ることができます

    View full-size slide

  12. Insatall
    以下を変更するだけ
    Gemfile
    config/routes.rb

    View full-size slide

  13. Gemfile
    gem 'rgitlog'
    次に
    % bundle

    View full-size slide

  14. config/routes.rb
    mount Rgitlog::Engine, at: '/rgitlog'

    View full-size slide

  15. rgitlogができるまで
    やりたいこと探し
    gitを扱うライブラリ探し

    View full-size slide

  16. rgitlogができるまで
    やりたいこと探し
    gitを扱うライブラリ探し

    View full-size slide

  17. やりたいこと
    開発中に以前のバージョンの見
    た目が気になることがあった
    動作確認中はブラウザだけで完
    結したい
    git checkout したくない

    View full-size slide

  18. これからやりたいこと
    ブランチを選択して checkout
    したい
    diff を見れるようにしたい
    見た目をかっこよくしたい

    View full-size slide

  19. rgitlogができるまで
    やりたいこと探し
    gitを扱うライブラリ探し

    View full-size slide

  20. 最初のバージョン
    mojombo/grit
    mojombo/grit はRuby 2.0で動
    かなかった
    gitlabhq/grit フォークを使用

    View full-size slide

  21. grit での git log 取得
    Repo.new('path/to/my/repository').commits

    View full-size slide

  22. watchしていたらある日
    “Grit is no longer
    maintained. Check out
    rugged”
    Pull Request が 118 close された

    View full-size slide

  23. rugged での git log 取得
    Rugged::Repository.new('path/to/my/repository').head.log

    View full-size slide

  24. rugged での git log 取得
    Rugged::Repository.new('path/to/my/repository').head.log
    reflog 取得されます

    View full-size slide

  25. 正解
    repo = Rugged::Repository.new('path/to/my/repository')
    repo.walk(repo.last_commit)
    気付くのに数ヶ月かかりました
    orz

    View full-size slide

  26. rgitlog リリースまで
    作りたいと思ってから約1年
    実はとっても簡単に作れます

    View full-size slide

  27. rgitlogの作り方
    今から作ります!
    時間ありますよね?

    View full-size slide

  28. rails plugin new
    $ rails plugin new rgitlog --mountable -O -B
    $ cd rgitlog
    $ bundle --local

    View full-size slide

  29. Add rugged
    rgitlog.gemspec
    s.add_dependency "rugged"

    View full-size slide

  30. generate controller
    $ rails g controller rgitlog index

    View full-size slide

  31. Controller
    require_dependency "rgitlog/application_controller"
    require 'rugged'
    module Rgitlog
    class RgitlogController < ApplicationController
    def index
    path = Rugged::Repository.discover(Dir.pwd)
    repo = Rugged::Repository.new(path)
    @commits = repo.walk(repo.last_commit).to_a
    end
    end
    end

    View full-size slide

  32. View
    commits

    <% @commits.each do |commit| %>
    <%= commit.message %>
    <% end %>

    View full-size slide

  33. Routes
    root to: 'rgitlog#index'

    View full-size slide

  34. 完成
    慣れると10分くらいで作れるように
    なる

    View full-size slide

  35. まとめ
    Asakusa.rbに通いこつこつと続け
    ていれば、
    1年かかったことが20分でできるよ
    うになります

    View full-size slide