20211123のRubyに関する記事は7件です。

【環境構築】rbenvで指定バージョンのRubyにダウングレード【mac】

Macでrbenvを使用して指定バージョンのrubyにダウングレードしようと思ったのでメモ ちなみにHomebrewでrbenvは既にインストール済み。 チュートリアルのバージョンと自分の開発環境のバージョンを一致させたくて今回のダウングレードを実施することにしました。 (キャッチアップの際、色々エラーが出てきて、本来の主目的以外のところで時間をとられるのが面倒だなと思ってたので、「もうチュートリアルと一緒のバージョンに下げちゃえ」と思ったので、やむをえずダウングレードすることに)最善策ではないと思うので、良い子はマネしないでね 実行環境 Homebrew 3.3.2 ruby 2.6.8 → 2.5.0 にダウングレード 現在のRubyバージョンを確認 $ ruby -v ruby 2.6.8p205 (2021-07-07 revision 67951) [universal.x86_64-darwin21] 指定バージョンをインストール $ rbenv install 2.5.0 インストールされたか確認 $ rbenv versions * system 2.5.0 (set by /Users/user/.rbenv/version) とりあえずインストールは、されたっぽい。 切り替え可能にする $ rbenv rehash 環境によっては、要らないかもです。 私の環境だと必要でした! Rubyバージョンを切り替える $ rbenv global 2.5.0 Rubyバージョン切り替わったか確認 $ rbenv versions system * 2.5.0 (set by /Users/user/.rbenv/version) 設定できた 参考記事 rbenvでバージョンがうまく切り替わらなかった時にやったこと
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Ruby のまずいコード】数字を削除

お題 引数として与えられた文字列中の半角数字を削除した文字列を返すメソッドを定義してください。 コード def delete_digits(str) str.gsub(/\d/, "") end 改善 このコードは特別まずいというほどではありませんが,決まった文字を削除するなら専用のメソッド String#delete があります。 これを用いると def delete_digits(str) str.delete("0-9") end と書けます。こちらのほうがシンプルですし,速度もかなり上です。 なお,数字以外を削除する場合は delete("^0-9") と書けます。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Could not reach host index.rubygems.org. Check your network connection and try again. と言うエラーについて。

Cloud9を使ってrailsチュートリアルを進めているのですが、Could not reach host index.rubygems.org. Check your network connection and try again.と言うエラーについて教えていただきたいです。 発生している問題・エラー $ bundle install $ bundle update などを叩くと Could not reach host index.rubygems.org. Check your network connection and try again. と表示されます。 自分で試したことといえば数分時間をおいてから新しくディレクトリを作り直すことしかできず、(お手上げ)しかし、それでなぜかエラーが表示されなくなり、問題なく先ほどのコードを叩くとinstall されてupdate出来てしまいました。 そこで、なぜ解決できたのか質問させてください。 hostに行けないとエラーが出た場合(Could not reach host index.rubygems.org. )、何をするべきか、networkを確認しろ(Check your network connection and try again. )と出た場合も何を確認して、どう対処するべきかを教えていただけないでしょうか。よろしくお願い致します。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Ruby のまずいコード】正規表現で特定の文字を囲む

