おぴよの気まぐれ日記

おぴよの気まぐれ日記

岡山やプログラミング、ファッションのこと、子育てや人生、生き方についての備忘録。

ユニクロではなく無印良品を選ぶ3つの理由

こんにちは。opiyoです。

岡山は今梅雨入り初めての雨が降っていますが、「晴れたらやりたいこと」は何でしょうか?

私は熱狂的なユニクロファンで赤色の靴下、パンツ、ジーパン、Tシャツ、パーカー全てがユニクロです。

先日痛くないハイヒールを作っている瀧見サキ」さんの記事を書きましたが、この瀧見サキさんの格好が個人的にはドストライクで、めちゃくちゃ格好良いのですよ。

www.instagram.com

これ、無印っぽいので久しぶりに岡山イオンの無印良品に遊びに行ったのですが、そこには僕の知らないアイテム達が待ち構えていました

VネックTシャツ 2枚組(1490円)

無印良品って昔は多分Uネックしかなかったんじゃないかなぁ。

https://www.muji.net/store/cmdty/detail/4549738732082?searchno=11

タンクトップ 2枚組(1490円)

タンクトップも昔は無印良品なかったんじゃないかなぁと思うんだけど、自信ないな。

今はビックシルエットが流行ってるから旨味がないかもだけど、白のTシャツ着るときはグレーのタンクトップ着て1cmくらいTシャツから飛び出して見せると全体が引き閉まるからオススメです!

https://www.muji.net/store/cmdty/detail/4549738536451?searchno=1

ポケット付きTシャツ

通販サイトでは見つからなかった。こういうちょっとオシャレなものって全然なかったと思うんだど。どうだろうか。

これは普通にメンズだけじゃなくてレディースもいけると思う。

オシャレコーデ

WEAR

wear.jp

wear.jp

wear.jp

wear.jp

wear.jp

無印良品は間違いなく今後くる〜

昔から無印は好きだったのですが、2つ気にくわないところがありました

  • 種類がが少なすぎる。
  • 高い

例えばTシャツならUネックしかないとかだったけど、ご覧の通り。これだけ種類があれば満足する方結構いると思う。

あとは値段だけど、この前各アイテム値下げを発表みたいな記事読んだのでもう少し安くなるかも。

こーなってくると、高いから無印良品は買わないって人多かったと思うけど値段が同じならば無印良品で買うって人は出てくると思う。

何となく無印良品の方が高いブランドイメージ付いてるし。多分…

ということで今日はここまで。

22歳でパパになって良かったと思うこと/思わないこと

こんちには。opiyoです。

昨日ですかね、私が尊敬している元リクルートで副業家の西村さんがNEW PEACE代表の高木新平さんの記事を見て書いたというブログを見ました。

内容は簡単に言うと「若くして家族を持つことも悪くないよ!」って話だとぼくは解釈しました。

ぼくも22歳で結婚。次の年には長男が生まれ、その次の年には長女が生まれました。

全く同じでは無いですが、とても近い状況な僕にとっては改めて「家族」について考えるきっかけになりました。

みんな違って、みんないい。

こんな言葉があったような気がしますが、こんな感じになりそうです。

良かったと思うこと

仕事の第一次ピークに全力になれる

仕事の第一次ピークは、33〜38歳にやってくる
子育てがひと段落した状態で「仕事の第一次ピーク」を迎えられる

高木さんの記事では、仕事の第一次ピークは、33〜38歳と書かれています。

僕は今27歳。8月で28歳になる。

つまり、仕事の第一次ピークを迎えるのは5年後、2022年頃には

  • 長男・・・10歳(小4)
  • 長女・・・9歳(小3)

僕が30歳になる2年後であっても長男は小1、長女は年長になるので、この頃にはほとんど手はかからなくなりそうです。

これは、良い点ですね。いざという時に全力で走れます。

一番体力がある時に子育てができる

仕事の先輩、幼稚園パパを見るとやっぱり僕の優位は明らかです。

偉そうなこと言ってごめんなさい。でも、これだけは自信をもって子供たちに誇れるポイントです。

僕自身が3人目として生まれたので周りに比べると僕の両親はジジババでした。

なので公園行って走り回った記憶も無いです。唯一の楽しみはキャッチボールでした。

だから若い!ってのはそれだけで子どもと一緒に遊ぶ体力があるので良い事ばかりです。

コミュニティができる

子どもがいると幼稚園、習いごとなど絶対に繋がらないであろう人達と交流ができるってのは間違いなく良い所だと思います。

良くないなと思ったこと

20代という一番楽しい時間を自分だけに使う事ができない

もーこれです。 羨ましいに決まってるじゃないですか。何を強がっているのか。

僕が結婚した前後くらいから皆がiphone持つようになって今みたいな何処とでも繋がっている素晴らしい世界になってきました。そんな状況にも関わらず家と会社を往復する日々。自分に使う時間ってよりかはお金が無いので何も出来ない。そんな状況です。

旅したい。カメラ欲しい。遊びたい。

残念ながら今はできません。

周りの方が経済的に豊か

当たり前ですが皆さん僕より年上です。一回りも違う人だっています。ですから当たり前のように家があるから遊びに行って帰ってくると子どもは「なぜうちは階段が無いのか」聞いてくる。これは結構きついですよ。

待ってろよ。絶対どうにかしてやるからな。

みんな違って、みんな良い

よかったこと、よくないなと思ったこと自分なりに整理してきました。

結局ぼくは何が言いたいのだろうか。正直良く分かりません。

だけど、僕が歩んできた道に後悔はありません。家族には本当に感謝しています。

ありがとうね。


ということで「みんな違って、みんな良い」

あの人がこうだから…ではなくて、自分が良いと思える道をきちんと選んで生きていきましょう。

Ruby on Rails チュートリアルで30歳までに人生を変える(第3章)

こんちには、opiyoです。

人生の生き残りをかけて始めた「Railsブートキャンプ」ですが、今日はRailsチュートリアル第3章をやっていこうと思います。

railsチュートリアル 3章の流れ

静的なページのセットアップ

繰り返しの復習は大事です。人間はすぐに忘れてしまう動物なので。

改めてrails newして最低限のところまでを作ります!

https://railstutorial.jp/chapters/static_pages?version=5.0#sec-sample_app_setup

  • $ rails _5.0.0.1_ new sample_app
  • Gemfileをいじります
source 'https://rubygems.org'

gem 'rails',        '5.0.0.1'
gem 'puma',         '3.4.0'
gem 'sass-rails',   '5.0.6'
gem 'uglifier',     '3.0.0'
gem 'coffee-rails', '4.2.1'
gem 'jquery-rails', '4.1.1'
gem 'turbolinks',   '5.0.1'
gem 'jbuilder',     '2.4.1'

group :development, :test do
  gem 'sqlite3', '1.3.11'
  gem 'byebug',  '9.0.0', platform: :mri
end

group :development do
  gem 'web-console',           '3.1.1'
  gem 'listen',                '3.0.8'
  gem 'spring',                '1.7.2'
  gem 'spring-watcher-listen', '2.0.0'
end

group :test do
  gem 'rails-controller-testing', '0.1.1'
  gem 'minitest-reporters',       '1.1.9'
  gem 'guard',                    '2.13.0'
  gem 'guard-minitest',           '2.4.4'
end

group :production do
  gem 'pg', '0.18.4'
end

# Windows環境ではtzinfo-dataというgemを含める必要があります
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
  • $ bundle install --without production
    • エラーが出たら $ bundle update する
  • gitを使ってsample_appをバージョン管理下にする
  • トップページ(hogehoge.com/)にhello worldを表示されるようにコードを修正する
  • herokuの設定を行いpushします
  • heroku openしてhello worldが表示されればOK

githerokuの設定はチュートリアルを見ずにやってみることで、覚えているかの復習になりますね!

コントローラーの作り方

  • 表記はキャメルケース = 単語の先頭を大文字になる(StaticPages)
  • アクション名は全て小文字にする
  • 出来上がるコントローラーファイル名はスネークケース = 単語をアンダーバー_でつなぎ合わせた名前になる
