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で作成しています)


参考サイト

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

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