RSpec 3からPendingだけでなくSkipというものが増えていた

自分の知識が RSpec 2 時代で止まっている部分があることが再確認できた。

Pending and skipped examples - RSpec Core - RSpec - Relish

  • skip と mark された example は実行されない
  • pending と mark された example は実行される
    • failure でも spec 全体では fail しない
    • 逆に pass するともう pending すべきではないと教えるために全体では fail になる

ということらしい。

つまり、「時々落ちる」けど「基本的には動くことが分かっているもの」1 は pending にしても spec 全体ではやはり「時々落ちる」ことになってしまう。pending ではなく skip にしておくと安定して通る。実行しないので。

一時的に skip にしてあとで直すということをするとよいらしい。

※ 個人的には it を xit にする、describe を xdescribe にする、という prefix 方式は commit に残すのは分かりにくいのでやめた方がよいと思う。手元でだけ一時的に書き換えるのはアリだと思うけど。

  1. 例えば random な要素を入れてしまっているために落ちることが分かっている 

初めてPackagist.orgに登録してみた

あるいは久しぶりに書くけど Kanazawa.rb meetup 32 に参加してきた話。

今回は「意識高いもくもく会」。初参加の方が3名もいて、暖かくなってきたのもあって、新しい風を感じたりしていた。

今日の自分の課題は packagist への package 登録。

packagist.orgとは

まず Composer ってのがある。これについては以前まとめたのがあるので、もしまだよく分かっていないということであれば参照のこと。要は Ruby の Bundler のようなもの。

今さらComposer - あーありがち(2014-07-02)

で、デフォルトのリポジトリが packagist.org で、ここに自作のパッケージを登録しようと思ったのが始まり。

composer, packagist って利用方法の記事は多いけど、作る系の情報って全然ないなと気づいたので、実際にやってみた。

composer package という tarball のようなものは存在しない

meetup が始まる前にこの辺は調べがついていて、なんとなくそうなんじゃないかなーと思っていたけど、composer って

  • 依存性解決を行うけど
  • アーカイブは導入しない

という考え方になっている。

じゃあ packagist.org って何ってことになるんだけど、これは単に公開されている VCS とヒモ付けを行って、composer の search や install を助けてくれるだけのものとなっている。

デメリット

実際の install は単に github から clone してるだけだったりする。ということは、deploy 時に composer install を行おうと思ったら例えば github.com も packagist.org も両方生きていなければいけないということになる。これは deploy の信頼性を考える場合にデメリットにもなり得る。

repositories という記述を追加することで mirror を参照させることもできるので対策は打てるけど、Bundler のようにまとめて source を追加、切り替えられるわけではないので、マジメに考えるとちょっと面倒くさそうではある。

(例えば Sqale.jp という PaaS は gem を mirror してそっちを見にいくようにしている。Ruby アプリが増えれば増えるほど bundle install は帯域的につらくなりそうなので、これは正しいアプローチだと思う。こういうのは Gemfile なら簡単だけど composer.json だと大変そう。なんか方法あるのかな。)

メリット

この方式のメリットは、VCS への commit, push とパッケージの登録作業を別々に行う必要がないということ。バージョンは単に VCS 上のタグで表現される。

ということは package 登録作業者を packagist.org 上で collaborator 登録するということも必要なくなる。例えば github の organization で開発を行っているのであれば、そこに push できる人は全員 package の更新にも参加していることになるわけだ。そういう意味では管理はとても楽。

実際の登録、というか

前置きが長くなってしまったが、要は登録作業なんてものは存在しないので、やることは本当に少ない。

今回自分がやったのは

  • packagist.org にアカウント作成
  • packagist.org 上で github.com の repository 情報を追加
  • github.com の webhook に packagist.org の credential を追加

以上である。実際にやった結果は

wtnabe/ga-shikomi-php - Packagist

で、リポジトリは

wtnabe/ga-shikomi-php

えーとこれの説明はしたっけ。してないよね。まぁいいや。時間がないのでまた今度。

おまけ : minimum-stability

これは単に依存の記述次第なんだけど、例えば

symfony/console - Packagist

の場合、しばらく x.x.x-dev みたいなのが並んでいるので、自分はこれが正式版なのかなと思っていたけど、これは違うのね。あくまで dev バージョンの記述。

で、これに

require

で依存しちゃうと、stability の問題で通常は install できなくなってしまう。この問題については以下のブログ記事が詳しい。

Composerがパッケージのstabilityを解決するしくみ - オープンソースこねこね

require-dev

での依存ならオッケーだけど、require は stable が基本なので、そのままだと install できなくなってしまう。これを書いている時点では上の ga-shikomi-php も

"minimum-stability": "dev"

を追加しないと動かない。分かってしまえば「あぁ、そういや Pear も beta が install できなかったな」と思い出すこともできるんだけど。

ただ問題は

no matching package found.

