Javaエンジニア、Ruby on Railsでアプリを作る

整理券アプリを作成中です

RubyMineでRuby on railsの開発をする その3: rails generate controller

前回に引き続き、"パーフェクトRuby on Rails" に掲載されているサンプルアプリ (awesome_events)の開発をRubyMineで行なっていきます。

yucatio.hatenablog.com

rails generate controller

controllerを作成します。 プロジェクト名を右クリック > New > Run Rails Generator… f:id:yucatio:20170129233135p:plain

Generator名に'con'と入れれば、'controller' が候補に出てくるので、選択します。 f:id:yucatio:20170129230339p:plain

コントローラ名とアクションを入力して、OKを押します。 f:id:yucatio:20170129230156p:plain

rails generate controller が実行されました。 f:id:yucatio:20170129230524p:plain

次回はモデルを作成します。

yucatio.hatenablog.com

環境
  • Mac : Sierra 10.12.2
  • Ruby : 2.3.3
  • Rails : 4.2.6
  • RubyMine : 2016.3.1
パーフェクトRuby on Rails

パーフェクトRuby on Rails
著者:すがわらまさのり
価格:3,110円(税込、送料込)
楽天ブックスで詳細を見る

RubyMineでRuby on railsの開発をする その4: rails generate model と db:migrate

前回に引き続き、"パーフェクト Ruby on Rails" に掲載されているサンプルアプリ (awesome_events)の開発をRubyMineで行なっていきます。

yucatio.hatenablog.com

rails generate model

controller と同様、

プロジェクト名を右クリック > New > Run Rails Generator…

を選択します。 f:id:yucatio:20170129233135p:plain

‘model'を検索して、選択します。 f:id:yucatio:20170129231416p:plain

モデル名とカラム名、型を入力します。型は途中まで入力すれば、サジェストしてくれます。便利! f:id:yucatio:20170129231922p:plain

rails generate modelが実行されました。 f:id:yucatio:20170129232138p:plain

rake db:migrate

続いて、DBのマイグレーションを行います。 対象のマイグレーションファイル上で右クリック > Run ‘db:migrate’ f:id:yucatio:20170129232417p:plain

db:migrate が実行されました。 f:id:yucatio:20170129232638p:plain

次回はテストの実行です。

yucatio.hatenablog.com

環境
  • Mac : Sierra 10.12.2
  • Ruby : 2.3.3
  • Rails : 4.2.6
  • RubyMine : 2016.3.1
パーフェクトRuby on Rails

パーフェクトRuby on Rails
著者:すがわらまさのり
価格:3,110円(税込、送料込)
楽天ブックスで詳細を見る

RubyMineでRuby on railsの開発をする その2: bundle install の実行

前回の記事で、railsのプロジェクトフォルダの作成(rails new)を行うことができました。

yucatio.hatenablog.com

さっそく自分のアプリを作るぞ、と思いましたが、新しいことを一気に始めると混乱するので、まずはRubyMineを使用して、"パーフェクトRuby on Rails" に掲載されているサンプルアプリ (awesome_events) を作成します。

GemFileの書き換えとbundle install

必要なGemをGemFileに記載します。(slim-rails だけ本とは違います)

f:id:yucatio:20170129223749p:plain

bundle installを行います。 Tools > Bundler > Install を選択します。 f:id:yucatio:20170129224220p:plain

オプション画面が開きます。今回は何も入力せずにInstallボタンを押します。 f:id:yucatio:20170129225235p:plain

bundle installが実行されました。 f:id:yucatio:20170129225011p:plain

次回に続きます。

yucatio.hatenablog.com

環境
  • Mac : Sierra 10.12.2
  • Ruby : 2.3.3
  • Rails : 4.2.6
  • RubyMine : 2016.3.1
パーフェクトRuby on Rails

パーフェクトRuby on Rails
著者:すがわらまさのり
価格:3,110円(税込、送料込)
楽天ブックスで詳細を見る

RubyMineでRuby on railsの開発をする その1: RubyMineインストールとプロジェクトの作成

JavaからRubyにきて困ったことの1つは、無料のIDEが無いことです。eclipseの便利さになれきった自分には、vimのカスタマイズがおっくうに感じられてしまいました。コマンドラインでいちいちrailsのコマンド入力するのも面倒。 (でもこの、面倒って思う気持ちはエンジニアとして大切だと思う。)

というわけで、有料ですが、RubyMineをいれてみることにしました。

RubyMineのインストール

まずは30日の無料体験版をインストール。

www.jetbrains.com

GET FREE 30-DAY TRIAL からインストールします。

新規プロジェクトの作成

インストールが終わったら起動します。

f:id:yucatio:20170115230518p:plain

Create New Project (プロジェクトの新規作成) を選びます。

f:id:yucatio:20170115230745p:plain

Location (プロジェクトフォルダ)、SDKrailsのバージョン、DBの種類を選びます。

今回はminitestでなくrspecを使用するので、Skip Test::Unit files にチェックを入れます。

rails new が実行され、railsディレクトリが作成されました。

f:id:yucatio:20170115232624p:plain

rails server の実行

サーバを起動してみます。

Run > Run ‘Development: awesome_events’ で起動します。 f:id:yucatio:20170116001600p:plain

Run ‘Development: awesome_events' がない場合は、Run > Run… でダイアログを開き、Run 'Development: awesome_events’ を選択します。 f:id:yucatio:20170116001612p:plain f:id:yucatio:20170116001625p:plain