$ rails g controller StaticPages home help # コントローラー名 アクション名ですね
      create  app/controllers/static_pages_controller.rb # 出来上がったコントローラーのファイル
       route  get 'static_pages/help'
       route  get 'static_pages/home'
      invoke  erb
      create    app/views/static_pages
      create    app/views/static_pages/home.html.erb
      create    app/views/static_pages/help.html.erb
      invoke  test_unit
      create    test/controllers/static_pages_controller_test.rb
      invoke  helper
      create    app/helpers/static_pages_helper.rb
      invoke    test_unit
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/static_pages.coffee
      invoke    scss
      create      app/assets/stylesheets/static_pages.scss
  • routes.rbが自動的に更新される
Rails.application.routes.draw do
  get 'static_pages/home' # 自動的に追加されたよ
  get 'static_pages/help' # 自動的に追加されたよ
  root 'application#hello'
end

このgetは、/static_pages/home/というURLでアクセスされたら、static_pagesコントローラーのhomeアクションと結びつく設定になります。

テスト駆動開発 (TDD)

考え方

テストの手法のひとつで、最初に「正しいコードがないと失敗するテスト」を書き、次に本編のコードを書いてそのテストがパスするようにする考え、やり方かな。

テストをするメリットはチュートリアルのコラムの中で書かれてますが、引用します。

  1. テストが揃っていれば、機能停止に陥るような回帰バグ (Regression Bug: 以前のバグが再発したり機能の追加/変更に副作用が生じたりすること) を防止できる。
  2. テストが揃っていれば、コードを安全にリファクタリング (機能を変更せずにコードを改善すること) ができる。
  3. テストコードは、アプリケーションコードから見ればクライアントとして動作するので、アプリケーションの設計やシステムの他の部分とのインターフェイスを決めるときにも役に立つ。

さらに詳細までみたいな場合は、こちらからどうぞ(コラム3-3.です)

https://railstutorial.jp/chapters/static_pages?version=5.0#sec-custom_static_pages

当たり前ですが、何か問題があるとお客様に迷惑をかけます。それは本当に申し訳無いところなのですが、お客様以外のところで凄く面倒なことになります。

だからテストを書くのです。もーこれだけ。

テストコードの書き方

テストコードはrails g controllerを実行した時点で作成されます。

require 'test_helper'

class StaticPagesControllerTest < ActionDispatch::IntegrationTest
  test "should get home" do
    get static_pages_home_url
    assert_response :success
  end
end

これを日本語で表すと、「Homeページのテスト。GETリクエストをhomeアクションに対して発行 (=送信) せよ。そうすれば、リクエストに対するレスポンスは[成功]になるはず。」となります。

テストの実行方法は

$ rails test
# Running:

..
Finished in 1.467940s, 1.3625 runs/s, 1.3625 assertions/s.
2 runs, 2 assertions, 0 failures, 0 errors, 0 skips

0 errorsとなっているので、成功(GREEN)したことが分かりますね。

もしエラーになる場合は、こちらに回避方法書いたので参考にしてください。 opiyotan.hatenablog.com

このように、テストと一緒にコードを書いていくことが最近は推奨されています。

3.3.1では、TDDの考えに基づき失敗するエラーを書いて成功させリファクタリングするという流れでテストする方法が乗っていますので是非チャレンジしてみてください。

動的にタイトルを変更する

先ずは各ページのタイトルをチェックするテストを書きます。 もちろん、viewtitleタグは何も変更していないのでエラー(RED)になります。

require 'test_helper'

class StaticPagesControllerTest < ActionDispatch::IntegrationTest
  test "should get home" do
    get static_pages_home_url
    assert_response :success
    assert_select "title", "Home | Ruby on Rails Tutorial Sample App" # ここ追加しました。"title"タグに書かれた文字列をチェックするテストです
  end
end

では、次にviewtitleタグを修正していきます。始めにapp/views/static_pages/home.html.erbファイルから。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Home | Ruby on Rails Tutorial Sample App</title> # この部分ですね
  </head>
  <body>
    <h1>Sample App</h1>
    <p>
      This is the home page for the
      <a href="http://railstutorial.jp/">Ruby on Rails Tutorial</a>
    </p>
  </body>
</html>

この状態でテストを実行するとhomeアクションについては修正したのでエラーじゃなくなりますが他の2つのアクションがエラーになります

$ rails test
# Running:

Failure:
StaticPagesControllerTest#test_should_get_about [/Users/taku/rails/railstutorial/sample_app/test/controllers/static_pages_controller_test.rb:19]:
<About | Ruby on Rails Tutorial Sample App> expected but was
<SampleApp>..
Expected 0 to be >= 1.

bin/rails test test/controllers/static_pages_controller_test.rb:16

Failure:
StaticPagesControllerTest#test_should_get_help [/Users/taku/rails/railstutorial/sample_app/test/controllers/static_pages_controller_test.rb:13]:
<Help | Ruby on Rails Tutorial Sample App> expected but was
<SampleApp>..
Expected 0 to be >= 1.

bin/rails test test/controllers/static_pages_controller_test.rb:10

Finished in 0.649278s, 4.6205 runs/s, 9.2410 assertions/s.
3 runs, 6 assertions, 2 failures, 0 errors, 0 skips

なので、エラー(RED)にならないようhelpaboutも修正し成功(GREEN)させます。

リファクタリング

今までは全てのviewファイルに直接titleタグを書き込んでいました。なので当然表示されるタイトルも変わってきます。

これらを今テストでやったように共通にできるところは共通化し、違う部分だけを設定するように修正していきます。

このように同じコードを繰り返し書かないようにする考え方を「DRY(Don’t Repeat Yourself: 繰り返すべからず) 」と言います。

では早速やってみます。先ずは各ページに動的に変更する部分を書いていきます。

app/views/static_pages/home.html.erb

<% provide(:title, "Home") %> # 各ビュー毎に文字列をセットする
<!DOCTYPE html>
<html>
  <head>
    <title><%= yield(:title) %> | Ruby on Rails Tutorial Sample App</title> # 設定した文字列をyield関数を使って反映させる
  </head>
  <body>
    <h1>Sample App</h1>
    <p>
      This is the home page for the
      <a href="http://railstutorial.jp/">Ruby on Rails Tutorial</a>
      sample application.
    </p>
  </body>
</html>

次に共通のビューになるapplication.html.erbtitleyield関数を使って表示されるようにします

<!DOCTYPE html>
<html>
  <head>
    <title><%= yield(:title) %> | Ruby on Rails Tutorial Sample App</title> # ここですねー
    <%= csrf_meta_tags %>
    <%= stylesheet_link_tag    'application', media: 'all',
                                              'data-turbolinks-track': 'reload' %>
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
  </head>

  <body>
    <%= yield %> # ここで各ページを読み込んでいるから、各ビューでは`head`タグとかがいらないんですね
  </body>
</html>

それぞれのページでは違う処理だけ書く。共通部分はapplication.html.erbで定義する!!

<% provide(:title, "Home") %>
<h1>Sample App</h1>
<p>
  This is the home page for the
  <a href="http://railstutorial.jp/">Ruby on Rails Tutorial</a>
  sample application.
</p>

railsチュートリアル 3章の演習問題

3.1 演習

問題1

BitbucketがMarkdown記法のREADME (リスト 3.3) をHTMLとして正しく描画しているか、確認してみてください。

回答1

ぼくは、githubで作業しているのですが問題なく描画されていますね。

  • h1は大きな文字
  • h2は少し大きな文字
  • リンクは青色で
  • コード部分は灰色になる

https://github.com/nakanoTaku/railstutorial_3

問題2

本番環境 (Heroku) のルートURLにアクセスして、デプロイが成功したかどうか確かめてみてください。

回答2

hello worldが表示されているのでOKですね! heroku logsでログを見ることも出来ます。

3.2.1 演習

問題1

Fooというコントローラを生成し、その中にbarとbazアクションを追加してみてください。

回答1

$ rails g controller Foo bar baz

class FooController < ApplicationController
  def bar
  end
  def baz
  end
end

問題2

コラム 3.1で紹介したテクニックを駆使して、Fooコントローラとそれに関連するアクションを削除してみてください。

回答2

$ rails destroy controller Foo bar baz

3.4.2 演習

テストを一部リファクタリングします。

3つのアクションで同じように使われている文字列「Ruby on Rails Tutorial Sample App」を変数に代入し、使い回すようにします。

require 'test_helper'

class StaticPagesControllerTest < ActionDispatch::IntegrationTest
  def setup
    @base_title = "Ruby on Rails Tutorial Sample App" # setupというテストが実行される前に処理されるメソッド内で文字列を変数にセットしておきます。
  end

  test "should get home" do
    get static_pages_home_url
    assert_response :success
    assert_select "title", "Home | #{@base_title}" # 変数を参照するように修正します。
  end
