File::Visitor - ファイルを指定条件で集める
普段の開発やちょっとしたコードを書くときに、特定のディレクトリ以下で指定した条件にマッチしたファイルだけを集めて何か処理をしたいということがよくあります。例えば、
- 最終更新日が一週間以上前のログファイルを圧縮
- .conf で終わるファイル名のファイルを読み込む
- YYYY-MM-DD.txt という形式のファイル名で、且つその日付が1ヶ月以上前のファイルを削除
みたいなものです。
ruby であれば Dir.glob で持ってきてから filter 処理するかもしれません。find コマンドで絞り込んで、その出力をスクリプト言語で拾って、そこからさらに絞り込んだりするかもしれません。ほとんどの場合それで問題ないのですが、「ファイルを持ってきて、特定の条件で絞り込んで、何か処理する」というコードを何度も書いている気がしていたたまれなくなってきたので、この作業を行うための gem を作成しました。
file-visitor
https://github.com/bonar/file-visitor
http://rubygems.org/gems/file-visitor
Install
gem install file-visitor
File::Visitor インスタンスを作成して、そこに必要なフィルタを設定し、visit メソッドにブロックを与えて処理を行います。
require 'file/visitor' visitor = File::Visitor.new # files with extension .log visitor.add_filter(:ext, :log) # and last modified is more than 30 days ago visitor.add_filter(:mtime, :passed, 30, :days) # remove all the matched files visitor.visit(root_dir) do |path| FileUtils.rm(path) end
これで、「.log という拡張子を持っていて、且つ最終更新日が30日以上前のファイル」を削除する事が出来ます。add_filter できるフィルタは :ext, :name(完全一致、正規表現)、:mtime が用意されていますが、以下のように自分で作成する事も出来ます。
class BigFileFilter def initialize(size) @size = size end # filter must implement match?(path) def match?(path) File.size(path) > @size end end filter = BigFileFilter(2048) visitor.add_filter(filter)
match?(path) を持ったインスタンスであれば何でも受け取ります。このようなバッチ処理内の小さな条件は以外とテストされずに残っているものです。バッチ処理が稼働してある程度時間が経ってからバグが発覚し(ファイル名を絞り込む正規表現が間違ってたとか)、自分を呪った事が何度もあります。file-visitor を使うことで、この小さな条件に名前を付けて切り出し テスト可能にする事を後押ししようと考えました。
あと、最終更新日を基準にして何か処理をする事がよくあって、その度に「〜日前」みたいな指定が結構面倒だなと感じていました。それだけであれば find すればいいのですが、find コマンドのオプションが正しいかどうかはテストし辛いので、すべてスクリプト言語で書きたいと考えていました。このモジュールでは以下のように指定出来ます。
# ある日付と比べてどうか、で判別 # add_filter(:mtime, comparetor_sym, time) visitor.add_filter(:mtime, :equals_to, Time.parse("2013-01-03 04:59")) visitor.add_filter(:mtime, :is_less_than, Time.parse("2013-01-03 04:59")) # 現在時刻と比べてどれくらい経っているか、で判別 # add_filter(:mtime, :passed, number, time_unit) visitor.add_filter(:mtime, :passed, 3, :days)
atime, ctime はプラットフォームによって内容が違うのと、僕のユースケースでは必要無いので入れていません。
フィルタはブロックで指定する事もできます。
visitor.add_filter do |path| # return true/false end
条件が指定出来たら、visit メソッドにブロックを渡して処理します。file_list(dir) で処理を行わずにファイルの一覧を取得することも可能です。
なんとも小粒なモジュールですが、ご意見ご感想があればフィードバックを下さい。
仮面ライダーMOVIE大戦が傑作だった件
「仮面ライダー×仮面ライダー ウィザード&フォーゼMOVIE大戦アルティメイタム」を子供と観に行ってきたのですが、いやもう凄い傑作でした。
素晴らしい脚本
前半のフォーゼパートと後半のウィザードパートに分かれており、フォーゼパートはテレビシリーズから5年後の教師となった弦太朗と超能力少年三郎の物語、ウィザードパートはアンダーワールドに捕われ美少女仮面ポワトリンとなった少女を救出する物語になっています。
この前半のフォーゼパートが特に素晴らしくて、子供に見せるために来たのに自分がウルっと来てしまいました。能力を持っているが故に疎まれ傷つく三郎との衝突を通じて、弦太朗自身も「友達になるというだけでは救えない」という壁を乗り越え、教師として大きく成長するという物語になっています。テレビ版を見てきた人にはなおさら弦太朗の意外な行動にハっとして「大人になっちゃって。。」と思う事請け合いです。
特に感動的なのが、三郎が苦悩を乗り越えてサナギマンから新しい姿に「成長」する瞬間です。三郎の長年蓄積した鬱屈が爆発するのがまさにビジュアルとして誰にでもわかるように表現されているので、その後のアクションの気持ちよさも相まって凄まじいカタルシスです。叫びそうになります。
ウィザードパートはシナリオ的にはテレビシリーズの1エピソードが映画スケールになって、かっこいい晴人君が魔法を使いまくって気持ちいい、という内容。ポワトリンがサタンの洗脳から目覚める動機がちょっと弱いかなという気もしますが、最後には素晴らしいオチがあり、話としては非常に奇麗にまとまっていると感じました。
映画全体を通して定期的にアクションがあり、退屈する時間帯が全くないんです。誰かが言葉で話をダラダラするようなところがなく、お話とアクションがタイトに詰め込まれていて子供たちを長時間集中させる事に成功していました。
どんどん新しいライダーや敵が登場してきたり、魔法やスイッチを使いまくってサービス満点です。僕自身も気がついたら終盤で、「ああ、、終わらないで、、」という感じでした。
また、アクション一辺倒で話が適当かというとまったくそんなことはなくて、このそれぞれ別々っぽい2つのパートが最後にちゃんと繋って奇麗に終わってくれます。
それぞれのライダーのエッセンスをコンパクトに盛り込んで、戦闘を随所にちりばめ、物語としての起伏もしっかり含んでちゃんと終わるというライダー映画に求められる要素をすべて高いレベルで達成しています。最高です。
アクションが凄い
インターポール捜査官となった流星のシーンから始まるのですが、この流星のアクションがかっこよすぎです。俳優陣が生身でアクションしているシーンも多いため物語とのつながりもスムーズで没入感があります。
それぞれのアクションで、なんというか「重いものがぶつかっている感じ」みたいなものが感じられてとても気持ちよかったです。攻撃があたった際の反動や音の演出だと思うのですが、この基本的な気持ちよさがあるおかげですべての戦闘シーンが爽快感のあるものになっています。仮面ライダーの無双ショーを見るという娯楽エンターテインメントにとってこれは非常に重要な点で、この部分の上質さがあるおかげて沢山ある戦闘シーンを飽きずに見る事が出来ました。
最高峰のパルクールムービー
パンフレットで坂本監督も書かれていましたが、かなり大胆にパルクール(Free Running)を取り入れた内容になっています。序盤で弦太朗が三郎を追いかけるシーンがまさにそれで、めちゃくちゃかっこいいんです!町中をスタイリッシュに駆け抜けていくこのスポーツの魅力を凝縮したような映像になっています。
パルクールって何?という方は 島田 善 さんの動画を見て驚愕するといいです。
最近の tower record のサイトの動画もかっこいいですね。
LIVE LIVEFUL! | TOWER RECORDS SHIBUYA RENEWAL OPEN
最後のCGはちょっと...
ラスボス戦の最後の5分はスケールが大きくなりすぎてほとんどフルCGになってるのですが、実写部分とのギャップが気になるし、まったく別のCG作品が急に始まったような感じで少し無理があったかなという印象ですね。。子供たちにはあまり違和感を感じないのかもですが、大人には結構飲み込みづらかったと思います。
あと「スカートがめくれるたびに面白い効果音が鳴る」みたいな演出があって、1,2回だったらいいと思うのですが 結構しつこく繰り返されるのでどうかなと感じました。
が、そんなことは小さな問題です。
まとめ
エンターテインメント映画として素晴らしい傑作です。今すぐ観に行って三郎に感情移入して叫びましょう。
子供用の映画と思わずに大人が見るアクション映画としても楽しいです。特にパルクール部分は最高にかっこいいですよ。
今年の冬休みはこれで決まりです。
pha さんの「ニートの歩き方」を読んで働く事について考えた
「ニートの歩き方」を読みました。

