Webプログラミング初学者が「Ruby On Rails 」をつかうと良いと思う理由

# 最近（2019年）はRailsはオワコンと言われがち

　2-3年前は、Railsがもてはやされ、プログラミングスクールでもこぞって題材にしていました。
　でも、2018年の後半から2019年前半にかけて、「Railsはオワコン」という意見がTwitterをはじめいろいろなところで見られます。

　個人的には、実運用とかで使うにはそれほど問題があるとは思いませんが、JavascriptのSPA（Single Page Application）ライブラリでフロントを開発するのが主流になってきている今、RailsのViewの機能がどこまでいるのだろか？
　または、SPAに本当に適したViewの機能だろうかということは疑問に思います。

　このSPA主流の中にあって、最適であるとは言い難いところがあり、「オワコン」と言われるのも納得できます。

　それでもなお、Webプログラミング初心者、いや、もしかしたら、プログラミング初心者すべての人が学習するうえで、触るべきではないかと思っています。

# 直感的でシンプルな発想に馴染めるRuby & Rails

 JavaやPHPのプロジェクトよりも、Ruby & Railsのプロジェクトは命名がシンプルです。そして、直感的です。
英語のようにコーディングすることをみんな心がけているので、それが形にあらわれています。
　
　Rubyの設計思想、それに基づいてつくられたメソッド、その名前が直感的であり、その延長としてRailsの設計や命名があると思います。
　そして、そのRuby & Railsの設計思想に惹かれたRubyistの発想もまた、シンプルで直感的です。

　つまり、大本の設計思想がプログラマーへと"伝染"していて、その人達と触れることで、コーディングを直感的でシンプルにする発想が自ずとみについていくように思います。

　JavaやPHPのコードは往々にして冗長です。それは、名前の衝突などを心配してでしょうが、そもそも、名前が衝突するほど、
名前空間をわけていないという設計上の問題があるように思いますが。

　つまり、JavaやPHPでもシンプルで直感的なコーディングはできます。それはプログラマー次第です。でも、なぜかそうしたプロジェクトは少ないように見えます。
　
　一方、RubyやPython、Golangなどは比較的、直感的でシンプルな名前でつけられています。Lintのスタイルチェッカー自体がそうなっているものもあります（Python、Golang）。

　プログラム言語にふれるということに加えて、**その思想に惹かれた良きプログラマーやコードにふれること**は、初学者のスタイルを決めていく上でとても大切なことだと思います。、

# "RubyのRails" と "PHPのLaravel"

　私は、Web開発を15年ぐらいして、もともとPhperでした。
　ただ、新しもの好きなので、Rails2がでたぐらいのとき、流行りだしたのでRailsを触り始め、
　そこからRails5に至るまで定期的に触っています。

　最近は、PHPではなく、JavaやGolangを触ることが多いですが、一応、Laravelなども触っています。

　RailsとLaravelのどちらも触ったことがある人なら分かると思いますが、とにかく、Railsはメソッドやクラス名がシンプルです。
　Rubyの文法自体がシンプルで直感的なのですが、それに輪をかけてRailsは直感的に、コードが文書になるような命名をされています。

　個人的に両者の違いが象徴的なのは、migration（マイグレーション）の書き方かと思います。
　どちらの方がより直感的で読みやすいでしょうか？
　
## Laravelのmigration

```php:migration.php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateFlightsTable extends Migration
{
    public function up()
    {
        Schema::create('flights', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('airline');
            $table->timestamps();
        });
    }

}
```

## Railsのmigration

```ruby:migration.rb

class CreateProducts < ActiveRecord::Migration[5.0]
  def change
    create_table :products do |t|
      t.string :name
      t.text :description
      t.timestamps
    end
  end
end

```

　個人の感覚なので、評価は読み手に委ねられますが、どちらが読みやすいでしょうか？

　その他、ユニットテストの書き方も比較するといいかもしれません。RSpecとPHPUnitを比較してみると、直感的で読みやすさはRSpecだと思うのではないでしょうか。

　書き方の問題はありますが、前提となるメソッド名とか文法がそもそも直感性を左右していると思います。

# RSpec

```ruby:rspec.rb
RSpec.describe '掛け算メソッドのテスト' do # テストの概要    
  context '引数が0の場合' do # 条件
    it '結果がゼロになること' do   # 確認事項
      cond_1 = 1
      cond_2 = 0
      expected = 0
      expect(multiple(cond_1, cond_2)).to eq expected
    end
  end
end
```

## PHPUnit

```php:SampleTest.php

use PHPUnit\Framework\TestCase;

class CalcTest extends TestCase
{
     /**
      * 掛け算メソッドのテスト
      */
    public function testMultiple()
    {
        //一方の引数が0の場合
        $cond_1  = 1;
        $cond_2  = 0;
        $expected = 0;
        $this->assertSame($expected, multiple($cond_1, $cond_2));
    }
}

```
　
 これはRailsとLaravelのフレームワークに依存したコーディングの比較ですが、有名なフレームワーウを使うことを考えると、こうしたフレームワークの直感的なコーディングというのは大切な気もします。

　まして、初心者にとっては、初めて見るものの影響は大きく、それが後々のコーディングのスタイルに影響していきます。
　個人的には、直感的で分かりやすい命名や設計の方が問題を生みにくいと思います。

# 実運用と学習を切り分けて

　Railsはオワコンと最近は言われがちですが、実運用に関しては確かにそうかもしれません。ですが、学習という観点では、直感的でシンプルな設計を学ぶという意味で、一度は触るべきフレームワークだと思います。
　
　他の言語でも、これに近いものがでてくれば、その時、はじめて本当のオワコンなのかもしれませんが。PythonやGolangのフレームワークやアプリケーションも直感的でシンプルな傾向はありますが、Railsの方が情報量はいろいろ多いので、初学者にとってはRailsの方がメリットが高いと思います。

# 並行処理へのニーズを満たす関数型言語「Elixir」への布石

　最近、IoT、オンラインゲーム、メッセージングアプリなどの登場を背景に、多くのリクエストをさばくプログラム言語が求められています。
なかでも、並行処理ができる関数型言語Earlang、そして、EarlangVMで動くElixirへの注目が高まっています。

　Elixirは、RailsのコアコミッターのJose Valim氏が作った言語で、文法がRubyそっくりです。

　つまり、RubyやRailsに馴染んだ人なら、関数型言語Elixirの学習は比較的容易になります。

こうしたおまけもあります。