end

3.4.4 演習

問題1

リスト 3.41にrootルーティングを追加したことで、root_urlというRailsヘルパーが使えるようになりました (以前、static_pages_home_urlが使えるようになったときと同じです)。リスト 3.42のFILL_INと記された部分を置き換えて、rootルーティングのテストを書いてみてください。

回答1

  test "should get root" do
    get root_url
    assert_response :success
  end

問題2

実はリスト 3.41のコードを書いていたので、先ほどの課題のテストは既に green になっているはずです。このような場合、テストを変更する前から成功していたのか、変更した後に成功するようになったのか、判断が難しいです。リスト 3.41のコードがテスト結果に影響を与えていることを確認するため、リスト 3.43のようにrootルーティングをコメントアウトして見て、 red になるかどうか確かめてみましょう (なおRubyのコメント機能については4.2.1で説明します)。最後に、コメントアウトした箇所を元に戻し (すなわちリスト 3.41に戻し)、テストが green になることを確認してみましょう。

回答2

ちゃんとREDになるし、GREEMにもなる

railsチュートリアル 3章で学んだこと

テストをパワーアップする

minitest reporters

テストの成功(RED)失敗(GREEN)の見栄えをよくしてくれます。

準備するのはこれだけ、是非試してみてください!

# ファイル名:test/test_helper.rb
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
require "minitest/reporters"
Minitest::Reporters.use!

class ActiveSupport::TestCase
  # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
  fixtures :all

  # Add more helper methods to be used by all tests here...
end

f:id:opiyotan:20170620173015p:plain

Guard

ファイルの変更を検出して必要なテストだけを自動実行してくれるそうです。

例えば、「home.html.erbファイルが変更されたらstatic_pages_controller_test.rbを自動的に実行する」といったことをGuardで設定することができます。

これヤバいですね。今はまだ変更するファイルも少ないですし何をしたか全部記憶できるくらいしかないですが絶対面倒になって忘れますよね。

詳細な設定方法はRailsチュートリアルを参照してください。

https://railstutorial.jp/chapters/static_pages?version=5.0#sec-guard

手順だけ簡単にまとめておきます。

  • 初期化
$ bundle exec guard init

初期化を実行すると、「/Guardfile」が作成されます。

  • Guardfileを編集する
  • .gitignoreにSpringを追加する
  • Guardの実行
$ bundle exec guard

なんか実行すると「Ctrl + D」か「テストが成功」するまで終わらないのだけど、これは正しい動きなのか?

ずっとバックグラウンドで動かしておいて、常に監視させておくってことなのかな...

あーすごい便利かなーと思ったけど、これは使わないかもしれない。邪魔っちー

httpメソッド

HTTP (HyperText Transfer Protocol) には4つの基本的な操作があり、それぞれGET、POST、PATCH、DELETEという4つの動詞に対応づけられています。クライアント (例えばFirefoxSafariなどのWebブラウザ) とサーバー (ApacheやNginxなどのWebサーバー) は、上で述べた4つの基本操作を互いに認識できるようになっています

  • get

主にWeb上のデータを読み取る (get) ときに使われるリクエストです。

  • post

ページ上のフォームに入力した値を、ブラウザから送信する時に送られるリクエストです。

gitでaddとcommitを一回でやる!

$ git commit -am "Improve the README"

herokuへpushした時に何かエラー

$ heroku logs

新しいブランチの作り方

$ git checkout -b hogehoge

今チェックアウトしているブランチは?

$ git branch
  master
* static-pages

ブランチを指定してpushするには?

$ git push origin hogehoge

rails g をやり直したい!

$ rails destroy  controller StaticPages home help
$ rails destroy model User

Unixプロセスの確認

$ ps aux
$ ps aux | grep spring
$ ps aux | grep spring
taku              7781   0.0  0.2  2518224  19900   ??  S     5:23PM   0:00.42 spring server | sample_app | started 31 mins ago
taku              8561   0.0  0.0  2423376    216 s003  R+    5:55PM   0:00.00 grep spring
taku              7782   0.0  0.9  2577420  73224   ??  Ss    5:23PM   0:02.75 spring app    | sample_app | started 31 mins ago | test mode

$ spring stop
$ ps aux | grep spring
taku              8604   0.0  0.0  2434840    804 s003  S+    5:57PM   0:00.00 grep spring # 「7781」「7782」が無くなった!

railsチュートリアル 3章のまとめ

3章ではテスト駆動開発 (TDD)に沿って、開発を進めてきました。 簡単にまとめるこんな感じでしょうか?

  • 何事も繰り返し行うことで覚えることができる
    • rails new
    • git init ~ git pushまでの流れ
  • rails g controller ControllerName アクション名でコントローラーが作れる
  • RailsのビューはRubyのコードが使える
  • テスト駆動開発 (TDD)は、「RED」「GREEN」「REFACTOR」のサイクルを繰り返して開発をすることだ


では、最後にぼくが一番尊敬している先輩エンジニアからの名言でお別れしましょー

テストコードが仕様書だ

Ruby on Railsチュートリアル3章の「3.3.1 最初のテスト」のエラーを解消!

こんちには、opiyoです。

Railsチュートリアルの第3章に取り組んでいる最中ですが、ハマリポイントがあったので共有したいと思います。

https://railstutorial.jp/chapters/static_pages?version=5.0#sec-our_first_test

エラーの内容

$ rails test
# Running:

..

Finished in 0.633771s, 3.1557 runs/s, 3.1557 assertions/s.
/Users/taku/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/railties-5.0.0.1/lib/rails/test_unit/minitest_plugin.rb:9:in `aggregated_results': wrong number of arguments (given 1, expected 0) (ArgumentError)
    from /Users/taku/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/minitest-5.10.2/lib/minitest.rb:597:in `report'
    from /Users/taku/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/minitest-reporters-1.1.9/lib/minitest/minitest_reporter_plugin.rb:26:in `each'
    from /Users/taku/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/minitest-reporters-1.1.9/lib/minitest/minitest_reporter_plugin.rb:26:in `report'
    from /Users/taku/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/minitest-5.10.2/lib/minitest.rb:687:in `each'
    from /Users/taku/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/minitest-5.10.2/lib/minitest.rb:687:in `report'
    from /Users/taku/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/minitest-5.10.2/lib/minitest.rb:141:in `run'
    from /Users/taku/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/railties-5.0.0.1/lib/rails/commands/test.rb:9:in `<top (required)>'
    from /Users/taku/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:293:in `require'
    from /Users/taku/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:293:in `block in require'
    from /Users/taku/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:259:in `load_dependency'
    from /Users/taku/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:293:in `require'
    from /Users/taku/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/railties-5.0.0.1/lib/rails/commands/commands_tasks.rb:138:in `require_command!'
    from /Users/taku/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/railties-5.0.0.1/lib/rails/commands/commands_tasks.rb:95:in `test'
    from /Users/taku/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/railties-5.0.0.1/lib/rails/commands/commands_tasks.rb:49:in `run_command!'
    from /Users/taku/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/railties-5.0.0.1/lib/rails/commands.rb:18:in `<top (required)>'
    from /Users/taku/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:293:in `require'
    from /Users/taku/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:293:in `block in require'
    from /Users/taku/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:259:in `load_dependency'
    from /Users/taku/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:293:in `require'
    from /Users/taku/rails/railstutorial/sample_app/bin/rails:9:in `<top (required)>'
    from /Users/taku/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:287:in `load'
    from /Users/taku/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:287:in `block in load'
    from /Users/taku/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:259:in `load_dependency'
    from /Users/taku/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:287:in `load'
    from /Users/taku/.rbenv/versions/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /Users/taku/.rbenv/versions/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from -e:1:in `<main>'

原因

どうやらgemのminitestが5.10.2(2017/5/9リリース)にアップデートされたことで発生したらしいです。

解決方法

1. gemのminitestを追加します。

group :test do
  gem 'rails-controller-testing', '0.1.1'
  gem 'minitest-reporters',       '1.1.9'
  gem 'guard',                    '2.13.0'
  gem 'guard-minitest',           '2.4.4'
  gem 'minitest', '~> 5.10', '!= 5.10.2' # これですね 多分5.10.2以外のバージョンでマイナーバージョンへアップデートかな?
