DRY

Web関連の技術の事、食事/お酒の事、旅行の事など

Vagrant(CentOS6.5)にchefでRails4.1 + Ruby2.1.2 + Nginx + Unicorn + MySQL環境を作る

何かいつも同じ事やってる気がするので自分のためにもまとめておきます。

  1.  Vagrant のインストール
    公式サイトから最新版(執筆時は1.6.3)をダウンロードしてインストール
    Vagrant
  2. VirtualBox を公式サイトからインストール
    公式サイトから最新版(執筆時は4.3.12)をダウンロードしてインストール

    Oracle VM VirtualBox

  3. Boxの追加
    $ vagrant box add centos65 https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box
    ==> box: Adding box 'centos65' (v0) for provider:    box: Downloading: https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box||<==> box: Successfully added box 'centos65' (v0) for 'virtualbox'!
    その他のBoxは下記にあるので、そこから別のBOXをダウンロードしてインストールしてもOK

    A list of base boxes for Vagrant - Vagrantbox.es

    作成出来たBOXを一応確認
    $ vagrant box list
    centos65 (virtualbox, 0)
  4. Vagrantfileの作成
    どこか任意の場所にディレクトリ作成
    $ mkdir -p /vagrant/develop
    $ cd /vagrant/develop
    $ vagrant init
    $ vi Vagrantfile

    # -*- mode: ruby -*-
    # vi: set ft=ruby :
    # Vagrantfile API/syntax version. Don't touch unless you know what you're doing! VAGRANTFILE_API_VERSION = "2"
    Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
    config.vm.box = "centos65"

    config.vm.network "private_network", ip: "192.168.33.11"
    config.vm.synced_folder "./data", "/vagrant_data"

    #config.vm.network :forwarded_port, guest: 8080, host: 8080

    config.vm.provider :virtualbox do |vb|
    # Use VBoxManage to customize the VM. For example to change memory:
    vb.customize ["modifyvm", :id, "--memory", "512"]
    vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
    vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
    end

    Encoding.default_external = 'UTF-8'
    end
    private_networkはお好きなIPでどうぞ
    vb.customizeも別に無くてもいいと思います。

    フォワードしたいポートがあれば、以下のようにコメントアウト外して記載してください

    #config.vm.network :forwarded_port, guest: 8080, host: 8080

     

  5. Syncフォルダの生成

    # config.vm.synced_folder "./data", "/vagrant_data"

    この記載でここのdataフォルダをvagrant内の/vagrant_dataに結び付けたいのでディレクトリを作成しておきます
    $ mkdir data

  6. Vagrantの起動
    $ vagrant up

    Bringing machine 'default' up with 'virtualbox' provider...
    ==> default: Fixed port collision for 22 => 2222. Now on port 2200.
    ==> default: Clearing any previously set network interfaces...
    ==> default: Preparing network interfaces based on configuration...
        default: Adapter 1: nat
        default: Adapter 2: hostonly
    ==> default: Forwarding ports...
        default: 8080 => 8080 (adapter 1)
        default: 22 => 2200 (adapter 1)
    ==> default: Running 'pre-boot' VM customizations...
    ==> default: Booting VM...
    ==> default: Waiting for machine to boot. This may take a few minutes...
        default: SSH address: 127.0.0.1:2200
        default: SSH username: vagrant
        default: SSH auth method: private key
        default: Warning: Connection timeout. Retrying...
    ==> default: Machine booted and ready!

    Vagrantにログイン出来るかを確認

    $ vagrant ssh

    [vagrant@vagrant-centos65 ~]$

    SSHが確認できたら一度またホストに戻ります。

  7. SSHの設定 

    起動したVMをknife-solo(後述)から簡単に扱えるようにするため、ssh-configを~/.ssh/configに追記しておく。
    $ vagrant ssh-config --host development >> ~/.ssh/config
    $ cat ~/.ssh/config

    Host development
      HostName 127.0.0.1
      User vagrant
      Port 2200
      UserKnownHostsFile /dev/null
      StrictHostKeyChecking no
      PasswordAuthentication no
      IdentityFile /Users/YOUR_ID/.vagrant.d/insecure_private_key
      IdentitiesOnly yes
      LogLevel FATAL

    普通にSSHも出来る事を確認

    $ ssh development

    Last login: Wed Jul 16 04:53:22 2014 from 10.0.2.2
    [vagrant@vagrant-centos65 ~]$ logout
    Connection to 127.0.0.1 closed.

     

  8. ホストにknife-soloのインストール
    $ gem install knife-solo
    $ knife configure

    knife configureを実行すると色々聞かれるが、とりあえずは全部デフォルトで

  9. knife-soloを使ってChefレポジトリを初期化
    $ knife solo init chef-repo

    # vagrant_develop用のcookbookの雛形を生成
    $ cd chef-repo

    # yumパッケージ関係
    $ knife cookbook create yum -o site-cookbooks

    # nginxインストールのため
    $ knife cookbook create yum-epel -o site-cookbooks

    # nginx
    $ knife cookbook create nginx -o site-cookbooks

    # git
    $ knife cookbook create git -o site-cookbooks

    # ps axu | grep mysql + ruby
    $ knife cookbook create rbenv-ruby -o site-cookbooks

    # MySQL
    $ knife cookbook create mysql -o site-cookbooks

    # iptables止めるため
    $ knife cookbook create iptables -o site-cookbooks

    全レシピはここに置いてあります。

    chef-Rails4.1-Ruby2.1.2-Nginx-Unicorn-MySQL/chef-repo at master · k1row/chef-Rails4.1-Ruby2.1.2-Nginx-Unicorn-MySQL · GitHub


    全体的なディレクトリ構成はこんな感じです。

    $ pwd
    /vagrant/develop

    [/vagrant/develop]$ ls

    Vagrantfile    chef-repo/    data/

    [/vagrant/develop]$ cd chef-repo/

    [/vagrant/develop/chef-repo]$ ls

    Berksfile    cookbooks/    data_bags/    environments/    nodes/        roles/        site-cookbooks/

    [/vagrant/develop/chef-repo]$ cd site-cookbooks/

    [/vagrant/develop/chef-repo/site-cookbooks]$ ls

    git/        iptables/    mysql/        nginx/        rbenv-ruby/    yum/        yum-epel/
  10. nodes/development.jsonを作成し編集する。
    $ vi /vagrant/develop/chef-repo/nodes/development.json{

      "run_list": [
            "recipe[yum]",
            "recipe[yum-epel]",
            "recipe[git]",
            "recipe[nginx]",
            "recipe[mysql]",
            "recipe[rbenv-ruby]",
            "recipe[iptables]"
      ]
    }

    ※このレシピをVagrant以外のサーバにも適用したくなるかもなので、Vagrantfile内には記載しない方式にしました

  11. knife soloの準備
    $ knife solo prepare development

    Bootstrapping Chef...


    Preparing...                ########################################### [100%]
       1:chef                   ########################################### [100%]
    Thank you for installing Chef!

     

  12. chefの実行
    $ knife solo cook development
    20分ぐらいたぶんかかります。

    # まっさらな状態からプロビジョニングし直したい場合
    $ vagrant destroy -f && vagrant up && knife solo prepare development && cd chef-repo && knife solo cook development

  13. インストール状況の確認
    vagrantに入って諸々のインストール状況を確認してみます
    $ vagrant ssh

    $ ps axu | grep nginx

    vagrant   5495  0.0  0.1 103240   852 pts/0    S+   05:56   0:00 grep nginx
    root      9075  0.0  0.3  97180  2008 ?        Ss   05:43   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
    nginx    21216  0.0  0.4  97568  2352 ?        S    05:44   0:00 nginx: worker process


    $ ps axu | grep mysql
    vagrant   5497  0.0  0.1 103240   852 pts/0    S+   05:56   0:00 grep mysql
    root     20302  0.0  0.0 108164    72 ?        S    05:44   0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql
    mysql    20552  0.1 10.5 1075884 53092 ?       Sl   05:44   0:01 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock
    $ rbenv versions
    * 2.1.2 (set by /usr/local/rbenv/version)
    $ ruby -v
    ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux]

    という事で良さそうに見えます。

  14. Railアプリの設定
    実はここで http://192.168.33.11/ を見ても 404 Not Found なのでRailsアプリを新規で作成してみます。

    実際はMacにもRuby on Railsの同じ環境が入っている人が多いと思いますのでMac上というかホストサイドから直接やってもいので、syncディレクトに設定した /vagrant_data にRailsアプリを作りたいと思います。

    実はそのためにchefでnginxのドキュメントルートの設定を /vagrant_data/public/ にしてありました。

    $ cat /etc/nginx/conf.d/192.168.33.11.conf

    upstream unicorn {
      server unix:/tmp/unicorn.sock fail_timeout=0;
    }

    server {
        listen 80;
        server_name 192.168.33.11;
        root /vagrant_data/public/;


        location / {
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_redirect off;

            if (!-f $request_filename) {
                proxy_pass http://unicorn;
                break;
            }
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root /vagrant_data/public/;
        }
    }

    vagrant上にて
    $ cd /vagrant_data/
    $ bundle init

    Writing new Gemfile to /vagrant_data/Gemfile


    $ vi Gemfile

    + gem 'rails', '4.1.1'


    $ bundle install --path vendor/bundle
    $ bundle exec rails new . --skip-test-unit --database=mysql
    gem 'unicorn'
    gem 'therubyracer',  platforms: :ruby
    コメントアウトを外す
    変更後のGemfile

    # Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
    gem 'rails', '4.1.1'
    # Use mysql as the database for Active Record
    gem 'mysql2'
    # Use SCSS for stylesheets
    gem 'sass-rails', '~> 4.0.3'
    # Use Uglifier as compressor for JavaScript assets
    gem 'uglifier', '>= 1.3.0'
    # Use CoffeeScript for .js.coffee assets and views
    gem 'coffee-rails', '~> 4.0.0'
    # See https://github.com/sstephenson/execjs#readme for more supported runtimes
    gem 'therubyracer',  platforms: :ruby

    # Use jquery as the JavaScript library
    gem 'jquery-rails'
    # Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
    gem 'turbolinks'
    # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
    gem 'jbuilder', '~> 2.0'
    # bundle exec rake doc:rails generates the API under doc/api.
    gem 'sdoc', '~> 0.4.0',          group: :doc

    # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
    gem 'spring',        group: :development

    # Use ActiveModel has_secure_password
    # gem 'bcrypt', '~> 3.1.7'

    # Use unicorn as the app server
    gem 'unicorn'

    # Use Capistrano for deployment
    # gem 'capistrano-rails', group: :development

    # Use debugger
    # gem 'debugger', group: [:development, :test]

    $ bundle install --without production

    Fetching gem metadata from https://rubygems.org/...........

    Running `bundle update` will rebuild your snapshot from scratch, using only
    the gems in your Gemfile, which may resolve the conflict.


    などと言われたので素直にupdateする
    $ bundle update

  15. お試しページの作成をしてみる
    $ bundle exec rails g controller Roots index

    ※`autodetect': Could not find a JavaScript runtime.
    のエラーが出たら gem 'therubyracer' が有効になってるか確認

    Routeの変更
    $ vi config/routes.rb

    Rails.application.routes.draw do
    +  root :to => 'roots#index'
    +  #get 'roots/index'

    database.ymlの変更
    $ vi config/database.yml

    + password: root_passwd

    パスワードの記載を追加
    $ bundle exec rake db:create

  16. config/unicorn.rbの作成

    # -*- coding: utf-8 -*-

    RAILS_ROOT = File.expand_path("../..", __FILE__)

    listen "/tmp/unicorn.sock"
    pid "tmp/pids/unicorn.pid"

    # ワーカの数を指定
    worker_processes 2

    # リクエストのタイムアウト秒を指定
    timeout 15

    # ダウンタイムをなくすため、アプリをプレロード
    #preload_app true

    stdout_path File.expand_path('log/unicorn-stdout.log', ENV['RAILS_ROOT'])
    stderr_path File.expand_path('log/unicorn-stderr.log', ENV['RAILS_ROOT'])

    # before_fork, after_forkではUnicornのプロセスがフォークする前後の挙動を指定できる
    # 以下のおまじないの詳細はドキュメント参照
    before_fork do |server, worker|
        defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect!

        old_pid = "#{server.config[:pid]}.oldbin"
        unless old_pid == server.pid
            begin
                Process.kill :QUIT, File.read(old_pid).to_i
            rescue Errno::ENOENT, Errno::ESRCH
            end
        end

        defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection
    end

    after_fork do |server, worker|
      Signal.trap 'TERM' do
        puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
      end

      defined?(ActiveRecord::Base) and
        ActiveRecord::Base.establish_connection
    end

    def rails_root
      require "pathname"
      Pathname.new(__FILE__) + "../../"
    end

    注意点は listen "/tmp/unicorn.sock" のsockのパスと
    /etc/nginx/conf.d/192.168.33.11.conf の記載のパスが一致すること
    upstream unicorn {
      server unix:/tmp/unicorn.sock fail_timeout=0;
    }

  17. 起動
    $ bundle exec unicorn_rails -c config/unicorn.rb -E development -D

    http://192.168.33.11/
    にアクセスして

    Roots#index

    Find me in app/views/roots/index.html.erb


    が見えれば成功

    Unicornを終了したい時は直接プロセスを切るらしい
    $ ps -ef | grep unicorn | grep -v grep

    vagrant   7685     1  0 06:46 ?        00:00:00 unicorn_rails master -c config/unicorn.rb -E development -D
    vagrant   7688  7685  8 06:46 ?        00:00:26 unicorn_rails worker[0] -c config/unicorn.rb -E development -D
    vagrant   7690  7685  9 06:46 ?        00:00:28 unicorn_rails worker[1] -c config/unicorn.rb -E development -D

    $ kill -9 7685
    $ !ps
    ps -ef | grep unicorn | grep -v grep

    Unicornのエラーなどが見たければ
    $ tail -f log/unicorn-stderr.log

    1. I, [2014-07-16T06:46:37.781500 #7688]  INFO -- : Refreshing Gem list
      I, [2014-07-16T06:46:37.784650 #7690]  INFO -- : Refreshing Gem list


今回の全ファイルは以下のGitHubに置いてあります。

chef-Rails4.1-Ruby2.1.2-Nginx-Unicorn-MySQL/chef-repo at master · k1row/chef-Rails4.1-Ruby2.1.2-Nginx-Unicorn-MySQL · GitHub

(Error Domain=kCLErrorDomain Code=5 "The operation couldn’t be completed. (kCLErrorDomain error 5.)")

iBeacon関連をやっていた際に突然ハマったので。

proximityUUIDも確実にあっている状態で locationManager#didStartMonitoringForRegionまで呼ばれるのにその後#didDetermineStateまで飛んで来ない事があり、#monitoringDidFailForRegionを呼んでみると下記エラーが検出されました。

 

monitoringDidFailForRegion:IDENTIFYregion(Error Domain=kCLErrorDomain Code=5 "The operation couldn’t be completed. (kCLErrorDomain error 5.)")

 

調べるとStackOverFlowなどで、登録数が20を超えてるとかiOSのバージョンの問題とか諸々引っかかりますがどれも該当してないので散々悩んでソース削ったりxcode6をアンインストールしたりしましたが、結論iPhoneを再起動すれば直りました。。。

GCEにDockerでnginxサーバ構築でImmutable Infrastructureに初挑戦

と言う事で話題になっているので挑戦しました。
普通にMac上でDockerだけやっても他の方の事例があるので、今回はGoogle Compute Engine上にサーバを作ってそのサーバをホストサーバとしてDockerを入れました。

■環境の確認

・Mac OSX 10.9 Mavericks
・Google Compute Engine centos-6-v20140415
そういえば、asiaリージョンいつの間にか出来ましたね

■GCE関連の設定

まずはhttps://console.developers.google.com/projectから、「CREATE PROJECT」して適当に新規プロジェクトを作ります。
プロジェクトが出来たら左のメニューから
「Compute Engine」->「VM Instances」で画面上に出る「NEW INSTANCE」
インスタンスを生成します。
※クレジット情報が必要です。
こんな感じでdocker-serverを構築します。

これでサーバにログインするために、Mac側にgcutilのSDKが必要なので設定します。 
gcutil Tool - Google Compute Engine — Google Developers
に書いてある通りなのですが、下記コマンドでDLします。

$ curl https://dl.google.com/dl/cloudsdk/release/install_google_cloud_sdk.bash | bash
DLが終わったら
$ gcloud auth login

をするとブラウザでauthの認証が開くので許可してあげます。
ターミナル戻るとproject_id入れるよう支持が出ると思いますので入れてあげて下さい。
プロジェクト IDは例えばこんな感じの文字列です。「spheric-mesh-223」
(何か不明なのがあれば、コンソール https://console.developers.google.com/project から確認してください)

上記が済めば下記コマンドでサーバにSSHできます。

$ gcutil --service_version="v1" --project="プロジェクト名" ssh --zone="asia-east1-a" "docker-server"
※このコマンドは「Compute Engine」->「VM Instances」画面にサーバリストが出ていて
リストの一番右の「SSHボタン」を押す事によっていつでも取り出せます。
一番最初だけ、パスフレーズ入れて鍵を勝手に生成してくれるようなのでちょっと待ちます。


ログインが成功すると、ターミナルは

[ke-16@docker-server ~]$
みたいに表示されると思います。(たぶんユーザ名は勝手にとってきてますね)
これでGCEサーバへのSSHは終了です。簡単ですね〜

ちなみにgcutilのコマンドメモとして
■ファイルを転送したい(push)

$ gcutil --project="プロジェクト名" push "docker-server" /Users/USER_NAME/Documents/a.txt /tmp
みたいな感じですね。オプションは「push サーバー名 転送元 転送先」です。
■ファイルを取得したい(pull)
$ gcutil --project="プロジェクト名" pull "db01" /tmp/my.cnf /Users/USER_NAME/Documents
単純にpushの逆です。
■FireWall変えたい
$ gcutil addfirewall port-80 --description="Open up port 80." --allowed="tcp:80”--project="プロジェクト名"
$ gcutil addfirewall port-443 --description="Open up port 443." --allowed="tcp:443”--project="プロジェクト名"
$ gcutil addfirewall port-3306 --description="Open up port 3306." --allowed="tcp:3306”--project="プロジェクト名"
のような感じです。

それでこのサーバをホストにDockerを用いてnginxサーバを構築したいのですが、これに関してはGitHubに先にまとめてしまったので
そちらをご覧下さい。
k1row/Docker · GitHub

いろんなサイトを参考にさせて頂きながら、Dockerfileを構築しました。
Dockerの個人的な感想としては、
・設定ファイル(Dockerfile)は可読性が高いので設定は容易
・実際いろんなリポジトリがすでにあり便利(Home | Docker Index)
・言われている通り、サーバ毎の環境を気にしなくて良くなるので効果的
・ただ、yumが結構重いのですがこれはこんなものなのでしょうか?
apt-getだとキャッシュすべしみたいな記載が散見されたのですが
・高負荷になった時にどういう挙動になるのか謎なので確かにproductionだとまだ怖い
・もっと細かく作るなら、Docker単体と言うよりは他のプロダクトとの組み合わせになりそう

って感じですかねー。でもとってもいいですね。

# 参考URL
Docker公式
Docker Documentation
Dockerfile - Docker Documentation
Run Reference - Docker Documentation

memorycraft: Dockerってなんじゃ?(docker+nginxで複数コンテナにWEBサーバーをたてる)
MacからSSH接続可能なDockerコンテナを作る。 - Less is Best
Docker Memo | すてねこのダンボール箱
私の Docker TIPS - Qiita
Dockerでnginxサーバー立ててみた。あとDockerの使い方とか。 - Less is Best
はじめてのDocker on EC2 | Developers.IO

VirtualBoxで Cannot register the hard disk エラーが発生した時の対応方法

・Mac OSX 10.9 Mavericks
VirtualBox 4.3.8
Vagrant 1.5.1 (直接的にはVagrantは関係ないですが)

とあるPC(Windows8)で作ったVagrant + VirtualBoxの仮想環境をファイルコピーして別のPC(MacBookPro)に移行した際に、vagrant up しようとすると(あるいは、VirtualBoxのアプリケーションを起動しようとすると)このようなエラーに遭遇しました。

Cannot register the hard disk 'xxx.vmdk' {3bd54a8c-c6f4-472b-a61a-cbe6b38b1e4f} because a hard disk 'xxx.vmdk' with UUID {3c27fa37-fc16-4f05-bba3-b80c87919d50} already exists.

良くある話のようで、検索するといくつも引っかかるのですがversionが違うと微妙に対応が違うようなので記載しておきます。
結論下記コマンドにてUUIDを変更し、VirtualBoxのアプリケーションから仮想ディスクを割り当て直す事で解消しました。


VBoxManage -nologo internalcommands sethduuid "xxx/VirtualBox VMs/centos64-x86_64/box-disk1_4.vmdk"

サンフランシスコ界隈で、日本人が美味しいと思うおすすめレストラン

この度約2年半のサンフランシスコ生活を終え帰国する事になりました。

初めて旅行で来て、ガイドブックに載っているままSears Fine Foodに行って、硬いベーコンを食べてから3年半。。。(笑)
サンフランシスコダウンタウンで美味しいお店どこ?と聞かれたりするのでというのと、自分で忘れないようにというのも含めて私が美味しかったと思うサンフランシスコでおすすめのレストラン・食べ物屋さん・コーヒーショップなどを書き残しておきます。

私をご存じの方は今後は聞かずにここから行って下さい(笑)

・行った事無いお店は載せません。すべて私自身が食べて美味しいと思ったお店です。

※写真とか上手く取れていなかったり向き、サイズが一致しないなど多数ありますがどうか大目に見て頂ければ幸いです。


Italian
■Delfina
http://www.yelp.com/biz/delfina-san-francisco


まずは私も一番好きなPizzaレストランです。
超有名なのでご存知の方も多いかと。
Mission District と Filmore にあります。

どちらも行った事あるのですが、開店後すぐ(Missionは12時、Filmoreは11時かな)に行くとほぼ待たずに
1巡目で入れます。(予約できないはずなので常にwaiting listになります)
オススメです。ピザも美味しいですがサイドメニューも美味しいです。特にMeat ballはオススメです

■Flour + Water
http://www.yelp.com/biz/flour-water-san-francisco




何でこんなにYelpの評価が低いのわからないですが、間違いなく美味しいです。
パスタが有名なのですが、ピザも十分美味しかったです。
ですが本当に予約がいつも取れません。(空いてても平日の5:30とか)
私が行けたのは、Opentableを火曜とか水曜あたりにチェックしてるとその週の週末にたまにキャンセルが出るのでそこですぐ予約するという感じです。
お店の席の1/4ぐらいはたぶんwalk in用になってて、4:30とかから並べば1巡目で入れるかもです。
イカスミのパスタが本当に美味しいのでぜひ試してみて下さい。

■Beretta
http://www.yelp.com/biz/beretta-san-francisco

6人以上とかじゃないと予約できないですが、SFにしてはそんなに値段が高くないですし、メニューもバラエティに飛んでますしバーも併設されているのでオススメです。

■Locanda
http://www.yelp.com/biz/locanda-san-francisco

Yelpだとサービスで★1つの人も沢山いますが、そんな事無く良いサービスで美味しい料理でした。
あと全体的な量はアメリカっぽくなくて少ないのでそこがダメな評価もありましたが。

ですがBarも充実していて、いろいろなカクテルやウィスキーをオーダーできます。
料理では特にFried Oliveは美味しかったです。
あとカルボナーラが有名なようなので頼みましたがちょっとGoat Cheeseが多めなのでその独特の臭みが苦手な人は別のパスタをオーダーした方が良いと思います。

■Perbacco
http://www.yelp.com/biz/perbacco-san-francisco

Financial Districtにある、有名イタリアンですね。
高いですが美味しいと思います。
奥のカウンターに座ると目の間でずっとプロシュートをスライスしているのですが
時々味見と称して何枚かくれます。
こちらも予約必須ですが、Opentableに対応してるので予約の敷居は低いですね(笑)

■Sotto Mare
http://www.yelp.com/biz/sotto-mare-san-francisco


North Beachにある、超おススメイタリアンシーフードです。
どれでも美味しいですが、Cioppinoが本当に美味しいです。
1階がカウンターとテーブル4、5個?で地下もあります。
値段もそんなに高くはない方だと思います。

予約必須です。ちなみに2人以下と当日予約は出来ません。(以前そう言われました)
チャイナタウンを歩いて抜けていくか、タクシーで行くのが良いと思います。

■E' Tutto Qua
http://www.yelp.com/biz/e-tutto-qua-san-francisco
○○○ 自分のフォルダから写真検索中です ○○○

North Beachにあるイタリアンです。
店員さんがおそらくほぼ全員イタリア系アメリカ人な感じでとても陽気です。

■Capannina
http://www.yelp.com/biz/capannina-san-francisco

Union Stにある雰囲気の良いイタリアンレストランです。
航空ショーの日の帰りにフラッと立ち寄ったのですが、意外とすんなり入れました。

American【Steak】
■Harris' Restaurant
http://www.yelp.com/biz/harris-restaurant-san-francisco

結構年配の方が多い大人のステーキハウスといった感じです。熟成肉は美味しいです。
ここは結構量が半端じゃ無いと思いますので、ガッツリ食べたい方にはオススメです。

■House of Prime Rib
http://www.yelp.com/biz/house-of-prime-rib-san-francisco
ローカルには一番有名なSteak Houseだと思います。
本当にこうMedium Rareで食べる肉肉しいのが食べたい方にはオススメですよ。

■5A5 Steak Lounge
http://www.yelp.com/biz/5a5-steak-lounge-san-francisco

結構日本っぽいのがメニューにちらほら見えました。シェフの方が日本に関係しているのですかね?
ステーキは大変美味しかったですが、ソースじゃなくて単純な塩・コショウのみで食べれば良かったかもです。

■Ruth's Chris Steak House
http://www.yelp.com/biz/ruths-chris-steak-house-san-francisco

オススメがいくつかある中で、our most popular filetと書いてあるのと、prime NY Stripがあったので店員にどちらがオススメか聞いたら、正直NY stripだと(ちょっと意外でしたが)
それを信じて注文したのですが、これは本当に美味しかったです。
SFで食べたステーキで一番美味しかったと思います。

■Alexander's Steakhouse
http://www.yelp.com/biz/alexanders-steakhouse-san-francisco

SOMAエリアの夜はちょっと歩いて行くには怖い雰囲気にある、元ミシュランスターのステーキ店です。
サービスは流石に良くて、無料でいろいろ出てきます(最初びっくりしますが)
一番最後にこの店のシンボル(?)ともいえる綿菓子が出てきます。
メニューも豊富でステーキも大きくて良いのですが、5A5と同じで単純な塩コショウのみで食べたい気がします。
あと値段は流石に1,2を争うぐらい高いですね。。。


いずれも超有名・超高級ステーキハウスなので、知ってる方多いと思いますが。
せっかくアメリカに来たのだから、多少高くてもアメリカの肉!肉!肉という方に。

ちょっと町の中心部からは離れてしまいますが、ほとんどがVanNess(101)という通り沿いでお互いすぐ近くにあります。
バスかタクシー(10分、15分ぐらいです)で行くのが良いと思います。
いずれも予約必須ですね。ドレスコードは無いですが襟付きぐらいは着て行った方がいいと思います。


American【Burger】
■In-N-Out Burger
http://www.yelp.com/biz/in-n-out-burger-san-francisco
○○○ 自分のフォルダから写真検索中です ○○○

カリフォルニア(西海岸)の有名バーガーチェーンですね。
多くの人がこのお店の特徴とか面白い点をブログに書かれているのでぜひ検索してみて下さい。
アニマルスタイルが私もオススメです。

■SuperDuper
http://www.yelp.com/biz/super-duper-burgers-san-francisco-4
○○○ 自分のフォルダから写真検索中です ○○○

SFの有名バーガー店ですね。Marketにあるのはいつも混んでいるので、Mission & 4th (Targetの横)の方がオススメです。
でもカンファレンスの時はダメですね。。。
日本人なら、Mini Comboで十分と思います。

■Gotts
http://www.yelp.com/biz/gotts-roadside-san-francisco-2

フェリービルディングの一番端にある、有名バーガーチェーン店です。
場所がらいつも混んでいます。若干高いですが、ジューシーで美味しいですね。

■Roam Artisan Burgers
http://www.yelp.com/biz/roam-artisan-burgers-san-francisco

オシャレストリートUnionにあるバーガーショップです。
Yelpの評価だと、Bisonのバーガーをみんな進めますが若干やっぱり独特の獣っぽい臭みがあるので私はやっぱりBeefの方が好きです。
非常にジューシーで本当に美味しいですね。

■Palomino
http://www.yelp.com/biz/palomino-san-francisco-san-francisco
○○○ 自分のフォルダから写真検索中です ○○○

意外とお昼のバーガーがおいしいんです。ですのでここに入れたのですが基本はアメリカンレストランです。
水曜の夜はワインのボトルが半額になるのでオススメです。
ローカルも多いので綺麗なBay Bridgeを見ながら食事を楽しめる良いレストランと思います。

American【New & Traditional】
■Frances
http://www.yelp.com/biz/frances-san-francisco



ミシュラン1つ星の超人気店ですね。
私はたまたま5:30pmから予約が取れて良い席に座れました。
これもFlour + Waterと同じ方式で、その週の前半からちょこちょこ空きをOpentableでチェックしてました。

店内は若干こじんまりとした感じですが木目調の落ち着いた雰囲気で、話声も大きくなく心地良い空間でした。
料理はどれも見た目は繊細な感じですが、味がしっかり合って赤ワインと相性バッチリに感じました。
あと特別にリクエストするパンがあるのですが、(メニューに書いてありました)美味しかったです。

■commonwealth
http://www.yelp.com/biz/commonwealth-san-francisco

数ある高級Americanレストランでもここはオススメです。
他の同様のジャンルのレストランより単価は若干安めだと思いますが、味は他のところにも引けを取らないと思います。
料理ははやり繊細で見た目も綺麗な品々です。ただ量はここもちょっと少な目かと思いますが日本人は十分です。
最初に出てくるサワー系のチップもとても美味しいです。
こちらも予約必須です。

Mexican
あまり日本にいた頃は馴染みの無かったメキシコ料理ですが、本当に美味しくてこちらに来てたぶんもっとも価値観の
変わった料理だと思います。
噂(2014年2月現在)だとChipotleとTacoliciousが日本に上陸する(した)と聞いたのですが、、、

■Chipotle Mexican Grill
http://www.yelp.com/biz/chipotle-mexican-grill-san-francisco-2

サンフランシスコ市内、周辺に幾つもあるチェーンです。
日本から来てこれを食べた人で美味しくないと行った人を聞いた事ないです。
もちろん私も本当に好きで週1か2週に1度は食べてます。昔はもっと食べてました(笑)
Extra lettuce が私には超重要です。
12pm - 1pm は本当にどの店舗も混むので並ぶの覚悟か避けた方が良いです。
11:30am ぐらいであれば、全然スムースに買えますので。

■Tacolicious
http://www.yelp.com/biz/tacolicious-san-francisco-7


サンフランシスコ市内に幾つか店舗があるようですが、私はMission店に良く行きました。
メキシカンのためのエリアと言っても過言でないMissionで私も1番のメキシカンレストランだと思います。

特に「made-to-order guacamole」つまりフレッシュワカモレ + トルティーヤチップスなんですが
これはマストで食べたい1品です。ちなみにこれだけでも to go できました(笑)

予約は取れないので、行ってwaitingリスト記載後に待ちます。ですがバーが併設されているのと
なぜか店内から行き来できる隣の店にもバーがあるので、マルガリータでも飲んで待つのが良いと思います。


Asian【Chinese & Thai & Vietnamese】
■Crustacean

日本人駐在員ご用達のレストランですね。
私が行った時回り日本人グループが5、6組居たと思います。
有名なのがこのダンジネスクラブですが、これももちろん美味しいですがそれ以外の料理もどれも美味しくて
行って良かったレストランですね。
ちなみにダンジネスクラブは値段は時価表記で私が行った時は$45でした。

ちなみに12月頭にFisherman's wharfのカニの看板があるところの屋台っぽいお店から、Ghirardelli Squareの方に
合わせてたぶん10〜15店舗近く道沿いにお店があるのですが、その辺りの一角でダンジネスクラブ$9.50〜から売ってました。
1杯丸々じゃないのかもしれませんが(すみません、それは食べては無いのですが)少しは楽しめるのではないでしょうか?
Clam chowderと食べると美味しいと思いますよ!

Bangkok Noodles
http://www.yelp.com/biz/bangkok-noodles-san-francisco

Union Squareというかユニクロの目の前にあるタイ料理屋さんで、超おススメです。
お酒が出ないのが入店後は残念ですが、そのため回転率が高いので並んでいてもそこまで待ちません。
値段も超良心的です。
SFのタイ料理ではここが一番美味しいと思います。ガパオ最高です!

■Basil Thai Restaurant & Bar
http://www.yelp.com/biz/basil-thai-restaurant-and-bar-san-francisco



SoMaエリアにあるタイ料理屋さんです。
安心してどのメニューも食べられるお店だと思います。値段も高くないです。
お店は綺麗なのですが、結構空いてる率が高いのでサッと行って美味しいタイ料理食べるのに重宝してます。

■Lers Ros Thai
http://www.yelp.com/biz/lers-ros-thai-san-francisco


おもいっきりTenderloinの中にあるので、サンフランシスコに慣れていない方には正直オススメできませんが
ここのFried Riceがサンフランシスコで一番美味しいと思います。
お店の中はとても綺麗で清潔感もあり、サービスもバッチリ価格も安いので辿り着けば本当にオススメです。
(昼間なら何とか大丈夫と思います。夜は行くこと自体を絶対オススメしません)
Pad Thai, Larb Gaiなども美味しです。後はエビが本当にプリプリでした

■Great Eastern Restaurant
http://www.yelp.com/biz/great-eastern-restaurant-san-francisco
○○○ 自分のフォルダから写真検索中です ○○○

Chinatownにある箱の大き目の中華料理屋さんです。
正直アメリカのChineseは油が私には臭くて基本美味しくないんですよね。。。

ですがここがChinatownでは一番美味しいと思います。
私があまりYelpの☆を信用しなくなったお店の一つですが、私の中では全然☆3.5のお店ではないです。
横浜中華街より手軽に、中華が楽しめる感じです。

昼も夜もどちらもおススメです。昼はDumplingがメインなのですが、Shrimp Dumplingは特におススメです。
予約できればした方がいいですが、待っても30分ぐらいで入れます。ファミリーも結構多いです。

■Delicious Dim Sum
http://www.yelp.com/biz/delicious-dim-sum-san-francisco
※写真撮ってないです

カウンターとちょっとした席しかない、to go用のDim Sum屋さんですが美味しかったです。
Shrimp, Porkはもちろん、Chivesが美味しいよとたまたま来ていた向かいのお店のオバさんに教えられて食べました。
どれも美味しかったです。値段も安いのでチャイナタウンの散歩中に小腹が空いたら良いと思います。
ただSpring rollだけはシナモンが入っててダメでした。

■Perilla
http://www.yelp.com/biz/perilla-san-francisco

Yelpを信用しないで私を信用して下さい(笑)私の仲間もみんなここのPhoが好きです。
ランチのみの営業ですが、Phoを食べたくなったらここが一番オススメです。
お昼時はいつも混んでいるので多少待ちますが、回転率が高いので15分程度と思います。
Moscone centerからも近いのでぜひ!
でも有名なのはガーリックヌードル(ニンニク焼きそば)なんですよね。ガツンといきたい方は良いと思います。

Other
■Restaurant Ducroix
http://www.yelp.com/biz/restaurant-ducroix-san-francisco
○○○ 自分のフォルダから写真検索中です ○○○

Financial Districtにあるこじんまりとしたフランス料理屋さんです。
そんなに高くもなく、比較的ライトな感じで味は美味しいフランス料理を食べられると思います。
仕事とかの商談系でも使える感じだと思います。予約した方が無難ですね。

■Zarzuela
http://www.yelp.com/biz/zarzuela-san-francisco?ob=1

ちょっと遠いのですが、Russian Hillにあるこのスペイン料理屋はオススメです。
Gambas ajillo, Paella, Callosどれも美味しいですし、サービスも良いお店です。
予約できないので、一巡目(5:30pm)で入れないと1時間は待ちます。

■B44
http://www.yelp.com/biz/b44-san-francisco
○○○ 自分のフォルダから写真検索中です ○○○

Financial Districtの裏路地に、お店が数件並んでいるうちの一つなのですが
ワイワイガヤガヤとスペイン料理が食べたければおススメです。
(サンフランシスコってスペイン系の人もたくさんいるのにスペイン料理屋さんってあまり無いんですよね)
予約するのが無難とは思いますが、いつもひょいっと行って結構入れます。

■Schmidt's
http://www.yelp.com/biz/schmidts-san-francisco-2

ドイツ系の料理も以外と少ないのですが、ビールとソーセージで乾杯したかったらココかなと。

■Cha Cha Cha
http://www.yelp.com/biz/cha-cha-cha-san-francisco-4
○○○ 自分のフォルダから写真検索中です ○○○

Mission & 19th か Haight & Ashburyのちょっと奥にあるCaribbeanのお店です。

基本待つので、まずはバーカウンターでサングリアをジョッキで頼んで待つのがこの店
ルールのようにみんなします。でもサングリアの味はもちろん美味しですが、空きっ腹に飲むので当然酔います(笑)
どちらもちょっとダウンタウンから遠いですが、タクシーで20分ぐらいですかね。
日本ではあまり馴染みのない料理ですが結構オススメです。
Cajun Shrimpという甘目のエビチリみたいなのがオススメです。パンに付けると美味しいソースですね。

Brunch
■Tartine Bakery & Cafe
http://www.yelp.com/biz/tartine-bakery-and-cafe-san-francisco

言わずと知れたMission地区の超有名Bakeryです。
Banana Cream Tartが絶品で一番有名と思いますが、それ以外にもサンドイッチなど食べてる人は多いです。
私は普通のプレーンのcroissantが美味しくて感動しました。
Banana Cream Tartは朝早く行き過ぎるとまだ出来てない時もあるのでお金だけ払って後ほど引き取りなります。(信用できます)午後は土日であれば2時か3時には大抵売り切れてます。
いつ行っても基本30分は待つと考えた方がいいです。ですが並ぶ価値はあると思います。

■Bar Tartine
http://www.yelp.com/biz/bar-tartine-san-francisco

Tartine Bakery & Cafeのレストラン版がBar Tartineです。
昼も夜もやっているので使い勝手は良いと思います。
サンドイッチはやっぱりこちらも美味しいです。

■Taylor Street Coffee Shop
http://www.yelp.com/biz/taylor-street-coffee-shop-san-francisco

ヒルトンの真横にある、朝食おススメのお店です。
Tenderloinのすぐ近くですが、ここはギリギリ大丈夫なところです。
ちょっと高いですが美味しいですし量が多いです。
アメリカなので、当然コーヒーはおかわり自由です。
お店が狭いので、結構待つ事が多い気がします。

■Olea
http://www.yelp.com/biz/olea-san-francisco
○○○ 自分のフォルダから写真検索中です ○○○

Nob Hillというちょっと上の方に坂をあがったところにあるのですがオシャレで美味しいブランチのお店ですね。
ちょっと高い&待ちますが、良いアメリカンブランチを体験できると思います。

■Golden Coffee Shop
http://www.yelp.com/biz/golden-coffee-shop-san-francisco
※写真撮ってないです

区分けはTenderloinになりますが、この辺は大丈夫です。
ちょっとユニオンスクエアのホテル街からは外れます。

おそらく中国系の方がやられてるブランチのお店なのですが、いっつも並んでます。
値段も高くもなく、卵系のメニューが多いです。あとポテトが美味しいですね。

■Honey Honey Cafe & Crepery
http://www.yelp.com/biz/honey-honey-cafe-and-crepery-san-francisco
○○○ 自分のフォルダから写真検索中です ○○○

Union Square近郊であれば、私はここが一番おススメです。
メニュー豊富・量も豊富です。

土日は朝から昼過ぎまで結構並んでるイメージです。
ですが回転率が高いので、そこまで待たないと思います。

やっぱりEgg Benedictですよね!

Fast Food
■Sushirrito
http://www.yelp.com/biz/sushirrito-san-francisco

とりあえず手軽に寿司っぽいものを食べたかったら意外とおススメです。
持ち帰りだけなので$8ぐらいだけで購入できます。
2店舗あって、Moscone centerからも近いのがあります。

私はGeishaがオススメです。

■Cafe Algiers
http://www.yelp.com/biz/cafe-algiers-san-francisco

アメリカなのでこの手のサンドイッチショップは星の数ほどあるのですが、その中でもAlgiersはオススメです。
私も週1ぐらいで良く食べてました。
Sliced Wheat、Spicy turkey、Spicy mustardとトッピングすべてが定番でした。


Japanese
レストラン系最後は日本食です。基本日本食はすごく値段が高いです。
自宅で食べる時はほぼ日本食なのですが、それでもやっぱり日本食のレストランも行きたくなる訳で。

■Roku (Japa Curry)




http://www.yelp.com/biz/izakaya-roku-san-francisco
まずYelpにある味に対する評価は全く信用出来ないと思います。(そもそも日本人が評価してないですしね)
そもそもサンフランシスコって外食したら高いと思ってるんですが日本食は更に高いんです。。。
でもRokuは何といっても美味しくて安いんです。本当に良心的な値段でありがたいです。
またサンフランシスコなので、当然日本ほどラーメンは食べ歩き出来ないですし正直そんなに期待もしてないのであまりサンフランシスコで
ラーメンを食べなかったのですが、私はRokuのガーリックトンコツが一番美味しいと思います。

Rokuはjapa Curryというフードトラックも展開されているので、良くJapa curryのカレーか日替わりを食べていました。
こちらももちろんオススメです。

■Chotto
http://www.yelp.com/biz/chotto-san-francisco
○○○ 自分のフォルダから写真検索中です ○○○

日本酒のFlightがある日本風居酒屋のお店です。ここもとても美味しいので日本人のお客さんが多いと思います
予約必須ですね。

■Chaya Brasserie
○○○ 自分のフォルダから写真検索中です ○○○

フェリービルディングの反対側にある、Asian Fusionのお店ですね。
普通に寿司が出てくるので、このカテゴリーに入れました。
料理はどれを頼んでも基本美味しいです。

若干高いですが、でもオススメです。

■Ryoko's Japanese Restaurant & Bar
http://www.yelp.com/biz/ryokos-japanese-restaurant-and-bar-san-francisco
ユニオンスクエアの有名SUSHIレストランですね。
かなり味も形も日本のそれに近いものが出てきます。イクラとかウニとか本当に普通に美味しいです。
箱が大きいので、人数いても入れますし場所柄利便性が高いので基本オススメですが
うるさすぎるのと、値段もうちょっと安いと嬉しいなと思います。

あと基本待ちます。

■Sushi On North Beach - Katsu
http://www.yelp.com/biz/sushi-on-north-beach-katsu-san-francisco
○○○ 自分のフォルダから写真検索中です ○○○

North BeachにあるSUSHIレストランなのですがオススメです。
大将が日本人の方でとっても安心です。
すしも刺身もオススメです。
あとは、実際私もCalifornia RollとかDragon Rollとかイメージ上毛嫌いしていてまったく食べなかったのですが
こちらのShrimpのDragon Rollがあってそれは本当に美味しくてびっくりでした。

あと何より値段も良心的です。

■Izakaya Sozai
http://www.yelp.com/biz/izakaya-sozai-san-francisco
○○○ 自分のフォルダから写真検索中です ○○○

居酒屋となってるだけあって、確かに他のどの日本レストランよりも居酒屋的なメニューが多いと思います。

ラーメンも美味しかったです。
こちらもダウンタウンからちょっと遠いのですがオススメです。予約は必須と思います。

http://www.yelp.com/biz/izakaya-sozai-san-francisco

【番外編】郊外
■Sushimaru
http://www.yelp.com/biz/sushi-maru-san-jose

San JoseのJapan Townにある回転ずし風のお寿司屋さんなのですが私はココが一番好きなお寿司屋さんでした。
何でこんなにYelpの評価が低いのか理解できません。
値段も他のお寿司屋さんに比べれば全然割安ですし、焼き魚とかそばとかメニューも豊富で本当にオススメです。

■Gombei Japanese Restaurant
http://www.yelp.com/biz/gombei-japanese-restaurant-san-jose

San JoseのJapan Townにある他、何店舗か展開されているようですが要するに定食みたいなのが食べたかったらオススメです。
特に焼き魚系とお刺身系のメニューが豊富で、やっぱり魚食べたくなりますよね〜

■Usagi
http://www.yelp.com/biz/usagi-san-mateo

San Mateoのカルトレイン駅近くにある日本の洋食屋さんですね。
本当に美味しいです。日本で食べるより安くて多くて美味しい洋食が食べられます。
色々食べようと思いつつ、行くといつもメンチカツ頼んでしまうんですよね。。。(笑)

■Ippuku
http://www.yelp.com/biz/ippuku-berkeley-2
○○○ 自分のフォルダから写真検索中です ○○○

Berkeleyにある日本風居酒屋なのですが、焼き鳥が本当に美味しいですね。
ちょっと高い気はしますが、でも焼酎あり、日本酒ありで駐在している方で日本の居酒屋が
恋しい方にはオススメです。

■Kiraku
http://www.yelp.com/biz/kiraku-berkeley



こちらもBerkeleyにある日本風居酒屋なのですが、本当に美味しかったです。
Ippukuよりちょっと安い気がしますが、メニュー豊富でこちらも焼酎がたくさんあっていいお店です。

Bar & Lounges
■Press Club
http://www.yelp.com/biz/press-club-san-francisco
ダウンタウン、オシャレなお店、美味しいワインならばこの店かと。
Market StからYerba Buena Centerに抜ける道にあります。
広々とした地下に沢山の席がありワインが充実しています。
値段はやっぱり高めだと思います。$20 - $30ぐらいのフライトを私は良く頼みます。
予約をした方が無難ですが、金曜じゃなければ結構入れると思います。
あと何て言いますか、テレビ的な「アメリカのオシャレな空間」が味わえます(笑)

ちなみにPress Clubの向かいのメキシカンレストランのバーもオススメです。

■The Hidden Vine
http://www.yelp.com/biz/the-hidden-vine-san-francisco
Finacial Districtにあるワイン中心のラウンジです。


サンフランシスコ4大コーヒー
最後にサンフランシスコ4大コーヒーについて触れておきたいなと。
サンフランシスコにはこれら以外にも特にMissionやFinacial Districtには沢山美味しいコーヒー屋が
あります。いろいろ試してみるのが良いと思います。
でも結局スタバが一番行ったと思いますが(笑)

■Blue Bottle Coffee Co.
http://www.yelp.com/biz/blue-bottle-coffee-co-san-francisco-8
やっぱりここが一番私は好きですね。
店舗数も他のコーヒーショップに比べれば一番多くて良いと思います。
どこも混んでいますが、フェリービルディングの正規窓口が一番混んでますね。。。
フェリービルディングで買うなら、横の通路にあるSecret Counterで買う事をオススメします

■Four Barrel Coffee
http://www.yelp.com/biz/four-barrel-coffee-san-francisco

店舗のイメージはシックでオシャレという感じです。
私は4大コーヒーの中では一番酸味が強いと思います。

Tartine Bakery & CafeでもFour Barrelのコーヒー出してたりしてますね。

■Ritual Coffee Roasters
http://www.yelp.com/biz/ritual-coffee-roasters-san-francisco

Mission地区にメインがある、赤の可愛らしいマークのコーヒーショップです。
店舗はいつも満席ですね。私のイメージではBlue Bottleのフェリービルディングの次にいつも並んでます。
苦味、酸味ともにそこそこ強めで全体的に重厚な口当たりに思えます。
ドリップコーヒーはどれももっと酸味が強いと思います。

ちなみにこのRitualの回りのValencia Stには他にも沢山コーヒーショップがあります。
土日の昼間はどこもいつも一杯です。

■Sightglass Coffee
http://www.yelp.com/biz/sightglass-coffee-san-francisco

味は薄めで酸味もそんなに強くない印象ですが、何となくズズズッと飲み続けてしまう
そんな美味しさです。
カップとかも可愛らしいオシャレで良い感じなんですよね。
フェリービルディングのファーマーズマーケットでも出店しているので、実店舗までいけない方でも飲めますよ。


レギュラーコーヒーを注文した場合個人的には
酸味 :
Four Barrel > Ritual > Sightglass > Blue Bottle

苦味 :
Ritual > Four Barrel > Sightglass > Blue Bottle

濃さ :
Blue Bottle > Ritual > Four Barrel > Sightglass

かなと感じました。


行きたかったけど行けなかったお店
■Tadich Grill
http://www.yelp.com/biz/tadich-grill-san-francisco
良く行くエリアに合ったのですが何となく行きませんでした。

■State Bird Provisions
http://www.yelp.com/biz/state-bird-provisions-san-francisco
予約が取れなさすぎて萎えました。walk inでトライしてみれば良かったかもですね

■Kokkari Estiatorio
http://www.yelp.com/biz/kokkari-estiatorio-san-francisco
私の行ける日に予約が出来なさすぎて行けませんでした。

■Nopa
http://www.yelp.com/biz/nopa-san-francisco
ここも予約が取れなさすぎて萎えました。

SPQR
http://www.yelp.com/biz/spqr-san-francisco
何となく他のイタリアンで満足してしまったかもです。。。

■Gary Danko
http://www.yelp.com/biz/gary-danko-san-francisco

■Don Pisto's
http://www.yelp.com/biz/don-pistos-san-francisco-2
ずっと気になっていてちょいちょい覗いていたのですが、このお店も予約出来なくて。。。
知り合いはここはオススメと言っていました。

■Orenchi Ramen
とっても有名なのは知っていたのですが、場所がら何となく行く機会がなかったです。
でも今はダウンタウンにbeyondという店舗があるのですね。
https://www.yelp.com/biz/orenchi-ramen-santa-clara


最後に、私がお店に行く時にはもちろんローカルやその他日本人から聞く事も多いのですが
それ以外ですとやはりサイトで調べて行くのですが、特にオススメなのがこちらの2つです。

■SF BiteBite!
http://sfbitebite.com/

大変よく参考にさせて貰いました。知ってはいたものの行ってなくて、SF BiteBite!さんの記事を
見てから行こうと決めた店も数多く(笑)
サンフランシスコにいる方も、これからいらっしゃる方も必見と思います。

■H.I.S サンフランシスコ支店便り
http://ameblo.jp/his-sanfrancisco/

流石旅行のプロの方たちが書かれてるだけあって、大変参考になります。
またレストランのみならず、周辺のアクティビティなどいろいろあるのでこちらも必見だと思います。

Napa界隈のレストランとかワイナリーなども時間があれば書いていきたいなと思っています。
これからサンフランシスコに来られる方たちの参考になれば幸いです。

Macでnginx+php-fpm+phalconをインストール

最近PHPがなぜか多くなってきたのですが、私も速いと言われているPHPFramework Phalcon High performance PHP framework を使う必要が出てきたので、環境をMacに作った際のメモを残します。
基本管理がめんどくさいのでbrewでやるようにしています。

■環境の確認

・Mac OSX 10.9 Mavericks
・nginx 1.4.3
PHP/PHP-FPM 5.5.6
・Phalcon 1.2.4
■まずはbrewで最新版PHP5.5.6(2013/11/15現在)のインストールです。
$ brew tap homebrew/dupes
$ brew tap josegonzalez/homebrew-php
$ brew options php55
$ brew install php55 --with-fpm --with-debug --with-mssql --with-homebrew-openssl
$ brew info php55
PEARの設定です。
$ chmod -R ug+w /usr/local/Cellar/php55/5.5.6/lib/php
$ pear config-set php_ini /usr/local/etc/php/5.5/php.ini
PHPUnit & Phingのインストールしておきます。
$ pear config-set auto_discover 1
$ sudo pear install pear.phpunit.de/PHPUnit
$ sudo pear install pear.phing.info/phing
xdebugもインストールしておきます。
$ brew install php55-xdebug
でこの時点で一度LINKをし直しておきます。
$ brew unlink php55
$ brew link php55
各種バージョン確認をしておきます。
$ php-fpm -v
PHP 5.5.6 (fpm-fcgi) (built: Nov 15 2013 13:59:40) (DEBUG)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2013 Zend Technologies
with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans
$ phpunit --version
PHPUnit 3.7.28 by Sebastian Bergmann.
$ phing -v
Phing 2.6.1

で次からいよいよPhalconのインストールですが、まずはどんなのがあるのか確認しておきます。

$ brew search phalcon
php53-phalcon php54-phalcon php55-phalcon
と言う事なのでphp55-phalconをインストールします。
■phalconインストール
$ brew install php55-phalcon
コマンドを叩くと下記のようなログが出ます。

==> Downloading https://github.com/phalcon/cphalcon/archive/v1.2.4.tar.gz
######################################################################## 100.0%
==> PHP_AUTOCONF="/usr/local/opt/autoconf/bin/autoconf" PHP_AUTOHEADER="/usr/local/opt/autoconf/bin/autoheader" /usr/local/Cellar/php55/5.5.6/bin/phpize
==> ./configure --prefix=/usr/local/Cellar/php55-phalcon/1.2.4 --with-php-config=/usr/local/Cellar/php55/5.5.6/bin/php-config --enable-phalcon
==> make
==> Caveats
To finish installing phalcon for PHP 5.5:
* /usr/local/etc/php/5.5/conf.d/ext-phalcon.ini was created,
do not forget to remove it upon extension removal.
* Restart your webserver.
* Write a PHP page that calls "phpinfo();"
* Load it in a browser and look for the info on the phalcon module.
* If you see it, you have been successful!
==> Summary
/usr/local/Cellar/php55-phalcon/1.2.4: 2 files, 2.2M, built in 30 seconds

「/usr/local/etc/php/5.5/conf.d/ext-phalcon.ini was created」と出ているので、このファイルをチェックすると

$ cat /usr/local/etc/php/5.5/conf.d/ext-phalcon.ini
[phalcon]
extension="/usr/local/Cellar/php55-phalcon/1.2.4/phalcon.so"
extensionを書いてくれているようなので、確認をすると
$ php -i | grep -i phalcon
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/Cellar/php55/5.5.6/lib/php/extensions/debug-non-zts-20121212/phalcon.so' - dlopen(/usr/local/Cellar/php55/5.5.6/lib/php/extensions/debug-non-zts-20121212/phalcon.so, 9): image not found in Unknown on line 0
Warning: PHP Startup: Unable to load dynamic library '/usr/local/Cellar/php55/5.5.6/lib/php/extensions/debug-non-zts-20121212/phalcon.so' - dlopen(/usr/local/Cellar/php55/5.5.6/lib/php/extensions/debug-non-zts-20121212/phalcon.so, 9): image not found in Unknown on line 0
Additional .ini files parsed => /usr/local/etc/php/5.5/conf.d/ext-phalcon.ini,
phalcon
Phalcon Framework => enabled
Phalcon Version => 1.2.4
うん、Unableみたいです。。。
よくよく見るとと、「/usr/local/Cellar/php55/5.5.6/lib/php/extensions/debug-non-zts-20121212/phalcon.so」にアクセスしようとしてるみたいですが、brewでインストールした際に「==> ./configure --prefix=/usr/local/Cellar/php55-phalcon/1.2.4」のログが出ていたので、確認すると
$ ls -al /usr/local/Cellar/php55-phalcon/1.2.4
total 4840
drwxr-xr-x 4 user admin 136 11 15 14:08 ./
drwxr-xr-x 3 user admin 102 11 15 14:08 ../

  • rw-r--r-- 1 user admin 272 11 15 14:08 INSTALL_RECEIPT.json
  • rwxr-xr-x 1 user wheel 2473796 11 15 14:08 phalcon.so*

と言う事なので、このディレクトリにあるようです。
方法としては、/usr/local/etc/php/5.5/conf.d/ext-phalcon.iniのextensionパスを変えてもいいと思いますが、とりあえずコピーします。

$ cp /usr/local/Cellar/php55-phalcon/1.2.4/phalcon.so /usr/local/Cellar/php55/5.5.6/lib/php/extensions/debug-non-zts-20121212/
改めて確認します。
$ php -i | grep -i phalcon
Additional .ini files parsed => /usr/local/etc/php/5.5/conf.d/ext-phalcon.ini,
phalcon
Phalcon Framework => enabled
Phalcon Version => 1.2.4
問題なさそうです。

nginxの設定とphp-fpm.confの設定はhttp://d.hatena.ne.jp/ke-16/20130306/1362536213:過去のエントリをご覧ください。
nginx自体はbrewで最新にしておきます。

$ brew install nginx
==> Downloading http://nginx.org/download/nginx-1.4.3.tar.gz
######################################################################## 100.0%
==> ./configure --prefix=/usr/local/Cellar/nginx/1.4.3 --with-http_ssl_module --with-pcre --with-ipv6 --sbin-path=/usr/local/Cellar/nginx/1.4.3/bin/nginx --with-cc-opt
==> make
==> make install
==> Caveats
Docroot is: /usr/local/var/www

The default port has been set in /usr/local/etc/nginx/nginx.conf to 8080 so that
nginx can run without sudo.

To have launchd start nginx at login:
ln -sfv /usr/local/opt/nginx/*.plist ~/Library/LaunchAgents
Then to load nginx now:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist
Or, if you don't want/need launchctl, you can just run:
nginx
==> Summary
/usr/local/Cellar/nginx/1.4.3: 7 files, 876K, built in 20 seconds

また、Phalconの公式サイトにもnginxの設定ドキュメントがありました。Nginx Installation Notes — Phalcon 1.3.0 documentation

Phalconの動作確認のため、公式サイトからチュートリアルを取得します。

$ cd /var/www
$ git clone https://github.com/phalcon/tutorial.git

publicとappフォルダがあると思いますが、publicフォルダをdocument rootとするみたいなのでnginx.confの設定をそこにします。

公式サイトのようにnginx.confを変更したのですが、下記のようにエラーが出てしまうので諦めて以前から動いている形にしました。
[error] 57954#0: *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "localhost"
そうすると、nginx.confは以下のようになります。
user nginx;
worker_processes 2;

pid /var/run/nginx.pid;

events {
worker_connections 1024;
}

http{
include /usr/local/etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log;

#sendfile on;
keepalive_timeout 0;
server_tokens off;
underscores_in_headers on;


server {
listen 80;
server_name localhost;
charset utf-8;
rewrite_log on;

root /usr/local/var/www/public;
index index.html index.htm index.php;

location / {
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php?_url=/$1 last;
}
}

location ~ ^(.+\.php)(/.*)?$ {
fastcgi_split_path_info ^(.+\.php)(/.*)?$;

set $script_filename $document_root$fastcgi_script_name;

if (!-e $script_filename) {
return 404;
}

fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;

fastcgi_param APPLICATION_ENV development;
fastcgi_param SCRIPT_FILENAME $script_filename;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}

location ~ /\.ht {
deny all;
}
}
}

これで準備が整ったはずなので、実際に動かしてみます。

チュートリアルのソースに中身関しては、参考にさせて頂いたこちらのサイトが良いと思います。
Phalcon PHPを使ってみる。 » 新人Webエンジニアの記録。

php-fpmとnginxを起動します。

$ sudo php-fpm
$ sudo nginx
後はブラウザから http://localhost にて確認するだけです。

後はDeveloper Toolもあって簡単にプロジェクト生成が出来るようです。
Phalcon Developer Tools — Phalcon 1.3.0 documentation

参考サイト
高速なPHPフレームワークPhalconを使ってみた~プロジェクト作成 - k-motoyan888's diary

では使い倒してその噂の速さと実感したいと思います。

Macにbrewでmysql5.5系をインストールする方法

Macbrewコマンドを用いてmysql5.5系をインストールしたかったのですが、どうにもエラーが出てインストールできず
最新の適切な対応方法が見当たらなかったので、書き留めておきます。

2013/10/22現在の内容です。
現在 brew install mysql を行うとMySQL5.6系がインストールされます。
それをMySQL5.5系にしたいので下記のやり方にてインストールしようとします。


user@pc[/usr/local]$ cd /usr/local
user@pc[/usr/local]$ brew versions mysql
5.6.13 git checkout f60c8fb Library/Formula/mysql.rb
5.6.12 git checkout ed829a3 Library/Formula/mysql.rb
5.6.10 git checkout 48f7e86 Library/Formula/mysql.rb
5.5.29 git checkout 336c976 Library/Formula/mysql.rb
5.5.28 git checkout 5825f62 Library/Formula/mysql.rb
5.5.27 git checkout 93aecfa Library/Formula/mysql.rb
5.5.25a git checkout faaa6c1 Library/Formula/mysql.rb
5.5.25 git checkout 5bcd1f3 Library/Formula/mysql.rb
5.5.24 git checkout a977fbd Library/Formula/mysql.rb
5.5.20 git checkout f4009ef Library/Formula/mysql.rb
5.5.19 git checkout c2b8e87 Library/Formula/mysql.rb
5.5.15 git checkout 513c0f8 Library/Formula/mysql.rb
5.5.14 git checkout a840c4a Library/Formula/mysql.rb
5.5.12 git checkout 35b60ca Library/Formula/mysql.rb
5.5.10 git checkout 1f2b24e Library/Formula/mysql.rb
5.1.56 git checkout feae63a Library/Formula/mysql.rb
5.1.55 git checkout 0476235 Library/Formula/mysql.rb
5.1.54 git checkout 7077f84 Library/Formula/mysql.rb
5.1.53 git checkout fbee3a0 Library/Formula/mysql.rb
5.1.52 git checkout 7871a99 Library/Formula/mysql.rb
5.1.51 git checkout 0fc5ce3 Library/Formula/mysql.rb
5.1.49 git checkout 2e7d624 Library/Formula/mysql.rb
5.1.48 git checkout 75def21 Library/Formula/mysql.rb
5.1.47 git checkout 9d73887 Library/Formula/mysql.rb
5.1.46 git checkout ee9ecec Library/Formula/mysql.rb
5.1.45 git checkout 1ca6b6b Library/Formula/mysql.rb
5.1.44 git checkout 052d1f2 Library/Formula/mysql.rb
5.1.43 git checkout c4decd7 Library/Formula/mysql.rb
user@pc[/usr/local]$ git checkout 336c976 Library/Formula/mysql.rb
user@pc[/usr/local]$ brew install mysql
==> Downloading http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.29.tar.gz/from/http://cdn.mysql.com/
curl: (22) The requested URL returned error: 404
Error: Download failed: http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.29.tar.gz/from/http://cdn.mysql.com/
exit 1

そうすると上記のようにエラーが出てインストールできません。


user@pc[/usr/local]$ less Library/Formula/mysql.rb
require 'formula'

class Mysql < Formula
homepage 'http://dev.mysql.com/doc/refman/5.5/en/'
url 'http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.29.tar.gz/from/http://cdn.mysql.com/'
version '5.5.29'
sha1 '40e26b193b6ece86ce97896c0c9c524d479e37be'

mysql.rbを見てると確実に5.5.29をダウンロードしようとしているので、コマンド等の間違いでは無さそうです。

いろいろ調べると、現在はMySQL5.6がstableなので5.5系は、途中でHomebrewの対応が終わっているらしい。
それでMySQL5.5.29(以下のバージョンすべてでしたが)のリンクがデッドリンクになっているためダウンロード出来ないらしい。
と言うことみたいでした。

MySQLのサイトに行くと事実現在の5.5系は5.5.34が最新のようです。)

それで下記のgithubアカウントに辿り着いたので
https://github.com/Homebrew/homebrew-versions
ページ下部を見てみると


>How do I install these formulae?
>
>Just brew tap homebrew/versions and then brew install .
>
>If the formula conflicts with one from mxcl/master or another tap, you can brew install homebrew/versions/.
>
>You can also install via URL:
>
>brew install https://raw.github.com/Homebrew/homebrew-versions/master/.rb
このようにを指定してインストールできるようです。

で、リストを眺めると
>mysql55.rb
があるので、中身を確認すると


class Mysql55 < Formula
homepage 'http://dev.mysql.com/doc/refman/5.5/en/'
url 'http://downloads.mysql.com/archives/mysql-5.5/mysql-5.5.30.tar.gz'
sha1 'd7e31246d29f6ed4a9c4b966d6896bf920b68351'
どうやら出来そうな気がします。


なので説明文にあった一番下のコマンドでインストールを試みると


user@pc[/usr/local]$ brew install https://raw.github.com/Homebrew/homebrew-versions/master/mysql55.rb
######################################################################## 100.0%
==> Downloading http://downloads.mysql.com/archives/mysql-5.5/mysql-5.5.30.tar.gz
######################################################################## 100.0%
==> cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/Cellar/mysql55/5.5.30 -DMYSQL_DATADIR=/usr/local/var/mysql55 -DINSTALL_MANDIR=/usr/local/Cellar/mysql55/5.5.30/share/man -DINSTALL_DOCDIR=/usr/local/Cella
==> make
==> make install
==> /usr/local/Cellar/mysql55/5.5.30/bin/mysql_install_db --verbose --user=Keiichiro --basedir=/usr/local/Cellar/mysql55/5.5.30 --datadir=/usr/local/var/mysql55 --tmpdir=/tmp
==> Caveats
A "/etc/my.cnf" from another install may interfere with a Homebrew-built
server starting up correctly.

To connect:
mysql -uroot

This formula is keg-only: so it was not symlinked into /usr/local.

Conflicts with mysql, mariadb, percona-server, mysql-cluster, etc.

Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you'll need to add to your
build variables:

LDFLAGS: -L/usr/local/opt/mysql55/lib
CPPFLAGS: -I/usr/local/opt/mysql55/include


To have launchd start mysql55 at login:
ln -sfv /usr/local/opt/mysql55/*.plist ~/Library/LaunchAgents
Then to load mysql55 now:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql55.plist
Or, if you don't want/need launchctl, you can just run:
mysql.server start
==> Summary
🍺 /usr/local/Cellar/mysql55/5.5.30: 6405 files, 210M, built in 4.3 minutes

無事インストール出来ました。

MySQLのインストールに限らず、brewコマンドでバージョンを指定してインストールしたい時に、curl: (22) The requested URL returned error: 404
みたいなエラーが出た場合に確認すると解決できるかもです。

ですが、まだ最後に罠がありました。
mysqlコマンドが出てきません。。。
なので、linkをしなければダメだろうと思い


user@pc[~]$ brew unlink mysql

user@pc[~]$ brew link mysql55
Warning: mysql55 is keg-only and must be linked with --force
Note that doing so can interfere with building software.

とまたエラーになります。
なので、支持通り

user@pc[~]$ brew link mysql55 --force
Linking /usr/local/Cellar/mysql55/5.5.30... 133 symlinks created

user@pc[/usr/local]$ mysql.server start
Starting MySQL
SUCCESS!

ということで無事起動確認もできました。