ニートの歩き方 ――お金がなくても楽しく暮らすためのインターネット活用法
- 作者: pha
- 出版社/メーカー: 技術評論社
- 発売日: 2012/08/03
- メディア: 単行本(ソフトカバー)
- 購入: 7人 クリック: 1,283回
- この商品を含むブログ (22件) を見る
この本は CAMPFIRE というクラウドファンディングのサービスで制作資金を募っていて、僕も 2500円 出資しました。
CAMPFIRE - http://camp-fire.jp
2500円で実際にこの本がもらえて、巻末のスペシャルサンクスに名前が載ります。さらにpha さんの本棚から以下の3冊の本をもらいました。
さらに「くそだるい」シールも。これいいですよね。
本が税抜き1580円なので、制作資金を出したというよりも「初回限定特別版を買った」という感じですね。この手のサービスにお金を出すのは初めてでしたが、小さな金額にも関わらず「このプロジェクトに参加している」という感じもしますし、おまけも一杯もらえて嬉しいです!
働かなくてもいい
この本は pha さんがいかにしてニートになり、どのように生活しているかを解説しつつ、自身のニート観について書かれた本です。特に驚くような秘技や裏技があるわけではないのですが、pha さんの実体験が色々盛り込まれていてとても楽しく読めました。
僕自身は「会社に行きたく無い」みたいに思う事はほとんどないので、この本で言う「多数派」かもしれません。なので、「会社で働く事がこんなに苦痛な人もいるのか」という驚きがまずありました。
pha さんのように同じ姿勢で同じ事をするのが辛い、ということだと確かに学校も会社もかなり苦痛かも知れないですね。。そういう人たちが無理して働く事は無いし、みんなと同じようには働けない人たちを許容出来る社会であってほしいという部分には共感しました。
僕も個人事業主で仕事が無い期間は本当につらかったので、もうちょっと優しくしてほしいなと思いました。少なくとも経済的に自立している場合には何も文句を言われる必要は無いかなと。
生活
ただ、pha さんの収入源であるアフィリエイトやせどり(本の転売)等を他の人がまねするのはかなり厳しいだろうなとも思いました(ご本人もそう書かれてますが)。特にアフィリエイトは万単位の収入を得ようと思うとかなりの人気ブログになる必要があります。また、ネットで物やお金をもらうにしてもそれなりに豊かなソーシャルキャピタルが必要で、そこまで行くのがハードで、手順を一般化出来ない部分でもあります。
インターネットの恵みで生きる、という部分は非常に魅力的なコンセプトだったのですが、正直ちょっと現実味を感じられなかったです。ニートが生活していく方法、というよりは pha さんはこうしてます、という話ですね。
会社員をニート方向に寄せる
「働かない!」「けしからん!」という部分だけがクローズアップされがちですが、これは「好きなことを仕事にしたいし、その方がパフォーマンスが高い」という話で、僕たちにも関係のある話難じゃないかと思えてきました。
例えば pha さんの場合、今の生活がうまく言っているのは、インターネットでテキストを書くという「仕事」が自分にあっていて、且つそれが可能な資質を持っていて(読者を惹き付ける魅力がある)、マネタイズする仕組みがあった(アフィリエイト)という事だと思います。
自分に向いていて(やっていて楽しくて)、労働強度が常識的な範囲の収入源を見つける、というのが多くの人にとっての戦略になるのかもしれません。村上龍さんが「自分の好きな事と食べる事の接点を見つける」という趣旨の事をいっていてなるほど、と思ったのですが、サッカー選手にはなれなくても、審判になったり、スパイクやコンプレッションタイツを開発したり、フットサルコートで初心者に教えたり、色々な可能性の中で、収入は少なくても(多い方がいいけど)自分にあった仕事を見つけるほうが人生全体としてはいいよね、という事とか。

