2013/08/20

[#nshgrb]西脇.rb & 東灘.rb もくもく会 6th と Kobe Rubyist Meetup に参加してきました

8/17に西脇.rb & 東灘.rb もくもく会 6th と Kobe Rubyist Meetup に続けて参加してきました。
いつも Kyoto.rb に参加してくださってる @spring_aki さんから、宣伝があったのと、SonicGarden の人が来るというのと、コードレビューつきもくもく会に興味があったので、新快速で一時間ほど揺られて行ってきました。

作ったもの

redmine_yare という簡単な Redmine のプラグインを作りました。
最近プライベートで Redmine のプラグインを作っているので、勉強がてらということととりあえず今回はもくもく会の中で完結するものを作りたかったので、シンプルなものにした。
画面遷移する度に今日が期限のチケットをダイアログ表示する非常に迷惑なプラグインです。

苦労したところ

フックのロジックとビューを分離するところが苦労した。
コレについてのまとめは後日に別エントリであげます。

もくもく会の感想

意外と3時間というのは短くて思ったより実装が進まなかった。調査に時間がかかったというのもあるけれど。結構時間を無駄に使っていたと思う。その都度しっかり意思決定していればもっと効率的な進め方が出来たと思う。
コードレビューでは、自分のコードはコード量自体が少なくてあまり突っ込まれなかった。(スペルミスしたけど)
気になったのは、レビューイと限られた人がメインでしゃべっている感じだったので、もっと全員でコードレビューしている感じがでるといいなと思う。(一人15分だし、スキルや経験の差があるのでしかたのないこととは思うが)

Meetup

懇親会はやっているけど、規模を拡大して Meetup は初の試みだったそうだ。
やっぱり酒が入って話しやすくなってくると濃い話が自然発生するのが楽しい。
正規表現の話や、Railsのコントリビュータの体験談などの話を酒を聞けるのは貴重な機会だった。

今後

特性上、大人数で行えないタイプの勉強会なので毎回参加というのは難しいとは思うが、また参加したいなと思う。
今回の ProMotion のお話のように、他者に新しい体験を提供できるようなネタがあればいいんだけど、しばらくは難しいかもな。Redmine のプラグインを頑張らねば。

西脇.rb と東灘.rb の皆様お疲れ様でした。

2013/08/01

Redmine plugin にて自動ロード対象のディレクトリを追加するには

どうやら Redmine はプラグインの lib は自動的にロードパスに登録するが、app 以下は controllers, models, helpers のみを autoload の対象にするようだ。
lib/redmine/plugin.rb にこんな記述があった。

例えば、フォームクラスを作って app/forms に配置したい場合は、init.rb に処理を追加してやる必要がある。 一つしか追加しないなら simple の方でいいだろうし、複数追加するなら plugin.rb をパクって multiple で書くのがいいんじゃないかな。

2013/07/28

Redmine plugin 開発時の fixture

Redmine のプラグインのユニットテストのために、fixture を追加した。 $REDMINE/plugins/my_plugin/test/fixtures/my_models.ymlという形でテストデータを追加し、bundle exec rake redmine:plugins:test RAILS_ENV=testを実行したらエラーになった。

Errno::ENOENT: No such file or directory - /Users/pinzolo/projects/my_plugin/redmine-2.3.1/test/fixtures/my_models.yml

つまり、プラグインのtest/fixturesディレクトリを見ていないということみたいだ。

プラグインの test/fixtures を見るように設定するなら、$REDMINE/plugins/my_plugin/test/test_helper.rb に下記を追加すればいいんだけど、こうすると $REDMINE/test/fixtures を見てくれなくなる。

fixture_path が配列でもよしなにやってくれるようにパッチを当てたいところだが、fixture_pathが結構ダイレクトに使われているので大変そうなのと、プラグイン側がやることでもなかろうということで、仕方なく $REDMINE/test/fixtures にコピーする。 fixture を作ったり更新したりする度にコピーするのはめんどいな。

2013/07/26

RAILS_ENV=test な rails console を実行するには

Rails アプリでテスト環境での irb を実行したくて bundle exec rails console RAILS_ENV=test とするとエラーになった。
どうやら bundle exec rails console test とする必要があるらしい。
ちなみに、RAILS_ENV=test な rails console では、SQL のログが出力されて便利ですよ。
pinzolo@ileach % bundle exec rails console test
*** Mocha deprecation warning: Change `require 'mocha'` to `require 'mocha/setup'`. Loading test environment (Rails 3.2.13)
irb(main):001:0> Project.all.first
Project Load (0.2ms) SELECT "projects".* FROM "projects" => #<Project id: 1, name: "eCookbook", description: "Recipes management application", homepage: "http://ecookbook.somenet.foo/", is_public: true, parent_id: nil, created_on: "2006-07-19 17:13:59", updated_on: "2006-07-19 20:53:01", identifier: "ecookbook", status: 1, lft: 1, rgt: 10, inherit_members: false>

2013/07/22

特定のモジュールがextendされているかを調べる

include したモジュールは included_modules 経由で調べられるが、extend したモジュールを取得する extend_modules のような API はなかった。
調べてみたところ、一手間かけたら取得することができるみたいだ。

2013/07/20

done homework of Kyoto.rb

先日の Kyoto.rb でライブコーディングの題材となった TDDBC の課題(TDD Boot Camp(TDDBC) - TDDBC大阪2.0/課題)をやってみた。
kyotorb/2013-07-18_TDDBC at master · pinzolo/kyotorb

ステップ5は出力だけの話なのでステップ4まででいーや。(投げやり)
英語がかなり微妙、そして RSpec の describe や context の扱いも慣れていないのでブレまくり。

2013/07/17

椅子代わりにバランスボールを導入してみた

引っ越してようやく開発用机も届いて、残すは椅子だけとなった我が家の開発環境。
近場のオフィス用品中古店を見て回り、45kでアーロンチェアが売っていたり、16kのオカムラのFeegoもいいなと思っていた。
しかしまあ思いつきで、バランスボールによる体幹トレーニングができるなら、それでいいかなと。安いし。
ヨドバシで1kちょいなんで、失敗しても諦めつくし。高い椅子はそれから買えばいいし。
というわけで、バランスボールを椅子代わりに我が家に導入しました。
子供が出来たら安全面を考える必要があるかもしれないけど、しばらく試してみます。
願わくば、体にいい傾向が出ますように。

java -jar にて実行可能な jar ファイルを作成するための pom.xml 設定

executable jar が作成したかったので調べた。
classpathPrefix でクラスパスを通すディレクトリを指定できるのはかなり便利だと思う。

2013/07/08

github のリポジトリを remote add して push したらエラーが出た

git push したらこんなエラーが出た。

% git push origin master
To git@github.com:pinzolo/repo.git ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'git@github.com:pinzolo/repo.git' hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Merge the remote changes (e.g. 'git pull') hint: before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.

いつも下記の手順で github と連携していたから、特に困ったことはなかった。

  1. github にリポジトリを作成する
  2. ローカルに clone する
  3. 開発する

しかし今回は

  1. ローカルで git init する
  2. github リポジトリを作成
  3. ローカルに対して git add origin git@github.com:pinzolo/repo.git
  4. 冒頭のエラー

というわけだ。

github でリポジトリを作成した時に README.md を作成したから、そっちの情報がなかったわけね。
というわけで、一旦 git pull してから git push したらエラーは出なくなった。なるほど

2013/07/04

startup_redmine_plugin_development.sh

Redmine のプラグインを開発するときに最初に行う作業を自動化するスクリプトを書いた。
自動で行なってくれる作業は
  1. 専用ディレクトリの作成
  2. 最新のRedmineを取得
  3. Redmineをローカルにデプロイ
    1. database.ymlを作成
    2. gemのインストール
    3. トークンの作成
    4. マイグレーションの実行
    5. デフォルトデータのロード(デフォルトは日本語)
  4. プラグインの雛形を生成
  5. gitにて初回コミット
惜しむらくは、バージョンとダウンロードURLは都度メンテナンスしていく必要があることかな。