2015年12月27日日曜日

Rubyのバージョンをアップする rbenvを利用してRuby2.2.4からRuby2.3.0へアップデート

  • 公開日:2015年12月27日

記事概要


Ruby2.3.0が2015年12月25日にリリースされました。この記事はRubyのバージョンをアップする方法を記載した記事です

環境


  • Ruby2.2.4 → Ruby2.3.0
  • centos6.5
  • rbenv

現在のrbenvとrubyのバージョンを確認


まずは現状の環境の確認をします。Rubyの現在のバージョンを確認します。

terminal

ruby -v
ruby 2.2.4p230 (2015-12-16 revision 53155) [x86_64-linux]

続けてrbenvの現在のバージョンを確認します。

terminal

rbenv -v
rbenv 0.4.0-215-g90373d7

インストール可能なrubyの一覧を確認します。

terminal

rbenv install --list
  2.2.4
  2.3.0-dev
  2.3.0-preview1
  2.3.0-preview2

まだRuby2.3.0はありませんね。

rbenvのバージョンアップ


Ruby2.3.0を利用できるように、rbenvとruby-buildをupdateします。
まずはrbenvです。

terminal

// pathを確認
which rbenv
~/.rbenv/bin/rbenv

// rbenv配下に移動
cd ~/.rbenv
// pullで最新バージョンを習得
git pull

// バージョンチェック
rbenv -v
rbenv 1.0.0-3-g22f4980

// 反映
rbenv rehash

ruby-buildのバージョンアップ


続いてruby-buildです。

terminal

// rbenvのruby-build配下に移動
cd .rbenv/plugins/ruby-build
// pullで最新バージョンを習得
git pull

Fast-forward
 bin/ruby-build             |    2 +-
 script/brew-publish        |    2 +-
 share/ruby-build/2.3.0     |    2 ++
 share/ruby-build/2.3.0-dev |    2 +-
 share/ruby-build/2.4.0-dev |    2 ++

インストール可能なrubyの一覧を確認します。

terminal

 rbenv install --list

  2.3.0-dev
  2.3.0-preview1
  2.3.0-preview2
  2.3.0
  2.4.0-dev

Ruby2.3.0が追加されていますね。2.4.0-devまで追加されていますが、ご愛嬌。

Ruby2.3.0install


いよいよRuby2.3.0をinstallします。rbenvを使ってinstallします。

terminal

// install
rbenv install 2.3.0

// デフォルトの設定にする
rbenv global 2.3.0

// versionチェック         
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]

上手く導入できました。

まとめ


Rubyは着実に良いバージョンアップをしている言語だと思います。
まだしばらくは、WEBアプリ開発のメイン言語として活躍してくれそうです。

railsへの適用, chefを使ったupdate, 2.3の新機能の使い方も適用次第、説明していきたいと思います。

以上です

Rails4の開発にオススメの本


Rubyの応用力をつけるのにオススメの本


運営サイト(railsで作成しています)


参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年12月26日土曜日

rails4 uninitialized constant Xxxx::Application::CN (NameError)

  • 公開日:2015年12月26日

記事概要


rails4で多言語化対応したときに、発生したエラーの修正方法をまとめた記事です。

環境


  • ruby2.2.3
  • rails4.2.5
  • unicorn
  • nginx1.8

多言語化


多言語化設定をするときに、application.rbに以下のような設定をしました。

config/application.rb

    config.i18n.default_locale = :en
    config.i18n.available_locales = [:en, :ja, :zh-CN]

上記の記載をすると「uninitialized constant Xxxx::Application::CN (NameError)」が発生しました。
調査したところ、原因は中国語(zh-CN)の設定でした。

エラーを修正するには、上記を

config/application.rb

    config.i18n.default_locale = :en
    config.i18n.available_locales = [:en, :ja, "zh-CN"]

のように修正したら動くようになりました。
zh-CNは【:】でなく、【"】で指定しないと動かないようです。

まとめ


railsのアプリは、最小限の実装で多言語化に対応できます。
アプリを作るなら、是非世界を目指したサービスを作成しましょう。
最初は、日本語の他は、英語と中国語だけで十分だと思います。

以上です

Rails4の開発にオススメの本


Rubyの応用力をつけるのにオススメの本


運営サイト(railsで作成しています)


参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年12月24日木曜日

モダンエンジニアの基礎 検索エンジンを理解する 手を動かしてN-gram方式を学ぶ

  • 公開日:2015年12月24日

記事概要


新米エンジニアの学習用に作った資料です。未だに10年以上も前の研修項目をこなしている新入社員が多いこと多いこと。まあ、会社の教育システムが時代に合っていないのが悪いのですけどね。
そんなわけで、今後(2015年以降)WEB(スマホ)エンジニアとして働くなら知っておいて欲しい事柄をまとめてみました。
この記事では検索エンジンで使うN-gram方式をまとめました。

環境

  • elasticsearch2.1.1

N-gram方式とは


文章を文字列の並び順にN文字を見出し語としてインデックスする方法です。
Nは、切り出す文字の単位になります。
日本語や中国語など、言語に依存しない見出し語作成が可能な方式とされています。 検索漏れを少なくする特徴をもっています。

N-gramを用いるケース


例としては、検索漏れを少なくしたい店舗の名称、地域名などはN-gram方式でインデックスすると良いとされています。

N-gramのサンプル


  • ユニグラム = unigram (1文字単位)
  • バイグラム = bigram (2文字単位)
  • トリグラム = trigram (3文字単位)

のどれかを使うのが現実的とされています。
ここでは、bigram (2文字単位)を例にしてみましょう。

例1

東京都の天気は晴れです → 東京/京都/都の/の天/天気/気は/は晴/晴れ/れで/です

2文字で区切っているだけです。
なので、インデックス(索引)は以下の通りになります。

  • 東京
  • 京都
  • 都の
  • の天
  • 天気
  • 気は
  • は晴
  • 晴れ
  • れで
  • です

2文字で区切っていますね。確認にもう一つ例文を確認してみましょう。

例2

天気予報は晴れです → 天気/気予/予報/報は/は晴/晴れ/れで/です

  • 天気
  • 気予
  • 予報
  • 報は
  • は晴
  • 晴れ
  • れで
  • です

