投稿

検索キーワード「Ruby」に一致する投稿を表示しています

Ruby on Rails初心者

イメージ
Ruby on Rails初心者 恥ずかしながらRuby on Railsでアプリとか作ったことなかったです。 Webアプリ作る場合にはバック側はJavaでフレームワークは Spring Boot ばっかり使ってたからPHPとかRuby on Railsとか触ったことくらいしかなかったです。 最近ちょっと扱う機会があったので、取っ掛かりの部分を備忘録として残しときます。 Rubyインストール Windows上で開発する場合についてです。 Ruby のサイトの ダウンロード からダウンロードしてインストールします。 通常のインストール後にMSYS2のインストール用にコンソールが起動されます。 MSYS2 はWindows上でLinuxのような環境を提供するもの・・・らしいですがWSLと何が違うのか正直よくわかってません。 _____ _ _____ _ _ _ ___ | __ \ | | |_ _| | | | | | |__ \ | |__) | _| |__ _ _ | | _ __ ___| |_ __ _| | | ___ _ __ ) | | _ / | | | '_ \| | | | | | | '_ \/ __| __/ _` | | |/ _ \ '__/ / | | \ \ |_| | |_) | |_| |_| |_| | | \__ \ || (_| | | | __/ | / /_ |_| \_\__,_|_.__/ \__, |_____|_| |_|___/\__\__,_|_|_|\___|_||____| __/ | _ |___/ _|_ _ __ | | o __ _| _ _ | (_) | |^| | | |(_|(_)\^/_> 1 - MSYS2 ba...

Ruby on Railsでデバッグ

イメージ
Ruby on Railsでデバッグ Ruby on Rails (というかRuby?)のリモートデバッグのやり方が最初よくわからなかったのでメモ。 ここに書いてあるのはVSCodeでのデバッグ方法です。 RubyMineとかだとまた違うのかも。 Ruby on Rails初心者 ローカルデバッグ 自分のPC上でサーバー起動してデバッグします。 これは簡単でした。rails newで雛形を作成するとデフォルトでGemfileに debug が入ってます。 gem "debug", platforms: %i[ mri mingw x64_mingw ] 現在のバージョンは debug (1.8.0) 。 後はlaunch.jsonを以下のようにすればF5でサーバー起動できてデバッグ可能になります。 { "type" : "rdbg" , "name" : "Debug Rails" , "request" : "launch" , "cwd" : "${workspaceRoot}" , "script" : "bin/rails server -p 3001" , "args" : [ ] , "askParameters" : false , "useBundler" : true , } -p 3001 の部分でポート番号をデフォルトの3000から変更できます。 リモートデバッグ rdbgはリモートデバッグも可能です。 docker等で動作中のRailsにattachできます。 詳細は vscode-rdbg を参照してください。 まずlaunch.jsonを以下のようにします。 { "type" : "rdbg" , "name" : "Attach w...

Ruby on Railsで「An error occurred while installing mysql2」が出る

Ruby on Railsで「An error occurred while installing mysql2」が出る Ruby on RailsでGemfileにmysql2を追加した場合に以下のエラーに遭遇することがあります。(Windows限定っぽい?) bundle installすると以下のエラーが・・・。 An error occurred while installing mysql2 (0.5.5), and Bundler cannot continue. In Gemfile: mysql2 理由ばよく分かりませんが以下のコマンドで個別にmysql2をインストールすれば出なくなりました。 > gem install mysql2 --platform=ruby -- --with-mysql-dir="C:\Ruby32-x64\msys64\mingw64" "C:\Ruby32-x64\msys64\mingw64"の部分は適宜変更してください。Rubyインストール時にデフォルトのままなら上記で大丈夫なはずです。 これで bundle install を実行してもエラーが出なくなる、はずです。

Ruby on Railsのルーティング

Ruby on Railsのルーティング Ruby on RailsのURLマップについて。 config/routes.rb に記述するんですが、Rubyって記述方法に省略系が多くて混乱することが多いので自分用に纏め。 Rails本家のガイドの Railsのルーティング も分かり易かった。頭捻ってた時は何故かこのガイドにたどり着けませんでした。 routes.rbの記述は基本以下のようになってます。 get 'users' , to : 'users#index' getはhttpdのGETメソッド。他にPOSTとかPUTとかDELETEとかですね。 'users’がパス。これだとhttp://localhost:3000/users になります。 to: の ‘users#index’ は controller のクラス#メソッドです。 この場合は ./controller/users_controller.rb の indexメソッドになります。 基本 > rails generate controller Users index などでコントローラーを作ると routes.rb には以下のように追加されます。 get 'users/index' これは以下と同義です。 get 'users/index' , to : 'users#index' 更に/indexは省略できますね。to:はコントローラ#アクションのとなりますが、更に以下のようにも記述できます。 get 'users/index' , controller : 'users' , action : :index :indexのようなものはシンボル、通常はハッシュマップにアクセスする際に使いますが、以下のようにするとusersのindexメソッドが呼べますのでメソッドを表す場合にも使用されるようです。 obj = Users . new obj . send ( :index ) # これでobj.index()と同じ でも文字列でも同じことできますよね。 ...

Ruby on Railsのセグメント制限

Ruby on Railsのセグメント制限 Ruby on Railsでは以下のようなルーティングで :id のようなパスパラメータは セグメント と呼びます。(一般的にもセグメントって呼ぶかも) このセグメントに制限を付けたい場合は routes.rb で constraints を使用します。 get 'user/:id' , to : 'users#show' , constraints : { id : /[0-9]\d{4}/ } constraintsは正規表現で制限できます。 上記例だと0000~9999までの4桁数値のみヒットするようになります。

Ruby on Railsでデォフォルト機能を消す

Ruby on Railsでデォフォルト機能を消す Ruby on Railsで最初にプロジェクトを初期化した後にルーティングを見るといきなり情報過多で「えぇぇ」っとなりますのでスッキリさせたい。 > rails routes 上記コマンドを実行すると以下のように大量に出てきます。 Prefix Verb URI Pattern Controller#Action rails_postmark_inbound_emails POST /rails/action_mailbox/postmark/inbound_emails(.:format) action_mailbox/ingresses/postmark/inbound_emails#create rails_relay_inbound_emails POST /rails/action_mailbox/relay/inbound_emails(.:format) action_mailbox/ingresses/relay/inbound_emails#create rails_sendgrid_inbound_emails POST /rails/action_mailbox/sendgrid/inbound_emails(.:format) action_mailbox/ingresses/sendgrid/inbound_emails#create rails_mandrill_inbound_health_check GET /rails/action_mailbox/mandrill/inbound_emails(.:format) action_mailbox/ingresses/mandrill/inbound_emails#h...

Ruby on Railsでクロス

Ruby on Railsでクロス Ruby on Railsはデフォルトだと自身以外リクエストを受け付けません。 最近はフロントはVue.jsやReactで作ってバックはRailsみたいな構成が当たり前なので、このままだとフロント側からのリクエストを受け付けてくれません。 受付してもらうためにCORS (Cross-Origin Resource Sharing) の設定を行います。 Rack CORSの有効化 Gemfileを開いて以下のコメントを外します。 # Use Rack CORS for handling Cross-Origin Resource Sharing (CORS), making cross-origin AJAX possible gem "rack-cors" Gemfile修正後は以下でインストールします。 > bundle install cors.rb の設定 config/initializers/cors.rb を開いて設定します。 とりあえず手っ取り早くなんでもかんでも受け付けるようにするには以下です。 Rails . application . config . middleware . insert_before 0 , Rack : :Cors do allow do origins '*' resource '*' , headers : :any , methods : [ :get , :post , :put , :patch , :delete , :options , :head ] end end 実験的にはともかく、本番環境で動かす場合はセキュリティ上好ましくないのでoriginsの部分をちゃんと設定するようにします。 たとえば localhost:3000 と localhost:3001、あと https://www.example.com だけ受付する場合は以下のように書きます。 origins 'localhost:3000', 'localhost:300...

An error occurred while installing mysql2 (0.5.5), and Bundler cannot continue.

An error occurred while installing mysql2 (0.5.5), and Bundler cannot continue. Windows上でRuby on Railsの開発を行ってる時に発生するようです。 GemfileでMySQLを利用するように書き換えて bundle install すると以下のメッセージが出てくる場合があります。 An error occurred while installing mysql2 (0.5.5), and Bundler cannot continue. In Gemfile: mysql2 以下のコマンドを実行します。 > gem install mysql2 --platform=ruby -- --with-mysql-dir="C:\Ruby32-x64\msys64\mingw64" その後 bundle install すれば正常に完了できます。

Ruby on RailsでMySQL

イメージ
Ruby on RailsでMySQL Ruby on Railsでデータベースを指定する場合についてです。 プロジェクト作成時に指定できます。 プロジェクト作成時に指定 > rails new アプケーション名 -d データベース データベースに指定できるのは以下です。 mysql oracle postgresql sqlite3 frontbase ibm_db sqlserver jdbcmysql jdbcsqlite3 jdbcpostgresql jdbc これで作成した場合はdatabase.ymlに接続先情報を書き込めば終了です。 以降は-dオプションなしでデフォルトのsqlite3になっているものをMySQLに書き換える場合です。 Gemfile Gemfileの以下の部分を、 gem "sqlite3", "~> 1.4" 以下に書き換え。 gem "mysql2", "~> 0.5" bundle install します。 database.yml データベースの接続設定を ./config/database.yml に追加します。 接続先情報が以下の場合です。 項目 情報 ホスト localhost ポート 3306 データベース testdb ユーザー root パスワード passw0rd sqlite3の設定を全て削除して以下に書き換え。 default : & default adapter : mysql2 encoding : utf8mb4 pool : < % = ENV . fetch ( "RAILS_MAX_THREADS" ) { 5 } % > host : localhost port : 3306 username : root password : passw0rd development : < < : * default data...

GitHubのCodespacesについて

イメージ
GitHubのCodespacesについて GitHubにCodespacesという機能があるのですが、なんかホスティングまでしてくれるらしいので使ってみました。 無料枠で月々コア時間120時間、120時間を超えてサーバプロセスが動いている場合は勝手に停止するようです・・・この時点でホスティングサービスじゃありませんでした。 あくまで開発時のテスト用に動作を許してくれるだけです。 多人数で開発してたら120時間なんてあっという間ですけど、個人利用なら全然余裕。 ちなみにストレージの無料枠は15GBまで、この枠までならいくつCodespacesを作ってもヨシです。 でも開発用と考えれば便利、Web版のVSCodeが使えるのでGitHubが使える環境ならどこでも開発できます。(そこまで開発に追われたくないですが) 使い方は簡単でした。デバッグ以外は。 アプリ作成 以下のように沢山あるテンプレートから雛形を作成して開発を始めればWebだけで最初から開発できます。 ブランチ上に既にあるプロジェクトからCodespacesを作ることもできます。 でも自分が最近普段使いしているVue.jsがなかったのでBlankで作成します。 「Use this template」をクリックするとWeb版VSCodeに切り替わります。 Vue.jsのプロジェクトを作成してみます。 ターミナルで以下のコマンドを実行。 $ npm create vue@latest プロジェクト名は適当 cd MyApp npm install 普通に動きます。たぶんnpmだけじゃなくbundleなど有名所のパッケージ管理ツールは入ってそうです。 ドキュメントが多いので全部読んでないんですが、デバッグのやり方がよくわからないです。 ブレークポイント置いても止まらない。 Vue.jsの場合だとWeb版VSCodeだとブラウザ立ち上げられないのでダメ、Ruby on Railsで試してみましたが、ローカルでやってるようにVSCodeからプロセス立ち上げても止まってくれませんでした。 一応Codespacesの説明にはデバッグもできると書いてあったのでやり方が間違ってるのでしょうが、今回使ってみた主旨とは違うので保留で。暇を見つけて再ト...

active_model_serializers

イメージ
active_model_serializers active_model_serializers Ruby on RailsでJSONを整形してくれるライブラリです。 実用性という点では評価してないですが、チョロっと触ったところでは結構便利なので取っ掛かりだけでも。 導入 Gemfileに以下を追加。 gem 'active_model_serializers', '~> 0.10.0' そして以下。 > bundle install 使い方 active_modelと冠しているだけあってモデル(テーブル)と密接に関係してます。 modelsディレクトリにuser.rbがある場合はserializersディレクトリにuser_serializer.rbを作って、userテーブルのカラムからJSONを加工といった流れですかね。 とはいえテーブルと必ず紐づいている必要はなく完全に独立したserializerも作れます。実際にやってみた方が早いですね。 まず以下のテーブルがあるとします。 Railsでmodelsに以下のように作成されているものとします。 user.rb class User < ApplicationRecord has_one :user_attribute end user_attribute.rb class UserAttribute < ApplicationRecord belongs_to :user end active_model_serializers導入後ならserializerコマンドが使えるようになっていますので上記のmodelのserializerを作成します。 > rails g serializer user > rails g serializer user_attribute これでserializersというディレクトリと以下のファイルが作成されます。 user_serializer.rb user_attribute_serializer.rb 必ずしもmodelと同名でなくても構いません。modelと同名の場合は...