鳩がITをくらったような顔

ITでうんとこしょどっこいしょ

Railsチュートリアルをやり終えた感想

Railsチュートリアルを一応1周やり終えたので感じたことなどを少し書いてみようと思います。

どうしてこの記事を書こうと思ったか

興味はあるけどボリュームがあってやるのが億劫だなぁと思ってる人に、ちょっとでも雰囲気を知ってもらったり、他人がどのように取り組んだか参考になればと思ってこの記事を書きます。
「次はこうやってやってみるといいよ」というアドバイスもお待ちしております。

前提知識はあった?

  • ITの知識は応用情報技術者程度。
  • Rubyの基礎はあった。Rubyの父監修の書籍を買って、paizaの問題とかを解いたりしていた。
  • HTML/CSSは大丈夫、JavaScriptは読めるけど書きたくはない(笑)
  • 以前にもRailsチュートリアルをやったことがあるが(4系)、途中で挫折。
  • 挫折しながらも、書籍を買って作りたかったアプリを自作したこともあった。フロント部分やサーバの設定で躓き挫折。

ご覧の通り、とてもヘタレであることがわかります。

Railsチュートリアルをしようと思った理由

理由は2つあります。

Webアプリの開発に興味があった

近年様々なWebアプリが登場し、自分も作ってみたいという欲求があったのですが、それに加えてRubyを少し勉強していたというのもあります。
また、有名どころのサービスがRailsを使っていたり、開発ブログなどを見ていると興味が出て来たという感じです。
やっぱり諦めずに作ってみたいという気持ちがありました。

内容がとても分かりやすかった

始めようと思った理由とはちょっと違うかもしれませんが、ちらっと内容を見た時にとても分かりやすそうな説明だったからです。現に、最初から最後まで分かりやすかったです。
書籍で勉強をしたこともありますが、「見たことないコードが突然出て来た」とか「それ、どこのコードの話?」というストレスが無かったことが大きいです。

どれくらいかかった?

まる1年かかりました。
というのも、途中Python3に浮気してたりしたので完走まで時間がかかってしまいました。
序盤は1日1章でも十分こなすことができますが、中盤のログイン機構などはなかなか手ごわいので時間がかかります。ボリュームも凄いので根気が必要です!
1ヵ月以内で終わらせるストイックな人は尊敬します。

どうやってRailsチュートリアルを進めていった?

1章から順に

1章から順に進めていきました。完成したファイルがあるといっても、内容は順序だてて構成されてるので順番にこなすのが無難だと思います。

適宜メモをとる

また、4系のチュートリアルで挫折した経験を踏まえて、適宜メモを取るようにしました。よく使うテクニックや、基本的な手順、調べないとわからないだろう点を中心にメモを取りました。
再びわからない箇所へ戻って考える手間を考慮するとメモを残しておく方がお得だと思います。「ここ確かメモしてたな」ってのは覚えてるもので、Ctrl+Fで検索すればすぐ対応できます。

コピペでもいいけど、コードは全て理解する

特に1周目、完走することを目的とした場合、コードはコピペでもいいと思いました。
ただし、コードはすべて理解してから進めるようにしました。「わからんけど、貼っとくか」では意味無いですからね。
あと、コードを手打ちすると必ずと言っていいほど入力ミスによるエラーが発生します。このエラー探しが完走までのモチベをじわじわと削っていくのです。

演習はやったりやらなかったり

演習はすべてやったわけではありません。
「ここをこうすればよさそうだな」程度のことは考えましたが、正直コードをいじるとテストがレッドになりそうで怖かったです(笑)

チュートリアルを完走して得られたものは?

  • Railsの大まかな仕組みが把握できた
  • Railsの規則の多さと便利さを実感した
  • テスト駆動開発に少し馴染めた
  • Gitと少し仲良くなれた
  • ほんの少し自信が得られた

正直、テスト駆動開発はあまり好きではありませんでした。しかし、チュートリアル終盤ではなかなか心地よく開発(してないけど)できるようになったと思います。