end

2. bundle updateしてgemを更新します。

$ bundle update
Resolving dependencies...
Using rake 12.0.0
Using concurrent-ruby 1.0.5
Using i18n 0.8.4
Using minitest 5.10.1 (was 5.10.2)
.
.
Bundle updated!
Gems in the group production were not installed.

3. rails testを再実行する

$ rails test
Run options: --seed 57994

# Running:

..
Finished in 0.648009s, 3.0864 runs/s, 3.0864 assertions/s.
2 runs, 2 assertions, 0 failures, 0 errors, 0 skips

めでたし、めでたし

Ruby on Railsアプリケーションを5分でHerokuにデプロイする

こんちにわ、opiyoです。

今日は、Railsチュートリアルに出てくるアプリケーションをHerokuへ反映するまでの手順をまとめてみました。

とても簡単なので、是非やってみて下さい。

GemfileにPostgreSQL設定

group :production do
  gem 'pg',             '0.17.1'
  gem 'rails_12factor', '0.0.2'
end

設定したら bundle install する

Herokuのユーザ登録

https://dashboard.heroku.com/

Heroku Toolbeltインストール

https://toolbelt.heroku.com/

インストールできたらHerokuをコマンドラインから操るためのプラプインをインストールする

$ heroku version
heroku-cli: Installing Toolbelt v4... done
For more information on Toolbelt v4: https://github.com/heroku/heroku-cli
heroku-cli: Adding dependencies... done
heroku-cli: Installing core plugins... done
heroku-toolbelt/3.42.42 (x86_64-darwin10.8.0) ruby/1.9.3
heroku-cli/4.27.26-693efcb (amd64-darwin) go1.6
=== Installed Plugins
heroku-apps@1.2.7
heroku-cli-addons@0.2.1
heroku-fork@4.1.1
heroku-git@2.4.5
heroku-local@4.1.7
heroku-orgs@1.0.4
heroku-pipelines@1.1.1
heroku-run@2.9.2
heroku-spaces@2.0.14
heroku-status@2.1.0

Herokuにログイン

アドレスとパスワードを聞かれるので、入力してエンター

$ heroku login
Enter your Heroku credentials.
Email: XXXXXXXXXXXX@gmail.com
Password (typing will be hidden): 
Logged in as XXXXXXXXXXXX@gmail.com

sshキー登録

僕の場合は二つ.pubファイルがあったからかな。 どっち?って聞かれたので「2」を入力してエンターしたら出来た

$ heroku keys:add
Found the following SSH public keys:
1) XXXX.pub
2) XXXX2.pub
Which would you like to use with your Heroku account? 2
Uploading SSH public key /Users/hogehoge/.ssh/XXXX2.pub... done

Herokuにアプリケーション作成

.....herokuapp.comってのがドメイン名になるんだね

$ heroku create
Creating app... done, stack is cedar-14
https://tranquil-depths-10745.herokuapp.com/ | https://git.heroku.com/tranquil-depths-10745.git

Herokuにデプロイしまーす

$ git push heroku master

Counting objects: 73, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (61/61), done.
Writing objects: 100% (73/73), 16.60 KiB | 0 bytes/s, done.
Total 73 (delta 7), reused 0 (delta 0)
remote: Compressing source files... done.
`
`
`
`
remote: Verifying deploy.... done.
To https://git.heroku.com/tranquil-depths-10745.git

で、ここまで来たら $ heroku open ってするとブラウザからアプリが見れちゃいます。

https___tranquil-depths-10745_herokuapp_com_と_railsアプリを5分でherokuにデプロイする.png

きっとここまで5分かかってないです。 細かいところまで分かるようになりたいですが、こんなに簡単に公開できるってことが分かったのは勉強になりますね。

Ruby on Rails チュートリアル2章まとめ(演習も)

こんちには、opiyoです。

人生の生き残りをかけて始めた「Railsブートキャンプ」ですが、今日はRailsチュートリアル第2章をやっていこうと思います。

第1章をまとめたのはこちらからどうぞ。

opiyotan.hatenablog.com

railsチュートリアル2章の進め方

モデル(Model)の作成

  • ユーザーモデル

    • テーブル:users

    • カラム:id:integer, name:string, email:string

  • マイクロポストモデル

user_idを使って、1人のユーザーに対して複数のマイクロポストが関連付けるという構図になる。

テーブル名は複数形になるので注意!

scaffold

作成、一覧、編集、削除ができる機能を簡単に作ってくれる

$ rails g scaffold User name:string email:string # テーブル名は単数系だからね!
Expected string default value for '--jbuilder'; got true (boolean)
      invoke  active_record
      create    db/migrate/20170614093157_create_users.rb
      create    app/models/user.rb
      invoke    test_unit
      create      test/models/user_test.rb
      create      test/fixtures/users.yml
      invoke  resource_route
       route    resources :users
      invoke  scaffold_controller
      create    app/controllers/users_controller.rb
      invoke    erb
      create      app/views/users
      create      app/views/users/index.html.erb
      create      app/views/users/edit.html.erb
      create      app/views/users/show.html.erb
      create      app/views/users/new.html.erb
      create      app/views/users/_form.html.erb
      invoke    test_unit
      create      test/controllers/users_controller_test.rb
      invoke    helper
      create      app/helpers/users_helper.rb
      invoke      test_unit
      invoke    jbuilder
      create      app/views/users/index.json.jbuilder
      create      app/views/users/show.json.jbuilder
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/users.coffee
      invoke    scss
      create      app/assets/stylesheets/users.scss
      invoke  scss
      create    app/assets/stylesheets/scaffolds.scss

migrate

データベースを更新し、usersデータモデルを作成します。 db/migrateディレクトリにあるファイルを見て何をするか判断している。

$ rails db:migrate
== 20170614093157 CreateUsers: migrating ======================================
-- create_table(:users)
   -> 0.0019s
== 20170614093157 CreateUsers: migrated (0.0022s) =============================

nameemailを持った、usersテーブルを作るってことが分かりますね。

class CreateUsers < ActiveRecord::Migration[5.0]
  def change
    create_table :users do |t|
      t.string :name
      t.string :email

      t.timestamps
    end
  end
end

railsチュートリアル2章の演習問題

2.2.1 演習

問題1

CSSを知っている読者へ: 新しいユーザーを作成し、ブラウザのHTMLインスペクター機能を使って「User was successfully created.」の箇所を調べてみてください。ブラウザをリロードすると、その箇所はどうなるでしょうか?

回答1場所は、bodyタグ直下にあってこんな感じ

  • <p id="notice">User was successfully created.</p>

リロードすると、pタグは残るが中身のメッセージが非表示になる

  • <p id="notice"></p>

問題2

emailを入力せず、名前だけを入力しようとした場合、どうなるでしょうか?

回答2

名前のみ登録される

問題3

「@example.com」のような間違ったメールアドレスを入力して更新しようとした場合、どうなるでしょうか?

回答3

問題なく登録される

問題4

上記の演習で作成したユーザーを削除してみてください。ユーザーを削除したとき、Railsはどんなメッセージを表示するでしょうか?

回答4

User was successfully destroyed.を表示する。

2.2.2 演習

問題1

図 2.11を参考にしながら、/users/1/edit というURLにアクセスしたときの振る舞いについて図を書いてみてください。

回答1

routes → コントローラーのeditアクション → モデル問い合わせなし → edit.html生成 → コントローラーがhtml受け取り → ブラウザへ返す

問題2

図示した振る舞いを見ながら、Scaffoldで生成されたコードの中でデータベースからユーザー情報を取得しているコードを探してみてください。

回答2

@users = User.all

問題3

ユーザーの情報を編集するページのファイル名は何でしょうか?

edit.html.erb

2.3.1 演習

問題1

CSSを知っている読者へ: 新しいマイクロポストを作成し、ブラウザのHTMLインスペクター機能を使って「Micropost was successfully created.」の箇所を調べてみてください。ブラウザをリロードすると、その箇所はどうなるでしょうか?

回答1

2.2.1 演習とほとんど同じ。

問題2

マイクロポストの作成画面で、ContentもUserも空にして作成しようとするどうなるでしょうか?

回答2

問題なく登録できる。

問題3

141文字以上の文字列をContentに入力した状態で、マイクロポストを作成しようとするとどうなるでしょうか? (ヒント: WikipediaRubyの記事にある1段落目がちょうど150文字程度ですが、どうなりますか?)

