3ステップで学ぶRuby入門
-3ステップで学ぶRuby入門- この参考書の10章の「ファイルを書き換えよう」とゆう問題で つまづいたのでメモ。
Ruby初心者にわかりやすい解説をしてくださってるグラミー先生とゆう方の記事を拝見させてもらいました。
こちらがグラミー先生のサイトです(^ ^)
https://www.grami-sensei.com/
わかりやすく親切丁寧に説明をしてくださっているのでとても参考になりました。グラミー先生ありがとうございます( ´∀`)
グラミー先生の記事を引用させてもらいました。
1.クラスの雛形を記述する
以下のようなクラスの雛形とクラスのインスタンスを
生成して実行するプログラムを記述し、
ファイル名をdata_replacement.rbとして保存します。
class DataReplacement attr_writer :inputfile, :outputfile def replace p 1 end end replacement = DataReplacement.new replacement.inputfile = ARGV[0] replacement.outputfile = ARGV[1] replacement.replace
[補足情報] ARGV[1]とARGV[2]はRubyをCLIで実行する時に外部のファイルなどの情報を処理するためのものです。
attr_writerで書き込み専用のアクセサメソッドを設定しています。
2.クラスの雛形を記述したプログラムを実行する
コマンドライン上で保存したファイルを指定してプログラムを実行します。実行結果に1が表示されます。
$ ruby data_replacement.rb 1
3.ファイル読み込みを実装する
以下のようにreplaceメソッドとcontentsメソッドを記述し保存します。
class DataReplacement attr_writer :inputfile, :outputfile def replace contents.each do |content| p content end end private def contents fail 'Specify inputfile.' if @inputfile.nil? File.read(@inputfile).split("\n") end end replacement = DataReplacement.new replacement.inputfile = ARGV[0] replacement.outputfile = ARGV[1] replacement.replace
4.元のCSV形式のファイルを用意する
以下のようなCSV形式のデータが記述してファイル名をinputdata.csvで保存します。
山田 太郎,1,09012345678 山田 花子,2,09023456789 鈴木 次郎,1,09034567890 鈴木 桃子,2,09045678901 田中 三郎,1,09056789012 田中 梅子,2,09067890123 高橋 四郎,1,09078901234 高橋 桜子,2,09089012345 佐藤 五郎,1,09090123456 佐藤 李子,2,09001234567
[補足情報]
・CSVファイルとは
「CSV」とは "Comma Separated Value" の略で、データをカンマ(" , ")区切った値の事です。アプリケーション間でデータをやり取りする際に使われます。CSV形式で保存されたファイルを「CSVファイル」と呼びます。
CSV形式のファイルは、メモ帳などのテキストエディターで作成することができます。項目と項目の間にカンマを入れてデーターを記入してゆきます。ファイルの拡張子は「csv」で保存します。メモ帳でカンマ区切りのデーターを作成し、「txt」ファイルとして保存すると、それは「CSVファイル」ではなくただの「テキストファイル」になりますので気をつけて下さい。
5.保存したプログラムを引数を指定して実行する
コマンドライン上で以下のようにプログラムを実行します。実行結果がinputdata.csvの中身と同じであることを確認します。
$ ruby data_replacement.rb inputdata.csv
"山田 太郎,1,09012345678" "山田 花子,2,09023456789" "鈴木 次郎,1,09034567890" "鈴木 桃子,2,09045678901" "田中 三郎,1,09056789012" "田中 梅子,2,09067890123" "高橋 四郎,1,09078901234" "高橋 桜子,2,09089012345" "佐藤 五郎,1,09090123456" "佐藤 李子,2,09001234567"
6.名前、性別、携帯電話番号を書き換える処理を記述して保存する
以下のようにプログラムを記述し保存します。
class DataReplacement attr_writer :inputfile, :outputfile def replace contents.map do |content| name, sex_code, tel = content.split(',') last_name, first_name = name.split [last_name, first_name, sex(sex_code), separated_tel(tel)].join(',') end end private def contents fail 'Specify inputfile.' if @inputfile.nil? File.read(@inputfile).split("\n") end def sex(code) code.to_i == 1 ? '男性' : '女性' end def separated_tel(number) number.match(/(\d{3})(\d{4})(\d{4})/) "#{$1}-#{$2}-#{$3}" end end replacement = DataReplacement.new replacement.inputfile = ARGV[0] replacement.outputfile = ARGV[1] p replacement.replace
7.名前、性別、携帯電話番号を書き換える処理を記述したプログラムを実行する
コマンドライン上で保存したプログラムを以下のように実行します。
実行結果に書き換えた後の行毎の配列が表示されます。
$ ruby data_replacement.rb inputdata.csv
["山田,太郎,男性,090-1234-5678", "山田,花子,女性,090-2345-6789", "鈴木,次郎,男性,090-3456-7890", "鈴木,桃子,女性,090-4567-8901", "田中,三郎,男性,090-5678-9012", "田中,梅子,女性,090-6789-0123", "高橋,四郎,男性,090-7890-1234", "高橋,桜子,女性,090-8901-2345", "佐藤,五郎,男性,090-9012-3456", "佐藤,李子,女性,090-0123-4567"]
8.ファイルに書き出す処理を追加する
以下のようにプログラムを記述し保存します。
class DataReplacement attr_writer :inputfile, :outputfile def replace output = contents.map do |content| name, sex_code, tel = content.split(',') last_name, first_name = name.split [last_name, first_name, sex(sex_code), separated_tel(tel)].join(',') end.join("\n") write_file(output) end private def contents fail 'Specify inputfile.' if @inputfile.nil? File.read(@inputfile).split("\n") end def sex(code) code.to_i == 1 ? '男性' : '女性' end def separated_tel(number) number.match(/(\d{3})(\d{4})(\d{4})/) "#{$1}-#{$2}-#{$3}" end def write_file(output) fail 'Specify outputfile.' if @outputfile.nil? File.write(@outputfile, output) end end replacement = DataReplacement.new replacement.inputfile = ARGV[0] replacement.outputfile = ARGV[1] replacement.replace
9.ファイルに書き出す処理を追加したプログラムを実行する
コマンドライン上で保存したプログラムを以下のように実行します。
実行結果には何も表示されません。
$ ruby data_replacement.rb inputdata.csv outputdata.csv
[補足情報]
outputdata.csvが生成される。
10.書き出したファイルを確認する
プログラム実行時に指定した書き出し用のファイルである
outputdata.csvを開いて確認します。
inputdata.csvを書き換えた内容が表示されます。
山田,太郎,男性,090-1234-5678 山田,花子,女性,090-2345-6789 鈴木,次郎,男性,090-3456-7890 鈴木,桃子,女性,090-4567-8901 田中,三郎,男性,090-5678-9012 田中,梅子,女性,090-6789-0123 高橋,四郎,男性,090-7890-1234 高橋,桜子,女性,090-8901-2345 佐藤,五郎,男性,090-9012-3456 佐藤,李子,女性,090-0123-4567
試しに自分の名前、性別、番号をinputdata.csvに書き込んでから
$ ruby data_replacement.rb inputdata.csv outputdata.csv
をしたらしっかりと記述されました。
hugoの編集
hugoのインストールから本番デプロイまでをまとめられたから次はhugoの編集の仕方を少しまとめてみようと思う!
新しく記事を作成
hugo new posts/secound.md (secoudのとこはなんでも良い)
postsディレクトリにsecound.mdが追加される、 これはその中身
title = "secound" date = 2018-11-16T16:25:17+09:00 draft = true(falseにすると本番にデプロイ出来る) tags = [] categories = []
tags = [] categories = []
これは
tags = ["hugo"] categories = ["hugo"]
の様にしてから
hugo -t theme名
にすると、
categoriesディレクトリとtagsディレクトリに勝手に生成してくれる。
topページの編集はconfig.toml
profileページの編集はabout.md
blog & autputページの編集は_index.md
hugoのテーマをインストールからデプロイまで
まず、自分はhugoディレクトリがあるからそこで
hugo new site muublog
それから
cd muublog
宣言する!
git init
テーマを追加する
git clone https://github.com/avianto/hugo-kiera.git kiera
追加をしたらthemesディレクトリに移動する
cd themes
今はthemesディレクトリが空だから
git submodule add https://github.com/avianto/hugo-kiera.git kiera
そして
cd ..
atomで開く
atom .
themesのconfig.tomlをコピーして、muublogのconfig.tomlに貼り付ける!
それから新しい投稿を追加
hugo new posts/first-post.md
これで
hugo server -D
出てきたlocalhostのURLをブラウザに貼り付けたら表示される。
次に新しくリポジトリを作ってpushする。
git add . git commit -m "first commit" git remote add origin git@github.com:yourname/リポジトリ名.git git push -u origin master
次は本番環境で表示できる様にしてみる!
config.tomlを少しいじる
baseurl = "https://yourname.github.io/リポジトリ名" publishDir = "docs"
を追加hugoコマンドでhtmlなどのファイルを作成
hugo -t theme名
git add . git commit -m "コミット名" git checkout master git merge ブランチ名 git push origin master
次にリポジトリの設定を変更する
SettingからGithub pagesのSourceを
master branch/docs folderにしてsaveするとURLが吐き出される。
https://muuuuuuuuuu.github.io/myproject3/
こんな感じで本番にデプロイ出来ました!
RailsでRakeタスクを学んだメモ
Rakeとは
Rubyで書かれたコードをタスクとして作成しておいて必要な時に呼び出して
実行出来る便利な機能。
Rakeの設定方法
$ gem install rake
そして
$ rails g task task_sample
するとlib/tasks/task_sample.rakeが生成されるのでこのファイルに書いていく
これは初期状態
namespace :task_sample do end
タスクに処理を書いていく
namespace :task_sample do desc "ここにはそのタスクの説明を記述してあげる" task :sample do puts "Hello World" end end
確認をするには
$ rake -vT
そしたらタスクが追加されているか確認出来る
... rake task_sample:sample # ここにはそのタスクの説明を記述してあげる ...
実行
$ rake task_sample:sample Hello World
モデルにアクセスする場合
モデルにアクセスする場合は:enviroment を指定する
因みにモデルはMVCのMではございません!
最初ずっとMやと思ってました( ・∇・)
たとでばcontrollerに
def hello puts "こんちは" end
としたら
desc "ここにはそのタスクの説明を記述してあげる" task :sample => :enviroment do a = controller名 p a.hello end 「こんちは」と出力される
こんな感じ。
赤文字はわかりにくかったかな(☝︎ ՞ਊ ՞)☝︎
リゾートバイトのリゾバ.com
10年程前にスキー場で働いてました
岐阜県にある高鷲スノーパークで☆
控えめに言って・・・超楽しかったです♪(´ε` )
いや〜あれは本当に楽しかったな〜
あれからもう10年かー
毎日毎日みんなで集まって飲んだり騒いだりアホな事ばっかりやってましたね
20代前半の時やったから何をやっても楽しかった時期があるかもしれないけど
僕はレストランで働いていたので休みの日しかボードができなかったんですけど
それで十分でしたね!!
テンション高い時はOPEN CLOSEまで滑ってましたよ!
全然上達しなかったけど、、、
平日のお客さんが少ない時に滑れるのは従業員の特権ですよね!
かけがえのない仲間もできて今でも遊んだりしています
リゾバは本当にしといてよかったなってめっちゃ思います!
良い経験ができましたよ!
あまりにも楽しかったから次の年も高鷲スノーパークで働いてました笑
あの2年間は本当に良い思い出です。
仕事も結構真面目にしていて、それを見てくれてたチーフが時給を上げる様に
派遣会社に連絡してくれたんですよね
確か100円上がった様に思います
バイトで時給が100円も上がるのは結構嬉しいですよね♪
なんでも真面目にするのが一番(☝︎ ՞ਊ ՞)☝︎
そんな訳で今日はちょっとした思い出話をさせてもらいました
僕が契約していた派遣会社は株式会社ヒューマニック
のリゾバ.comです
ヒューマニックって久しぶりに聞いてちょっと懐かしい気分になった
もしリゾバしようか悩んでる方は1年ぐらいはしといても全然良いと思いますよ!
本当に良い経験と良い思い出が出来ます!
LINE Message APIでRailsを使っておうむ返し
こんにちは! 今LINE Message APIでRailsを使ってちょこっと作りたいものがあるので
その前哨戦としてまずはおうむ返しをしてみたのでメモ!
まずは携帯にはラインはあるけどパソコンにはラインはまだインストールしていなかったので
まずはインストール。
そしてLINE developersアカウントを下記のサイトから登録を行います。
https://developers.line.me/ja/
こちらの記事を参照
LINE developersアカウントの登録とMessaging APIの基本設定 - Symfoware
次にherokuアカウントの準備
$ rails new sample_bot
本当はここで
$ rails new sample_bot --database=postgresql
をしたかった。 herokuはSQLiteが使えないのでPostgreSQLを使う為に上記の様にしたかった
そしたらローカル環境でも本番環境でもちょっとだけめんどくさくなくなるみたい
必死こいてググって色々やってみたがなぜか出来なくて
今回はローカルではSQLite、本番ではPostgreSQLで進む
その時にGemfileにgem 'sqlite3'も生成されるからそれをローカル環境に移動してあげる
group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] gem 'sqlite3' end
本番環境ではPostgreSQLで実行するからGemfileに追加してあげる
group :production do gem 'pg', '0.20.0' end
そして
$ bundle install --without production $ rails s
で、いつものやつが出たら成功!!
次にLINE botを使うためのgemをいれる
Gemfileに
gem 'line-bot-api'
を追加
忘れる事なく
$ bundle install --without production
次に今回作るおうむ返し用のアプリをherokuで作成する
$ heroku create sample-line-bot20001211
heroku側の動作確認用にroutingの設定を実施
app/controllers/application_controller.rbを以下の定義を追加
def hello render html: "hello, world!" end
app/config/routes.rbを以下の定義を追加
root 'application#hello'
commitしてからherokuにデプロイ
$ git add . $ git commit -m 'first commit' $ git push heroku master $ heroku open
heroku openした時にエラー発生!!
Gemfileみたりコードが間違えていないか色々検証したが
この時点でほとんどまだコードを書いてないのにエラーになった
herokuのアプリを消去してからもう1回作成してremoteのurlを変更してから
再度heroku openしたらしっかりと表示された!!
LINEからのrequestを受け取るcontrollerの作成
$ rails g controller linebot
LINEbotの認証情報をセキュアに利用できるようにdotenv-railsを導入
gem 'dotenv-rails'
gem 'dotenv-rails' とは?下記参照
環境によって変わる設定値はdotenvを使うと便利 - Qiita
忘れる事なく
$ bundle install --without production
heroku側で、値を参照できるようにLINE developersアカウントを作成した時に
Channel Secret、アクセストークンをsetしておきます。
$ heroku config:set LINE_CHANNEL_SECRET=xxxx $ heroku config:set LINE_CHANNEL_TOKEN=xxxx
xxxxにコピペして貼り付け
routingの定義を追加
config/routes.rbを編集します
post '/callback' => 'linebot#callback'
controllerの実装
app/controllers/linebot_controller.rbを編集します
class LinebotController < ApplicationController require 'line/bot' # gem 'line-bot-api' # callbackアクションのCSRFトークン認証を無効 protect_from_forgery :except => [:callback] def client @client ||= Line::Bot::Client.new { |config| config.channel_secret = ENV["LINE_CHANNEL_SECRET"] config.channel_token = ENV["LINE_CHANNEL_TOKEN"] } end def callback body = request.body.read signature = request.env['HTTP_X_LINE_SIGNATURE'] unless client.validate_signature(body, signature) error 400 do 'Bad Request' end end events = client.parse_events_from(body) events.each { |event| case event when Line::Bot::Event::Message case event.type when Line::Bot::Event::MessageType::Text message = { type: 'text', text: event.message['text'] } client.reply_message(event['replyToken'], message) end end } head :ok end end
そしてデプロイ
$ git add . $ git commit -m 'setup reply' $ git push heroku master
LINE Botの設定画面にherokuのappのURLを設定 LINE botの管理画面に戻って、Webhook URLという部分を編集
URLは先ほど追加したLINE Botのリクエストの受け口である/callbackの指定を忘れない
投稿に応じてWebhookイベントを発生をONにする
Webhook URL設定の上の欄です。 編集して、利用するにチェックして更新する
(任意)LINE Bot デフォルトの自動返信を削除する
以下の自動応答メッセージを削除しておくと、おうむ返しの確認がしやすいです
検証
LINE developerのページに戻りQRコードから友達追加
なんでも良いから送っておうむ返し出来たら成功!!
RubyとRuby on Railsを勉強してる&したい初心者向きの参考書
(おはようございます!
今回はRubyとRuby on Railsを勉強をしている方と
これからしようと思っている初学者に向けて参考書と勉強方法について紹介したいと思います。
プログラミング未経験の方で
これからRubyを勉強をしようと思っている方は
まずはProgateをオススメします。
会社情報 | プログラミングの入門なら基礎から学べるProgate[プロゲート]
Progateは本当に良いですね!
無料でもできるんですが一部しか利用をできないので
1ヶ月1000円程で全てを勉強出来ます。
はっきり言って1000円以上の価値はあります!
ただ勉強をするだけじゃなくてゲーム感覚で勉強が出来るのも良いんですよね
やればやる程、経験値がもらえて、レベルが上がったりしていって
1日に稼いだ経験値で順位を見れたりしてそれがまた楽しいんですよね!
1回だけその日の経験値で僕1位になりました(☝︎ ՞ਊ ՞)☝︎
あれは嬉しかったですねー
現在の僕のレベルは319です。
そして次はドットインストール!
ドットインストールは動画をみて勉強出来ます。
ドットインストールもめちゃくちゃ良いですね
動画が3分以内に収まっているのでとても勉強をしやすいです
そして講師の方のコードの書き方とゆうかパソコンの使い方とゆうか
物凄く早くて現場ではみなさんこんな感じでコード書いてるのかなって
勉強になりました。
こちらはRubyを学んでからRuby on Railsでフレームワークを使って
ミニtwitterを作っていく感じですね。
1 からアプリを作っていきます
もの凄くボリュームがあります!
僕は全部やりきるのに28日かかりました!
そしてやっぱり難しいので挫折する人が結構多いい見たいですね
オススメの進め方は分からないとこは気にせず進めていく事ですね
全部を理解しながら進めて行くなんて初学者では相当厳しいと思います
ひとつのアプリを作るのはこんな感じなんだなーってゆう気持ちで僕は進めて
いました。
こんな感じで勉強をしてきたんですけど
やっぱり基礎の部分が理解出来ていないんですよね
基礎がわかってない状態で次のステップに行くのは嫌やったんで
ここでもう1回基礎をしっかりと勉強しようと思いました。
まずはこの参考書
|
もー本当に良い参考書です!
凄く丁寧に書かれていて進めていく内に基礎のあんまり理解出来ていなかった部分が
どんどん結びついていく感じですね
あーなるほど!これはこーゆー事やったのか!って。
10章でちょっとつまづいたので
もし分からなくなった時はこちらにアウトプットしておきましたんで
よかったら見てください。
https://muuuuuuuuuu.github.io/hugo-kiera-theme/
そして次にこちらです
|
こちらの書籍はプロを目指す人のためRuby入門で
初級者から中級者向けの書籍です
本書の概要でも書かれているんですが
Web上のオンライン教材などで独学し、
なんとなくRuby on RailsでWebアプリケーションを作れるようになったが、Ruby言語
そのものに精通しているとは言いがたいと考えている。
そんな人の書籍です。
この説明を見た時に、俺やんっ!!!!って思いました!!!!
全然Ruby言語に精通していない!!!!基礎の部分でめっちゃ不安です!!!!
買いますっ!!!!
そして書いました(☝︎ ՞ਊ ՞)☝︎
読んでいて、ふむふむなるほどって読み進めていたんですが
途中から難しくなってきてまだ全部は読みきれてないです
まだまだ全然初級者なもので
少しずつ実力がついてきたらまだ読めていない所を読んで行って
理解を深めて行こうと思ってます!
そして次がこちらです
|
一番最初に買った参考書になります
Rubyの基礎をもう1回勉強し直そうと思った時にこの参考書を読んでいました
ですがパーフェクトと書いてるだけあって途中からチンプンカンプンでした
今の自分の実力ではまだ早いと思い、最初に紹介した参考書を
買いに行った次第です!
もっともっと実力をつけてまたパーフェクトRubyを読んで理解を深めて行こうと
思ってます!
絶対に理解できる様になるぞっ!!!!
まーこの様な流れでRubyの基礎を再勉強していた訳なんですが
参考書を読んでいる時に手を動かしながらコードを書いてたんですが
これではまだわかっていないなって思い
paizaでランクDの問題を全部解きました!
paizaは求職と学習を同時に行えます!
ランクDからランクSまで問題があってランクが上がるごとに
難しくなっていきます
おそらくランクAとランクSは神の領域やと思います!!
今の僕の実力では!!
まずはRubyの基礎の基礎をしっかりと身につける為にも
ランクDの問題を全部解きました!!
全部で105問!!
3日かかりました!!
そして不安やったRubyの基礎の基礎は身についたと思います!!
Rubyの基礎に不安を覚えてる方は是非しておいた方が良いと思います!!
ランクCにもとりかかりたかったんですが時間的な問題で
1問しか解けませんでした。
今回はお預けです。
こんな感じでRubyの基礎固めをしていきました
そしてRuby on Railsも基礎がわかってなかったんで次はRailsの基礎を
固めていこうと思ってこちらの参考書を書いました
|
この参考書も本当に良いですね!
1日で基本が身に付くって書いてますけど
本気を出したら本当に1日で出来ると思います!
僕は2日で全部出来ました!
Railsでインスタンス変数とかデータベースとかその他諸々あやふやに
覚えていた事がまたまた結びついていきました!
Railsで基礎で頭がごちゃごちゃしている方はこの参考書で
頭の中を整理していくのをオススメします。
次にこちらの参考書を
|
勉強したかったんですがこちらも時間の関係上出来ませんでした(/ _ ; )
まだ買ってなくてどの様な内容かお伝え出来なくて恐縮ですが
また勉強をさせて貰った時に紹介をさせて貰おうと思ってます。
以上で僕がRubyとRuby on Railsを勉強したなかで少しでも勉強をされている方達に
参考になったらなって思い紹介させて貰いました。
明日からはLINE Message APIでRailsを使ってLINE BOTを作っていきます!!
自分のアイディアをこれから作って行けると思うとワクワクしています♪♩
また出来上がりましたら紹介させて貰いまーす(☝︎ ՞ਊ ՞)☝︎