@tomykairaさんの素晴らしいエントリーに触発されて、Lokkaの現在の課題と何をしようとしてるのかを書いてみます。

[lokka][ruby][test]lokka コミッタからのお願いをお読みください - tomykaira makes love with codes

テスト問題も重要で@tomykairaさんや皆さんの協力でテスト拡充に向けて動き始めました。それとは別に僕の取り組んでる事について。

優先してやりたいこと

  • プラグインの仕様を決めること。
  • gem化。
  • 普通の人でも使えるようにすること。

Lokkaに足りない機能は色々ありますが、まずは機能を追加して行ける土台を作ることが大事だと思っています。gem化もその土台に必要なものです。

現在の問題

  1. gem化可能なプラグインの仕様がちとむずい(gem化するとviewの場所がわからなくなる)
  2. 以前のプラグインとの互換性をどうするか
  3. プラグインの自動読み込みがむずい
  4. bundle installオプションとかむずい。管理画面にプログラマー向けっぽい項目が最初から出てる。

1. Lokkaのプラグインは管理画面を持つ事が多いのでRailsで言えばEngine的な性質を持つものが多いことになる。ここはSinatraアプリがRackアプリでもあるという性質を使って、Sinatraアプリ(恐らくそれを継承したLokka::Plugin)をプラグインということにしてuseする。

2. 従来のものも普通にregisterする。

bundlerではlokka-hello.gemをBundler.requireしてもlokka/hello.rbはrequireしてくれない。lokka-hello.rbをrequireする。

3. railsでもそういう名前のgemではlokka-hello.rbを用意してその中でrequireしてるので、

# lokka-hello.rb:
require 'lokka/hello'
register Lokka::Hello

みたいに書いてくださいという決まりにする。

4. どうしよう。Lokka本体をgem化する時に簡単になるように考える?

まとめ

要は

  • Before Rails3 style gem -> Sinatra extension style gem
  • Rails3 style gem -> Sinatra App Style gem

って感じでrailsのパクリで行こうと思います。

Lokkaはまだgemになってません。(gem branch開発者絶賛募集中!)

なので最新版にアップデートするにはlokkaのリポジトリからpullしてこなきゃいけない。(一応新しいバージョンリリース時にtag打ってるのでmasterよりはtagからの方が安全かも?)

よくある構成

  • githubに自分のブログ用リポジトリを持ってる。
  • herokuにそのブログをアップしてる。

僕のこのブログもdocs-komagata-orgというリポジトリ名でgithub, herokuにアップしてます。そういう場合はlokkaというremoteリポジトリ名で本家を追加しておくと楽です。

~/code/docs-komagata-org[master]% cat .git/config 
[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
	ignorecase = true
[remote "origin"]
	url = git@github.com:komagata/docs-komagata-org.git
	fetch = +refs/heads/*:refs/remotes/origin/*
[remote "lokka"]
	fetch = +refs/heads/*:refs/remotes/origin/*
	url = git@github.com:komagata/lokka.git
[remote "heroku"]
	url = git@heroku.com:docs-komagata-org.git
	fetch = +refs/heads/*:refs/remotes/heroku/*
[branch "master"]
	remote = origin
	merge = refs/heads/master

こんな感じ。最新版に追従したいなという時にgit pull lokka masterすると追いつけるし、自分のテーマいじってただけのハズがいつの間にか本体いじってた時は本体にpushできる。herokuにアップしたい場合はgit push heroku master

最新版にしたらいきなり動かないという場合は、DBスキーマに変更があった場合が多いので、下記をすると動くかもしれません。

$ bundle exec rake db:migrate

Lokkaをrails consoleの様に使う。

Terminal — ruby — 80×24

TokyuRuby会議04でLokkaについてLTさせていただきました。

TokyuRuby会議に初めて参加させていただきました。運営に携わった皆様ありがとうございました。スポンサーのサントリー様のプレミアムモルツ美味しゅうございました。@2celebさんの料理もとても美味しかったです。

Lokkaでもpadrino-helpersをマージしようとしてますが、Padrinoエヴァンジェリストの@udzuraさんと話せたのも嬉しかったです。

改めて勉強会やイベントの目的とは何なのか考えさせられたイベントでした。

Travis CI - Distributed build platform for the Ruby community

ヒャッハー!ruby1.9.3preview1で動かねえところもたまらねえぜ。

Lokkathon #5 : ATND

LokkathonはLokka + Hack + Marathonです。 Lokkaに関する作業をモクモクとするイベントです。会場は用意されますが、Lingrのチャットのみでの参加も可能です。(むしろ推奨)

毎週やってるLokkathon #5、明日もやります。リモート参加も歓迎です。(リモート参加の場合はATND登録しなくて大丈夫です。)腹減るので食べてくるのがオススメです。

成果は毎回下記のようにlokka.orgのエントリーになるのでリモートでも何かやった方はURLとかスクリーンショットをLingrにいただければ載せていきたいと思います。(活動してるプロジェクト感を維持するために・・・)

Lokkathon #3 - Lokka

module Foo
  module Helpers
    def bar
      'unk'
    end
  end
end

こういうHelpersを

helpers do
  include Foo::Helpers
end

こういう風に使ってた場合。

RSpec.configure do |config|
  config.include Foo::Helpers
end
describe Foo::Helpers do
  context 'bar' do
    it 'should return unk' do
      bar.should eql('unk')
    end
  end
end

Spec::Runner.configでincludeするとテスト出来る。

LokkaはSinatraベースなので同じようにHelpersのテスト書ける。でもRspecややこしいな。config.includeのとことか。とTest::Unit, Shoulda信者が申しております。

Lokkathon #4 : ATND

LokkathonはLokka + Hack + Marathonです。 Lokkaに関する作業をモクモクとするイベントです。会場は用意されますが、Lingrのチャットのみでの参加も可能です。(むしろ推奨)

予定通り毎週やってきます。スゴイ捗るんですが、スゴク疲れたので3時間から2時間にしました。あと、腹が減るので飯食ってからもしくは食いながらがいいと思います。

時間中はLingrにみんな常駐しますので何か言いたいとか聞きたいなどあれば是非。

Lokkathon #3 : ATND

LokkathonはLokka + Hack + Marathonです。 Lokkaに関する作業をモクモクとするイベントです。会場は用意されますが、Lingrのチャットのみでの参加も可能です。(むしろ推奨)

もう明日ですが、Lokkathon #3をやりたいと思います。毎週水曜日のこの時間にやってく予定です。リモート参加前提で、一応場所もあるよという感じです。というか毎週3時間はLokkaの作業をする!という自分に対する縛りです・・・。

単にLokka使ってみたいけどよくわかんないので教えて欲しいとかでも全然OKです。

メーリングリストの方に投稿したので興味がある方がいらっしゃればメーリングリストに参加してもらえると嬉しいです!

改めてLokkaでやろうとしてることまとめ - lokka-ja | Google グループ