目次
はじめに
はじめまして。去年の6月に入社したチャン・ゾアン・タンと申します。
私はリンクバルに入る前にPHPエンジニアでした。RubyもRailsも未経験でした。入社してからRubyやRailsを勉強し始めました。以下の方法で勉強しました。
まず、Rubyを学ぶ
もともとPHPエンジニアだったので、Rubyを学んた時に、PHPと比較しながら学びました。
両方の言語はオブジェクト指向プログラミング言語(実は、Rubyはpure
オブジェクト指向プログラミング、PHPはオブジェクト指向サポート言語と言われている)であるので、同様なものがあるかと思いました。この学び方でPHP知識に参照出来ると思います。
同様
まず、PHPとRubyは以下の通り同様なところがあると思います。
PHPとRubyとも型の指定せず変数を宣言できます
- php
echo $hoge;
$arr = [1,2,3];
print_r($arr);
[/php]
- ruby
puts hoge
arr = [1,2,3]
puts arr
[/ruby]
オブジェクト指向プログラミング言語なので、両方PHPとRubyはpublic, protected, privateというアクセス修飾子を付けてクラスを宣言できる
配列
一次元配列は大体同じ、両方とも動的な配列がサポートされています。シンタックスも同様です。
Rubyで二次元配列がhashになります。
文字列補間
両方は文字列補間という文字列内に変数を埋め込むことができます。シンタックスも同様です。
- php
echo "hello {$a}";
[/code]
- ruby
puts "hello #{a}"
[/code]
パッケージ管理ツール
両方とも盛んな言語なので、コミュニティーが広いし、ライブラリーも豊富なので、パッケージ管理ツールが必要です。
PHPではComposerを使っています。
RubyではGemです
いくつか同じ関数
- eval: ローコードスクリプトを実行する関数
- spintf: 文字列をフォーマットするための関数
違い
シンタックス
- 基本のシンタックス
PHPはC言語と同様、セミコロンでコードステートメントを終了にします。semicolon terminated
と言います。
クラス
、関数
、ループ
などというブロックは{}
が包まれます
RubyはPythonと同様、改行でコードステートメントを終了にします。newline terminated
と言います。
クラス
、関数
、ループ
などというブロックは{}
が要らない
if a > b
puts ‘hoge hoge’
end
end
[/ruby]
以下の通り{}
を使用するケースもあります。
eachメソッドのshorthand
[code lang=”ruby”] [1,2,3].each { |elm| puts(elm) }[/code]
コードブロック
[code lang=”ruby”] def hogeputs ‘welcome to’
yield
end
hoge { puts ‘Linkbal engineer blog’ }
[/code]
・Rubyでは全部オブジェクトで、シンタックスはわかりやすいし、すっきりだと思います。
文字列の長さを取得する
PHP
[code lang=”php”] echo strlen("welcome to linkbal engineer’s blog");[/code]
Ruby
[code lang=”ruby”] puts "welcome to linkbal engineer blog".length[/code]
・Rubyのシンタックスはかなりは柔軟です。
関数を呼び出す時、括弧があるかないかどちらもいけます。
Rubyの関数は最後の変数または表現がreturn
の値になります。
1 + 1 # return 2
end
[/code]
If-else文は自然言語に近いので、結構わかりやすいです。
[code lang=”ruby”] # これは# if a == b
# hoge = 10
# end
# と相当です
hoge = 10 if a == b
[/code]
Rubyでは逆の条件の場合、unless
が使える
hoge = ‘test’ unless a == 10
[/code]
こういうかき方もよく使われています。
[code lang=”ruby”] def hogehoge‘test’ if a == 10
end
[/code]
Truthy/Falsy
Rubyではfalse
, nil
のみfalse
を返します。0
、空文字列、空配列がtrue
です。
PHPではfalse
やnull
がfalse
であることはもとより、0
、空文字列、空配列もfalse
です。
Rubyはabstract
クラスとinterface
ともありません。
文字列の連結
PHPではdot(.)
を使います。
Rubyでは+
を使います。
変数種
PHPでは変数が1種類しかありません。
Rubyでは4種類があります。
[code lang=”ruby”] $variable # グローバル変数@@variable # クラス変数
@variable # インスタンス変数
variable # ロカール変数
[/code]
コード規約
開発するには言語を学ぶことだけではなくて、コード規則を学ぶべきです。
PHPのコード規約は「PHP Standard Recommendation(PSR)」が一番盛んなものだと思います。
RubyではRubocopという静的解析ツールが結構有名で、うち会社のプロジェクトも使っているので、Rubycopのコード規約に参考しました。
Railsを学ぶ
プログラミング言語を学んだあと、Railsフレームワークを学びます。
PHPを開発した時、Laravelフレームワークを使っていました。
LaravelはRailsのようにモダンな「MVC」Webフレームワークであります。それに、Laravelの作者はLaravelを作ったときに、Railsに参考したということを言われています。そのため、LaravelとRailsは構造や機能の中に同様なものがあるかと思いました。
Model
Laravelでは「Eloquent」と言います。
Railsでは「ActiveRecord」と言います。
両方ともパワーフルORM(Object Relational Mapping)で、Model連携も便利です。
View
LaravelではBladeというテンプレートエンジンがあります。これで簡単にレイアウトを作れ、再利用もできます。
RailsではERBがあります。LaravelのBladeと同様です。
Controller
他の「MVC」フレームワークと同じで、RailsとLaravelはリクエストがルーターで処理したあと、コントローラーにいって、ロジックを処理されます。
その他
Rails | Laravel | |
---|---|---|
コマンドライン | rails console | php artisan |
マイグレーション | サポート(実行, ロールバック, リセット、初期データ生成) | サポート (実行, ロールバック, リセット、初期データ生成) |
ストレージ | Active Storage | File Storage |
Websocket | Action Cable | Broadcasting |
多言語 | i18n | Localization |
ユニットテスト | rspec | PHPUnit |
終わり
最初、Railsに触った時に、こういう方法でRubyやRailsを勉強しました。
そして、私の部署ではPull Requestは必ず二人以上のApproveがないとマージできないようになっているので、ソースレビューでチームメイトのコメントからもいろいろ勉強できました。だんだんRailsの開発に慣れました。
現在、うちの会社ではエンジニアを募集しています。ご応募お待ちしております!
参考
https://guides.rubyonrails.org/index.html
https://docs.ruby-lang.org
https://laravel.com/docs
https://github.com/rubocop-hq/ruby-style-guide