- 作者: 村上龍,はまのゆか
- 出版社/メーカー: 幻冬舎
- 発売日: 2010/03/25
- メディア: 大型本
- 購入: 11人 クリック: 171回
- この商品を含むブログ (35件) を見る
また、会社員の人にとっても、会社で自分のやりたい事のすべてを満たす事は出来ないので、会社での評価を捨てて定時に上がり、好きな事をする時間を作る、とか奥さんや友達と小さなビジネスをするとか、そういう事で可能性が広がり、救われるかもしれません。
人生の中の「会社」の部分を減らして、少しだけニート方向にシフトするのは、ちょっと楽しそうだなと思いました。
という訳で、「なんで仕事してんの?」というのを考えさせる本かもしれません。
京都一周トレイル 西山東部コース
京都一周トレイル 西山東部コースを走ってきました。
ケーブルカーの比叡山口から鞍馬駅までのコースです。地図だと17.9kmとありましたが、NIKE+ で計ると16kmくらいですね。
NIKE+ で高低差を見ると圧倒的に下っている事が分かりますね。走っている最中は急な登りばかりできついなと思ったのですが、結構実感と違ってビックリ。。横高山が特に手を使わないと登れないくらいの勾配なのでその印象が強いのかも。
比叡山の美しい山道を抜けて時間が止まったような大原の風景が見えると、タイムスリップしたような不思議な感動があります。
ちなみに、京都一周トレイルの地図はエリア別に分かれて販売されています。京都だと駅前イオンのモンベルとかに置いてあります。
夏休みの間にすべてのコースを回ろうと思ったのですがなかなか僕の体力だと厳しいですね。前に伏見稲荷から鞍馬までの 30km のレースに出て「こんな辛いならもうやらない!」と心に誓ったのですが、またやりたくなってきました。
マイかごシステム初体験
最近はエコバッグ推奨でビニール袋有料というスーパーが増えてますが、近所のダイエーではなんと「マイかご」というのがありました。これ結構一般的なんですかね。
清算前は今まで通りのかごにいれて、レジでマイかごに入れてもらいます。
何がいいって、清算後のあのめんどくさい袋詰めの作業をしなくていいんです。無駄なゴミも出ないし、固いかごなので車の中で散乱することもありません。
些細な事ですが、「かごを所有する」という発想がなかったので関心してしまいました。今までまったく疑ってませんでしたが、よくよく考えると、買ったものを持って帰るのに一旦別の袋に詰め直すっていうのは無駄ですよね。
あとは以下の点を改良出来たら最高かもしれません。
- 折り畳んでコンパクトになること(家にかごがあると想像以上に大きい)
- 中身を見え辛くすること(今はちょっと恥ずかしい)
- 持ちやすくすること(ビニール袋よりずっと持ちやすいけど)
おしゃれな柄とかいっぱい作れば流行りそうな気がしますね。僕が知らないだけで、すでにそういうムーブメントが来てるのかしら。
SRサイタマノラッパー ロードサイドの逃亡者
「SRサイタマノラッパー ロードサイドの逃亡者」を観てきました。
予想を遥かに超える感動で魂が震えました。閉塞した田舎の希望の無さと、そこでも自分の好きな物を求め続ける若者の眩しさ。それを「お前らラップやってんの。なんかやってみろよ、ほら」と煽るあの感じとか、もう目を覆いたくなるほど生々しくて、観るのが辛い程です。
特に最高なのが、オーディションのシーンです。参加者を舐めきった審査員の前で主役グループである SHO-GUNG(IKKU と TOM)と同じくオーディションに来た日光の征夷大将軍が即興でラップをやらされるのですが、嫌々始まったセッションが 征夷大将軍の素晴らしいラップに乗せられて、お互いに共鳴して、音楽が作り出されていくんです。
このシーンは本当に感動しました。音楽の素晴らしさを音楽を使って見せていました。このままずっとこのシーンが続けばいいのにと思う程です。
1,2 を観てなくても全く問題ないです。人によって刺さるところは違うかもですが、会社を休んでいく価値のある映画です。