bussorenre Laboratory

hoge piyo foo bar

Life is like BDD

こんにちは。@bussorenre です!最近Twitter を使うことがめっきり減りましたが、それでも@bussorenre です。よろしくお願いします!

さて、ここ一週間ほど”テスト”について勉強していました。というのも、自分の書くコードがもうクソすぎてクソすぎてやばかったので、抜本的な解決を図りたいと思い、テストについて勉強しました。RSpec Book と アジャイルサムライが僕の今の教科書です。

テストの超重要性についてものすごい勉強した所で、今必死にプロジェクトのテストコードを書き直しているところなのですが、ふとこんな時間になって思いました。

多くの人の人生ってウォーターフォール開発のようなもの。

海外ではどうか知りませんが、日本人はよく「人生設計」って言葉や、最近だと「キャリア」って言葉をよく使います。就活生だけかもしれませんが!!

最近の大学生は、入学直後にも、研究室に配属される時も、就職活動するときに「将来いついつにこうなってこうしてこうしてこれを(ry」って言うことを設計させられます。例えば、

22歳で卒業して就職して、28歳くらいで結婚して、30歳くらいで子どもを産んでもらって、60歳までバリバリ頑張って。みたいな。で、ソレを達成するために大学でどういう勉強してー就職こういう感じでーとかどうとか。

で、計画を立てたら、実行するわけですよ。これを。ちょっとでも違うルートの生き方をしようとすると社会からのはみ出し者みたいなレッテルを張られるから、みんな必死でこの通りに生きるわけですよ。それが、まぁ、例の滑稽な就活みたいなのを生み出すのかもしれませんが。

なんか、これって、ウォーターフォール開発みたいじゃないですか??途中で仕様変更が許されない恐ろしい人生開発。

世界は常に変化しているのにね。だから行き詰まって、鬱になったり閉塞感感じたりするんじゃないかな…??

ということで、人生をBDDとして考えよう

僕はかなりの欝思考の持ち主で、自殺を試みる事が何度もある。そのたびに、僕はよく「死に方」を意識して踏みとどまる。死とは自分の人生開発の完成を意味する。と思う。死とはこの世で最も完璧で美しい存在だ。よく、アーティストが人生の事を作品と捉えるが、アレと同じ考え方だろう。

つまり、人間はひとつの人生を完成させるために生きて死ぬのだと。

そして、これはアーティストに限らず、僕のようなエンジニアにも同じような考え方を当てはめることが出来る。

決められた時間(僕は多分80年くらいに死ぬのかな?)の中で最も素晴らしいプロダクトを生み出す。

大事なのはその過程ではなく、その成果なのだ。だって、僕らはいつ死ぬかわからないのだから、常に最高の成果を上げていなければならない。この辺は「常に動作するソフトウェアを提供する」というアジャイルな原則に似ていると思う。いつ終りが来るかわからないプロジェクトに、ウォーターフォールモデルを採用するのはおかしいよね。

一年を1イテレーションと考えると、新年の終わりと始まりに反省と計画を考える文化が世界中にあるのも納得出来る。まぁ、正直このイテレーションは大きすぎると思うので、僕はもうちょっと小さいイテレーション(クオーター制くらい)がいいと思うけど。笑

そして僕らは出来る限り無駄を省かなければならない。人生は限られているのだから、最小の労力で最大の効果を上げる必要がある。

よく聞く例が、「大学4年行ったけど、正直したい事じゃなかったんだよね。だから本当にしたい事するためにもっかい行くわ!」みたいな。これはこれで、僕は非常にいい選択だと思う。間違いに気がついたのだから、4年はロスするかもしれないけど、後々絶対いいプロダクトになるから。ここで、計画の変更は許されないから、このまま就職しようなんてなったら、なんで自分はこの仕事しているんだろうっていう意味のない悩みに悩まされ続けるんだろうな−とか思う。で、気がついた時には修正が間に合わなくなってしまう。それではダメだ。

人間はひとつのオブジェクトのようなものだ。あるメッセージに対して、どのような振る舞いを返すかが、その人の価値を決める。この価値は給与かもしれないし、人からの信頼かもしれないし、恋心かもしれないけれど、要は、人間は人間の振る舞いを評価する。その中身がどうなっていようが、知りようもないし、どうでもいいから。

だから人間は最初、習慣っていう物を身につけて、振る舞いを無理やり構築する。Red→Green の段階だ。これが子供時代にうまくできているといいんだろうけど、僕みたいに全然出来てない奴も居る。Green になろう!笑

テストが通り、Green になったら、次はリファクタリングをする。つまり、中身の改善。そのために知識をみにつけたり、色々な本を読んで色々な考え方を知ったり、自己を磨く。

で、出来たら、新しい仕様を身につけたりする。イテレーション毎にこの繰り返し。

なんか、人生って、BDD みたい。 いや、BDDが人生みたいなのか?? 

何を作ってもいい仕事なんて、なかなか無い。だったら、自分の本当に創りたいものを創るのが一番幸せ。 そしてソレが世界の役に立つなら尚更のこと。

人生ってきっとそういうことなのかもしれない。

ってBDD勉強しながら思った。

omniauth+fb_graph でfacebookのウォールに投稿する

こんにちは。@bussorenreです。 表題の通り、Ruby on Railsfacebook のウォールに投稿するための記事が日本語でも英語でもパッと見つからなかったので、自分でまとめてみました。

開発に使っている環境は以下のとおりです。

  • Ruby 1.9.3
  • Ruby on Rails 3.2.12
  • Mac Book Air (Mountain Lion)
  • 最終確認日:2013年3月16日

なお、今回はfacebook との認証のためにomniauthを使いますが、別にdeviseを使っても問題ないです。要はAccess_token が取得出来ればいいので…。

1 プロジェクトを作成する

rails new facebookpost

今回はfacebookpost という名前のプロジェクトを使用します。 githubにて今回のサンプルを公開しているので、良ければぜひお使いください。

https://github.com/bussorenre/facebookpost

2. Gemfile の修正

プロジェクトを作成したら、次にGemfile を開き以下の文句を追加します。

gem 'omniauth'
gem 'omniauth-facebook'
gem 'fb_graph'

Facebook に投稿する便利なgemは他にkoala などもあります。書き終わったらbundle installで。

3. ログインに用いるUser model の作成

次にUser model を作成します。今回はfacebook 認証でのみログインするような形のUserModel です。E-mailや、password などを実装したいときはこれに別途追加する形で問題ないと思います。

rails g scaffold users name:string facebookid:string desc:text token:text
rake db:migrate

本当はscaffold で生成するのではなく、ちゃんとuser model を作成して、用途に合わせてコントローラーを作るべきですが、今回はサンプルなので細かいことは気にしない。

僕はここで最もハマりました。 理由・原因は全くよくわからないのですが、アクセストークンを保存するフィードを、access_token:string にしたら一切動かなくなりました。名前が悪いのか、string だったのが悪いのか謎です。どなたか教えていただけると幸いです。

で、出来上がったmodel/user.rb に以下の文言を追加(バリデーションです)

VALID_FACEBOOKID_REGEX = /^[1-9][0-9]*$/
validates :name, presence: true,
                 length: { maximum: 48 }
validates :facebookid, presence: true,
                      format:     { with: VALID_FACEBOOKID },
                      uniqueness: { case_sensitive: false }
validates :token, presence: true

バリデーションはざっとこんな形。複数ユーザーが登録しないように、facebookid にはユニークな値のみ通すよう設定

4. facebook APPの作成

https://developers.facebook.com/ に飛んで、Facebook アプリを作成します。

f:id:bussorenre:20130312181201p:plain

Apps →アプリを作成を押します。

f:id:bussorenre:20130312181458p:plain

こんな感じで、アプリの名前とネームスペースを決定します。heroku で動かすときは、このチェックボックスを入れるといいかもしれません。

すると、App ID とApp Secret が生成されます。これ絶対使うので、他の人に知られないようにしてくださいね。

次に、callback のURL を指定します。

f:id:bussorenre:20130312182321p:plain

ざっとこんなかんじに。

次に、権限の付与をします。

f:id:bussorenre:20130312181823p:plain

Twitter と違い、facebook には非常に多くの権限フラグがあります。必要最小限のフラグのみを立てるようにしましょう。 自らのウォールに投稿したい場合のフラグは図の通り。もしかしたら余計なのが多いかも(email とか絶対要らない。

5. Omniauth によるログイン認証の実装

http://npb.somewhatgood.com/blog/archives/715 完全にこのサイトを参考にしました。すごいいい記事。

omniauth を用いてfacebook 認証をします。まず、config/initializers/omniauth.rb を新規作成し、以下のようにコードを書きます。

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook,"App ID","App Secret", scope: 'email,publish_stream'

end

ここのApp ID と App Secret は先程取得したものを各自書いてください。 もっとも大事なのは、アプリ側で権限をしっかり明記すること。これに僕は4時間くらいハマりました笑

次に、facebookログインへのリンクを作ります。これはどこに書いてもいいのですが、参考にした記事を見習ってviews/layouts/application.html.rb に書くことにしました。

  <div id="user_nav">
    <%= link_to "facebookでlogin", "/auth/facebook" %>
  </div>

次に、facebook からのcallback を受け取るアクションを作成します。今回はめんどくさいので、scaffold で生成した既存のUsers#new に当てようと思います。

config/routes.rb に以下のような文句を書きます。

  resources :users    # 多分書き込まれている
  root :to => 'users#index'

  match "/auth/:provider/callback" => "users#new"

書き換えたら、最後に、User Controller の編集。new アクションを大いに書き換えます。

def new
  @user = User.new

  # omniauth の情報を取得
  auth = request.env["omniauth.auth"]

  # ユーザーを探す
  if auth['provider'] == 'facebook'
    user = User.find_by_facebookid auth['uid']
  end

  # ユーザーが入ればそのユーザーでログイン
  # 今回はログイン処理省略

  # ユーザーがいなければ新規登録画面に移動
  @user = User.new

  if auth['provider'] == 'facebook'

    @user.facebookid = auth['uid']
    @user.name = auth['info']['name']
    @user.desc = auth['info']['description']
    @user.token = auth['credentials']['token']

    # fb_graph テスト
    me = FbGraph::User.me(@user.token)
    me.feed!(
      :message => 'Facebook に投稿するアプリのテスト!',
      #:picture => 'https://graph.facebook.com/matake/picture',
      #:link => 'https://github.com/bussorenre',
      :name => 'facebook Post Sample',
      :description => 'Facebook に投稿するアプリのサンプル'
    )
  end
end

(サンプルを作るのがめんどくさくなってきたので)アカウントの作成時に、facebook に投稿しちゃうことにします。(本当は# fb_Graph のテストという部分は、create アクションの中でやるべき。

omniauth がfacebook から持ってくる情報は、全部request.env["omniauth.auth"]に入っているので、そこからユーザー情報を全部引き出します。

そして、そのtoken を元に、Facebook への投稿を行います。ここでようやくFbGraph の登場。

Fb_graph に関しては公式のドキュメントが非常に充実しているので、詳しくはこっちを見て欲しいのですが(英語だけど全然読める!)フィードに流すための方法は上記のような感じです。簡単!

GitHub 学生垢申請してみた。

本題の前に。

こんにちは。@bussorenre です。最近東京で開発やってます。多分。新宿・渋谷・恵比寿・秋葉原のあたりをかなりウロウロしているんで、勉強会(特にアジャイル・テストコード系)とか飲み会とか誘っていただけると幸いです。

日記みたいなのはポートフォリオに投げましたが、こっちはほそぼそと技術ブログ続けます。なんせはてな、最高に書きやすいんです。技術記事が

本題:GitHubでPrivateリポジトリを使う。

皆様おなじみGithubで非公開リポジトリを使うには、普通は課金するのですが、(一番安いプランで、5リポ7ドル/month)、学生アカウントとして認められると、いくつかのリポジトリを非公開にできるようです。

ってことで申請してみた。 Contact Github のページから。

僕は学生なので、I'm student と選択します。どうやら、学校の先生とかも非公開リポジトリただで作れるぽいですね。

※余談ですが、アメリカってこういう教育機関優遇の文化があるんでしょうか。MSしかりAppleしかり。日本企業は教育=食い物って思っているところ多そうですが…どうなんでしょう。

で、名前と、メアドと、必要な理由を聞かれます。

f:id:bussorenre:20130206141149p:plain

Name

あなたのお名前。Ryo Matsumoto みたいな具合でおkですね。

Email

メールアドレスは、どうやらアカデミックドメイン(ac.jpとか、.eduとか、ed.jp とか、学校専用のドメイン)が必須らしいです。 なので、gmail.com とか?はダメぽい。

Body

どのような用途で使うのか。まぁ、多分英語で書くんだろう…日本語でも通るかもしれないけど試していないです。僕はなんか、適当に、卒業研究のプロジェクトで使いたいって書いた。英語は不得手なので晒すなんてことしない。

結果

三時間でレスポンスがありました!!まぁ、コピペするとこんな感じ。

Hey bussorenre, we have awesome news...

We've upgraded you to a student micro account, which will be free for the next two years. We don't have any collaboration limits, so any group projects you may encounter can be hosted via your account.

Spread the word -- we love giving free micro accounts to students! Send them to: https://github.com/edu

Have an Octotastic day!

ってことでアカウント設定確認したらこうなってた。

f:id:bussorenre:20130206144059p:plain

2年間5リポだけプライベート可能。十二分ですねー!やっぱgithub神やわw

結論:やっぱGithubいいよ!

似たようなサービスでbitbucket というのがある。これは、本当に優秀なサービスで、プライベートリポジトリも無料アカウントでできる神サービス。僕が経営者だったら間違いなく仕事で使うのは間違いなくこっちだろう。だってタダなんだから。毎月の固定コストというのは経営者にとって出来る限り減らしたい物だし。

でもあえてGithubを推す理由は、やはりエンジニア(特にオープンソースに強い人)にフォーカスされてるからかなーとおもいます。痒いところに手が届く。やっぱオープンソース的な価値観が僕はすごい好きです。この前、 githubの創業者二人が日本に来て講演するみたいな場所がありました。どんな内容だったかはイベント主催のOpenNetworkLabのページを見ればわかると思うのですが、非常に良かったんですよね。この人達の創るサービスの上でなら全然問題ないな。って。

あと、行き詰まった時とか、他の人のコードを知りたいと思った時に気軽にforkしてクローンして試せるという文化がいいなと思いました。特に僕は最近Linuxカーネルを読むのが趣味なので、RoRに飽きたら母国語のCに触れることができます。ヒャッハー

ということで、githubいいよ!

ポートフォリオサイト作りました

こんばんは!ぶっそれんれです。

自らドメイン取ってVPSも借りてbussorenre.com 設立しました。wordpress やサーバーの自己管理はかなりムズカシイんですけど、自分なりにやってみよーと今更決意しました。

はてなダイアリー 及び、はてなブログは、今後そのうち閉じるかもしれません。

とりあ、http://bussorenre.com をよろしくお願いいたします。

来年はIVS登壇したいなー…

Windows でRuby on Rails の環境を構築する(Cygwin無し)

どうもこんばんは。ぶっそれんれです。


今回は、Cygwinを使用せずにWindowsでRuby on Rails を使用する方法を伝授します。しかし、WindowsでのRuby on Railsは正直お勧めしないです…どうしてもwindowsで環境が欲しい人、全力でどうぞ。

※要ネット接続、windows Vista以降で確認

Ruby をインストールする。

最新バージョンを公式サイトより落とします(2012年11月は1.9.3) これをインストールします。

インストールする時ですが、日本語を選択すると時々文字化けして何も情報がつかめない時があるので、そういう時は素直に英語で勧めることをお勧めします。

インストール途中、インストールオプションで、「Add Ruby executables to your PATH」を必ず選択してください。それさえすれば、特に変なエラーが出ない限り問題なくインストールできます。

SQLite をインストールする

exeとdllをダウンロード [SQLite:title=http://sqlite.org/download.html]
f:id:bussorenre:20121121093222p:plain
windows版のこの二つを落として解凍します。

これら、sqlite.exeと、sqlite.dll をRuby¥bin に置きます。おそらくC:¥ruby193¥bin がRuby1.9.3 のデフォルトのパスなので、そこに置きます。置けたら、コマンドプロンプトを開き、
「gem install sqlite」とタイプしてエンターを押します。これで、sqlite3のgemが入る。

Development Kit をインストールする。

https://github.com/oneclick/rubyinstaller/wiki/Development-Kit 英語ですが、これの説明通りにインストールするのみ。

簡単に訳すと、まず、2. Download Filesというところのリンクからzipファイルを落としてきます。
https://github.com/oneclick/rubyinstaller/downloads/ の DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe (この記事書いた時の最新バージョン。適宜選んでください)をダウンロードして、解凍します。

それを、C:¥DevKit に置きます。
コマンドプロンプトを起動し、
「cd C:¥devkit」と打ち込んで、移動。
ruby dk.rb init」
ruby dk.rb install」
の順にコマンドを打ち込む。
以上。笑

rails をインストール

「gem install rails」とタイプします。これでrails がインストールされます。(かなり時間がかかります)
インストールが終われば、「rails -v」と確認し、「コマンドがありません」「エラーです」的な事を言われない限り大丈夫です。

That's ALL

これで終わりです。

Mac OS X で Ruby on Rails の環境開発構築

※2012年10月現在、LionとMountain Lion のみで動作を確認しました。
※環境によってはこの方法でエラーが出る可能性もあります(´;ω;`)ウッ…


こんばんは。ぶっそれんれと申します。
超初心者向けのMac OS X でのRuby on Rails のインストール記事があんまりないなーと思ったので、自分で書くことにしました。エラーとかが出れば、報告して欲しいです。

※30分くらい用意してください。エラーが出て最初からやり直すことを考えると1時間くらい用意して欲しいです。

Ruby on Rails を入れる大まかな手順

  1. Xcode をインストールする
  2. MacPorts をインストール
  3. Ruby 1.9 + gem をインストール
  4. Ruby on Rails をインストール

Xcode をインストールする。

まずはXcode をインストールします。App Store からxcode をインストールしてください。
f:id:bussorenre:20121014185251p:plainapp store
f:id:bussorenre:20121014185346p:plain
xcode」で検索すると出てきます。入れてください。
インストールが成功し起動すると、こんな画面になります。
f:id:bussorenre:20121014185507p:plain

この時に、左上のメニューの[preference]を選択してください。
f:id:bussorenre:20121014185615p:plain

ここから、上のほうのタブ「downloads」を選択し、さらにその中にある「Command Line Tools 」を選択、インストールしてください。
f:id:bussorenre:20121014185807p:plain

インストールが正常に終わったのを確認したら、Xcode を終了してもらってもOK です。
※ もし再起動を要求されたら素直に再起動してください。

Mac Ports を インストールする。

MacPortsのダウンロードサイトにまずは行きます。

自分のMac のバージョン(Mountain Lion か Lion か Snow Leopard か)にあわせてダウンロードしてインストールしてください。
f:id:bussorenre:20121014190057p:plain

インストールが無事終わると再起動が必要かもしれません。次のステップがうまいこと動かなければ素直に再起動しましょう。

次に、アプリケーション一覧から、ターミナルを選択し、起動します。(人によってはユーティリティという名前じゃないかも…
f:id:bussorenre:20121014190459p:plain

起動するとこんな感じ。※僕の画面は白黒反転させてます。多くの人は白地に黒文字だと思います。
f:id:bussorenre:20121014190836p:plain

この画面で「sudo port -u sync」とタイプしてEnter を押してください。MacPorts を最新状態にします。
f:id:bussorenre:20121014191054p:plain
※パスワードを要求されます。自分のアカウントのパスワードを入れてください。この時、パスワードは*****という風には表示されません。
※少々時間がかかります。むやみにキーボードを叩いたりバツボタンで閉じたりしないでください。

※ネットにつながってないと当然エラーになります。
立命館京都大学など特殊なLAN環境でもエラーになります。
※もし最新状態だったら特に何もせずエラーになります。

Mac Ports のインストールはこれで終了。このままターミナルを閉じずに、次の作業に移ってください。

Ruby のインストール

先ほどのターミナルで

sudo port install ruby19 +nosuffix

と打ち込んでエンターを押してください。Ruby の最新バージョンのインストールが始まります。
※途中でエラーが出ている場合はxcode のインストールがうまくいっていない可能性があります。

インストールが終わると、

ruby -v

と打ち込んでください。無事にインストールされていれば、ruby version 1.9.3******と表示されているはずです。
ruby version 1.8.7 *******の場合は、うまくいっていない可能性があります。ぐぐって解決してください←おい

※わかっている人向けに書くと、この方法でruby1.9を入れると、自動的にgemの最新版もインストールしてくれる。はず。1.8.7と競合していなければ…

Ruby on Rails のインストール

そのまま

sudo gem install rails

とうちこんでエンターを押してください。非常に時間がかかります。
エラーがでなければ成功です。

Rails が動いているかの確認

rails -v 

と打ち込んで「Rails 3.2.8」が表示されたらokです。

注意事項

環境によって私が知ってるエラー以外のエラーも出るかもしれません。その時はご連絡ください。もしくは自分でぐぐって解決してください。

参考にしたサイト

MacにRuby On Railsの開発環境を構築 - tokyodays
他にも色々見たけど忘れました。ごめんなさい。