ムーのしょ〜もない様でしょ〜もなくもないブログ

プログラミング未経験だけど、エンジニアになりたい、IT関係の仕事がしたい方向けに情報を発信しています!あっ!けどプログラミング以外にも皆さんに有益になる様な情報も発信しますよー!

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]はRubyCLIで実行する時に外部のファイルなどの情報を処理するためのものです。  

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 APIRailsを使ってちょこっと作りたいものがあるので

その前哨戦としてまずはおうむ返しをしてみたのでメモ!

まずは携帯にはラインはあるけどパソコンにはラインはまだインストールしていなかったので

まずはインストール。

そしてLINE developersアカウントを下記のサイトから登録を行います。

https://developers.line.me/ja/

こちらの記事を参照

LINE developersアカウントの登録とMessaging APIの基本設定 - Symfoware

次にherokuアカウントの準備

あらかじめLINE-BOTディレクトリを作成しておいて

$ rails new sample_bot

本当はここで

$ rails new sample_bot --database=postgresql  

をしたかった。 herokuSQLiteが使えないのでPostgreSQLを使う為に上記の様にしたかった

そしたらローカル環境でも本番環境でもちょっとだけめんどくさくなくなるみたい

必死こいてググって色々やってみたがなぜか出来なくて

今回はローカルではSQLite、本番ではPostgreSQLで進む

rails newをした時にフレームワークが生成されるので

その時にGemfilegem '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の指定を忘れない f:id:muuuuukun:20181210223121p:plain

投稿に応じてWebhookイベントを発生をONにする

Webhook URL設定の上の欄です。 編集して、利用するにチェックして更新する f:id:muuuuukun:20181210224721p:plain

(任意)LINE Bot デフォルトの自動返信を削除する f:id:muuuuukun:20181210224907p:plain

以下の自動応答メッセージを削除しておくと、おうむ返しの確認がしやすいです f:id:muuuuukun:20181210225134p:plain

検証

LINE developerのページに戻りQRコードから友達追加

なんでも良いから送っておうむ返し出来たら成功!!

RubyとRuby on Railsを勉強してる&したい初心者向きの参考書

(おはようございます!

今回はRubyRuby on Railsを勉強をしている方と

これからしようと思っている初学者に向けて参考書と勉強方法について紹介したいと思います。

プログラミング未経験の方で

これからRubyを勉強をしようと思っている方は

まずはProgateをオススメします。

会社情報 | プログラミングの入門なら基礎から学べるProgate[プロゲート]

Progateは本当に良いですね!

無料でもできるんですが一部しか利用をできないので

1ヶ月1000円程で全てを勉強出来ます。

はっきり言って1000円以上の価値はあります!

ただ勉強をするだけじゃなくてゲーム感覚で勉強が出来るのも良いんですよね

やればやる程、経験値がもらえて、レベルが上がったりしていって

1日に稼いだ経験値で順位を見れたりしてそれがまた楽しいんですよね!

1回だけその日の経験値で僕1位になりました(☝︎ ՞ਊ ՞)☝︎

あれは嬉しかったですねー

現在の僕のレベルは319です。

 

そして次はドットインストール!

https://dotinstall.com/

ドットインストールは動画をみて勉強出来ます。

ドットインストールもめちゃくちゃ良いですね

動画が3分以内に収まっているのでとても勉強をしやすいです

そして講師の方のコードの書き方とゆうかパソコンの使い方とゆうか

物凄く早くて現場ではみなさんこんな感じでコード書いてるのかなって

勉強になりました。

 

 

次にrailsチュートリアル

railstutorial.jp

こちらは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改訂2版 [ Rubyサポーターズ ]
価格:3520円(税込、送料無料) (2018/12/8時点)

楽天で購入

 

一番最初に買った参考書になります

Rubyの基礎をもう1回勉強し直そうと思った時にこの参考書を読んでいました

ですがパーフェクトと書いてるだけあって途中からチンプンカンプンでした

今の自分の実力ではまだ早いと思い、最初に紹介した参考書を

買いに行った次第です!

もっともっと実力をつけてまたパーフェクトRubyを読んで理解を深めて行こうと

思ってます!

絶対に理解できる様になるぞっ!!!!

 

 

まーこの様な流れでRubyの基礎を再勉強していた訳なんですが

参考書を読んでいる時に手を動かしながらコードを書いてたんですが

これではまだわかっていないなって思い

paizaでランクDの問題を全部解きました!

paiza.jp

paizaは求職と学習を同時に行えます!

ランクDからランクSまで問題があってランクが上がるごとに

難しくなっていきます

おそらくランクAとランクSは神の領域やと思います!!

今の僕の実力では!!

まずはRubyの基礎の基礎をしっかりと身につける為にも

ランクDの問題を全部解きました!!

全部で105問!!

3日かかりました!!

そして不安やったRubyの基礎の基礎は身についたと思います!!

Rubyの基礎に不安を覚えてる方は是非しておいた方が良いと思います!!

ランクCにもとりかかりたかったんですが時間的な問題で

1問しか解けませんでした。

今回はお預けです。

 

 

こんな感じでRubyの基礎固めをしていきました

そしてRuby on Railsも基礎がわかってなかったんで次はRailsの基礎を

固めていこうと思ってこちらの参考書を書いました


 

この参考書も本当に良いですね!

1日で基本が身に付くって書いてますけど

本気を出したら本当に1日で出来ると思います!

僕は2日で全部出来ました!

Railsインスタンス変数とかデータベースとかその他諸々あやふやに

覚えていた事がまたまた結びついていきました!

Railsで基礎で頭がごちゃごちゃしている方はこの参考書で

頭の中を整理していくのをオススメします。

 

次にこちらの参考書を


 

勉強したかったんですがこちらも時間の関係上出来ませんでした(/ _ ; )

まだ買ってなくてどの様な内容かお伝え出来なくて恐縮ですが

また勉強をさせて貰った時に紹介をさせて貰おうと思ってます。

 

以上で僕がRubyRuby on Railsを勉強したなかで少しでも勉強をされている方達に

参考になったらなって思い紹介させて貰いました。

 

明日からはLINE Message APIRailsを使ってLINE BOTを作っていきます!!

自分のアイディアをこれから作って行けると思うとワクワクしています♪♩

また出来上がりましたら紹介させて貰いまーす(☝︎ ՞ਊ ՞)☝︎