rails server が実行され、デフォルトのrailsの画面が表示されました。 f:id:yucatio:20170116001657p:plain f:id:yucatio:20170116001709p:plain

サーバを停止するには、Run > Stop ‘Development: awesome_events’ を選択します。 f:id:yucatio:20170116001725p:plain

次回に続きます

yucatio.hatenablog.com

環境
  • Mac : Sierra 10.12.2
  • Ruby : 2.3.3
  • Rails : 4.2.6
  • RubyMine : 2016.3.1

頭の体操[初級] 連続したフィールドの入力で、途中の未入力欄を検知 (Ruby編)

前回の記事の続きです。

yucatio.hatenablog.com

入力の途中で空欄があったらエラーメッセージを表示する機能を実装します。

f:id:yucatio:20160718141604p:plain

実装してみよう

サンプルとして、以下のようなメソッドを作成します。

  • 引数にStringの配列を受け取る
  • 配列の途中に空文字があり、その欄より後に空文字でない要素がある場合は、エラーメッセージを表示する。メッセージ中には何番目の要素がエラーかを表示する。

こんな動作イメージです

arr = ["佐藤", "鈴木", "高橋", "", "伊藤", "", "", "", "", ""]
detect_empty_field arr

# OUTPUT
# 4番目のフィールドが空です。値を入力してください。

簡単のために、以下を前提とします。

  • 引数で渡される配列はnilではない
  • 配列中の各要素はnilでない
  • 配列の各要素はString

この記事ではRubyで実装します。

実装は続きを読むをどうぞ

続きを読む

頭の体操[初級] 連続したフィールドの入力で、途中の未入力欄を検知 (Java編)

以前に、仕事で以下のような挙動をする処理を書く必要がありました(正確には、後輩が実装して自分はレビュー担当)。連続して値を入れるような入力欄で、途中で入力が空になっている場所を検知します。

f:id:yucatio:20160723111152p:plain

実装してみよう

サンプルとして、以下のようなメソッドを作成します。

  • 引数にStringの配列を受け取る
  • 配列の途中に空文字があり、その欄より後に空文字でない要素がある場合は、エラーメッセージを表示する。メッセージ中には何番目の要素がエラーかを表示する。

こんな動作イメージです

detectEmptyField02(new String[]{"佐藤", "鈴木", "高橋", "", "伊藤", "", "", "", "", ""});

// OUTPUT
// 4番目のフィールドが空です。値を入力してください。

簡単のために、以下を前提とします。

  • 引数で渡される配列はnullではない
  • 配列中の各要素はnullでない

自分の勉強のためにも、JavaRuby両方で実装してみます。この記事ではJavaで実装します。

実装は続きを読むをどうぞ

続きを読む

Rubyでクラス宣言直下に書かれたメソッドの実行時期

Railsのスコープ定義文を見ていたら、クラス宣言直下に書かれたメソッドはいつ実行されるのかという疑問がわいてきたので調べました。

Rubyはクラス宣言直下に任意の式が書ける

railsのコードでは、クラス宣言直下でscopeメソッドを呼び出しています。

class Book < ActiveRecord::Base
  scope :costly, -> { where("price > ?", 3000) }
end

"初めてのRuby (Yugui 著)"には、

クラス定義の内には任意の式を書くことができます

と書いてあります。

クラス宣言直下に書かれたメソッドはいつ実行されるのか

クラス定義直下に書かれたメソッドがいつ実行されるのか、コードを書いて確かめます。

class CallUnderClassDefTest
  puts "from under class def 01"

  def method_01
    puts "from method_01"
  end

  puts "from under class def 02"
end

puts "out of class 01"
CallUnderClassDefTest.new.method_01
puts "out of class 02"

実行結果

from undfer class def 01
from under class def 02
out of class 01
from method_01
out of class 02

ファイルの先頭から処理が実行されているようです。 クラスの宣言が終わっていないのにメソッドが実行できるというのは不思議ですが、これもスクリプト言語の特徴なのでしょう。

Javaのstaticブロック

Javaコンパイル言語なので同様の機能は無いのですが、staticブロック内には任意の式を書くことができます。使用用途としては、クラス変数の初期化などです。以下のコードで実行順序を確認してみます。

public class SomeClass {
    private static List<String> fruitList = new ArrayList<String>();
    
    static {
        System.out.println("||static block start||");

        fruitList.add("apple");
        fruitList.add("banana");
        fruitList.add("coconut");
        
        System.out.println("||static block end||");
    }
    
    public static List<String> getFruitList() {
        return fruitList;
    }
}

public class StaticBlockTest {
    public static void main(String[] args) {
        System.out.println("start main");
        List<String> fruits = SomeClass.getFruitList();
        System.out.println("==== fruits ====");
        for (String fruit : fruits) {
            System.out.println(fruit);
        }
        System.out.println("================");
        System.out.println("end main");

    }
}

実行結果

start main
||static block start||
||static block end||
==== fruits ====
apple
banana
coconut
================
end main

mainメソッドが呼ばれたあとにSomeClassのstaticブロックが実行されています。

Rubyを習い始めた時は、Rubyのクラス宣言直下に書かれた処理は、Javaのようにクラスが呼び出された際に実行されると思っていたので、今回確かめることができ、勉強になりました。

初めてのRuby

初めてのRuby
著者:Yugui
価格:2,376円(税込、送料込)
楽天ブックスで詳細を見る