お題 引数として与えられた文字列中の小書きの片仮名を 【 】 で囲んだ文字列を返すメソッドを書いてください。 小書きの仮名とは「っ」「ァ」などのことです1。 ここでは,片仮名の「ァ」「ィ」「ゥ」「ェ」「ォ」「ッ」「ャ」「ュ」「ョ」「ヮ」のみを対象とします。 例えば puts kogaki_mark("キャッシュ") # => "キ【ャ】【ッ】シ【ュ】" となります。 コード def kogaki_mark(str) str.gsub(/[ァ|ィ|ゥ|ェ|ォ|ッ|ャ|ュ|ョ|ヮ]/, '【\0】') end 問題点 このコードは,引数によっては正しく動作しません: puts kogaki_mark("A|B") # => "A【|】B" 与えられた文字列中の | という文字が 【 】 で囲まれてしまいました。 正規表現の書き方が間違っているのです。 文字クラスの [ ] の中で選択2の | を使ってしまっています。どうやらやりたいことを二重に表現してしまったようですね。 文字クラスの [ ] の中では | はメタ文字ではなくリテラル3なので, [ァ|ィ|ゥ|ェ|ォ|ッ|ャ|ュ|ョ|ヮ] という正規表現は「ァ とか | とか ィ とか | とか ゥ とか | とか ェ とか | とか ォ とか | とか ッ とか | とか ャ とか | とか ュ とか | とか ョ とか | とか ヮ とか」という意味になります。 なお,[ ] の中に同じ文字が複数回書かれていても 1 回だけ書いたのと同じです。 正規表現の初心者でこのような書き方をしてしまう方は少なくありません。 テストした文字列に | が含まれていなければ正しい結果を返すので,ミスに気づきにくいのです。 改善 正しい書き方は def kogaki_mark(str) str.gsub(/[ァィゥェォッャュョヮ]/, '【\0】') end または def kogaki_mark(str) str.gsub(/ァ|ィ|ゥ|ェ|ォ|ッ|ャ|ュ|ョ|ヮ/, '【\0】') end です。 「いずれかの文字」という検索パターンは,このように,文字クラスでも選択でも書けます。 どちらがいいのでしょうか? 私は前者を勧めます。 一つの理由は,この例を見れば明らかなように,前者のほうが短いからです。 しかし,二つの文字のいずれか,という検索パターンだと [AB] よりも A|B のほうが 1 字短くなっています。 短さだけを追求するなら後者に軍配があがりますが,文字クラスで書くことにはほかにもいろいろ利点があります。 まず,保守性です。文字の種類を加減するとき,文字クラスで書いておけば当該の文字を追加・削除するだけで済みますが,選択で書くと | も一緒に追加・削除しなければなりません。 また,[ ] の中では,さまざまな記号がリテラルと解釈されることもポイントです。例えば,「丸括弧またはピリオド」は選択で書くと \(|\)|\. となりますが,文字クラスで書けば [().] のようにエスケープせずにすみます。 また,ほかの正規表現と組み合わせる場合には,文字クラスのほうが簡潔に済む場合があります。例えば「第一次産業」「第二次産業」「第三次産業」という文字列を検索したいとき,もちろん 第一次産業|第二次産業|第三次産業 とも書けますが,文字クラス を使って 第[一二三]次産業 と書けます。この [一二三] の部分を選択に置き換えようとすると,単純に 一|二|三 として 第一|二|三次産業 と書いたのではダメで 第(?:一|二|三)次産業 のようにグルーピングしなければなりません。 ((?: ) は ( ) とすれば若干簡素になりますがキャプチャーというオマケもついてきます4)。 小書きの仮名は拗音,促音,外来語その他の表記に使う。 ↩ 選言とも言う。要するに「または」のこと。 ↩ 正規表現として特別な意味をもたない「そのまんま」の文字のこと。英単語の「literal」には「文字通りの」という意味がある。 ↩ もちろんキャプチャーが必要な場合はそれでいいわけですが,不要なキャプチャーはパフォーマンスを落とし,複雑な正規表現ではキャプチャー番号が大きくなってややこしくなる。 ↩
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ruby on rails tutorial3章を始めたら出てきたThere was insufficient space〜 というエラーの解決方法

やっと3章に突入して意気揚々と進めていくと、 qiita.rb There was an error while trying to write to `/tmp/xxxxxxxxxxxxxxxxxxxx/versions`. There was insufficient space remaining on the device. がこんにちは。 どうやら何かの容量がないということらしい。 そうこうしているうちに、awsのターミナルにコードを入力できなくなる。 ちょwどうするんこれ ま、やる事は2択!消すか、増やすかでしょ。 と言うことで調べてみるとこれらの記事が参考になりそうだったので読み進めました。が、解決できませんでした。 解決方法はいつもシンプル 壁にぶち当たるとモチベーションにデバフかかって睡魔召喚し始めますよね私だけですかw AWS Cloud9 の容量不足を解決する 第3章に入ったら hello_app, toy_app は削除しよう 書いてあるやん! hello_app、toy_appを delete してターミナルを再起動して解決しました。 …解決したと思っていました。続く…
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【オリジナルアプリ】公務員からの転職を考える人のための交流サイト【公務員NEXT】

