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

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

大江戸Ruby会議04 で発表したスライド http://regional.rubykaigi.org/oedo04/

C4455065001e57c2ea24190134882560?s=128

Kunihiko Ito

April 19, 2014
Tweet

Transcript

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

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

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

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

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

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

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

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

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

  10. 作ったgem

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

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

  13. Gemfile gem 'rgitlog' 次に % bundle

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

  15. Usage

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

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

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

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

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

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

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

  23. watchしていたらある日 “Grit is no longer maintained. Check out rugged” Pull

    Request が 118 close された
  24. rugged での git log 取得 Rugged::Repository.new('path/to/my/repository').head.log

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

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

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

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

  29. rails plugin new $ rails plugin new rgitlog --mountable -O

    -B $ cd rgitlog $ bundle --local
  30. Add rugged rgitlog.gemspec s.add_dependency "rugged"

  31. generate controller $ rails g controller rgitlog index

  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
  33. View <h1>commits</h1> <ul> <% @commits.each do |commit| %> <li><%= commit.message

    %></li> <% end %> </ul>
  34. Routes root to: 'rgitlog#index'

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

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