- 1. ここはTopページ
- 1.0.1. 【個人開発】英語の発音精度を診断するアプリ「Speaking Checker」を作りました
- 1.0.2. シッカリとエンジニアを目指す前に最低限押さえたい技術要素
- 1.0.3. 【Rails】Railsでカバレッジを計測する
- 1.0.4. Gemをインストールする時に関連するGemを自動でインストールする
- 1.0.5. RailsのAction Cableで任意のメッセージ形式でやりとりする
- 1.0.6. 【Ruby on Rails】Herokuのデプロイ時のエラーについての対処法
- 1.0.7. Rails データベースの更新
- 1.0.8. 【Ruby】毎日更新の天文写真が送信されるLINEbotを作ってみた
- 1.0.9. [個人開発]ランニングシューズ選びに困っている方向けのアプリ「Shoes For Runners」を開発しました
- 1.0.10. パスワードに英数字混合のバリデーションを設定する方法
- 1.0.11. M1MacのローカルでDockerを使ってRailsの環境を構築する。
- 1.0.12. RailsアプリをHerokuにデプロイする方法
- 1.0.13. RailwayでDiscord Botをホストしてみた
- 1.0.14. Ruby で素数計算プログラムを作る (無限長)
- 1.0.15. 連想配列とは?
- 1.0.16. 備忘録 whereでオブジェクトを得れなくて困っている君へ
- 1.0.17. FizzBuzz
フルスタックエンジニアへの道 part 1 ~Rails 7 × Dockerの環境構築 1
# はじめに
ゼロから100まで、すべて自分の力でウェブアプリケーションを作り上げることのできる技術と経験を得ることで、プロジェクト・マネジメントができるリーダーになりたい…フロントエンド、バックエンド、デザイン、インフラなど関係なくなんでもできる最強のエンジニアになりたい…Modern-day Da Vinciになりたい…(笑)。
この目標を達成するための方法を考えてみた結果、**現場で行われている開発プロセスを自分ひとりでやってみるのが一番速いんじゃないか**という仮説を立てた。
そこで、私個人の成長記録として、この「フルスタックエンジニアへの道」という連載をやっていこうと思う。
読者諸兄におかれましては、この記事で技術的な知識を得るというよりも、私が**どんなことをどんな順番で勉強したのかを参考にしていただいたり、シンプルに頑張ってるヤツ(私^^;)を見て仕事や勉強へのモチベーションとしていただければ**なと思います。
### なぜそう思った?
エンジニア歴5ヶ月目の私は、現在Rails 6を使った社内アプリケーションの開発をやっている。(で、明後日デプロイする笑)。
現在時刻に最も近いキリの良い時刻を取得する方法
送信の予約機能で、現在時刻に最も近い10分単位の時間を取得したいことがあり、その計算方法が勉強になったので記載します。
例えば現在時刻が15:55なら16:00を取得したいという趣旨です。## 作成したメソッド
“`ruby
def round_off(seconds = 60)
Time.at((to_f / seconds).ceil * seconds)
end
“`
上記のようにメソッドを定義し、以下のように呼び出すことで実現できました。“`ruby
Time.now.round_off(10.minutes)
# もし現在時刻が16:55なら、17:00の時刻が取得できます。
“`## 何をしているか
先輩に教えてもらいながら書いたのですが、理解するのに時間がかかったのでメモしておきます。
1.指定した秒数で割り算をし、切り上げる
“`ruby
(to_f/seconds).ceil
“`2.その数字にもう一度指定の秒数を掛ける
“`ruby
(to_f/seconds).ceil * seconds
“`上記をすることで
DockerからRailsのコントローラとルーティングを設定する
仮想環境下でコントローラやルーティングの設定はしたことがあったが、Dockerではなかったので備忘録として簡単に記載する。
homes_controllerを作成する
“`言語:ターミナル
docker-compose exec web rails g controller homes
“““app/viewsの配下にhomesディレクトリが作成されていることを確認し、top.html.erbのファイルを作成する。
トップページだと分かるように下記のように記載する。
“““言語:top.html.erbここはTopページ
“““
コントローラに以下のように記載する。
“`言語:routes.rb
class HomesController <
【個人開発】英語の発音精度を診断するアプリ「Speaking Checker」を作りました
## はじめに
初めまして、よしたかと申します!突然ですが、皆さんは英語が得意でしょうか?
私は「読む・書く」は得意ですが、「聞く・話す」は苦手です。「読む・書く」については高校時代の先生の教え方がうまかったおかげか今も得意なのですが、「聞く・話す」については海外留学や英会話スクール等に通ったことがなく、外国人の方と話す経験がほとんど無かったので苦手です。
他の方はどうなのか?と思い調べてみると、下記のビジネスパーソン向けに行われた調査データによると、英語が得意と答えた人は約3割なのに対して、英語が苦手と答えた人は約7割と多数を占めていることが分かります。
参考: [「英語学習の実態と意欲」に関する調査結果](https://www.iibc-global.org/iibc/press/2019/p123.html)私は一人でも多くの方に英語を好きになって欲しいです。そのため、ゲーム感覚で英語の発音練習ができないかと思い、「Speaking Checker」を開発しました。
▼サービスサイト
https://www.speaking-checker.com/
## サービ
シッカリとエンジニアを目指す前に最低限押さえたい技術要素
# エンジニアのことがわかる様になりたいと言われる。
みなさん、言われますよね。TechAcademy講師をやったり、社内のマーケターに技術的なことを教えたりする中で
エンジニアのことをわかる様になりたいと言われることが多くあります端的にSQLやRailsを少し教えたところで
方法論がわかるだけで、本質的なことを理解してもらえないでしょう。システムが動く原理、何が作れて何が作れないのかわかる様になり
自分で考える手段を得るには
私たちが歩んできた基礎をなぞってもらいましょう。全てなぞる必要はないのです
私たちがやってきた事の中で重要だと思う部分をまとめましょう。## ITパスポート(基本情報)の「テクノロジ系」分野
基本的にITパスポートや基本情報と聞くと業務で役立たないというエンジニアが多いと思います。私もそうでしたが、 「基礎理論」「コンピュータシステム」「技術要素」の部分に関しては
ITパスポートの中で開発に必要な知識が詰まってる部分です### 【TODO】 基本情報の本でテクノロジ分野だけ学びましょう
出来れば基本情報の本でテクノロジ分野だけ学びま
【Rails】Railsでカバレッジを計測する
# 初めに
`Rails6`のプロジェクトにカバレッジを導入したので、そのやり方を記事にしておきます。
## 環境
– Rails 6.1.4
– Ruby 2.7.4
– simplecov 0.21.2# simplecov を導入する
カバレッジを測定するためのジェムである`simplecov`を追加します。
“`ruby:Gemfile
group :test do
gem ‘simplecov’, require: false
end
“``simplecov`の設定を追加する。
“`ruby:spec/rails_helper.rb
require ‘spec_helper’
require ‘simplecov’
SimpleCov.start ‘rails’RSpec.configure do |config|
# 省略
end
“`これで`Rspec`実行後に、`coverage/index.html`に実行結果が出力されます。
# 参考
[simplecov – Github](https://github.com/si
Gemをインストールする時に関連するGemを自動でインストールする
Rubyでは標準でRubyのライブラリを管理するRubyGemsというコミュニティがあり、gemというコマンドを使用することでRubyGemで管理されているライブラリを取得できます。
RailsではGemfileというアプリケーションで使用するGemの情報を記述している管理ファイルです。
Gemfileにgemコマンドの後ろに取得したいGem名を記述し(既に取得しているGemのバージョンの変更も可)、installを実施することができますが、Gemは様々なGemが複雑に関連して動作する為、取得したいGemと関連するGemも取得する必要がある場合がある。インストールを実施する際
“`ターミナルの作成中アプリのディレクトリ
% bundle install
“`
このコマンドを使うと取得したいGemに関連するバージョンのGemを一緒にインストールしてくれる。
これはbundlerというGemが働いてくれている。:::note info
bundlerというGemを使うと関連するGemファイルも一緒に取得してくれる
:::
RailsのAction Cableで任意のメッセージ形式でやりとりする
## 背景
REST API, WebsocketのAPIを提供するとあるサービスのMockを素早く作るため、Railsを選定したが、メッセージの形式がRailsと合わなかった。
メッセージ送信では、 `command`, `data`, `identifier`を送る必要があるが、
“`json
{
“command”: “message”,
“data”: “{\”message\”:\”test message\”,\”action\”:\”speak\”}”,
“identifier”: “{\”channel\”:\”RoomChannel\”}”
}
“`例えば、 `command` をやめて `cmd` だけで任意のアクションを指定できるようにしたい。
## 注意
今回はローカル起動用のMockの作成を目的としていたためoverrideを試しました。
副作用の検証まではしていませんし、通常はRailに乗る方が良いので使い所は注意しましょう。## サーバーが受け取るメッセージを任意の形
【Ruby on Rails】Herokuのデプロイ時のエラーについての対処法
RailsチュートリアルでHerokuにアップする時があり、
`git push && git push heroku master`と打つとエラーになりはまってしまったのでその対処法を記述しておきます。Herokuをデプロイするために打ったコマンド
“`
$ git commit -am “Add hello”
$ heroku create
$ git push && git push heroku master
“`出てきた内容
“`
hogehoge toy_app % git push -f heroku main
Enumerating objects: 89, done.
Counting objects: 100% (89/89), done.
Delta compression using up to 4 threads
Compressing objects: 100% (72/72), done.
Writing objects: 100% (89/89), 22.14 KiB | 2.21 MiB/s, done.
Total 89 (delta
Rails データベースの更新
データベースの更新
“`データベースの更新
rails db:migrate
“`
【Ruby】毎日更新の天文写真が送信されるLINEbotを作ってみた
# はじめに
Messaging APIを使ったLINEbotでNASAの毎日更新される天文写真を送ってくれるものを作ってみました。さらに、飽き足らずに日付を選んでその日の天文写真も見られるようにしました。#### 完成形
## 前提、環境など
[こちらの記事](https://qiita.com/Yuzu_Ginger/items/18edc58bd039fc19ad53)のサンプルコードが動かせることが前提です。
また、[こちらの記事](https://qiita.com/Yuzu_Ginger/items/675cca0f56a8ed8b4a23)の手順1でNASA APIキーを生成してください。https://qiita.com/Yuzu_Ginger/items/18edc58bd03
[個人開発]ランニングシューズ選びに困っている方向けのアプリ「Shoes For Runners」を開発しました
# はじめに
簡単な質問に答えることでおすすめのシューズを提案するアプリ「Shoes For Runners」を開発しました。**サービスを作ったきっかけ**
私が陸上部に所属していたので、部活の後輩や家族からシューズの選び方についてよく聞かれました。その時に、ネットで調べても、おすすめのシューズが複数個紹介されるものの、結局どれを買えば良いのか分からないという意見をよく聞きました。そこで、簡単に自分にあったシューズがわかるアプリを作ってみようと思いました。# サービス概要
ランニングシューズについて何を買えば良いかわからない人におすすめのシューズを提案するアプリです。簡単な質問に答えることで自分に合ったシューズを知ることができます。# アプリURL
ht
パスワードに英数字混合のバリデーションを設定する方法
deviseにはデフォルトでバリデーションが設定されていますが、英数字混合のバリデーションはデフォルトにはないため別途記述する必要があります。
記述内容は以下二文をuserモデルに記述するだけ。
“`ruby:user.rb
VALID_PASSWORD_REGEX = /\A(?=.*?[a-z])(?=.*?[\d])[a-z\d]+\z/i.freeze
validates :password, format: { with: VALID_PASSWORD_REGEX }
“`この正規表現を用いたバリデーションの記述により、パスワードに英数字混合のバリデーションを設定できました。
正規表現を用いれば英数字の他に全角かな/カナ漢字など、細かくバリデーションを設定することができます。
M1MacのローカルでDockerを使ってRailsの環境を構築する。
Dockerでの環境構築につまづいたこととコントローラとルーティングでTOPページを表示させるのにつまづいたので備忘録として簡単に設定をやってきたことを記載します。
行ったことはほぼこの動画通りなので、記載内容について詳しく知りたい方はこちらを参照ください。
とてもわかりやすく解説されていました。最初に準備したものは
デスクトップにフォルダを作成して以下のファイルを用意した。
・Dockerfile
・docker-compose.yml
・srcディレクトリの配下にGemfile
src以下のGemfile以外はこの後の操作で作成される。
というサービスでDiscord Botをホストしてみました。
# 登録
メール、またはGitHub連携で登録するようです。
Loginが登録も兼ねてるのが地味に判りづらい。
# デプロイ

[Dashboard](https://railway.app/dashboard)に飛び、`New Project`ボタンを押します。

# コード
“`rb
prev_numbers = []# 1は素数ではないので、2からカウントアップする
2.step do |current_number|
not_prime_number = false# 今までに出てきた数全てで今の数を割る
prev_numbers.each do |prev_number|
if (current_number % prev_number).zero?
not_prime_number = true
break
end
end# 次の数を「今までの数全て」で割るために、今までの数を覚えておく
prev_numbers.push current_numberputs current_number unless not_prime_number
end
“`# 結果
に数字を与えているのに対して、好きな文字を与えることができる配列のことである。」**
“`sample.js
// 配列
var result_array = [
’70点’, // 値1
’60点’, // 値2
’92点’ // 値3
];// 連想配列
var result_associative_array = {
tarou : ’70点’, // キー1 : 値1
jirou : ’60点’, // キー2 : 値2
hanako : ’92点’ // キー4 : 値3
}
“`
# Hashと同じじゃないの?
それって、RubyでいうHashのことじゃないのかなと思ったので調べたところ、厳密には違うみたいです。
## Rubyにおける連想配列(Hash)
Rubyの[リファレンスマニュアル](https://docs.ruby-lang.org/ja/lates
備忘録 whereでオブジェクトを得れなくて困っている君へ
1.~~~ids = Object.where(条件).pluck(:id)
2.Hoge = Object.find(~~~ids)Hogeにwhereの条件で絞った、オブジェクトが複数得れる
FizzBuzz
# FizzBuzz
FizzBuzzプログラムは、以下のような挙動をするプログラムです。3で割り切れる数値を引数に渡すと、「Fizz」を返す
5で割り切れる数値を引数に渡すと、「Buzz」を返す
3と5の両方で割り切れる数値を引数に渡すと、「FizzBuzz」を返す
それ以外の数値は、その数値を文字列に変えて返す“`
def fizz_buzz(number)end
puts “数字を入力してください。”
input = gets.to_i
puts “結果は…”
puts fizz_buzz(input)
“`
メソッドfizz_buzzを定義して、そのなかで条件分岐する計算式を書きます。FizzBuzzと返すには…
“`
if number%15 ==0
“`
もしくは
“`
if number%3 == 0 && number%5 == 0
“`
でも可能です。
しかし、前者のほうがシンプルなので前者を採用。コードは見やすいほうが良いので。残りは単純です。
“`
if number%3 == 0
“`
でFizzを返し、
`