理解できましたね。それでは実際に検索エンジンのelasticsearchを使ってみましょう。

elasticsearchのインストール


では、実際にelasticsearchとrubyを利用して試して、理解を深めていきましょう。
環境はdockerやvagrantを使って用意することをお勧めします。
以下は、vagrantのcentos6.5を使ったinstall方法です。

terminal

// javaのinstall
sudo yum -y install java-1.7.0-openjdk

java -version
java version "1.7.0_91"
OpenJDK Runtime Environment (rhel-2.6.2.2.el6_7-x86_64 u91-b00)
OpenJDK 64-Bit Server VM (build 24.91-b01, mixed mode)

// rpm版を DLしてinstall
sudo rpm -ivh https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/rpm/elasticsearch/2.1.1/elasticsearch-2.1.1.rpm

### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using chkconfig
 sudo chkconfig --add elasticsearch
### You can start elasticsearch service by executing
 sudo service elasticsearch start
 
// chkconfigに追加
sudo chkconfig --add elasticsearch
// 確認
sudo chkconfig --list elasticsearch
elasticsearch   0:off   1:off   2:on    3:on    4:on    5:on    6:off

// 起動
sudo service elasticsearch start
Starting elasticsearch:                                    [  OK  ]

動作を確認します。

terminal

curl http://localhost:9200
{
  "name" : "Orb",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "2.1.1",
    "build_hash" : "40e2c53a6b6c2972b3d13846e450e66f4375bd71",
    "build_timestamp" : "2015-12-15T13:05:55Z",
    "build_snapshot" : false,
    "lucene_version" : "5.3.1"
  },
  "tagline" : "You Know, for Search"
}

以上でinstallは完了です。

N-gramの設定


elasticsearchでngramを使うには、Analyzersのトークナイザーにngramを設定します。

terminal

curl -XPUT 'http://localhost:9200/sample' -d '
    {
        "settings" : {
            "analysis" : {
                "analyzer" : {
                    "default" : {
                        "tokenizer" : "my_ngram_tokenizer"
                    }
                },
                "tokenizer" : {
                    "my_ngram_tokenizer" : {
                        "type" : "nGram",
                        "min_gram" : "2",
                        "max_gram" : "2",
                        "token_chars": [ "letter", "digit" ]
                    }
                }
            }
        }
    }'

サンプルなので、defaultのtokenizerをmy_ngram_tokenizerにしています。
type:nGramがngramの設定になります。
{"acknowledged":true}というjsonが返却されれば成功です。

N-gram解析を実行する


例文「東京都の天気は晴れです」をngramで解析します。

terminal

curl 'http://localhost:9200/sample/_analyze?pretty' -d '東京都の天気は晴れです'
{
  "tokens" : [ {
    "token" : "東京",
    "start_offset" : 0,
    "end_offset" : 2,
    "type" : "word",
    "position" : 0
  }, {
    "token" : "京都",
    "start_offset" : 1,
    "end_offset" : 3,
    "type" : "word",
    "position" : 1
  }, {
    "token" : "都の",
    "start_offset" : 2,
    "end_offset" : 4,
    "type" : "word",
    "position" : 2
  }, {
    "token" : "の天",
    "start_offset" : 3,
    "end_offset" : 5,
    "type" : "word",
    "position" : 3
  }, {
    "token" : "天気",
    "start_offset" : 4,
    "end_offset" : 6,
    "type" : "word",
    "position" : 4
  }, {
    "token" : "気は",
    "start_offset" : 5,
    "end_offset" : 7,
    "type" : "word",
    "position" : 5
  }, {
    "token" : "は晴",
    "start_offset" : 6,
    "end_offset" : 8,
    "type" : "word",
    "position" : 6
  }, {
    "token" : "晴れ",
    "start_offset" : 7,
    "end_offset" : 9,
    "type" : "word",
    "position" : 7
  }, {
    "token" : "れで",
    "start_offset" : 8,
    "end_offset" : 10,
    "type" : "word",
    "position" : 8
  }, {
    "token" : "です",
    "start_offset" : 9,
    "end_offset" : 11,
    "type" : "word",
    "position" : 9
  } ]
}

おお。2文字でうまく解析されていますね。もう一つの例文も試してみましょう。

terminal

curl 'http://localhost:9200/sample/_analyze?pretty' -d '天気予報は晴れです'
{
  "tokens" : [ {
    "token" : "天気",
    "start_offset" : 0,
    "end_offset" : 2,
    "type" : "word",
    "position" : 0
  }, {
    "token" : "気予",
    "start_offset" : 1,
    "end_offset" : 3,
    "type" : "word",
    "position" : 1
  }, {
    "token" : "予報",
    "start_offset" : 2,
    "end_offset" : 4,
    "type" : "word",
    "position" : 2
  }, {
    "token" : "報は",
    "start_offset" : 3,
    "end_offset" : 5,
    "type" : "word",
    "position" : 3
  }, {
    "token" : "は晴",
    "start_offset" : 4,
    "end_offset" : 6,
    "type" : "word",
    "position" : 4
  }, {
    "token" : "晴れ",
    "start_offset" : 5,
    "end_offset" : 7,
    "type" : "word",
    "position" : 5
  }, {
    "token" : "れで",
    "start_offset" : 6,
    "end_offset" : 8,
    "type" : "word",
    "position" : 6
  }, {
    "token" : "です",
    "start_offset" : 7,
    "end_offset" : 9,
    "type" : "word",
    "position" : 7
  } ]
}

きちんとN-gram(2-gram)で解析されていますね。

まとめ


最近のwebサイトには、当たり前のように検索エンジンが使われるようになっています。
一度理解してしまえば、DBのlike検索なんかよりはるかに優れた検索機能を持たせることができるので、是非習得してください。
elasticsearchもsolrも無料で利用可能です。

以上。

elasticsearchを理解するのにオススメの本


オススメ開発マシン


参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年12月17日木曜日

【Rails4.2.5】多言語化対応を行う

  • 公開日:2015年12月17日

記事概要


rails4で多言語化に対応したので、そのやり方を記載した記事です。

環境


  • ruby2.2.3
  • rails4.2.5
  • unicorn
  • nginx1.8