Railsで開発するためにこれから必要だと思うこと

  • 調べる力
  • フロント部分の知識(JavaScriptjQuery, Ajaxなど)
  • コードの管理能力(GitとかGithub
  • デザイン能力
  • データベースの知識
  • 構築、運用、管理の知識

Railsは便利な一方、規則も多くあるので、こういうときどうすればいいか調べて解決する力は今後も必要だと感じました。チュートリアルでは「こんなときはこんなメソッドがあるんです」と紹介してくれますが、自身で開発となるとそうもいきません。
チュートリアルではデザインも含めたフロント部分は最小限しか紹介されていないので、自分好みになんやかんやする場合は勉強が必要です。
また、アプリを公開するとなると運用管理の知識も必要になります。

学ぶべきことは山ほどありますね。

最後に

本当に、大変でした(笑)
説明が丁寧なのでこんななまけものでも完走することができました。興味のある方はぜひRailsチュートリアルにチャレンジしてみてください。
railstutorial.jp

今後についてはまだ決めかねていますが、かねてより作りたかったサービスをまた作り始めるかもしれません。これについてはまたここで報告出来たらなと思います。
あと、もし働かせていただける企業様がおられましたらご連絡お待ちしております(๑•̀ㅂ•́)و✧

食洗器 vs. 手洗い ~魔法の言葉「時給換算」~

最近よく「食器洗い面倒だから食洗器買いたい」というのを耳にするので、手洗いとどちらが安いのかシミュレートしてみました。

条件設定

  • 食洗器は毎日1度のみ使うものとする
  • 食洗器でまとめ洗いはしない
  • 水道代は0.15円/ℓとして計算
  • 電気代は120~300kWh価格帯26.0円/kWhで計算
  • 手洗い時間は3人分で12.5分とし、5人分もこれに基づいて計算

まずは単純に比較

1回の洗浄でどれくらいかかるかは以下のようになりました。

手洗い(3人分) 手洗い5人分 食洗器(3人分) 食洗器(5~7人分)
水道代 6.75円 11.25円 1.35円 1.65円
電気代 0円 0円 15.60円 20.02円
洗剤費 6円 10円 10.40円 10.40円
合計 12.75円 20.80円 27.35円 32.07円

ここで、食洗器の費用を考慮してみます。耐用年数は6年とします。

手洗い(3人分) 手洗い5人分 食洗器(3人分) 食洗器(5~7人分)
水道代 6.75円 11.25円 1.35円 1.65円
電気代 0円 0円 15.60円 20.02円
洗剤費 6円 10円 10.40円 10.40円
食洗器代金 (47779円) (63200円)
食洗器1回換算 21.82円 28.89円
合計 12.75円 20.80円 49.17円 60.96円


「断然手洗いの方が安いじゃん!」そんな簡単な話ではないのです。

魔法の言葉「時給換算」

彼らは(誰)ここで「時給換算」というものを取り出すのです。
この「時給換算」という言葉は何かとよく持ち出されるのですが実体は結構謎だったりします。というのも、誰の時給かによって意味が多少異なります。

「あなた」の時給の場合

あなたは12.5分使って皿洗いをしています。あなたの時給を2,000円とした場合、416.67円の機会損失です。食洗器を導入してこの機会損失を取り返します。すると、

機会損失分(416.67円) ー 食洗器費用(36.42円) = 取り返すことができる損失分(380.25円)

となります。機会損失なので、食洗器が働いている間、あなたは働く必要があります
あなたが働かなければあなたの時給で換算する必要性はなくなります。
ただし、食洗器費用によりあなたの時給は1825.2円相当に減ります。

「食洗器」の時給の場合

あなたが洗っていた代わりに食洗器を雇って12.5分働いてもらいましょう。

(導入後費用 - 導入前費用 )×( 60 ÷ 12.5 ) = 食洗器の時給(174.82円)

食洗器が働いている間に遊ぼうが働こうが、「12.5分を26.42円で買って自由な時間を得ることができる」という意味でそれ以上でも以下でもありません。
単に「お金でもって自由な時間を得る」という意味であればあなたの時給で換算する意味はありませんし、ましてや380.25円得するわけでもありません。

あなたの時給での換算を考慮して比較

ということで、最後にあなたの時給で換算した場合を考慮して比較してみましょう。

手洗い(3人分) 手洗い5人分 食洗器(3人分) 食洗器(5~7人分)
水道代 6.75円 11.25円 1.35円 1.65円
電気代 0円 0円 15.60円 20.02円
洗剤費 6円 10円 10.40円 10.40円
食洗器代金 (47779円) (63200円)
食洗器1回換算 21.82円 28.89円
時給換算収入 ▲416.67円 ▲694.44円
合計 12.75円 20.80円 ▲367.5円 ▲633.48円

食洗器の導入により差額380.25円~654.28円を得ることとなります。

1回あたり380.25円~654.28円と言われてもよくわからないかもしれませんが、年間13万8,791円~23万8,812円分働いてくださいということです。

ZaifのAPIを使って現在価格を取り出してみよう

先日、仮想通貨が全面的に大下落しました。
その時にオンライン取引所のサーバが込み合い注文が通らない、あるいはページ自体閲覧できないできない状態となりました。買いのタイミングであれば損失はありませんが、売りのタイミングでこうなってしまうと大損害です。

そこで、今回はZaifAPIを使って現在価格などを取得してみようと思います。
最終的には取引もできたらと思いますが、現在ZaifではAPIキーに関してごちゃごちゃしているようなので未定です。

現在の価格を取り出す

現在価格を取り出すにはAPIキーは必要ありません。特定のURLを叩くだけで取得できます。

サンプルコードを見てみる

Zaifでサンプルコードが公開されているのでまずこちらを見てみましょう。

import requests
import json

response = requests.get('https://api.zaif.jp/api/1/last_price/btc_jpy')
if response.status_code != 200:
    raise Exception('return status code is {}'.format(response.status_code))
json.loads(response.text)


1,2行目は必要なライブラリのインポートです。インストールしていない場合はpipでインストールしておきます。

import requests
import json


3行目が円建てのビットコインの価格を取得している箇所です。GETメソッドで取得しています。
[currecy_pair]の部分に通貨を指定します。ビットコインの場合はbtc_jpyとなります。

response = requests.get('https://api.zaif.jp/api/1/last_price/[currecy_pair]')


4,5行目はレスポンスのHTMLステータスを見て成功以外のステータスの場合例外を発生させています。

6行目はレスポンスのボディ部分を取り出しています。json形式で返ってきます。

{"last_price": 130065.0}


下記のように書くと返ってきたjsonを辞書型でいいかんじに変換してくれます。あとはキーを指定すれば値を取得できます。

import requests
import json

response = requests.get('https://api.zaif.jp/api/1/last_price/btc_jpy')
if response.status_code != 200:
    raise Exception('return status code is {}'.format(response.status_code))
r = response.json()

print(r["last_price"])
130065.0

ビットコイン以外の価格を取り出す

ビットコイン以外の通貨を取り出すには[currecy_pair]にどのように指定すればいいのでしょうか。
取得できる通貨を調べてみます。

import requests
import json

response = requests.get('https://api.zaif.jp/api/1/currency_pairs/all')
r = response.json()

for i in range(len(r)):
    print(r[i]["currency_pair"])
cicc_btc
xem_btc
bitcrystals_btc
mona_btc
mosaic.cms_jpy
xem_jpy
sjcx_btc
jpyz_jpy
pepecash_btc
zaif_jpy
mona_jpy
bch_jpy
fscc_jpy
xcp_jpy
fscc_btc
cicc_jpy
pepecash_jpy
xcp_btc
erc20.cms_jpy
ncxc_jpy
bch_btc
eth_btc
btc_jpy
eth_jpy
zaif_btc
bitcrystals_jpy
sjcx_jpy
ncxc_btc


このように指定することで有効な通貨ペアをすべて取得できます。

response = requests.get('https://api.zaif.jp/api/1/currency_pairs/all')


現在、28ペアの価格が取得できるようなので、試しにXEMの価格を取得してみましょう。

import requests
import json

response = requests.get('https://api.zaif.jp/api/1/last_price/xem_jpy')
if response.status_code != 200:
    raise Exception('return status code is {}'.format(response.status_code))

print(response.json()["last_price"])
100.02

おわりに

このように、通貨の現在価格であればAPIキーも必要なく取得できます。
色々な通貨を指定して試してみてください。

あと、Nekoniumはじめました。もしよかったら投げ銭をお願いします。
f:id:ninebird:20180123205505p:plain