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

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

Upload: kunitoo

Post on 13-Jul-2015

217 views

Category:

Software


2 download

TRANSCRIPT

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

大江戸Ruby会議04

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

伊藤 邦彦永和システムマネジメント

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

はじめに

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

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

自己紹介

Kunihiko Ito

@kunitoo

Asakusa.rb歴: 約1年半

rgitlog を作ってます

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

今日話すこと

Asakusa.rb でやっていること

作ったgemのこと

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

Asakusa.rb でやっていること

上野会場のドアを開けたり

他の人の話を聞いたり

写経したり

gem を作ったり

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

上野で会場のドアを開けたり

ドア番をお願いされたのが Meet up に参加するきっかけ

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

他の人の話を聞いたり

会話の単語が分からない

調べながら会話を聞く

少しずつ慣れて話が分かるようになった

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

写経したり

Rails Tutorial

Rails Guides

RubyGems Guides

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

gem を作ったり

自己紹介するときに話せる代表作がほしい

なにを作るか考えるところから始めた

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

作ったgem

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

rgitlog

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

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

Insatall

以下を変更するだけGemfile

config/routes.rb

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

Gemfile

gem 'rgitlog'

次に

% bundle

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

config/routes.rb

mount Rgitlog::Engine, at: '/rgitlog'

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

Usage

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

rgitlogができるまで

やりたいこと探し

gitを扱うライブラリ探し

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

rgitlogができるまで

やりたいこと探し

gitを扱うライブラリ探し

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

やりたいこと

開発中に以前のバージョンの見た目が気になることがあった

動作確認中はブラウザだけで完結したい

git checkout したくない

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

これからやりたいこと

ブランチを選択して checkout したい

diff を見れるようにしたい

見た目をかっこよくしたい

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

rgitlogができるまで

やりたいこと探し

gitを扱うライブラリ探し

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

最初のバージョン

mojombo/grit

mojombo/grit はRuby 2.0で動かなかった

gitlabhq/grit フォークを使用

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

grit での git log 取得

Repo.new('path/to/my/repository').commits

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

watchしていたらある日

“Grit is no longer maintained. Check out rugged”

Pull Request が 118 close された

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

rugged での git log 取得

Rugged::Repository.new('path/to/my/repository').head.log

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

rugged での git log 取得

Rugged::Repository.new('path/to/my/repository').head.log

reflog 取得されます

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

正解

repo = Rugged::Repository.new('path/to/my/repository')repo.walk(repo.last_commit)

気付くのに数ヶ月かかりましたorz

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

rgitlog リリースまで

作りたいと思ってから約1年

実はとっても簡単に作れます

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

rgitlogの作り方

今から作ります!

時間ありますよね?

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

rails plugin new

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

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

Add ruggedrgitlog.gemspec

s.add_dependency "rugged"

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

generate controller

$ rails g controller rgitlog index

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

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 endend

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

View

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

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

Routes

root to: 'rgitlog#index'

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

完成

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

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

まとめ

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