とか、エラーメッセージが依存しているバージョンの stability の問題という意味に取れない場合があること。

ということで注意事項として改めてメモしておく。

おまけその2

The Twelve-Factor App を参照しつつ、開発者のレベルを上げていきましょうという発表を行った。まだ方法練ってないけど 12-factor を参考にしつつ具体的な改善を考えたりする勉強会というか Kanazawa.rb 内のサークルみたいなものを始めようと思っている。

おまけその3

この日時点で CF 作成実績 489 個、もうすぐ Mind Controller Silver になり、L10 のメダル要件が揃うところまできた。

ということで packagist 登録もできて Ingress もできてビールがうまかったぜ!

Integrity思い出しメモ

Integrity | Continuous Integration server

ちょっと調べた範囲で git + Ruby 以外のアプリをどうやってテストするのかをメモ。

git 以外に対応できるか?

lib/integrity/repository.rb

def checkout
  run "git clone #{@uri} #{directory}", false unless cloned?
  run "git fetch origin"
  run "git checkout origin/#{@branch}"
  run "git reset --hard #{@commit}"
end

って書いてあるので、例えばこれを git-svn を使うように書き換えちゃえば svn には対応できるような気がする。同じ感じで他の scm にも対応できるんじゃないかなぁ。

それか git-svn で mirror する仕組みを用意しておいて、mirror した git repository に対して git fetch; git checkout するようにした方がいいのかな? 本体をいじっちゃうと後々面倒がありそうだし。

テストの実行と結果の取得

lib/integrity/project.rb

module Integrity
  class Project
    include DataMapper::Resource
    include Notifiers

    property :id,         Serial
    property :name,       String,   :required => true
    property :permalink,  String
    property :uri,        URI,      :required => true, :length => 255
    property :branch,     String,   :required => true, :default => "master"
    property :command,    String,   :required => true, :length => 255, :default => "rake"
    property :public,     Boolean,  :default  => true

この :defaule => "rake" がくさいので、たぶん :command を置き換えればいいんじゃないか。

Integrity.configure do |c|
  c.builder.project.command COMMAND
end

って感じになるのかな? あるいは rake を使ってないなら rake っていう sh script を用意するのもアリかも。個人的には rake 使ってない環境はないので無理だけど。

とりあえず FAQ に以下のように書いてあるので

But does it work with <insert tech here>?

Absolutely! As long as your build process can be run from an UNIX-y environment and that it returns a zero status code for success and non-zero for failure, then Integrity works for you.

exit status さえ返せばどうにかなるんだと思う。

というかそうか、Rakefile 置いて :default タスクでテスト走らせればいいだけか。そっちの方が楽かも。

これで Ruby と git は必要だけど Ruby 以外のアプリ、git 以外の scm でもなんとか使えそうかな? SimpleTest を使っているプロジェクトは SimpleTestをCIへ活かす のようにすればなんとかなるような気がする。まだ試してないけど。

日本Androidの会金沢支部第一回勉強会参加

日本Androidの会 金沢支部 第一回勉強会 : ATND

ただし、現時点で自分は Android にはそんなに興味ない。今回の目的は kinneko さんとの遭遇。

とだけ言うのもなんなので、一応前日 eclipse と SDK をセットアップした。

会場の石川高専はネットワークがガッツリ閉じててすべて proxy 経由でしか出れない。いつもは自宅サーバ経由の TIG で Twitter にメモを post してるんだけどそれができない。頼みの emobile は圏外。仕方なく急遽 TwitterFox を仕込む。金沢工大もそうなんだけど、今のところ学校関係で勉強会やるとネットワーク的にとても厳しい状況が続くんだろうなぁ。

肝心の内容だけど、Android はオープンだから開発者的には iPhone より面白いよ!各種センサーを使って世界中の Android 上のアプリからデータ取ると面白いんじゃね!(センサークラウドって言うらしい。)Simulator ではなく Emulatore です! iPhone とは違うのだよ! マジ Linux なので分かってる人は楽ちんだよ!(センサーに対応したデバイス積んでないとその辺はどうにもならないけど。)

現状は SDK と emulator の連携に失敗する部分があったりするけど次のバージョンや次の次のバージョンでは良くなるんじゃないかなぁ、みたいな話でした。ハードに強い方々はいろんなデバイスに載っけるという楽しみ方をしているようですが、低レイヤーにはあまし興味のない自分としては WebKit のレベルくらいまでしか押さえられない感じです。UA 的には Mobile Safari だけど Android って文字列も入る形のようです。

めっちゃアウェイだったけどとりあえず kinneko さんにご挨拶できたのでよしとしよう。ちょっと遠い世界の話も面白いな。

cf.

UI設計にはこんなものもあるらしい。

DroidDraw : Graphical User Interface Editor for Android Cell Phone Development and Programming

FreeStyle Wiki に Accesskey を追加すんのめんどくさいな

