cd siliconvalley

I will startup at San Francisco !

FREERIDER#4「GAMEONから学んだチームの絆」

 
 
「FREERIDERのビデオと、シリコンバレーを一人で歩き回っているバカな日本人が大好きだ。近くまで通りかかったら、寄って欲しい。ここは、お前のホームでもあるんだぜ。」
 
サンフランシスコ、SOMA地区。星の数ほど、ここには若きスタートアップたちが集まっています。サービスにも依りますが、たいていの会社は5年以内に成功か、失敗を迎えます。何度でも諦めずチャレンジする人もいれば、その難しさを実感し故郷に帰っていく人たちもいます。要するに、していることは似ていても、いろんな人たちがいるのです。
 
まさに、そんなド真ん中でサービスを手がけるGAMEONは僕に、人生で一番大切なことを教えてくれました。
 

 

 
GAMEONは、スポーツが見るのもするのも大好きな3人が立ち上げたサービス。バーやレストランで、集まってスポーツ観戦をするパブリックビューイングを、オンライン上で実現してくれます。チャット上に、試合の結果がリアルタイムで通知され、スポーツニュースについて公で話すこともできれば、友だち同士で会話することもできるんです。
 
彼らと出会ったのは、ちょうど20社めのインタビューが終わったころ。新しい生活にも慣れてきて、もっともっとシリコンバレーを知りたい、起業家たちと話したいと、ただ夢中になっていました。
 
はじめて、GAMEONのオフィスへ入った時、チーム10人が一斉に僕を見ました。そして、大笑いしたんです。アクションカメラGoProを頭に取り付けた、訳の分からないジャパニーズが、すげぇ笑顔で入ってきたんで。
 
愛すべきGAMEON FAMILYの集合写真
 
リーダー格で、契約している選手や投資家との応対を上手くこなすAlex
 
Nateは無口だけど、誰よりもチームのことを見守っていて、僕のこともずっと気にかけてくれていました
 
取材したKailinも親しみやすくて、最近結婚して、日本にハネムーンで旅行してきたんだとか
 
Maxとは同い年でした。ボードメンバーから愛される弟分、「バスケやろうぜシュン」って何度も誘ってくれました
 
GAMEONの紅一点Katherineは、美しいルックスの割には元気で、いっつもチームを励ましてます
 
すげぇ変わり者といえば、イスラエル出身のデザイナーArashです。僕の似顔絵を描いてくれたと思えば、「お前はすぐに顔が変わるから手間がかかるやつ」なんて言われてしまいました。
 

僕は、GAMEONチーム(GAMEON FAMILY)が大好き。
そして、いつか、僕もあんなチームを作りたいと望んでいます。
 
なんとか編集した動画のリンクを送ると、みんなが喜んでくれて、それぞれのソーシャルメディアでシェアをしてくれました。彼らは、FREERIDERシリーズを全部見てくれていました。アドバイスをくれたり、どの会社が面白かったかなど、いつも率直にコメントをくれました。
 
彼らがそんな風に接してくれたから嬉しくて、僕は取材が終わっても何度もGAMEONのオフィスへ遊びに行きました。
 
そういえば、その年はサンタクララNFLの決勝大会・スーパーボウルが開催されました。町中、やたらアメリカンフットボールで盛り上がったものでしたが。スポーツスタートアップの代名詞とも呼べる、GAMEONです。
 
前夜祭のBBQに招待され、GAMEON FAMILYと最高に楽しい時間を過ごしたんです。嬉しかったのは、チームそれぞれが僕に彼らのフィアンセや、ボーイフレンドを紹介してくれたことです。
 
BBQのイベントで用意されたGAMEON撮影カット
 
野心を抱き、夢を仲間と獲りにいくのもスタートアップ。だけど、好きな人たちと一緒にいて、仲間たちと最高の時間を過ごし、0から1を生み出していく。そんな在るべき姿もありだということを彼らは教えてくれました。
 
シリコンバレーのFREERIDER」をやっていると、たまに不安になりました。まったく数字としての結果は出ないし、プロでもない僕がジャーナリストを名乗って会ってもいいのだろうか、やっていて何か意味はあるものなのか...。毎朝、シャワーを浴びては一緒に泣けてきていたんです。
 