Gemfile


railsの多言語化対応には、Rails Internationalization (I18n)を利用します。(Rails Internationalization (I18n) API )
まずはgemを導入します。

Gemfile

# Use rails-i18n for localization
gem 'rails-i18n', '~> 4.0.0'

記載して保存したらgemをinstallします。

terminal

rbenv exec bundle install

installに成功したのを確認したら先に進みます。

利用言語の設定


railsアプリで利用する言語を設定します。
設定はapplication.rbに記載します。

config/application.rb

    config.i18n.default_locale = :en
    config.i18n.available_locales = [:en, :ja, "zh-CN"]

上記の設定では、config.i18n.default_localeでデフォルトの言語を「英語」にしています。
また、「英語」「日本語」「中国語(簡体字)」を config.i18n.available_localesで利用可能な言語に設定しています。

テストの実行


これまでの設定が正しいことを確認するために、テストを流します(テストコードを記載していないプロジェクトの場合は、この箇所は無視してください。)

terminal

rbenv exec bundle exec rspec

Finished in 0.13951 seconds (files took 2.76 seconds to load)

成功したら、次はrouteを修正します。

Routeの設定


言語を判別するには、

  • 言語をサブドメインに記述する(http://en.www.test.com)
  • パラメーターに言語情報を持つ(http://www.test.com?lang=en)
  • URLに記述する(http://www.test.com/en/)

のパターンがありますが、ここでは「URLに記述」のパターンを利用します。
routes.rbを開き、scopeで既存のurl routeを囲みます。

config/routes.rb

scope "(:locale)", locale: /ja|en|zh-CN/ do
  get 'home', to: 'home#index'
  resources :test
end

続いて、パラメータからlocaleを判定することが出来るようにapplication_controller.rbに処理を記載します。

app/controllers/application_controller.rb

  before_filter :set_locale
  
  # 全リンクにlocale情報をセットする
  def default_url_options(options={})
    { :locale => I18n.locale }
  end

  # リンクの多言語化に対応する
  def set_locale
    I18n.locale = params[:locale] || I18n.default_locale
  end

続いては、言語ファイルを用意しましょう。

locales


言語のファイルはlocalesファイルの下に配置します。

config/locales

en.yml
zh-CN.yml
ja.yml

config/locales/en.yml

en:
  hello: "Hello world"

config/locales/ja.yml

ja:
  hello: "こんにちわ"

config/locales/zh-CN.yml

zh-CN:
  hello: "你好"

これで準備は完了です。

View


tメソッドを利用します。引数はhashのkeyを指定します。

app/views/xxxxx.erb

<%= t("hello") %>

ブラウザで確認します。

デフォルト(英語): http://192.168.33.40:3000/home

日本: http://192.168.33.40:3000/ja/home

中国語: http://192.168.33.40:3000/zh-CN/home

見事に反映されていますね。

まとめ


railsのアプリは、最小限の実装で多言語化に対応できます。
アプリを作るなら、是非世界を目指したサービスを作成しましょう。
最初は、日本語の他は、英語と中国語だけで十分だと思います。

以上

Rails4の開発にオススメの本


オススメ開発マシン


運営サイト(railsで作成しています)


参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年12月10日木曜日

React Warning: Each child in an array or iterator should have a unique "key" prop.

  • 公開日:2015年12月10日

記事概要


Reactで、『Each child in an array or iterator should have a unique "key" prop.』の警告エラーが発生した場合の対策方法を記載した記事です。

環境


  • React 0.14.3
  • ruby2.2.3
  • rails4.2.5
  • nginx1.8.0
  • chromeバージョン 47.0.2526.73 m

エラーの発生箇所


reactのチュートリアルを実装している時に、CommentListというコンポーネントの中で、Commentという子コンポーネントをループで回して生成しているところで発生しました。
warningなので、結果の表示に問題はありません。

/nginx/index.html

var CommentList = React.createClass({
  render: function() {
    var commentNodes = this.props.data.map(function(comment) {
      return (
        <Comment author={comment.author}>
            {comment.text}
        </Comment>
      );
    });
    return (
      <div className="commentList">
        {commentNodes}
      </div>
    );
  }
});

『should have a unique "key" prop.』なので、keyというプロパティを持つ必要があるようです。
なので、以下のように変更します。

/nginx/index.html

var CommentList = React.createClass({
  render: function() {
    var commentNodes = this.props.data.map(function(comment) {
      return (
        <Comment key={comment.author} author={comment.author}>
            {comment.text}
        </Comment>
      );
    });
    return (
      <div className="commentList">
        {commentNodes}
      </div>
    );
  }
});

key={comment.author}を追加しました。
これでブラウザを更新すると、『Each child in an array or iterator should have a unique "key" prop.』の警告エラーが発生しないことが確認できました。

まとめ


Reactはよくできたフレームワークですが、個人的に、今のところ流行る気がしません。
componentの考え方は、素晴らしい考え方です。しかし、周りを見ると、既存の開発の考え方に慣れた技術者には理解しにくいようです。
Web Componentsも同じですね。一向に流行る気配がありません。
scala等の関数言語も結局流行りませんでした。component思考は同じようにマイナーな道を進む気がします。
とはいえ、便利なので、少しずつマイアプリにも取り入れていこうと思います。

以上です。

Reactの本


javascriptの名書


参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年12月5日土曜日

rails4 rails4.2.4から4.2.5にバージョンアップする

  • 公開日:2015年12月05日

記事概要


rails4.2.4から4.2.5にバージョンアップしたときの手順を記載した記事です。

環境

  • rails4.2.4→rails4.2.5
  • ruby2.2.3
  • Foundation 6

rails4.2.5のリリース


rails4.2.5が2015年12月にリリースされました。
久しぶりのバージョンアップです。
直近にruby2.3のリリースとrails5のリリースも控えているので、サクッとバージョンアップしておきましょう。

Gemfileの変更


Gemfileを以下のように書き換えます。

{rail-app-folder}/Gemfile

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.2.4'

↓

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.2.5'

rails update


bundle updateを実行します。bundle updateを実行することで、Gemfile.lockを更新できます。

terminal

// Gemfile.lock を更新いてgemを更新する
rbenv exec bundle update

// gemを更新(確認用。実行しなくてもOK)
rbenv exec bundle install

// railsのバージョンを確認
rbenv exec bundle exec rails --version
Rails 4.2.5

テストを実行


テストを実行してデグレが起きていないことを確認します。

terminal

// テストを実行
rbenv exec bundle exec rspec

rails4.2.4で動いていれば、4.2.5でも問題は発生しないと思います。あとは、ブラウザで動作確認もしておきましょう。

まとめ


ruby2.3のリリースとrails5のリリースが近づいています。環境はなるべく意識して最新の状態を保ちましょう。
でないと、移行作業に苦労してしまいます。
いつもいっているように、あまり技術的負債を溜めないようにしましょう。

以上です。

Rails4の開発にオススメの本


運営サイト(railsで作成しています)


関連記事

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

rails4 Foundation 6を使用する

  • 公開日:2015年12月05日

記事概要


rails4でFoundation 6を利用する場合の説明記事です。

環境

  • rails4.2.4
  • ruby2.2.3
  • Foundation 6

Foundation 6のインストール


Foundation 6の公式サイトには以下のgemを使った導入方法の説明が記載されています。

{rail-app-folder}/Gemfile

gem 'foundation-rails'

しかし、この方法はお勧めしません。
理由は、Foundation6が不要になったり、Foundation6のアップデートをする場合に、gemでインストールしてしまうと後の修正が大変になってしまうからです。
なので、この記事では、通常のダウンロードをしてファイルを配置する形を説明します。

Foundation 6に必要なファイルを配置する


公式サイトからダウンロードしてきたFoundation 6のファイルをrailsアプリのディレクトリに配置します。
rails4では、cssやjavascriptのファイルをAsset Pipelineの機能を利用して使うのが一般的です。この機能を利用する場合は、app/assetsディレクトリにcssやjsを配置する必要があります。

今回のアプリでもAsset Pipelineは利用するので、

{rail-app-folder}/app/assets/stylesheets

foundation.css

{rail-app-folder}/app/assets/javascripts

foundation.js

のようにファイルを配置します。

app/views/layout/application.html.erbへの記載


Foundation6のcssとjsファイルは共通で利用するので、application.html.erbに

app/views/layout/application.html.erb

  <%= stylesheet_link_tag "application", media: "all" %>
  <%= javascript_include_tag "application" %>

のように記述します。

アプリを起動


WEBrickを起動して確認しましょう。

terminal

rbenv exec bundle exec rails s -b 0.0.0.0

うまくアプリが立ち上がったら、ブラウザからソースコードを確認して、

html

<link rel="stylesheet" media="all" href="/assets/foundation.self-9b3ba3fcd76e7ef0282715e4069bac5699978f1970d3ac85f98ddf645c955531.css?body=1" />
<link rel="stylesheet" media="all" href="/assets/application.self-e80e8f2318043e8af94dddc2adad5a4f09739a8ebb323b3ab31cd71d45fd9113.css?body=1" />

のようにhtmlが生成されていることを確認しましょう。

まとめ


Foundation6はFoundation5と比較すると、かなりの変更が行われています。
間違ってbundle updateでcssやjsを更新してしまうと、画面デザインがめちゃくちゃになってしまうので気を付けましょう。
cssやjsは手動で配置することをお勧めします。

また、本番環境でAsset Pipelineが失敗しないように、必ず本番用のデプロイ手順(自動化)も用意しましょう。個人的には、railsのdeployにはcapistranoを使うのが良いと思います。

以上です。

Rails4の開発にオススメの本


運営サイト(railsで作成しています)


参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年12月1日火曜日

rails4 ActiveModel::ForbiddenAttributesErrorの対応

  • 公開日:2015年12月01日

記事概要


ActiveModel::ForbiddenAttributesErrorが発生した場合の対応方法を説明した記事です。

環境


  • ruby2.2.3
  • ruby4.2.4

ActiveModel::ForbiddenAttributesErrorとは


Mass-assignment (モデルの複数属性への一括代入)を防ぐために発生するエラーです。
rails4では、 Strong Parameters を用いて Mass-assignment に対応します。

ActiveModel::ForbiddenAttributesErrorが発生するコード


以下にサンプルのコントローラーを記載します。createメソッドは、submitボタンを押されると呼び出され、User情報を作成します。

app/controllers/user_controller.rb

class UserController < ApplicationController

  def create
    @user = User.new(params)
    # salt作成
    @user.salt
      if @user.save
      redirect_to action: 'show', id: @user.id
    else
      flash[:notice] = 'Successfully checked in'
      redirect_to controller: 'home', action: 'index'
    end
  end

end

上記の処理でcreateメソッドが呼び出されると、ActiveModel::ForbiddenAttributesErrorが発生します。
このエラーを防ぐために、下記のように修正します。

ActiveModel::ForbiddenAttributesErrorが発生しないように修正した処理


app/controllers/user_controller.rb

class UsesController < ApplicationController

  def create
    @user = User.new(user_params)
    # salt作成
    @user.salt
      if @user.save
      redirect_to action: 'show', id: @user.id
    else
      flash[:notice] = 'Successfully checked in'
      redirect_to controller: 'home', action: 'index'
    end
  end
  
    private

    # Never trust parameters from the scary internet, only allow the white list through.
    def user_params
      params.require(:user).permit(:name, :password)
    end

end

「params.require(:user).permit(:name, :password)」となっています。
このコードは「params が :user というキーを持ち、params[:user] は :name 及び :password というキーを持つハッシュであること」を検証しています。

上記の実装を追加することで、エラーなく実行することが可能になります。

まとめ


ActiveModel::ForbiddenAttributesErrorは簡単に修正できます。
しかし、rails3からアップデートする場合は、コード量次第ではそれなりの時間を取られるかもしれません。
面倒ですが、技術的負債はこまめに返してきましょう。

以上です。

Rails4の開発にオススメの本


Rubyの応用力をつけるのにオススメの本


運営サイト(railsで作成しています)


参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年11月29日日曜日

rails4 modelのvalidate:maximumをrspecでテストする

  • 公開日:2015年11月29日

記事概要


rails4でmodelのvalidateをrspecで記述する方法の説明記事です。
すぐ忘れてしまうので、まとめました。参考にする際は、rspecのバージョンに注意してください。この記事では3.X系を利用しています。

環境


  • ruby2.2.3
  • ruby4.2.4
  • rspec-rails 3.0.2

モデルの作成


ここではサンプルとしてNoteというモデルを作成します。

このモデルにvalidateを記載します。

models/note.rb

# encoding: utf-8
class Note < ActiveRecord::Base

  validates :title, length: { maximum: 64 }

end

上記のモデルでは、titleという属性をもっています。validateとして、

  • 最大文字数は64文字

を設定しています。
このvalidateをテストするrspecを実装します。

rspecモデルの作成


spec/models/note_spec.rbにテストコードを実装します。
境界値のエラー文字数65字の文字列を設定します。

spec/models/note_spec.rb

  it "fails validation with 65 word number of title" do
    note = Note.new
    ## 65文字を設定
    note.title = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
    
    expect(note).not_to be_valid
  end

失敗を期待するので、not_to be_validを指定しています。上記のrspecを実行します。

terminal

benv exec bundle exec rspec spec/models/note_spec.rb

1 example, 0 failures

うまくいきました。次は境界値の正常文字数64字の文字列を設定します。

spec/models/note_spec.rb

  it "successes validation with 64 word number of title." do
    note = Note.new
    ## 64文字を設定
    note.title = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
    
    expect(note).to be_valid
  end

失敗を期待するので、be_validを指定しています。実行します。

terminal

benv exec bundle exec rspec spec/models/note_spec.rb

2 example, 0 failures

うまくいきました。最後に値がnilの場合を設定します。

spec/models/note_spec.rb

  it "successes validation with nil of title" do
    note = Note.new
    expect(note).to be_valid
  end

実行します。

terminal

benv exec bundle exec rspec spec/models/note_spec.rb

3 example, 0 failures

うまくいきました。

まとめ


modelのvalidate処理は、テストコードを書く必要があるかどうかは微妙だと個人的には思っています。

とはいえ、書いておいても損はないと思うので、プロジェクトの締め切りに応じて書く、書かないをコントロールするとよいのではないでしょうか。

以上です。

Rails4の開発にオススメの本


運営サイト(railsで作成しています)


参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年11月28日土曜日

docker-compose Illegal instruction: 4

  • 公開日:2015年11月28日

記事概要


以前利用していた古いMacを使ってdocker-composeを利用しようとしたら、Illegal instruction: 4というエラーが発生したので、動作するように修正しました。その対応記事です。

環境


  • Docker Toolbox
  • docker version 1.8.2
  • 2010年より以前に発売されたmac(OSは無関係)

Dockerのインストール


Dockerのインストールは、Docker Toolboxを利用しました。

docker-composeコマンドでエラー発生


docker-composeコマンドを実行します。


docker-compose version
Illegal instruction: 4

しかし、上記のようにIllegal instruction: 4が発生し、docker-composeを実行できません。
この現象は2010年以前に購入した古いmacだと発生するようです。

この現象が発生した場合は、pythonのpipを利用してdocker-composeをinstallすることで解消することができます。


// pythonのインストール
brew install python

// pipでdocker-composeをinstall
pip install docker-compose

installが完了したら、docker-composeコマンドで確認してみましょう。


docker-compose version
docker-compose version: 1.5.1
docker-py version: 1.5.0
CPython version: 2.7.8
OpenSSL version: OpenSSL 1.0.1j 15 Oct 2014

動作しました。これでdocker-composeが利用できます。

まとめ


古いマシンでdockerを利用するのはパワー的にも厳しいので、できれば新しいマシンを買い換えることをオススメします。
10万円程度のマシンで十分です。開発者なら5年に一度は買い換えるくらいで丁度いいのではないでしょうか。

以上です。

dockerを理解するのにオススメの本


オススメ開発マシン


運営サイト


参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年11月27日金曜日

2015年も終わりなので、2015年の感想と今後について考えをまとめてみた。

記事の概要


2015年を振り返る雑談記事です。

はじめに


2015年もあと1か月で終わりです。
今年を振り返ると、よくブログを更新したなという一年でした。

1月-11月までのブログ更新数は、

170

で過去最高の更新数でした。

それだけ、多くの技術に触れたということであると同時に、時間的な余裕もあったということで、よい一年だったと言ってよいと思います。
また、去年よりも多くの人がこのサイトに訪問してくれたみたいで、ありがたい限りです。
今後もこのサイトをよろしくお願いします。

2015年の技術から未来を考える


さて、最近私が開発していて思うことは、数学や物理の知識がやたらに必要になってきているということです。
もともとゲーム開発では数学的な知識は必要でしたが、スマホネイティブアプリ開発で様々なことが可能になったことで、幅広い数学や物理の力が必要になってきています。

スマホネイティブアプリ開発だけでなく、

  • 統計や分析
  • 機械学習

でも数学の力が必要になってきています。

私が個人的にタッチしているドローンの改造も数学と物理の基礎力が必要です。

そんなわけで、私は理系出身のため数学や物理に苦手意識はないのですが、もっと深く理解しようと思い、大学数学と大学物理の学習を再開しました。

5年前の2010年くらいは、英語、会計、ITなんて言われた時代がありましたが、5年後の2020年くらいには

英語、プログラム

の時代になり、さらに10年後の2025年くらいには

プログラム、数学、英語

の時代になっているのではないかとぼんやり思っています。

2016年はどうなるのか


開発技術について


dockerが本番のサービスでも使われはじめるのではないでしょうか。
私も来年は開発環境の利用だけでなく、本番運用を考えています。

サーバーは変わらずRails5。あとはgoですね。
スマホでのAPI呼び出しなら、goを使うのもよい選択かもしれません。

jsはreactよりbackbornのほうがよいと思います。
私がreactが必要になるようなアプリを作成していないだけかもしれませんが。

サービスについて


2015年、私は山のサービス(マウンテンチャンネル)を作りましたが、2016年もまた別のアプリを作ろうと考えています。
アイディアと設計はだいたい固まっていて、春頃に公開予定です。楽しみにしていてください。もちろん、マウンテンチャンネルも継続します。

あとはそろそろシェアサービス系が日本でもはやりだすかもしれませんね。個人的に期待しているサービスは以下です。

  • Uber
  • Airbnb
  • BlaBlaCar
  • Girl Meets Dress

これらが全滅なら、シェア文化は日本には根付かないかもしれませんね。

IT業界について


まだまだ人材不足が続くでしょう。労働条件の改善と、給料を上げる以外に人材を確保する方法はないと思います。
飛躍しそうなベンチャーもなさそうです。というより、もう大企業の時代ではないのでしょう。

おわりに


みなさんは2016年をどのように予想しているでしょうか。
私はあまり変化のない一年になるのではないかと予想しています。
本格的に世界が変わりはじめるのは2018年くらいになるのかなと思っています。
なので、がっちりと基礎固めをしていきたいと思います。

以上

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年11月23日月曜日

機械学習の基礎知識まとめ アルゴリズム 探索木 幅優先探索(breadth first search)

はじめに


2015年も後半になって、ようやく重い腰をあげて機械学習の本を読み始めました。

しかし、色々と基礎知識が欠落していて内容を理解するのに苦労しています。
というわけで、ブログに学習したことを記載していきたいと思います。
プログラマー目線で記載しているので、プログラマーでこれから機械学習を勉強しようと思っている人の役に立てばいいなと思って記事を書きました。
数年後には、エンジニアにある程度求められる能力になる可能性が高いので、何もわからない人はちょっとずつ準備しといたほうがよいと思います。
今回はアルゴリズム「幅優先探索(breadth first search)」の記事です。

環境


  • ruby

難易度


  • 簡単

利用シーン


  • 迷路

幅優先探索(breadth first search)とは


木やグラフを探索するためのアルゴリズムです。
根ノードから探索し、隣接した全てのノードを探索していきます。

キューを利用したアルゴリズムです。

サンプル


木の探索の実装

wikipediaに掲載されているツリー状の探索を、rubyでプログラム化してみましょう。

image from wikipedia

木のnode(図の○の部分)の番号は探索順になります。

プログラムの作成


上記の式をプログラムに落とし込みます。

最初にnode(図の○の部分)をクラス化します。


# encoding: utf-8
class Node

  def initialize(name)
    @name = name
    @visited = false
    @childrenNode = []
  end
  
  # 子ノードの設定
  def setChildren(children)
    @childrenNode = children
  end

  def setVisited(status)
    @visited = status
  end
  
  def visited
    return @visited
  end
  
  def name
    return @name
  end
  
  def childrenNode
    return @childrenNode
  end

end

次に図の木の構成をプログラム化します。


# ノードの作成
node1 = Node.new('1')
node2 = Node.new('2')
node3 = Node.new('3')
node4 = Node.new('4')
node5 = Node.new('5')
node6 = Node.new('6')
node7 = Node.new('7')
node8 = Node.new('8')
node9 = Node.new('9')
node10 = Node.new('10')
node11 = Node.new('11')
node12 = Node.new('12')


# ノードの子ノードの設定
node1.setChildren([node2, node3, node4])
node2.setChildren([node5, node6])
node4.setChildren([node7, node8])
node5.setChildren([node9, node10])
node7.setChildren([node11, node12])

最後に幅優先探索を実装します。


# encoding: utf-8
class BreadthFirstSearch

  def initialize
    @queue = []
  end
  
  def search(node)
    # 訪問済みにチェック
    node.setVisited(true)
    # キューに追加
    @queue.push(node)
    # キューが空白でない
    while !@queue.empty? do
      # キューから取り出す
      queue_node = @queue.shift
      # キューの名称
      puts queue_node.name
      # 子供を取り出す
      childrenNode = queue_node.childrenNode
      unless childrenNode.empty?
        childrenNode.each { |tempNode|
          # 未訪問
          unless tempNode.visited
            # 訪問済みにチェック
            tempNode.setVisited(true)
            # キューに追加
            @queue.push(tempNode)
          end
        }
      end
    end
    
  end

end

プログラムの実行と結果


上記のプログラムを実行します。


breadthFirstSearch = BreadthFirstSearch.new
breadthFirstSearch.search(node1)

結果です。


1
2
3
4
5
6
7
8
9
10
11
12

図の探索順通りに出力されていますね。

まとめ


幅優先探索は有名なアルゴリズムなので、機械学習の学習をしていなくても、プログラマーであれば押さえておくべきです。実装もシンプルで簡単です。
また、プログラムコンテスト等でもよく出題されるので、過去問などをあさって、どんなケースで利用されているのかを知っておくと良いでしょう。

以上

参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年11月19日木曜日

機械学習の基礎知識まとめ アルゴリズム 探索木 深さ優先探索(depth-first search)

はじめに


2015年も後半になって、ようやく重い腰をあげて機械学習の本を読み始めました。

しかし、色々と基礎知識が不足していて、内容を理解するのに苦労しています。
というわけで、ブログに学習したことを記載していきたいと思います。
プログラマー目線で記載しているので、プログラマーでこれから機械学習を勉強しようと思っている人の役に立てばいいなと思って記事を書きました。
数年後には、エンジニアにある程度求められる能力になる可能性が高いので、何もわからない人はそろそろ準備しといたほうがよいと思います。
今回はアルゴリズム「深さ優先探索(depth-first search)」の記事です。

環境


  • ruby

難易度


  • とても簡単

利用シーン


  • 迷路

深さ優先探索(depth-first search)とは


木やグラフを探索するためのアルゴリズムです。
目的のノードが見つかる、もしくは、子のないノードに行き着くまで深く伸びていく探索です。

スタックを利用したアルゴリズムです。

サンプル


木の探索の実装

wikipediaに掲載されているツリー状の探索を、rubyでプログラム化してみましょう。

image from wikipedia

木のnode(図の○の部分)の番号は探索順になります。

プログラムの作成


上記の式をプログラムに落とし込みます。

最初にnode(図の○の部分)をクラス化します。


# encoding: utf-8
class Node

  def initialize(name)
    @name = name
    @visited = false
    @childrenNode = []
  end
  
  # 子ノードの設定
  def setChildren(children)
    @childrenNode = children
  end

  def setVisited(status)
    @visited = status
  end
  
  def visited
    return @visited
  end
  
  def name
    return @name
  end
  
  def childrenNode
    return @childrenNode
  end

end

次に図の木の構成をプログラム化します。


# ノードの作成
node1 = Node.new('1')
node2 = Node.new('2')
node3 = Node.new('3')
node4 = Node.new('4')
node5 = Node.new('5')
node6 = Node.new('6')
node7 = Node.new('7')
node8 = Node.new('8')
node9 = Node.new('9')
node10 = Node.new('10')
node11 = Node.new('11')
node12 = Node.new('12')

# ノードの子ノードの設定
node1.setChildren([node2, node7, node8])
node2.setChildren([node3, node6])
node3.setChildren([node4, node5])
node8.setChildren([node9, node12])
node9.setChildren([node10, node11])

最後に深さ優先探索を実装します。


# encoding: utf-8
class DepthFirstSearch
  
  def search(node) 
    # 訪問したノード名を出力
    puts node.name
    # 訪問済みにチェック
    node.setVisited(true)
    # 子ノードを取得
    childrenNodes = node.childrenNode
    unless childrenNodes.empty?
      childrenNodes.each { |tempNode|
        # 未訪問
        unless tempNode.visited
          search(tempNode)
        end
      }
    end
    
  end

end

プログラムの実行と結果


上記のプログラムを実行します。


depthFirstSearch = DepthFirstSearch.new
depthFirstSearch.search(node1)

結果です。


1
2
3
4
5
6
7
8
9
10
11
12

図の探索順通りに出力されていますね。

まとめ


深さ優先探索は有名なアルゴリズムなので、機械学習の学習をしていなくても、プログラマーであれば押さえておくべきです。実装もシンプルで簡単です。
また、プログラムコンテスト等でもよく出題されるので、過去問などをあさって、どんなケースで利用されているのかを知っておくと良いでしょう。

以上

まとめ


この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年10月25日日曜日

それでもグローバル化は止まらない『英語化は愚民化 日本の国力が地に落ちる』感想

はじめに


『英語化は愚民化 日本の国力が地に落ちる』という本が話題になっていたので読みました。

この本は、日本で広まってきている英語公用化に警鐘を鳴らした本です。
筆者は日本に英語公用化は必要ないという意見を、説得ある材料を集めて説明していて、非常に納得のできる内容でした。
現在の英語重視の国や企業の方針に疑問を抱いている方は、手にとって読んでみてください。

しかし、この本に記述されている内容は確かに正論なのですが、実際にはグローバル化は止まらないし止められません。
豊かになろうと努力する人々や国々を止めることはできないし、インターネットの発達によって英語力の有無で教育の質まで変化してしまうのが厳しいけれど現実の姿です。そして、これからますます顕在化してくるのも確実です。MOOCs等が一向に定着しないのも、英語力の低さが一因にあると思います。

では、ここまで国が躍起になって英語力の向上を図っているのに、日本人の英語力が一向に伸びない理由はどうしてなのでしょうか。
いい機会なので、少し考えてみたいと思います。

英語学習者の分類


これまで英語を学習してきて、周りで英語の学習をしている人を見ると、以下のようにざっくりと分類できます。

  • 英語を話せるとかっこいいから
  • 英語(語学)が好きだから
  • 仕事で必要だから
  • これからの時代に英語は必須だから

個人的な感覚として、八割くらいの人が

  • 英語を話せるとかっこいいから
  • これからの時代に英語は必須だから

という理由で英語を勉強しているように思います。
こんな理由で英語の学習を続けられる人は、ごく一部の変わり者だと思います。

つまり

日本人にとって英語は必要ない

から日本人の英語力は伸びないのです。
実際に使う機会がなければ、英語の学習なんて苦行を進んでするわけありませんよね。

英語学習はコストが高すぎる


正直、私も英語はあまり好きではありません。
もちろん、私は仕事柄、英語の情報に触れずに仕事をしろといわれても絶対に無理なので、日々英語の学習はするようにしています。

しかし、それでも思うのは、

日本人にとって英語学習はコストが高すぎる

ということです。
学習すればするほど、より強く思います。

言語としての構成があまりに違いすぎます。
日本人の英語力は低すぎると世界中から指摘されていますが、どれだけ責められても罵られても

今後も普通の日本人の英語力は伸びない

と思います。

英語力が伸びるのは、

  • 英語(学習)が好きな人
  • 仕事で必要。かつ、英語の学習コストを払ってでもその仕事をしたい(する)人

に限られてくるでしょう。
それが自然だし、当たり前です。

英語力の格差は開く


本書でも記述されているように、近年、国をあげての英語力向上の取り組みが目立ちます。
しかし、それでも大多数の日本人の英語力は伸びないと思います。
むしろ低下するとさえ思います。

というのは、日本人にとって英語はますます必要ないツールになると思うからです。
なぜなら、今後の日本では、社会の階層化が進むと予想されます。
そうすると、英語が不要な人はずっと英語が不要な環境で生活し、英語が必要な人はずっと英語が必要な環境で生活していくことになります。

自分にとって必要ないものに時間を費やすほど、今の世の中は暇ではありません。
ほとんどの人は、英語が不要な環境で生活するはずなので、英語力は平均すると落ちるでしょう。

本書で筆者は「言語はツールではない」といっていますが、ほとんどの人にとって言語はツールです。
それが事実です。
日本語であれ、英語であれ、なにかしらのメリットがあるから言語を身に付けるのです。

日本を愛しているから日本語を身につけたのではありません。日本を愛していても、中国で生まれたら中国語が身につくのが当たり前です。

まとめ


日本人に英語は必要ないのに、英語化するという国策は愚策の極みです。
とはいえ日本だけグローバル化に抵抗しても無駄です。世界の本流なので、乗っかっていくしか道はありません。

なので、我々にできることは、しっかりと日本語を守りつつ、そして英語も学習するということです。
確かに英語学習のコストは高いです。しかし、英語化やグローバル化は嫌だけど、日本は豊かなままでありたいという我侭は通用しません。

我々一人ひとりが高い英語力をもち、日本語の中にそのノウハウを共有することが、日本がグローバル化に対応する道なのだと思います。


他の読書に関する記事

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年10月16日金曜日

Android開発 Floating action buttonを使ってみた

  • 公開日:2015年10月16日

記事概要


androidの開発でFloating action buttonを実装しました。
この記事では、Floating action buttonの実装方法と使い方を記載しています。

環境


  • OS X Yosemite
  • Android Studio 1.4.0
  • android sdk 23(Android 6.0 Marshmallow(マシュマロ))

Floating action buttonとは


Material desginで取り入れられたボタンです。
画面の端に表示して、よく使うアクションの操作に使用されます。

他のアプリの参考になるFloating action buttonの使い方


色々なアプリを確認してみましたが、google mapの利用方法が一番良いと思いました。

実装


gradle

com.android.support:designライブラリを利用できるように設定します。


dependencies {
    compile 'com.android.support:design:23.0.0'
}

layout.xml

画面のlayoutを記載します


        <android.support.design.widget.FloatingActionButton
            android:id="@+id/fab"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:layout_margin="@dimen/fab_margin"
            android:src="@android:drawable/ic_dialog_email" />

dimen.xml

マージンのサイズを指定します。直接layoutのxmlに書かないでdimen.xmlを使いましょう。


<resources>
    <dimen name="fab_margin">16dp</dimen>
</resources>

javaの実装

通常のボタンと同じ実装方法です。


    private FloatingActionButton mFab;

    mFab = (FloatingActionButton) findViewById(R.id.fab);
    this.mFab.setOnClickListener(this);

    @Override
    public void onClick(View v) {
        // something
    }

ビルドして画面を確認します。

表示されました。

まとめ


FloatingActionButtonは見栄えも使い勝手も良いボタンです。
しかし、使いどころに悩むボタンでもあります。
Google純正のアプリだと、FloatingActionButtonがうまく使われているので参考になると思います。

以上

Androidアプリ開発にオススメの本


開発にあると便利なオススメ製品


この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年10月10日土曜日

Android開発 SDK tools version ((23)) is too old to check APIs

  • 公開日:2015年10月10日

記事概要


Android Studioを1.3から1.4にバージョンアップした時に、「SDK tools version is too old to check APIs」のエラーが発生しました。
その対応方法の記事です。

環境


  • Android Studio 1.4.0
  • OS X Yosemite

SDK tools version is too old to check APIsの発生


2015/09/30日にAndroid Studio 1.4.0が正式にリリースされました。
ということで早速アップデートしたところ以下の様なエラーが発生しました。

SDK tools version ((23)) is too old to check APIs ...

SDK toolsのエラーが古いことによるエラーの発生です。
package以下に赤い下線が表示されていますが、アプリのビルドに問題はありません。
とはいえ、放置しておくのは気持ちが悪いので以下の手順で修正しました。

  • SDK Managerを開く
  • DK Toolsタブを選択
  • Android SDK Platform-Tools 23.0.1をチェックしてアップデート
  • OKボタンを押下

インストールが終了すると、先ほど出ていたエラーが消えます。

まとめ


androidアプリの定期的なアップデートの他に、開発環境のアップデートもきっちり行っていきましょう。
最初はしんどく感じると思いますが、慣れです。
こういった直接開発に繋がらないことは遠回りに思うこともあるかと思いますが、結局は定期的なアップデートを続けることが良いアプリを作ることにも繋がります。

以上

Androidアプリ開発にオススメの本


開発にあると便利なオススメ製品


参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年10月8日木曜日

Vagrant has detected that you have a version of VirtualBox installed that is not supported. vagrantをバージョンアップ

  • 公開日:2015年10月08日

記事概要


Docker Toolboxをインストールした後にvagrantを起動したら「Vagrant has detected that you have a version of VirtualBox installed that is not supported. 」というエラーが発生しました。どうやら、Docker Toolboxをインストールすると、VirtualBox自動的にアップデートされてしまうようです。
この記事は、起動しなくなったVagrantを再び動かすための対策方法を記載した記事です。

環境


  • vagrant1.6.3→1.7.4

vagrant upエラー


vagrant upコマンドを実行すると、以下のエラーが発生しました。


The provider 'virtualbox' that was requested to back the machine
'default' is reporting that it isn't usable on this system. The
reason is shown below:

Vagrant has detected that you have a version of VirtualBox installed
that is not supported. Please install one of the supported versions
listed below to use Vagrant:

4.0, 4.1, 4.2, 4.3

原因は、Docker Toolboxのインストールです。
Docker Toolboxのインストールにより、自動的にVirtualBoxがアップデートされてしまったようです。
VirtualBoxのバージョンを確認します。


VBoxManage -v
5.0.4r102546

4系を利用していたのが5系になっています。
これが原因で古いvagrantが動かなくなったようです。
現在のvagrantのバージョンを確認します。


vagrant -v
Vagrant 1.6.3

現在(2015/10/05)はversion 1.7.4が最新なので入れ替えます。
公式サイトに遷移します。
vagrantをダウンロードして再インストールします。

インストール後は、マシンを再起動してバージョンを確認します。


vagrant -v
Vagrant 1.7.4

1.7.4になったのでvagrantが起動しなくなってしまったプロジェクトに移動してvagrant upを実行します。


cd {project-folder}
vagrant up

default: flag to force provisioning. Provisioners marked to run always will still run.

動作しました。これで完了です。

まとめ


そろそろvagrantをサブにして、本格的にdockerに移行していかないといけないなと思いました。

いつも言っていますが、技術的負債は溜めないようにしましょう。
やばいと感じたら、すぐに新しい技術を取り入れましょう。
技術的負債の解消は、当初想像するよりずっと時間がかかるのが普通です。

以上です。

追伸


railsで利用する技術を

Innovation on Rails

というブログサイトにも記事を投稿していくことにしました。

このダメ男のブログでも同じ記事は公開していきますが、rails関連の技術(ruby,rails,vagrant,docker)はInnovation on Railsにも同様に投稿していきます。

このサイトよりも、ぐっと記事が探しやすくなると思うので、是非ご利用ください。

Rails4の開発にオススメの本


イノベーションを感じるのにオススメの本


運営サイト(railsで作成しています)


参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加
Related Posts Plugin for WordPress, Blogger...