そういうことだったんですね

いろいろ調べたり学んだりしたことを忘れないように書き連ねています

Ruby

rails - CRUDのまとめ

(adsbygoogle = window.adsbygoogle || []).push({}); 新規作成 レコードを新規作成する。 create Entry.create title: "タイトル", body: "本文" INSERT INTO "entries" ("body", "created_at", "title", "updated_at") VALUES (?, ?, ?, ?) [["body", "本…

rails - クエリの基本(2)

(adsbygoogle = window.adsbygoogle || []).push({}); 特定のフィールドを取得する select を使う User.select(:name) SELECT name FROM "users" 複数のフィールド名を指定できる User.select(:id, :name) SELECT id, name FROM "users" フィールド名は,区切…

rails - クエリの基本

クエリの流れ オプションからSQL文を組み立てる SQLを発行し、データベースからデータを取得する 取得したデータから Rubyオブジェクトを生成する after_find コールバックを呼び出す クエリを行うメソッド Model.take(limit) レコードに格納されている最初…

rails - ActiveRecord の コールバック

基本 オブジェクトの生成・更新・削除のタイミングで呼び出されるメソッド トリガとなるイベント(validation,saveなど)の前(before)と後(after)に登録可能 コールバックはメソッドチェーンに追加される。 before_xxx で false を返すか例外を発生させると、…

rails - has_many through:

他対他 の関連を参照する 元々は他対他を直接参照できるようにするもの。 +-------+ +-----------+ +-----+ |Product| 1---n |OrderDetail| n---1 |Order| +-------+ +-----------+ +-----+例えば、特定の Order中の Productを調べたい場合など。 class Prod…

rails - ActiveRecord Migration のまとめ

基本 db/migration 以下に YYYYMMDDhhmmdd_XXX_YYY.rb のファイルを作成する Migrationのファイル名とクラス名は一致していないとダメ ファイル名: YYYYMMDDhhmmdd_create_users.rb クラス名: CreateUsers 自分で設定ファイルを作成可能だが 基本的には rail…

chef - git レポジトリを扱う

(adsbygoogle = window.adsbygoogle || []).push({}); 最近のアプリケーションは git clone してパスを設定するだけ、 というものも増えてますが、chefにも git リソースがあります。git のリモートリポジトリと同期をとり、更新を検出してくれる 点で execu…

chef - knife solo を使う

chef-solo を簡単に使うには knife solo を使います。 chef-serverを使わなくてもリモート実行できるので楽に一元管理できます。 前提 以下の準備が必要です。 ssh でリモートアクセスできること (パスフレーズ無が好ましい) sudo でroot権限になれること イ…

rails - 便利なコマンド

ルーティングを表示する rake routes で、HTTPのメソッド名・パスとコントローラ・アクションの対応テーブル を出力できる。 $ rake route Prefix Verb URI Pattern Controller#Action welcome_index GET /welcome/index(.:format) welcome#index posts GET …

rbenv - bundler と組み合わせてローカルにインストール

複数のアプリケーションでバージョン違いのライブラリを 入れるなどしたい場合、bundle を組み合わせて使います。 rails 4.0.2 を vendor/bundle 以下にインストールする例 Gemfile を作成 source "https://rubygems.org" gem "rails", "4.0.2" bundle insta…

chef - ohai でシステム情報を確認する

chef-client (chef-solo) で使用している、システムのインベントリ情報を JSON形式で出力するツールが用意されています。 $ ohai { "languages": { "ruby": { "platform": "x86_64-linux", "version": "2.0.0", "release_date": "2013-11-22", "target": "x8…

chef - レシピの基礎(4)

ユーザやグループを作成したい システムのユーザおよびグループを追加するには、userリソースとgroupリソースを使います。 user user "www" do comments "web server" home "/home/www" shell "/sbin/nologin" uid 200 gid 200 supports :manage_home => fal…

chef - レシピの基礎(3)

サービスの設定をする サーバ類の起動・終了などをchef-clientで管理するには service リソースを使います。次の例では、mysqld をマシン起動時に自動起動させるようにし、 かつ、mysqldサーバを起動します。 service "mysqld" do action [:enable, :start] …

chef - レシピの基礎(2)

コマンドを実行する execute リソースを使います execute "do command" do command "foo bar" end packageリソースなどとは異なり、冪等性(何度操作しても 同じ状態となる性質)が確保されません。not_if / only_if などで制御する必要があります。 execute…

chef - レシピの基礎(1)

一部を変数として使いたい Attributes を使います。設定方法は、/cookbooks/attributes/default.rb に、 以下のように指定します。もちろんruby の文法が使えます。attributes/default.rb default["ruby"]["version"] = "2.1.0" recipe中で使用するには node…

chef - サーバ構成を管理する

サーバの設定(ソフトのインストールやサーバの起動など)をスクリプト に記述して、更新対象のサーバで実行させるツールです。 このツールで、同じ役割のサーバの状態を同じに保つことができます。 (もちろんデータベースの中身やログなどは異なりますが)…

Ruby - rbenv で複数バージョンを切り替える(2)

前回の続き rubyのバージョンをプロジェクト毎に切り替える 例えば /home/hoge/app 以下で実行するスクリプトのrubyバージョン を切り替える場合 $ rbenv local 2.1.0とします。/home/hoge/app/.ruby-version が出力されます。 この中身を見れば使用するバー…

Ruby - rbenv で複数バージョンを切り替える(1)

(adsbygoogle = window.adsbygoogle || []).push({}); rbenv はrubyのバージョンを 切り替えるツールです。以前rvmを使っていましたがいろいろ環境変数やら を汚す悪いクセがあるのとrailsで推奨されているのでインストール してみました。 インストール方法…

ruby 落ち穂拾い

リリースされて1カ月後に ruby 2.1.0 の存在に気づき、時の流れを感じてます。 今回は落ち穂拾い。 手続きオブジェクトのリテラル表記 ->(arg) lambda と同じく手続きオブジェクトを返します。 sum = ->(a,b) { a + b } sum.call(1,2) # =>3 coffeescriptに…

DB - MongoDB(3) mongoid

mongoid ( MongoDB を ruby から使うライブラリの一種です。 ODMであり ActiveRecordと同じような記述ができるので rails から使うには便利。 単体でも使えます。 Rails4 から動かす アプリケーションを作成します。 ActiveRecords を使わないので -O (--ski…

Ruby - 2Dゲームライブラリ Gosu を試す(2)

Ruby - 2Dゲームライブラリ Gosu を試す(1) - そういうことだったんですね の続きです。 背景/画像を表示する <code>Gosu::Image</code>クラスを使います。オブジェクトを生成して <code>draw</code> メソッドを呼ぶだけです。

Ruby - 2Dゲームライブラリ Gosu を試す(1)

2Dのゲーム開発環境です。Ruby(とC++)で実装できます(ただしデスクトップのみ。iOSはC++)。 ゲーム用のフリー素材集など使えばシナリオと少しのコードで立派なゲームを作ることができます。 https://github.com/jlnr/gosu

Ruby - 順列と組み合わせのまとめ

// ).push({}); // ]]> データ分析やゲームなどでパターンの組み合わせや順列が欲しい場合が多いと思います。 Ruby では Array クラスにこれらを生成する便利なメソッドが定義されています。 組み合わせ(combination) N個の要素からM個を取り出し、順番を考…

Ruby - 謎の `require':cannot load such file エラー

Windows環境でさっきまで動いていたプログラムが動かないなぁ、と思ったときの話。LOAD_PATHなど正しく設定してもうまく読み込めなくなってました。

Ruby - コードの不吉な部分を調べる(reek)

Ruby のコード中のエラーやバグ(を生みそうな)部分を検出してくれるツールが reek です。

Rails/Ruby - テストカバレッジを調べる simplecov

自分の書いたテストが、全体コードの何割を占めているかを示す指標をテストカバレッジといいます。数値化されるのでテストの妥当性の検証に役立ちます。 今回はそのカバレッジを調べるRubyライブラリ simplecov を調べてみました。

Ruby - 2.0.0 の新機能 - Module#prepend

前回に引き続きruby-2.0の新機能を調べてみます。 Module#prepend です。

Ruby - 2.0.0 の新機能 - キーワード引数

Ruby 2.0.0 の新機能としてキーワード引数というものがあります。引数名を与えて、引数の順序を気にせず設定できる、というものです。 PythonやObjective-C などでも有名ですね メソッド定義 引数の部分の定義をハッシュリテラルに似た(というかほぼ同じ)…

Ruby - Twitter と連携する

Twitter には REST API があり、ツイートやフォロー、タイムラインの取得などアプリに組み込むことができます。 フォローする、リツイートするなどの機能も見かけますね。 curl で十分、といわれるかもしれませんが、その準備は結構面倒なので、 それを解決…

Ruby - RVM の Multi-User mode について

RVM (Ruby Version Manager) はRubyのバージョン切り替えを簡単に行う便利なソフトウエアです。 https://rvm.io/ 通常のインストール (Single-User instrations) インストールも簡単。通常はユーザ毎にインストールするのが普通です。 \curl -L https://get.…