はじめに 自己紹介 未経験からのエンジニア転職を目指す30代前半の地方公務員です。 3児のパパであり、家事・育児・仕事の合間を縫って、何とか20時間/週の学習時間を確保できているという状況です。(記事執筆時点で学習開始から40週を過ぎたので、総学習時間は約800時間です。) ポートフォリとして、オリジナルアプリが完成したので、これから転職活動を開始します。 この記事の目的 転職活動を開始するにあたって、オリジナルアプリの内容を人の目を意識した形で整理しておきたかったからです。 オリジナルアプリの案に悩んでいる人に向けて、一つの事例として参考になってくれればと思っています。 似た境遇の人の励みになれば、幸いです。(私自身、似た境遇の人が頑張っているところを見るとすごく励みになりました。) オリジナルアプリ「公務員NEXT」について 目次 1.サービスの概要 2.開発経緯 3.使用技術 4.インフラ構成図 5.ER図 6.機能一覧 7.開発にあたって意識した点 8.苦労した点 1.サービスの概要 転職を考える公務員のための交流サイトです。 URL ▶︎ https://www.koumuin-next.com PCからでも、スマホからでもご利用いただけます。 「トップページ」のゲストユーザーでログインするボタンを押していただいたら、ユーザー登録をせずに利用できます。 各相談ページの閲覧のみであれば、ログインをせずに利用できます。 2.開発経緯 自分自身が転職を意識し始めた際に、「公務員から民間企業に転職できるのだろうか」、「家族からは反対されないだろうか」などといった不安が頭によぎり、随分と調べました。 その中で、公務員から民間への転職を考えている人は一定数いること、同じような不安を持っている人がいることを知りました。 結局、転職できるか、できないかは、本人が行動するかどうかですが、周囲に相談しにくいこの問題について、同じ境遇の人と交流ができれば、最初の一歩を踏み出すきっかけにはなると考え、このサービスを開発しました。 3.使用技術 フロントエンド HTML CSS Bootstrap 5.0.0 React(React on Rails 12.3.0) いいねボタン、お気に入りボタン、モーダルウインドウなど、一部機能にReactを使用しています。 後述していますが、いずれもReactでなければならないという理由はありませんでしたが、現在、ニーズのある技術のようなので、今回は自身の成長という観点から部分的に取り入れました。 バックエンド Ruby 2.7.3 Ruby on Rails 6.1.4 MySQL 8.0.26 WEBアプリケーションを作るのであれば、RubyかPHPがオーソドックスな選択肢かと思いますが、Rubyを選択したのは、「日本語のドキュメントが多い」、「一つの言語を習得すれば、別の言語の習得のハードルは、最初ほど高くない」という2点から、学習しやすいものがよいと考えたためです。 インフラ Docker 20.10.7 / docker-compose 1.29.2 (開発環境) AWS ( VPC, EC2, RDS, Route53, ACM ) Nginx 1.20.1 Unicorn 6.0.0 CircleCI 2.1 開発環境にDockerを使用したのは、よくに耳にするからということもありますが、PCの環境を変えることなく、開発できるという点に魅力を感じたからです。今後も、何かしら開発を続けていきたいと考えているので、アプリごとにDockerfileやdocker-compose.ymlに開発環境を残しておけるという点は非常に魅力的でした。 AWSについては、「一般的によく使われている」、「Herokuよりも早い」という情報が多く出てきたため、採用しました。基本的には、無料枠の範囲内での利用ですが、私のアプリでは十分だったと感じています。また、実際にサーバーにアクセスして、あれこれと作業をするのは、学習面からは非常に効果が高かったです。 その他 Git 2.24.3 / GitHub VSCode 4.インフラ構成図 5.ER図 6.機能一覧 ユーザー登録・編集・退会、ログイン・ログアウト ゲストログイン 管理者権限(ユーザー一覧、強制退会、各ユーザーへのメモ、相談・回答の削除) 相談の登録・削除 相談への回答・回答への返信及び削除 相談一覧(Ajaxによるページネーション) キーワード検索 いいね(React) お気に入り(React) 7.開発にあたって意識した点 フロントエンド 一覧のページ送りや投稿ユーザー情報の表示は、ページ遷移によるユーザーのストレスをなくすために、Ajax(非同期通信)で実装しました。 入力フォームや投稿一覧など、繰り返し使用するviewについては、修正時の修正漏れを防ぐなど、保守性を考慮して、partialに切り出しました。 バックエンド 管理者権限を持ったユーザーのみ利用できる管理者画面では、登録ユーザーの確認、強制退会、各登録ユーザーへの管理者用のメモ(例:強制退会させた場合にその旨をメモ)を実装しました。また、反社会的な投稿などがあった場合、管理者ユーザーであれば、各相談ページから削除できるようにするなど、実際の運用を想定した機能を実装しました。   以下、管理者画面のイメージです。   ※登録されているユーザーはサンプルデータであり、実在のユーザーではありません。 RspecによるテストやRubocopによるコードチェックを導入していましたが、デプロイ前の確認忘れを防ぐため、また毎回のデプロイの手間を省力化するため、CircleCIによる、CI/CDを導入しました。 Rspecによる統合テストでは、不適当な入力を防止するために、正常に動作することのテストだけでなく、不適応な入力があった場合には、エラーとなることもテストを書くようにしていました。 8.苦労した点 もっとも苦労したのは、CircleCIによる自動デプロイの設定です。 トータルで約3週間もかけてしまいました。 時間をかけ過ぎたなというのが、正直なところですが、諦めずにやりきったことは、今後も出くわすであろうエラーとの闘いに向けての価値ある経験となりました。 闘いの一部始終です。 おわりに 今回のオリジナルアプリ作成は、転職活動をするためにというのがきっかけではありますが、以下の2つの観点からも、本当に取り組んでよかったと思っています。 自分の感じた課題を解決する 技術力を向上させる 自分の感じた課題を解決する 「公務員からの転職」という題材は多くの人にとって、興味のないテーマだと思います。 ただし、自分の課題意識から出てきたテーマということもあり、実装にあたっての細かい点(例:ユーザー情報にほしい項目)までこだわることができたので、私のオリジナルアプリとしてはよいテーマになったと思っています。 そして、この考える過程というのが意外と楽しく、初めはただただプログラミングがしたいと思っていましたが、今はどのような仕様がよいかなど、設計まで含めてやってみたいなという気持ちになっています。 技術力を向上させる 一部にReactを取り入れたり、CircleCIによるCI/CD(特に自動デプロイ)の導入をしたりしましたが、今回のオリジナルアプリの作成に必ずしも必要だったというわけではありません。 ただし、基礎学習の段階では、使わなかったこれらの技術を背伸びして取り入れたことで、自身の成長につながったと思います。 実務であれば、時間面やコスト面も考慮して、そのプロジェクトに最適な技術選定をする必要があるかと思いますが、今回は個人開発であったため、自身の成長にもつながるような技術選定をすることができました。 最後になりましたが、ここまで読んでいただき、ありがとうございます。 後日談 その1 本記事を執筆し、Twitterにも投稿したところ、嬉しいことに実際に使ってみたり、コメントくださったりした方がいらっしゃいました。 アプリの内容的に、周囲の人に「ちょっと使ってみて」とは言いにくいかったので、大変嬉しい出来事でした。 また、そのコメントを受けて、アプリの修正をすることもでき、大変有意義な経験となりました。(詳細はその2へ) Qiitaに投稿する前は、こんなテーマのアプリを記事にするのか少し悩みましたが、記事にして本当によかったです! その2 本記事執筆後に、ゲストユーザー機能を修正しました。 もともと、ゲストユーザーであっても、いずれの機能も使えるようにしておいた方が、このアプリでできることがよくわかり、よいのではないかと考え、そのように実装していました。 しかし、この実装では、「退会」や「パスワード変更」をされてしまうと、以後、ゲストユーザーでのログインができなくなるという問題点がありました。 自分が気づかない間に、ゲストユーザーが使えなくなっていたら、元も子もないので、こういった操作をしようとすると、ゲストユーザーではできない旨のメッセージが出るように仕様を変更しました。 これがユーザーの声を聞いて改善するということか!と、ひそかに感動していました。 (本来は、「もっと、この機能を使いやすく」などがユーザーの声だとは思いますが、今の私にはこれでも十分でした。)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

文字列の置き換え

はじめに 文字列が入力されるので表に沿って文字列をを置き換える 置き換え前 置き換え後 A 4 E 3 G 6 I 1 O 0 S 5 Z 2 string = gets.chomp string.gsub!("A", "4") string.gsub!("E", "3") string.gsub!("G", "6") string.gsub!("I", "1") string.gsub!("O", "0") string.gsub!("S", "5") string.gsub!("Z", "2") puts string 冗長なコードになってしまったので書き直し string = gets.chomp string.gsub!(/A|E|G|I|O|S|Z/, "A" => "4", "E" => "3", "G" => "6", "I" => "1", "O" => "0", "S" => "5", "Z" => "2") puts string まだこっちの方が見やすいかな 追記(2021/11/23) @obelisk68 さんに教えていただいた情報を載せておきます。 trメソッドとは、第一引数を第二引数に変換するメソッド。 つまり、既存の文字を新しく違う文字に変換したい場合に便利となるメソッド。 string = gets.chomp string.tr!("AEGIOSZ", "4361052") puts string ありがとうございます。 勉強になりました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む