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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  10. 作ったgem

    View Slide

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

    View Slide

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

    View Slide

  13. Gemfile
    gem 'rgitlog'
    次に
    % bundle

    View Slide

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

    View Slide

  15. Usage

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  31. generate controller
    $ rails g controller rgitlog index

    View Slide

  32. 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 Slide

  33. View
    commits

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

    View Slide

  34. Routes
    root to: 'rgitlog#index'

    View Slide

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

    View Slide

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

    View Slide