%Wiki::menu でヘッダのメニューを設定できるんだけど、

 $wiki->add_admin_menu(メニュー項目名,遷移するURL,優先度,詳細説明);

って書いてあるってことは Accesskey を設定するためにはこの部分とテンプレートに admin_menu の抱えている情報を展開するところも書き直しか。やりゃできるけども、いじりにくいのは間違いないなぁ。バージョン上がるたびに加える修正としては邪魔くさい。やるなら本家 commit する方がいいか。

PHP ではなく、Perl か Ruby で Wiki を立てたいんだけど、Hiki はページ名とページタイトルが別になってて、どっちも他のページとかぶるとダメ(?)1とか、削除に管理者権限が要るとかで最終的に思った動作を得られていない(というか Hiki は HEAD と release の差がでかすぎ)ので FreeStyle Wiki を採用しようと思っているんだけど、Accesskey がない Wiki なんか使いたくないので、困ったな。GW の宿題かぁ?

  1. 実はよく分かっていない。Hiki の文化はうまく自分に合ってくれないな。機能的にはきらいじゃないのに。 

説教講座改修で問題発生

Ariadne の公式サイトがなくなってる。移転先があるのかも分からない。ファイラー関係の情報を集めているどのサイトでもその辺の情報が補足できていない模様。

「ファイルとフォルダ」の方でツールの話は書かずに「情報を整理せよ」の方にまとめてしまおう。

書いた頃にはまだどこにもまとまった情報のなかったアウトラインプロセッサネタが、今や 2ch で Part9 にまで育つスレになっていた。なんか妙な感慨を覚える。今は自分はもうアウトラインプロセッサ使ってないけどね。ちょっとレスポンス悪いけど Wiki であまり不満はない。

Blozom

http://blozom.mozdev.org/

なんだか面白そうなのでチェックしてみる。単独で動く blog ツールってなんじゃらほい。

今さらながら Edgar F. Codd博士

http://slashdot.jp/article.pl?sid=03/04/22/1250247

自分はテキスト野郎で DB には疎いのですが(いや、便利だなとは思いますが)、このストーリー、後段のスレッドがけっこう参考になりました。(逆に前段のスレッドはどーでもいい言葉狩りから興味深い考察が覗ける。一粒で二度おいしい。)

About

例によって個人のなんちゃらです

Recent Posts

Categories

Tool 日々 Web Biz Net Apple MS ことば News Unix howto Food PHP Movie Edu Community Book Security Text TV Perl Ruby Music Pdoc 生き方 RDoc ViewCVS CVS Rsync Disk Mail FreeBSD Cygwin PDF Photo Zebedee Debian OSX Comic Cron Sysadmin Font Analog iCal Sunbird DNS Linux Wiki Emacs Thunderbird Sitecopy Terminal Drawing tDiary AppleScript Life Money Omni PukiWiki Xen XREA Zsh Screen CASL Firefox Fink zsh haXe Ecmascript PATH_INFO SQLite PEAR Lighttpd FastCGI Subversion au prototype.js jsUnit Apache Trac Template Java Rhino Mochikit Feed Bloglines CSS del.icio.us SBS qwikWeb gettext Ajax JSDoc Rails HTML CHM EPWING NDTP EB IE CLI ck ThinkPad Toy WSH RFC readline rlwrap ImageMagick epeg Frenzy sysprep Ubuntu MeCab DTP ERD DBMS eclipse Eclipse Awk RD Diigo XAMPP RubyGems PHPDoc iCab DOM YAML Camino Geekmonkey w3m Scheme Gauche Lisp JSAN Google VMware DSL SLAX Safari Markdown Textile IRC Jabber Fastladder MacPorts LLSpirit CPAN Mozilla Twitter OpenFL Rswatch ITS NTP GUI Pragger Yapra XML Mobile Git Study JSON VirtualBox Samba Pear Growl Mercurial Rack Capistrano Rake Win RSS Mechanize Sitemaps Android JavaScript Python RTM OOo iPod Yahoo Unicode Github iTunes God SBM friendfeed Friendfeed HokuUn Sinatra TDD Test Project Evernote iPad Geohash Location Map Search Simplenote Image WebKit RSpec Phone CSV WiMAX USB Chrome RubyKaigi RubyKaigi2011 Space CoffeeScript Nokogiri Hpricot Rubygems jQuery Node GTD CI UX Design VCS Kanazawa.rb Kindle Amazon Agile Vagrant Chef Windows Composer Dotenv PaaS Itamae SaaS Docker Swagger Grape WebAPI Microservices OmniAuth HTTP 分析基盤 CDN Terraform IaaS HCL Webpack Vue.js BigQuery Middleman CMS AWS PNG Laravel Selenium OAuth OpenAPI GitHub UML GCP TypeScript SQL Hanami Document SVG AsciiDoc Pandoc DocBook Develop Jekyll macOS Node.js Vite Heroku Transformer AI Data Cloud Wasm