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: 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: 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分でできるよ
うになります