Rabbit Slide Show

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

2014-04-19

Description

2014/04/19 に行われた大江戸Ruby会議04で"1年かけて1つのgemを作りました"というタイトルで発表した資料です。rgitlog の話をしました。

Text

Page: 1

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

Page: 2

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

Page: 3

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

Page: 4

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

Page: 5

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

Page: 6

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

Page: 7

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

Page: 8

写経したり
Rails Tutorial
Rails Guides
RubyGems Guides

Page: 9

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

Page: 10

作ったgem

Page: 11

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

Page: 12

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

Page: 13

Gemfile
gem 'rgitlog'
次に
% bundle

Page: 14

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

Page: 15

Usage

Page: 16

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

Page: 17

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

Page: 18

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

Page: 19

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

Page: 20

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

Page: 21

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

Page: 22

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

Page: 23

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

Page: 24

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

Page: 25

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

Page: 26

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

Page: 27

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

Page: 28

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

Page: 29

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

Page: 30

Add rugged
rgitlog.gemspec
s.add_dependency "rugged"

Page: 31

generate controller
$ rails g controller rgitlog index

Page: 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

Page: 33

View
<h1>commits</h1>
<ul>
<% @commits.each do |commit| %>
<li><%= commit.message %></li>
<% end %>
</ul>

Page: 34

Routes
root to: 'rgitlog#index'

Page: 35

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

Page: 36

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

Other slides