それでも、やってきて良かったと思えるのは、視聴者の皆さん、取材を受けてくれる起業家、関わってくれているすべての人たちに存在を認められた時です。
 
 

 


まだまだ旅は終わりません。


Railsのページ生成思考

Ruby on Railsでユーザーのプロフィールページ(show)を生成しているときに、下記のエラーが出てしまいました。
 
<h1><%= @user[:name] %></h1>
 
これは直訳すると、「[ ]がメソッド定義されていない」となり、@userから情報を引き出そうとしていますが、@userに情報が入っていないということになります。つまり、@userの情報を定義する必要があります。
 
app / controllers / users_controller.rb にコントローラの中身を定義していく必要があります。
 
class UsersController < ApplicationController def index end def show @user = Hash.new @user[:name] = 'Shun Yamada' @user[:username] = 'shyamady' @user[:location] = 'Tokyo, Tokyo' @user[:about] = 'Hello, I am Shun' end end
 
このようにコントローラを定義した後で、ルーティングを行います。
 
get "users/show/:username" => "users#show"
 
routes.rbに上記を追記します。
これが基本的なrailsにページを新しく生成していく流れとなります。
 
 
 

 

Rails Tutorialで使うSample Appのフレーム構成をメモ

Railsプログラミング言語を進めていくにあたり、どのフォルダが
どのような役割を果たしているのかが最初はよく分からなくなってしまいます。
 
$ rails generate controller static_pages ...
 
その為、きちんと上記の命令によって生成されたファイル/ディレクトリが、
どのような役割を担っているのかをきちんと把握しておきましょう
 

f:id:yamadasmith:20150801043805j:plain

 
基本的に触るのは、app/ と db/ そして、テスト用に用いるspecです。
 
app/ とはモデル、ビュー、コントローラ、ヘルパーなどを含む主要なアプリケーションのコード(MVCモデ)となります。ちなみに、一つずつ解説していきますと。まず、モデルはActive Recordを使ってデータベースの情報を操作することになります。Active Recordとは、同名の"Active Record”というデータベースアクセスに関するデザインパターンを実装したライブラリとなります。次に、ビューですがこちらは直訳通りに、見た具合を作ります。htmlにRubyを組み込むことで実装されます。全ページに適用されるパーシャルなども適宜利用しましょう。コントローラは、ユーザーが操作することができる選択肢を示します。これは、create, show, destroyといったアクションをpathを使って結びつけます。そして、ヘルパーはHTMLのタグを作成する為のツールとなります。<%= link_to"削除", :action => 'destroy' %>は<a href="/destroy">削除</a>を吐き出します。Ruby on Railsでは、直接HTMLタグを書かずに、ヘルパメソッドを利用するのがルールとなります。つまり、使われているオブジェクトがどのようなものか記しておく材料となるわけですね。
 
app/ assets には、アプリケーションで使用するCSSJavaScript、画像などのアセットが入ります。bin/ はバイナリ実行可能ファイルとなります。
 
config /はアプリケーションの設定を行います。configに入っているroute.rbでルーティングの作業を行います。Railsにおけるルーティングは大きく分けて2つの機能を持ちます。
 
・URLから、「どのコントローラー」の「どのアクション」に「どういうパラメータ」を与えて処理を実行するかを定義します
・ビューにURLを記述する際は、ハードコーディングを避ける為URLを直接記述せずに、専用の方法で生成します
 
これによりURL構造とアプリケーション構造を独立して設計することを可能にします。一言でいえば、URLとアプリケーションのパラメータをつなぐ役割です。
 
db/ はデータベース関連のファイルです。マイグレーションファイルがここでは重要となってきます。マイグレーションRailsならではです。通常テーブルを新規に作成するには必要なSQL文を直接実行して作成します。カラムを追加したりする場合も同じです。それに対してマイグレーションを使う場合はテーブルを新規に作成する為のマイグレーションスクリプトと呼ばれるスクリプトファイルを作成し実行します。
 
spec/ はテストを実行するファイルとなる為、直接開発には関係がありません。しかし、spec/ を用いることによって、わざわざブラウザ上でテストをする必要がなくなる為、手間が省けます。ファイルとしてはcontrollers/ 、models/ 、requests/ 、/support があります。
 
下記は、Rails Tutorialで一番初めに行なうテストコードです。
spec/ requests/ static_pages_spec.rb
 
