Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

写経したり Rails Tutorial Rails Guides RubyGems Guides

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

作ったgem

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

Gemfile gem 'rgitlog' 次に % bundle

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

Usage

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

Add rugged rgitlog.gemspec s.add_dependency "rugged"

Slide 31

Slide 31 text

generate controller $ rails g controller rgitlog index

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

View

commits

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

Slide 34

Slide 34 text

Routes root to: 'rgitlog#index'

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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