回答3

問題なく登録できる

問題4

上記の演習で作成したマイクロポストを削除してみましょう。

回答4

問題なく削除できる。

2.3.2演習

問題1

先ほど2.3.1.1の演習でやったように、もう一度Contentに141文字以上を入力してみましょう。どのように振る舞いが変わったでしょうか?

回答1

Content is too long (maximum is 140 characters)というエラーメッセージが表示される

問題2

CSSを知っている読者へ: ブラウザのHTMLインスペクター機能を使って、表示されたエラーメッセージを調べてみてください。

回答2

画面上部にエラーメッセージが表示される

<div id="error_explanation">
      <h2>1 error prohibited this micropost from being saved:</h2>

      <ul>
        <li>Content is too long (maximum is 140 characters)</li>
      </ul>
    </div>

Contentの入力欄が赤枠になる

<div class="field">
  <div class="field_with_errors"><label for="micropost_content">Content</label></div>
  <div class="field_with_errors"><textarea name="micropost[content]" id="micropost_content">12345678901234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
  </textarea></div>
</div>

2.3.3 演習

問題1

ユーザーのshowページを編集し、ユーザーの最初のマイクロポストを表示してみましょう。同ファイル内の他のコードから文法を推測してみてください (コラム 1.1で紹介した技術の出番です)。うまく表示できたかどうか、/users/1 にアクセスして確認してみましょう。

回答1

users/show.html.erbに追加

<p>
  <strong>Content:</strong>
  <%= @user.microposts.first.content %>
</p>

問題2

リスト 2.16は、マイクロポストのContentが存在しているかどうかを検証するバリデーションです。マイクロポストが空でないことを検証できているかどうか、実際に試してみましょう (図 2.16のようになっていると成功です)。

回答2

app/models/micropost.rbを修正

class Micropost < ApplicationRecord
  belongs_to :user
  validates :content, length: { maximum: 140 }, presence: true
end

問題3

リスト 2.17のFILL_INとなっている箇所を書き換えて、Userモデルのnameとemailが存在していることを検証してみてください (図 2.17)。

回答3

app/models/user.rbを修正

class User < ApplicationRecord
  has_many :microposts
  validates :name, presence: true
  validates :email, presence: true
end

2.3.4 演習

問題1

Applicationコントローラのファイルを開き、ApplicationControllerがActionController::Baseを継承している部分のコードを探してみてください。

回答1

class ApplicationController < ActionController::Base

問題2

ApplicationRecordがActiveRecord::Baseを継承しているコードはどこにあるでしょうか? 先ほどの演習を参考に、探してみてください。ヒント: コントローラと本質的には同じ仕組みなので、app/modelsディレクトリ内にあるファイルを調べてみると...?)

回答2

app/models/application_record.rbclass ApplicationRecord < ActiveRecord::Base

railsチュートリアル2章で学んだこと

MVC(Model-View-Controller)の動き

「/users にあるindexページをブラウザで開く」という操作を行った時、どのように内部では処理が動くのか。

これは、Railsチュートリアルの方を見てください。図もあり説明もありなので分かりやすいです。

https://railstutorial.jp/chapters/toy_app?version=5.0#sec-mvc_in_action

入力チェック(バリデーション)

モデルのファイルmicropost.rbで最大140文字までの入力チェックを付ける

class Micropost < ApplicationRecord
  validates :content, length: { maximum: 140 }
end

必須入力を付ける場合はpresence: trueを付ける

class Micropost < ApplicationRecord
  validates :content, length: { maximum: 140 }, presence: true
end

1対nの関連付け

これはRailsチュートリアルを参照してください。

https://railstutorial.jp/chapters/toy_app?version=5.0#sec-demo_user_has_many_microposts

簡単に書くと

  • 1の方にhas_manyを書いて、nを複数形で指定する
  • nの方にbelongs_toを書いて、1を単数系で指定する

Railsコンソール

データベースへアクセスし色々できる

$ rails c
exit # 終了

継承について

Railsチュートリアルを参照

https://railstutorial.jp/chapters/toy_app?version=5.0#sec-inheritance_hierarchies

  • モデルクラスの場合は、ApplicationRecordActiveRecord::Baseを継承している
  • データベースに接続する処理やデータベースを扱える処理はActiveRecord::Base側で定義されている
  • これによって、新しく作ったクラスでデータベースに接続する処理やデータベースを扱える処理を書かなくて色々できる
  • モデルだけじゃなくコントローラーも同じようになっている
  • コントローラーの場合はApplicationControllerを継承している

herokuへのデプロイ

手順は1章と同じですが、今回はDBを新たに作ったのでマイグレーションをする必要があります

$ git add .
$ git commit -m "終わりー"
$ git push origin master
$ git push heroku
$ heroku run rails db:migrate
$ heroku open

違えて実行したscaffoldを無かったことにする

間違えてscaffoldしちゃった時は削除できる

$ rails destroy scaffold Micropost
Running via Spring preloader in process 4158
Expected string default value for '--jbuilder'; got true (boolean)
      invoke  active_record
      remove    db/migrate/20170614102406_create_microposts.rb
      remove    app/models/micropost.rb
      invoke    test_unit
      remove      test/models/micropost_test.rb
      remove      test/fixtures/microposts.yml
      invoke  resource_route
       route    resources :microposts
      invoke  scaffold_controller
      remove    app/controllers/microposts_controller.rb
      invoke    erb
      remove      app/views/microposts
      remove      app/views/microposts/index.html.erb
      remove      app/views/microposts/edit.html.erb
      remove      app/views/microposts/show.html.erb
      remove      app/views/microposts/new.html.erb
      remove      app/views/microposts/_form.html.erb
      invoke    test_unit
      remove      test/controllers/microposts_controller_test.rb
      invoke    helper
      remove      app/helpers/microposts_helper.rb
      invoke      test_unit
      invoke    jbuilder
      remove      app/views/microposts
      remove      app/views/microposts/index.json.jbuilder
      remove      app/views/microposts/show.json.jbuilder
      invoke  assets
      invoke    coffee
      remove      app/assets/javascripts/microposts.coffee
      invoke    scss
      remove      app/assets/stylesheets/microposts.scss
      invoke  scss

新しく綺麗な状態のDBを作りたいとき

DB削除 → DB作成 → migrationを一発でやってくれる

$ rails db:migrate:reset
Dropped database 'db/development.sqlite3'
Database 'db/test.sqlite3' does not exist
Created database 'db/development.sqlite3'
Created database 'db/test.sqlite3'
== 20170614093157 CreateUsers: migrating ======================================
-- create_table(:users)
   -> 0.0021s
== 20170614093157 CreateUsers: migrated (0.0023s) =============================

== 20170614102713 CreateMicroposts: migrating =================================
-- create_table(:microposts)
   -> 0.0008s
== 20170614102713 CreateMicroposts: migrated (0.0009s) ========================

railsチュートリアル3章はこちら

opiyotan.hatenablog.com

瀧見サキが作る"痛くないハイヒール"はママこそオススメ!

こんにちは、@opiyoです。

ハイヒールを履いた女性は好きですか?

今日は、瀧見サキさんが作るハイヒールについて調べてみました。

瀧見サキさんはママ。

そんな子育て真っ最中のママが作る靴は「エレガントなデザイン」で「芝生の上を歩くような履き心地」というコンセプトで作る「痛くないハイヒール」

これはもーママ達が忘れかけていたオシャレを取り戻す最高の靴なのでは無いでしょうか?

ハイヒールは嫌われ者?