require 'spec_helper'
 
describe "Static pages" do
 
  describe "Home page" do
 
    it "should have the content 'Sample App'" do
      visit '/static_pages/home'
      expect(page).to have_content('Sample App')
    end
  end
end
 
これはRuby言語の中でもRSpecがテスト用に定義しているDSLを用いて記述されています。
 
  describe "Home page" do
 
ここでは、Homeページに対するテストである(describe)ことを記述しています。
 
    it "should have the content 'Sample App'" do
 
次の行では、「 /static_pages/ home のHomeページにアクセスした時、"Sample App"という語が含まれていなければならない」と記述しています。
 
      visit '/static_pages/home'
 
上の行では、Capybaraのvisit機能をつかって、
ブラウザでの/ static_pages/ home URLへのアクセスをシュミレーションしています。
 
      expect(page).to have_content('Sample App')
 
最後に、Capybaraが提供するpage関数をつかって、
アクセスした結果のページに正しいコンテンツ('Sample App')が表示されているかどうかをテストしています
 
上記らの作業をこなしながら、開発を進めていきます。
 
参考資料: Rubylife (http://www.rubylife.jp/)

 

Ruby on Railsを始めるにあたって

f:id:yamadasmith:20150731061204p:plain
 
Railsとは、そもそもオブジェクト指向言語Rubyで書かれたWebアプリケーション開発を目的とした開発フレームワークです。
 
・DRY(Don't Repeat Yourself) - 同じコードを何度も書くことは良くないという考え方
・設定より規約(Conventioin Over Configuration) - 設定ファイルに細かな設定情報を記載するのではなく、ファイル名や暮らす名などの規約があらかじめRailsによって決められています
 
さらに、RESTという考え方が大切な概念となってきます。RESTは、HTML,HTTP,URLを含むWebを構成している仕組みのことを指します。

f:id:yamadasmith:20150731060840j:plain

Webの基本となりますが、サイトは基本的にHTTPの交換によって成立しています。その為、通常のWEBページを公開する際にはファイル転送ソフトが必要となります。
 
RESTアーキテクチャを理解するには、GET, POST, PUT, DELETEの概念を学ぶ必要があります。一つずつ解説していきます。

f:id:yamadasmith:20150731061047j:plain

GET- リソースの取得
GETは指定したURIの情報を取得します。最も利用頻度の高いメソッドとなり、Webページの取得、画像の取得、映像の取得、フィードの取得などにおいて発行されます。
 
POST- リソースの作成
POSTには、子リソースの作成、リソースへのデータの追加などが役割となります。代表的にはリソースに対する子リソースの作成を行うことである。例えば、ブログの投稿などがこれにあたります。(サーバに決定権のあるTwitterなどのリソース作成)
 
PUT- リソースの更新、作成
クライアントに決定権のあるWikipediaなどのリソースを作成します。また、更新にいたってもこちらを使います。
 
DELETE- リソースの削除
リソースを削除するメソッドです。

 

f:id:yamadasmith:20150731060930j:plain

リソースベースのルーティング(config/ routes.rb)では、index, show, new, edit, create, update, destroyのアクションが設定されます。これらの動作をそれぞれ修正していくことで、アプリの動きを構築していきます。

サインインの失敗テストエラー

 
サインインの失敗を一定時間表示したら消えるように実装してみました。
 
いつものようにテスト

$ bundle exec rspec spec/requests/authentication_pages_spec.rb \

> -e "with invalid information"

/Users/ユーザー名/.rvm/gems/ruby-2.0.0-p645@railstutorial_rails_4_0/gems/rspec-core-2.13.1/lib/rspec/core/configuration.rb:819:in `load': /Users/ユーザー名/Sites/rails_projects/sample_app/spec/requests/authentication_pages_spec.rb:43: syntax error, unexpected end-of-input, expecting keyword_end (SyntaxError)

 
長い英文が沢山出てくる嫌らしいエラーが発生しました。
これによると、endが足りないよっていうので
単純にendを直してみると、
 
require 'spec_helper'
 
describe "Authentication" do
 
  subject { page }
 
  describe "signin page" do
    before { visit signin_path }
 
    it { should have_content('Sign in') }
    it { should have_title('Sign in') }
  end
 
  describe "signin" do
 
    before { visit signin_path }
 
    describe "with invalid information" do
      before { click_button "Sign in" }
 
      it { should have_title('Sign in') }
      it { should have_selector('div.alert.alert-error', text: 'Invalid') }
 
      describe "after visiting another page" do
        before { click_link "Home" }
        it { should_not have_selector('div.alert.alert-error') }
      end
    end
 
  describe "with valid information" do
  let(:user) { FactoryGirl.create(:user) }
  before do
  fill_in "Email", with: user.email.upcase
  fill_in "Password", with: user.passwword
  click_button "Sign in"
  end
 
  it { should have_title(user.name) }
  it { should have_link('Profile', href: user_path(user)) }
  it { should have_link('Sign out', href: signout_path) }
  it { should_not have?link('Sign in', href: signin_path) }
  end
end
 
end
 
さて、実行
 

$ bundle exec rspec spec/requests/authentication_pages_spec.rb \

> -e "with invalid information"

 

 

Finished in 0.22813 seconds

3 examples, 0 failures

 
成功しました。

 

Sessionコントローラのルートエラー

Sessionコントローラを実装してみました。概念としては、Sign inページを示すnewアクション、Sign inを処理するcreateアクション、そしてSign outをするdestroyアクションとなります。

 
というわけで、コントローラは下記のようになります。
- app/controllers/session_controller.rb
class SessionsController < ApplicationController
 
def new
end
 
def create
end
 
def destroy
end
end
 
ある程度やってみて、テストを実行しました。
- authenticationのテスト内容
 
require 'spec_helper'
 
describe "Authentication" do
 
  subject { page }
 
  describe "signin page" do
    before { visit signin_path }
// routesのチェック
 
    it { should have_content('Sign in') }
    it { should have_title('Sign in') }
// htmlのチェック
  end
end
 
それでは、テスト実行
 
$ bundle exec rspec spec/
 

  4) Authentication signin page 

     Failure/Error: before { visit signin_path }

     ActionController::RoutingError:

       uninitialized constant SessionController

     # ./spec/requests/authentication_pages_spec.rb:8:in `block (3 levels) in <top (required)>'

 

  5) Authentication signin page 

     Failure/Error: before { visit signin_path }

     ActionController::RoutingError:

       uninitialized constant SessionController

     # ./spec/requests/authentication_pages_spec.rb:8:in `block (3 levels) in <top (required)>'

 
これによると、Routing Errorが出ちゃっています。ルーティングページを見てみると、下記二つのミスがありました。
 
・resources :sessions, only: [:new, :create, :destroy]の記入漏れ
・match '/signout' to: 'session#destroy',  via: "delete"がvia: "get"になっていました
 
 
 
 

 

gem install pg -v '0.15.1'をインストールできない時の対処法

どうも。Ruby on rails Tutorialを実践していたのですが

急にbundle installが実行できなくなってしまいました。
 
$ bundle install
 
An error occurred while installing pg (0.15.1), and Bundler cannot continue. 
Make sure that gem install pg -v '0.15.1' succeeds before bundling. 
 
エラーに従って、gem instakk pg -v '0.15.1'をコマンドしてみました。
 
Building native extensions.  This could take a while... 
ERROR:  Error installing pg: 
    ERROR: Failed to build gem native extension. 

    /Users/ユーザー名/.rvm/rubies/ruby-2.0.0-p645/bin/ruby extconf.rb 
checking for pg_config... no 
No pg_config... trying anyway. If building fails, please try again with 
 --with-pg-config=/path/to/pg_config 
checking for libpq-fe.h... no 
Can't find the 'libpq-fe.h header 
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary 
libraries and/or headers.  Check the mkmf.log file for more details.  You may 
need configuration options. 
 
またまたエラーで実行できませんでした。
どうやら、gemの拡張ができないみたいです。
 
ここまで来てググると、下記を実行すればよいとのことでした。
 
$ sudo yum install postgresql-devel
 
sudo: yum: command not found
 
調べてみると、MacOSでは通常yumコマンドは使用しないみたいです。
なんとかして、postgresqlをインストールしないところでは
始まりません。
 
Homebrewからインストールから実行してみると、
 
$ brew install postgresql
 
なんなくエラー回避でクリアしました。
データベースのことですよー。