bussorenre Laboratory

hoge piyo foo bar

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
他にも色々見たけど忘れました。ごめんなさい。

高速道路を降りるという選択。高速道路に乗せるという選択。

おはようございます、@bussorenreです。


結局休学は半年見送り。卒業要件を完全に満たしてから休学なんて技を使わずとも海外にいけるような環境を整えようと試み中…。


さておき。


私は高速道路を降りるという選択を取ろうと思います。具体的には一切自らプログラムを書かないという選択です。

私は人と比べて比較的非常に早い時期からプログラミング。ITに精通してきた自信があります。といっても、まだまだ精進が必要なのですけど。けれど、その分野に偏りすぎていて、他のことが全然できないといいうコンプレックスもあります。

この半年。どうせ大学に通わざるを得ないので(完全に私の中で大学は悪者)その期間中に、全く別のことや、今までやりたかったけどできなかった事をやろうと思います。


  • 体づくり(大学ジムを乱用)
  • 英語の勉強
  • 数学の勉強
  • 心理学の勉強
  • デザインの勉強
  • 一眼レフで本格カメラの練習
  • 京都巡り
  • お菓子・料理作り
  • 教育の研究
  • 車校


わお。することいっぱい\(^o^)/www

今立ち止まってしっかり車体を作らないと、社会人になってから高速道路で事故りかねないので、基礎作りというところでしょうか。




それと、後期、私の活動はすべて「プログラミング教室」です。活動を行う場所や団体こそ数多所属していますが、それらはすべてこれに通じています。

関西には、まだまだプログラミングを教えれるプログラムが出来る人がぜんぜんいない。大学の教授とか、現役のプログラマーはコードを書けることこそすれ、「教育する」という技術を持っていない。ここに着目して、私は後期はここに全力投球することになります。

Life is Tech の京都Winter の開催も決まりましたし。

もっかいプログラミング講座にも再チャレンジすることになりましたし。

さぁ、がんばろう!

私のミッションは京都にプログラマーを育てる土を耕すこと!