そもそもだけど、ハイヒールってそんなに痛いのかとおもってネット(ガルちゃん)で色々調べてみたのですが、ハイヒールはやはり物凄く「痛い」そうです。

  • 産後ぺたんこしか履いてないから ヒール苦手ってより履くのが怖い‼︎ 3年前まではヒールしか履かなかったのに…。 ペタンコは楽だけどなんだかんだ 足が疲れる(。-_-。)
  • 見た目のために苦痛を我慢するのは20代で終わりにしました。 一日履いてもぜーんぜん痛くならないハイヒールはありませんか?
  • ヒール自体はかわいいと思うしスタイルもよく見えるから好きですけど、歩く距離や一緒に出かける人のこと考えると結局低めの靴になります 長くヒール履けるコツってないんですかね
  • 足が薄いらしく、どうしても前にすべって指が痛くなるので苦手です! 履きたいんですけど痛いし疲れる;
  • ヒールはスタイルよく見せる重要アイテムなので、無理して履いてます(._.)女って大変(つД`)ノ
    http://girlschannel.net/topics/169306/ から引用

確かに妻もハイヒールは我慢して履いてるって昔言ってましたね。

なんかでも色々見てると

  • ハイヒールは可愛い
  • スタイル良く見えるから履きたい
  • カッコイイ

なんて意見も多いですね。

SAKIAS(サキアス)

まーとにかく見てください。写真を上回る説明をできる自信がありません。本当に素敵です。

www.instagram.com

www.instagram.com

www.instagram.com

www.instagram.com

www.instagram.com

どこで買える?

  • 伊勢丹新宿店 リ・スタイル
    • 住所:東京都新宿区新宿 3-14-1 本館3F
    • 電話番号:03-3352-1111
  • STUDIOUS JINNAN
    • 住所:東京都渋谷区神南 1-5-19 1.2F
    • 電話番号:03-6277-5582
  • STUDIOUS CITY NEWoMan 新宿店
    • 住所:東京都新宿区新宿 4-1-6 NEWoMan M2F
    • 電話番号:03-5315-4333
  • CITYSHOP
    • 住所:東京都港区南青山 5-4-41 2F
    • 電話番号:03-5778-3912
  • Altamira
    • 住所:愛知県名古屋市中区栄 3-35-15
    • 電話番号:052-251-5488
  • LOVE
    • 住所:愛知県岡崎市明大寺本町 1-34 岡崎センタービル1A
    • 電話番号:0564-83-5969
  • AFTER SCHOOL
    • 住所:新潟県新潟市中央区西堀通 5-833-8 3F
    • 電話番号:025-378-0405

オンラインはこちら

LOVE online store|WOMEN | SAKIAS  商品一覧ページ

伊勢丹、STUDIOUS、ZOZOTOWNは検索にヒットしなかった。

まとめ

いかがでしたでしょうか。

今日(6/14)たまたま付けた「セブンルール」という番組で瀧見サキさんを知りましたが、本当に見て良かったです。

子どもがいると座ったり立ったり、抱っこしたり、追いかけ回したり?(これはうちだけかな…)するのでハイヒールは中々履きずらかったりすると思いますが、そんな経験もしているママが作っている靴だからこそ他とは違う魅力があると思うのです。

テレビの中でも子どもが生まれた年は「手を使わずに履ける靴」を作ったと言っていたので、ママの日常が靴にも反映されている靴です。

  • ハイヒールの最大の敵「痛み」が無い靴
  • 子育て真っ最中のママが作った靴

もー買わない理由は無いですね。買ってください。

ぼくはホームページにトップページに使われているローファーが欲しいです。メンズは無いのかな?



どうしてもハイヒールに抵抗がある場合は、ハイヒールじゃ無い靴もあるみたいなので一度調べてみると良いかもしれませんね。

Ruby on Rails チュートリアル1章まとめ(演習も)

こんちにわ、opiyoです。

突然ですが、私は今日からプログラミングの勉強をスタートしようと思います。

その名も

Railsブートキャンプ

うん。そのまま!

基礎部分をRailsチュートリアルで行い、最終的に一つアウトプットできるwebサービスを作ることが目標です。

経験上、だらだらやっていると間延びしちゃうので一気に駆け抜けます!

第2章は、こちらからどうぞー

opiyotan.hatenablog.com

railsチュートリアルの開発環境

cloud9が良いのだろうが、面倒なのでローカルでやる。

cloud9でのやり方は、こちらで。

https://railstutorial.jp/chapters/beginning?version=5.0#sec-development_environment

railsをインストール

$ gem install rails -v 5.0.0.1
$ rails _5.0.0.1_ new hello_app
  create
  create README.md
  create vendor/assets/stylesheets/.keep
  remove config/initializers/cors.rb
  run bundle install

Bundle complete! 15 Gemfile dependencies, 62 gems now installed.
Use `bundle show [gemname]` to see where a bundled gem is installed.
  run bundle exec spring binstub --all
* bin/rake: spring inserted
* bin/rails: spring inserted

Gemfileの書き方

  • gem 'sqlite3'

特定のバージョンを指定しない場合は、最新のバージョンを取得する

  • gem 'uglifier', '>= 1.3.0'

ugliflerが1.3.0以上であれば最新バージョンがインストールされます メジャーバージョンアップになる

  • gem 'coffee-rails', '~> 4.0.0'

4.0.4より大きく、4.1より小さい場合にインストールされる マイナーバージョンアップになる(4.0.1, 4.0.2, ...) 4.1, 4.2にはならない

railsサーバーの動かし方

$ rails s

f:id:opiyotan:20170613185258p:plain

Railsチュートリアルの演習問題

1.3.2演習

<問題1>デフォルトのRailsページに表示されているものと比べて、今の自分のコンピュータにあるRubyのバージョンはいくつになっていますか? コマンドラインでruby -vを実行することで簡単に確認できます。

<回答1>

$ ruby -v
ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin15]

<問題2>同様にして、Railsのバージョンも調べてみましょう。調べたバージョンはリスト 1.1でインストールしたバージョンと一致しているでしょうか?

<回答2>

$ rails -v
Rails 5.0.0.1

1.3.4演習

<問題1>リスト 1.8のhelloアクションを書き換え、「hello, world!」の代わりに「hola, mundo!」と表示されるようにしてみましょう。

<回答1> application_controller.rbのrender html: "XX"を修正する

<問題2>Railsでは「非ASCII文字」もサポートされています。「¡Hola, mundo!」にはスペイン語特有の逆さ感嘆符「¡」が含まれています (図 1.13)17。「¡」文字をMacで表示するには、Optionキーを押しながら1キーを押します。この文字をコピーして自分のエディタに貼り付ける方が早いかもしれません。

<回答2>¡™£¢∞§¶•ªºœ∑´®†¥¨øåß∂ƒ©˙∆˚¬Ω≈ç√∫˜µ≤≥/ªº–≠π“‘/

<問題3>リスト 1.8のhelloアクションを参考にして、2つ目のアクションgoodbyeを追加しましょう。このアクションは、「goodbye, world!」というテキストを表示します。リスト 1.10のルーティングを編集して、ルートルーティングの割り当て先をhelloアクションからgoodbyeアクションに変更します (図 1.14)。

<回答3>

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception

  def hello
  render html: "¡Hola, mundo!"
  end

  def googbye
  render html: "goodbye, world!"
  end
end

Rails.application.routes.draw do
  root 'application#googbye'
end

gitによるバージョン管理

プロジェクトのコードの履歴を追ったり、うっかり削除してしまったファイルを復旧 (ロールバック) したりという作業が行えるようになります。バージョン管理システムを熟知することは、今ではあらゆるソフトウェア開発者にとって必須のスキル

無料で読める書籍 https://git-scm.com/book/ja/v2

gitをなぜ使うのか?

https://railstutorial.jp/chapters/beginning?version=5.0#sec-what_good_does_git_do_you

git管理下にあれば、例え削除したとしても簡単に復活させることが可能です。

gitのコマンド

  • git config

ユーザー名とメールアドレスを設定します。 これらは今後インターネット上に公開されることになりますので、ご注意ください。

  • git init
  • git status
  • git add .
  • git commit -m "コメント"
  • git log
  • git checkout -b modify-README
  • git merge modify-README
  • git branch -d
  • git push

GitHubとBitbucket

gitを扱うための2つの著名なサービスです。 どちらも無料で使えますが、個人で使う分にはそれぞれ特徴があるので気をつけましょう! github 無料の場合は全てpublicになる つまり誰でも見ることができる bitbucket 無料でprivateになる

なので、無難なのはbitbucketでしょうか。 私も昔やったことがあるのですが、知らぬ知らぬ間に大事なkeyとかがコードに書いてて公開してしまうと非常に良くないですよね。 なので、閉じた環境であるbitbuckeの方がそういった心配をしなくて良いので安心です。

しかし本チュートリアルではWebアプリケーションの様々なコードを扱うため、全てのリポジトリがデフォルトで非公開になっている方がセキュリティ上安心して取り組めます。具体的には、本チュートリアルの後半で扱うコードには、暗号化キーやパスワードなどの機密情報が含まれます。このような情報を利用されると、サイトのセキュリティが脅かされるかもしれません。

Herokuにデプロイする

Railsを含むRuby Webアプリ用のホスティングプラットフォームです。Herokuは、ソースコードのバージョン管理にGitを使用していれば、Railsアプリケーションを簡単に本番環境にデプロイできます レンタルサーバーのすごいやつ。osとかdbとかをインターネット越しに扱えて簡単に使うことができる。 http://www.sejuku.net/blog/7858

セットアップは以前まとめた以下を参照 opiyotan.hatenablog.com

Herokuコマンド

  • heroku rename rails-tutorial-hello

1.5.4演習

<問題1> heroku helpコマンドを実行し、Herokuコマンドの一覧を表示してみてください。Herokuアプリのログを表示するコマンドはどれですか?

<回答1>

Usage: heroku COMMAND [--app APP] [command-specific-options]

Help topics, type "heroku help TOPIC" for more details:

  heroku access # manage user access to apps
  heroku addons # manage add-ons
  heroku apps # manage apps
  heroku authorizations # OAuth authorizations
  heroku buildpacks # manage the buildpacks for an app
  heroku certs # a topic for the ssl plugin
  heroku ci # run an application test suite on Heroku
  heroku clients # OAuth clients on the platform
  heroku config # manage app config vars
  heroku domains # manage the domains for an app
  heroku drains # list all log drains
  heroku features # manage optional features
  heroku git # manage local git repository for app
  heroku keys # manage ssh keys
  heroku labs # experimental features
  heroku local # run heroku app locally
  heroku logs # display recent log output
  heroku maintenance # manage maintenance mode for an app
  heroku members # manage organization members
  heroku notifications # display notifications
  heroku orgs # manage organizations
  heroku pg # manage postgresql databases
  heroku pipelines # manage collections of apps in pipelines
  heroku plugins # manage plugins
  heroku ps # manage dynos (dynos, workers)
  heroku redis # manage heroku redis instances
  heroku regions # list available regions
  heroku releases # manage app releases
  heroku run # run a one-off process inside a Heroku dyno
  heroku sessions # OAuth sessions
  heroku spaces # manage heroku private spaces
  heroku status # status of the Heroku platform
  heroku teams # manage teams
  heroku update # update heroku-cli

<問題2> 同じく、アプリの状態を調べるためのコマンドはどれですか? 直近に発生したイベントは何でしたか? (ちなみにこのログを調べるコマンドは、本番環境をデバッグするのに便利です)

<回答2>

  • heroku ps
  • heroku status
  • heroku logs

このあたりかなー?

難しかったところ

1.3.1でGemfileを1.5に修正するが、bundle installするとエラーになる

Resolving dependencies...
Bundler could not find compatible versions for gem "actionpack":
  In snapshot (Gemfile.lock):
  actionpack (= 5.0.3)

  In Gemfile:
  rails (= 5.0.0.1) was resolved to 5.0.0.1, which depends on
  actionpack (= 5.0.0.1)

  rails (= 5.0.0.1) was resolved to 5.0.0.1, which depends on
  actionpack (= 5.0.0.1)

  rails (= 5.0.0.1) was resolved to 5.0.0.1, which depends on
  actionpack (= 5.0.0.1)

  rails (= 5.0.0.1) was resolved to 5.0.0.1, which depends on
  sprockets-rails (>= 2.0.0) was resolved to 3.2.0, which depends on
  actionpack (>= 4.0)

Running `bundle update` will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict.

だから、bundle updateしよう

気になったところ

  • githubとbitbucket両方でソース管理することは可能か?
$ git remote -v
heroku  https://git.heroku.com/opiyo.git (fetch)
heroku  https://git.heroku.com/opiyo.git (push)
origin  git@github.com:opiyo/railstutorial.git (fetch)
origin  git@github.com:opiyo/railstutorial.git (push)

この例では、herokuorigin(github)だけどこのようにremote addしてやれば共存は可能。 コマンド打つ時も先頭の文字列を変えてやればOKだ。

$ git push origin master
$ git push heroku master
  • mergeした内容がpushされているかどうか確認する方法は?

git diff ローカル リモートコマンドでローカルブランチとリモートブランチを比較すれば確認できる!

$ git diff master origin/master # これね!
diff --git a/Gemfile b/Gemfile
index 4816f4f..63b826d 100644
--- a/Gemfile
+++ b/Gemfile
@@ -21,9 +21,5 @@ group :development do
   gem 'spring-watcher-listen', '2.0.0'
 end

-group :production do
-  gem 'pg', '0.18.4'
-end
-
 # Windows環境ではtzinfo-dataというgemを含める必要があります
 gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
diff --git a/Gemfile.lock b/Gemfile.lock
index 79ef8a6..5c7b646 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -80,7 +80,6 @@ GEM
     nio4r (1.2.1)
     nokogiri (1.8.0)
       mini_portile2 (~> 2.2.0)
-    pg (0.18.4)
     puma (3.4.0)
     rack (2.0.3)
     rack-test (0.6.3)
@@ -158,7 +157,6 @@ DEPENDENCIES
   jbuilder (= 2.4.1)
   jquery-rails (= 4.1.1)
   listen (= 3.0.8)
-  pg (= 0.18.4)
   puma (= 3.4.0)
   rails (= 5.0.0.1)
   sass-rails (= 5.0.6)

その他の学んだところ

Model-View-Controller(MVC)

ブラウザは一般的にWebサーバーにリクエスト (request) を送信し、これはリクエストを処理する役割を担っているRailsのコントローラ (controller) に渡されます。 コントローラは、場合によってはすぐにビュー (view) を生成してHTMLをブラウザに送り返します。 動的なサイトでは、一般にコントローラは (ユーザーなどの) サイトの要素を表しており、データベースとの通信を担当しているRubyのオブジェクトであるモデル (model) と対話します。 モデルを呼び出した後、コントローラは、ビューを描画し、完成したWebページをHTMLとしてブラウザに返します。

https://railstutorial.jp/chapters/images/figures/mvc_schematic.png

bundle installする時のオプション

$ bundle install --without production

本番用のgem (この場合はpg gem) をローカルの環境にはインストールしないようにするために、bundle installに特殊なフラグ「--without production」を追加します。

Herokuでは、サブドメインの他に独自ドメインも使用できます。実を言うと、このRuby on RailsチュートリアルもHeroku上に置かれているのです




何か不備、不足があればご指摘ください。

岡山出身のSTU48メンバーは3人!これは意外と人気出るかもしれないぞ?

こんにちは、 @opiyo です。

この前コンビニに寄った時、マガジンの表紙がSTU48メンバーでした。

噂には聞いてましたが遂にSTU48始動!ということで、今日はずっと気になっていた「岡山にゆかりのあるSTU48メンバー」について調べてみました。

ちなみに表紙の娘は「山口」の娘で名前は…忘れた!

そもそもSTU48って何だ?

AKB姉妹グループとして、「瀬戸内」エリアを本拠地としたグループで、瀬戸内の頭文字をとって「STU」と命名される。

瀬戸内とは具体的には以下の7つの県。

  • 岡山県
  • 広島県
  • 山口県
  • 香川県
  • 愛媛県
  • 兵庫県
  • 徳島県

瀬戸内海を主とした「船上劇場」で講演する予定とのこと。



STU48全体については今度また、まとめたいと思う。

だって来週総選挙あるらしいからさ。もしかしたらSTU48のメンバーが上位に…なんて可能性もあるだろうからね。

しっかり勉強しておきましょう。


では、早速だけどが今日は「岡山」にゆかりのあるメンバーを紹介していくよー

菅原 早記

  • 名前:菅原 早記
  • ニックネーム:さっきー
  • 生年月日:2001年11月14日
  • 瀬戸内でオススメのもの:瀬戸大橋

AKB48 49thシングル 選抜総選挙 アピールコメント

www.youtube.com

ちなみに2ちゃんに応援スレもあるから、気になる方は是非応援しましょう!

【STU48】菅原早記応援スレ★1 [無断転載禁止]©2ch.net

張 織慧

  • 名前:張 織慧
  • ニックネーム:おちょちゃん
  • 生年月日:2001年10月18日
  • 瀬戸内でオススメのもの:きびだんご、桃太郎

AKB48 49thシングル 選抜総選挙 アピールコメント

www.youtube.com

生まれ育ちは日本だが、両親は中国人。そのため中国語が少し話せるんだって。

趣味はゲームでアクションゲームが好きなそうですよ。いつも負けちゃうみたいだけど。

この子は調べてみると分かるけどすでに結構記事になてたりするから人気なのかも。

http://livedoor.blogimg.jp/ske_live-akb48g_release/imgs/2/a/2ae28fd5.jpg

藤原 あずさ

  • 名前:藤原 あずさ
  • ニックネーム:あず
  • 生年月日:1998年5月10日
  • 瀬戸内でオススメのもの:宇野港にあるチヌのオブジェ

AKB48 49thシングル 選抜総選挙 アピールコメント

www.youtube.com

周りのメンバーからすると歳が上なのかな。MCよかったとか出てくるから、しっかりしたお姉さん的な感じなのかもしれない。

探した中で一番可愛い写真。多分左だと思う。 http://livedoor.blogimg.jp/akb4839-stu48matome/imgs/3/6/362624b4.jpg

まとめ:

ごめん。最初考えていた最後のオチは「ブスばっか」だと思ってたんだけど、結構可愛い娘いっぱいいるね。

今回は、岡山だったけど他のメンバーも調べて見たくなってしまった。

岡山だと既に岡山イオンとかで講演してたりするし、今後見れる機会もありそうだから地味にチェックしていこうかなと思います〜

岡山イオンでのライブはこちら。 www.youtube.com



STUのメンバーへの投票できるっぽいので皆さんも参加してみてはいかがでしょうか?

  • 投票期間:5/30(火)10:00~6/16(金)15:00まで
  • 投票方法:なんか色々な方法があるっぽいけど、CD買えば選挙権が多分ついてくる!

今読んだ本あなたは覚えていますか?読んだら忘れない読書術を身につける!

こんにちは、@opiyoです。

僕は読書が苦手で本を読まない人生を歩んできてしまいましたが、最近よく目にするのが「読書する人は年収が高い」「地位が高い」「成功者が多い」です。

ぼくもどうかそんな人達になりたいと思って読書をできるだけするようになりました。

しかし、数をこなすことだけに夢中になったいたぼくはふと気づくのです。

  • 「昨日読んだ本、何書いてあったっけ?」
  • 「あの本から結局何を学んだのだ?」



読んでいる最中は「これは素晴らしい!」「真似したい!」って思うことがいっぱいあるにも関わらず、いざ問われると何も出てこない。

つまり全く覚えていない。「記憶」に残っていないということは、この読書した時間は何だったのか。

そんな時手に取ったのが、本日紹介する樺沢紫苑さんが書いた本です。


この本はズバリ
「記憶に残る読書術」つまり「自己成長 = 人生を変える」読書術です。

せっかく素晴らしい本との出会い、せっかく時間を使って読んだというのに、それを忘れてしまうなんて、もったいないと思いませんか?

なので本日は…

読んだ本を自分の血となり肉にし圧倒的に成長したい。そのためには、どのように本を選び読めば良いのか?
明日から実践し、習慣化する「1アクション」は何か?

気になった16のワード

著者:樺沢 紫苑 日本で最もインターネットに詳しい精神科医

脳が「重要な情報」と判断する基準は2つです。「何度も利用される情報」と「心が動いた出来事」です。

時間の使い方をどうするかで、私たちが成功できるか、幸福になれるかが全て決まってしまうということです。

月に10冊読むだけで、あなたは読書量において日本人の上位2%に入ることができるのです。

アメリカの小説家スティーブン・キング。彼は自らの小説方についてまとめた「書くことについて」の中で、次のように述べています。 「作家になりたいのなら、絶対にしなければならないことがふたつある。たくさん読み、たくさん書くことだ。 私の知るかぎり、その代わりになるものはないし、近道もない」

読書は私たちを「物知り」にしてくれるだけではありません。読書によって「地頭が良くなる」「知能が高くなる」「脳が活性化し、脳のパフォーマンスが高まる」 ということは、多くの脳科学研究が示しています。

自分の頭でいくら状況を打開する方法を考えても、限界があります。しかし、「本」を読めば何千、何万人もの先人の知恵を借用できるのです。

読書は「習慣」です。読書習慣のない人が、お金持ちになったから急に本を読み出すということは、まずあり得ない話です。

1週間前に読んだ本なのに、人に内容を説明できないような読み方では、「自己成長」することは不可能です。

私が考える「本を読んだ」の定義は、「内容を説明できること」、そして「内容について議論できること」です。 感想や自分の意見を述べられなければ、本を読んでいる意味がないのです。

「自己成長につながる気づき」や「自己成長に役立ちそうな言葉」があれば、ドンドン、ラインを引いていきます。 略 私は1冊の本で、本当に重要だと思えるところを3箇所見つけ、そこにラインを引きます。

読んだ本の中から、自分の心に響いた言葉を1~2行だけ書き写し、それに自分なりのコメントをつけて、紹介すればいいのです。 略 15分で書いた「本の感想」よりも、3分で書いた「名言投稿」のほうが、何倍もの「いいね!」がつくこともあります。

本をきっかけに著者と会うこともまた、読書の楽しみであり、読書術といっていいでしょう。

ホームランの数を増やすには、まずスターティングメンバーに入って、打席に入る数を増やす必要があるのです。

ベストセラーというのは「時流」を反映します。集団心理といってもいい。 「今、何が流行っているのか?」を学び、研究することは、新商品や新製品を開発したり、私のように「本」を書いたりする人にとっては、大きな意味があります。

少なくともほとんどの問題の対処法は本に書かれているわけですから、後は本を読んだあなたが、それを実行するのか、しないのか、それだけです。

問いを叶える3つのポイント

全体を把握してゴールと読み方を決める

  1. 全体を把握する
  2. 本を読む目的を設定する
  3. 「速読」か「精読」かを決める

ぼくの場合は、ついつい「何故この本を選んだのか」「何故この本を読みたいのか」を読む前に考えちゃうのですが、それって結構何となくって場合が多いんです。

なので先ずは全体を把握する。それから「目的」=「この本で何を得たいのか」を考えるってのは凄く納得できるし、すぐ実践できそうです。

ホームラン級の本との出会いが圧倒的な成長を引き起こす

読書は「たくさん読む」よりも「何を読むか」のほうが、10倍重要です。 「たくさん読む」のではなく、「どの本を読むのか?」にフォーカスし、1冊1冊を真剣に選んでいく。そうすることで、真に自己成長につながる「ホームラン本」と出会う確率を高めることができるのです。

ぼくの場合は、やっぱり何となくで選んでしまっている。「あの人がオススメしてた」「何となく検索した時に引っかかった」。これじゃー真剣に選んでその本に出会った人とは本を読むときのモチベーションは違いますよね。

やはりいかに自分と会話できるか。今何に悩み、何を欲してるのか。

これがきっとぼくは出来ていない。

だからブログも手が止まる。

初心者の人に限って、基本的な使い方すら知らないのに、なぜか「上級のノウハウ」を知りたがるのです。

ごめんなさい。これは本当に最悪のクソ野郎(ぼく)ですね。

自分の頭、手、足、身体を使う前に答えを知ろうとする。私の本当に悪いところです。

情報も知識も、今の自分に必要なものを集め、吸収すべきなのです。

まさにこれですね。今の自分に本当に必要な本を読む。

これこそが一番大事なことですね。

じゃーどうやって探すのか。これも書かれていますね。

筆者がその本の「主な読者層」としてどんな人を想定しているのかを考え、そして見抜いてください。

  1. 先ずは今から学びたい、得たい情報に対して自分はどのステージにいるのかを考え、どこを目指すのかを考える

  2. 筆者が想定するターゲットとマッチしているか確認する

これができればミスマッチがだいぶ減りそうですね。

月に10冊読むだけで、あなたは読書量において日本人の上位2%に入ることができる

少し問いからずれますが、これは凄いことだと思うんです。

確かに前に書いたポイント「質 > 量」なことは間違いありません。いっぱい読んでも忘れてしまっては意味がないからです。

ですが、全てを忘れてしまうなんてことは無いと考えると私のようなバカこそ量で質を上回るのは有りだと思います。

これでライバルに情報量で差をつけられるとシンプルに考えればいいのです。

効率ばかり考えても手が止まっちゃいますからね。

明日から実践する1アクションは

今自分に本当に必要な本を読む