rails 独学して軽くにちゃんまとめつくる

読者です 読者をやめる 読者になる 読者になる

記録を残すことについて

 

記録を残しておくことって大事な気がする。過去の蓄積が現在と未来をつくるから。人の体は取り入れる食事と運動によって形成されていて、人の精神は取り入れる情報によって形成されている。ほかにも下に挙げたようなものから形成される。

 

スマホの利用時間、体重、身長、腕立て伏せの限界回数、使ってる文字のフォントの大きさ、イヤホンの音量、歩いた歩数、飲んだ水の量、体温の増減、接種カロリー、SNSの会話回数の偏移、1日当たりのツイート数、ウェブの検索ワード、ブックマークしたサイト、お風呂に使った時間。

 

僕たちは日常生活を送る上で記録というのをほとんどとっていない。なぜなら非常にめんどくさいからだ。1行日記ですら続けるのはめんどくさい。

 

GoogleFacebook などは僕たちの検索履歴や投稿画像を勝手に(自動で)つかってビッグデータなるものを活用しているが、僕らの生活のごくわずかな一部でしかない。ほとんどの情報は何気なく流されていってる。

 

この流されていってる情報を事細かく集められたら自分の健康状態や寿命や将来の自分がわかるはず。

 

IoT化されたら多くの見過ごされていた情報が記録されるが、複数のメーカーがバラバラに収集したのでは意味がない。これをまとめて活用できるようなシステムがつくりたい。

 

幸いスマートフォンとインターネットがあるのでやる気があればできそうだ。IoT化されてないのでもうちょっと時代が進まなければだめだが、そんなシステムをつくってみたい。

 

まだ出ぬ管理システムに託すために今のうちに身の回りのことを計測しておいたほうが得なのかなとも思うが、やっぱめんどくさい。

 

そうなんだよなー。めんどくさいがすべて。

(おすすめ。でも未完)Rails初心者が使うべき思考パターンとその型

 

 

 

Railsでアプリをつくるときある程度型にあてはめて考えたほうがいいと考えていた。RailsTutorialや パーフェクト Ruby on Railsをやって気づいたのは、どんな実装にもある程度型にはまっているということ。もちろん型から外れたものを実装するときもあるし、型を増築しなきゃいけないときもある。しかし scafold をはじめ、ある程度はあるのだからそれに習うべき。

 

new -> create -> show -> index -> edit -> update -> destroy

 

の順番で書いていく。これが自然な流れだから。まずnewで作り、createで審査し、showページに飛び、indexで全体を見て、editで編集をし、updateで審査し、destroyで消す。一連のストーリーがここにもある。

 

 

CRUDはコントローラーとビューに分けて考えるのがいいから、分けて考える。

 

new

 

ーフォーム作成ー

・テキストの場合は class: "form-control"

・form_for のあとにエラーをだす error_message を忘れずに。パーシャルにしておけ。引数は object: f.object


・form_forが成功したときにだす flash の表示をapplication.rbに挟んでおけ。

Rails4でユーザーに簡易なメッセージをflashで表示する - Rails Webook

これの1をぱくれ。


・フォームはeditでもつかうからパーシャルにしておけ。でもそうしたら submit ボタンの文字がおかしくなるから、provide か 辞書データをつくっておけ。


・時間を入力するときはタイムゾーンの設定をし、form_forの外側で <% now = Time.zone.now %> を定義しておく。また、年を指定するときはstart_yearとend_year を書け。end_year: now.year+1とかね。

・翻訳をするため、f.label はかけ。その後i18n設定をするために一般的な翻訳データとフォーム特有の翻訳データを作成しろ。一般のはターミナルに

wget https://raw.github.com/svenfuchs/rails-i18n/master/rails/locale/ja.yml -P config/locales/

を入力しろ。そしたら勝手に作ってくれる。フォーム特有のは下のリンクの(7)を参考につくれ。うまくいけばフォームが日本語対応になる。うまくいかない場合は ctrl + c でやりなおせ。

http://morizyun.github.io/blog/i18n-english-rails-ruby-many-languages/

・submit ボタンのクラスのあとに

data: {disable_with: '作成中・・・'}

と書け。二回クリックされるのを防げるぞ。

 

 

create

・newで入力したのを変数に代入。条件分岐させ、メッセージと移動先を指定。

・ 条件分岐が命。どのような条件を建てるかがもんだい。新規登録なら変数をセーブてきてるか否か。ログインなら入力されたパスワードとメールアドレスが正しいか否か。

 

index

・bootstrap をいれとけ。 

   gem 'bootstrap-sass'

をgemfile にいれて bundle installしておけ。

・これもshowと同じでnewで作ったのを表示するだけ。ただし、情報量を抑えるためshowよりも使用するデータを少な目にする。LINEの友達一覧もindexの一覧なんだけど名前と顔写真だけでしょ?

・indexは厳選と順番が生きてくる。厳選は、年齢が20歳以上とか、東京住みとか。順番は値段別、時間別、五十音順、作成順などなど。例えばUserモデルを厳選し順番を変えると

@users = User.where('age > ? AND prefecture = ?', 25, 'Tokyo')order(:id)

のようにする。厳選と順番、忘れがちだけど大事

 

・ページネーション。kaminari とか will_paginate がある。kaminari ぼくはkaminari が趣味。

・それっぽいデザインがほしければ ”list-group” というクラスを使う。たとえばこんな感じ

<div class="list-group">
  <%@users.each do |user|%>
    <%= link_to user, class:"list-group-item" do %>
      <p class="list-group-text">
          <%= user.image %>
      </p>
      <h4 class="list-group-text">
        <%= user.name %>
      </h4>
    <% end %>
  <% end %>
</div>

 

おおきく list-groupで囲み、個別にlist-group-itemをつけ、文字にlist-group-textを使う。参考としてBootstrapのサイトを書いておく。

List group · Bootstrap

 

・時間を表示するときは strftimeで整形するのがおすすめ。

event.start_time.strftime('%Y/%m/%d %H:%M')

こうすると  2017/1/28  20:16 というように好きなように書ける

 

 

show

・なんて書けばいいかわからないなんていうな。忘れるな。モデルからデータを引っ張りだしてくるだけだ。基本はnewで入力したデータを表示するだけだ。だから newで入力した

<%= f.text_field :name %>や  <%= f.text_field :email %>  というのを

<%= @user.name %> とか <%= user.email %> に変えるだけ。簡単で単純。

 

・それっぽいデザインがほしければ bootstrap の panel クラスを使おう。具体的には

<div class="panel-default">
  <div class="panel-heading">
    名前
  </div>
  <div class="panel-body">
    <%= @user.name %>
  </div>
</div>

こんな風にかく。これを要素の数だけ書けばそれっぽくなる。

panel-default と panel-header と panel-body。

 

 

 

edit

update

 

destroy

物理削除(railstutorialのようにデータを消してしまう)か論理削除(データを消さずに別の場所に移して見えなくする)かを決める。kakurenbo-putiというgemがあればすんなりと論理削除に移行できる。

kakurenbo-putiというrails4.2に対応した論理削除gemの紹介 - 波打際のブログさん

 

 

 

 

モデル

・バリデーションとseedとfixtureを作る。

・関連性をもたせるか?関連名を自作するときは class_nameでモデルクラスを指定し、foreign_keyで外部参照キーを指定しろ。親クラスが削除されたときのためにdependent: :destroy は いるか?

・中間テーブルをもたせるときはテーブルの型に referencesをつかえ。has_many等の関連づけをわすれずに。3つのモデルの関連性を頭に図示できたか?
中間テーブル作成したらコントローラーも作成するんだよ。

 

ヘルパー

 ・ヘルパーで作ったのをコントローラーでも使いたいとき、application_controller.rb に

include SessionHelper のようにinclude + ヘルパーのクラス名をかく。

 

 

落ち穂拾い

・フレンドリーフォワーディングを作成しよう

・退会機能を作成しよう

 

ログイン認可

・なぜログインを要求するのか?それはログインしてるかどうかによって見せる画面を変えたり、本人確認するとこによって見せる画面やできる機能を制限するためです。

・ログインしてるか否か(logged_in?)と、あなたは誰?(current_user)という2つの機能が中心。

logged_in? ではヘッダー、そのほかビュー、

初心者の壁~プログラミングを勉強しようとする人へ~

学習の壁は大きいのが2つある。「初心者の壁」と「脱初心者の壁」がある。

 

初心者の壁は非常に学習コストが高い。知らないことを学ぶのは非常に手間がかかるしめんどくさいことをたくさんしなくちゃならない。

 

単語を知らないがために何を調べたらいいのかわからない

 

という根本的な問題にぶち当たる。例えば LINE に似たアプリを作りたいとする。だから「line 似たアプリ 作り方」 と検索する。しかしまともなものが見つからない。

 

しかし、あなたが 「チャットアプリ」 という言葉を思いついたら比較的有用なサイトが出てくる

チャットアプリ 作り方 - Google 検索

ほかにも 「SNS」 という言葉を思いついたらかなり有用な情報にたどり着く。「SNSアプリ作ってみた」というサイトにたどりつくことができただろう。

チャットアプリ 作り方 - Google 検索

 

一番上にこういうサイトがでてきた。

ド素人が完全自作SNSを作ってみてわかったこと。

 

だからあなたはこのサイトで「PHP」「bootstrap」 「MySQL」 「HTML」 「Ajax」「webアプリ」 などの重要な単語を知ることになる。このサイトではどうやら PHP というのが比較的重要そうなので PHP について調べてみる。検索ワードは 

 

php とは」

php 入門」

php 勉強方法」

 

などと打てばいくらでも出てくる。php はだいたいわかった。もう一つ先ほどのサイトで有用なのは 「webアプリ」 という単語だ。ウェブサービス全般を指す単語なので有用な情報がでてくる。

 

webサービス つくりかた」

 

とうつと有用そうな情報がたくさんでてきた。

https://liginc.co.jp/179142

 

サイトをみると、HTML, CSS など「つくってみた」のサイトで見かけた用語の多くの概要を知ることができる。さらに PHP という言葉と同列に Ruby という言葉を見つけることができる。

 

Ruby について調べてみる。

ruby php 比較」

Ruby とは」

Ruby 入門」

Ruby 勉強方法」

 

そこではphpがいいとか、rubyがいいとか、情報がたくさんあり、情報の渦に巻き込まれる。が、ぼくはruby をおすすめする。いろいろ調べると ruby on rails という言葉に出会うはず。

 

ruby on rails 勉強方法」

 

などと入力すると、きっと

「どっとインストール」「progate」「rails tutorial」

などと出てくる。あれがいいこれがいい、といういろいろな情報に巻き込まれる。しかし progate では twitter とよく似たアプリを作れることがわかる。

 

ここまで着たら今までめぐってきたサイトである程度の道がわかる。というわけであなたの学習指針は

 

HTML, CSS, Ruby, Ruby on Rails の文法を勉強する

Progate で Ruby on Rails を学んだらいいんだとわかる。

 

 

サラサラと書いてきたが、最初の分岐点は「SNS」 という単語を思いついたか否かだ。単語を思いつきさえすれば初心者の壁を超えるための学習指針は簡単に導きだすことができる。しかしこの単語を知るという作業が難しい。

例えばぼくはプログラミングについて興味があったから前から SNSという単語を知っていたからあっさり学習指針を思いついたが、たとえば

・自分で家を作りたい

・麻薬を手に入れたい

山口組に入りたい

(調べたらすぐ見つかったw

暴力団に加入するにはどうするのがベストでしょうか。西池袋か新橋... - Yahoo!知恵袋

ハッカーになりたい

・LINEにハッキングをしたい

 

という情報は全然検討が付かないためブレークスルーの役割をはたしてくれるであろう単語を見つけることに時間がかかるだろうと思われます。

 

これに関しては有効なしゅだんはなく、詳しい知人に聞いたり、質問サイトに投稿したり、時間をかけるしかないようです。。。

初心者の壁~プログラミングを勉強しようとする人へ~

学習の壁は大きいのが2つある。「初心者の壁」と「脱初心者の壁」がある。

 

初心者の壁は非常に学習コストが高い。知らないことを学ぶのは非常に手間がかかるしめんどくさいことをたくさんしなくちゃならない。

 

単語を知らないがために何を調べたらいいのかわからない

 

という根本的な問題にぶち当たる。例えば LINE に似たアプリを作りたいとする。だから「line 似たアプリ 作り方」 と検索する。しかしまともなものが見つからない。

 

しかし、あなたが 「チャットアプリ」 という言葉を思いついたら比較的有用なサイトが出てくる

チャットアプリ 作り方 - Google 検索

ほかにも 「SNS」 という言葉を思いついたらかなり有用な情報にたどり着く。「SNSアプリ作ってみた」というサイトにたどりつくことができただろう。

チャットアプリ 作り方 - Google 検索

 

一番上にこういうサイトがでてきた。

ド素人が完全自作SNSを作ってみてわかったこと。

 

だからあなたはこのサイトで「PHP」「bootstrap」 「MySQL」 「HTML」 「Ajax」「webアプリ」 などの重要な単語を知ることになる。このサイトではどうやら PHP というのが比較的重要そうなので PHP について調べてみる。検索ワードは 

 

php とは」

php 入門」

php 勉強方法」

 

などと打てばいくらでも出てくる。php はだいたいわかった。もう一つ先ほどのサイトで有用なのは 「webアプリ」 という単語だ。ウェブサービス全般を指す単語なので有用な情報がでてくる。

 

webサービス つくりかた」

 

とうつと有用そうな情報がたくさんでてきた。

https://liginc.co.jp/179142

 

サイトをみると、HTML, CSS など「つくってみた」のサイトで見かけた用語の多くの概要を知ることができる。さらに PHP という言葉と同列に Ruby という言葉を見つけることができる。

 

Ruby について調べてみる。

ruby php 比較」

Ruby とは」

Ruby 入門」

Ruby 勉強方法」

 

そこではphpがいいとか、rubyがいいとか、情報がたくさんあり、情報の渦に巻き込まれる。が、ぼくはruby をおすすめする。いろいろ調べると ruby on rails という言葉に出会うはず。

 

ruby on rails 勉強方法」

 

などと入力すると、きっと

「どっとインストール」「progate」「rails tutorial」

などと出てくる。あれがいいこれがいい、といういろいろな情報に巻き込まれる。しかし progate では twitter とよく似たアプリを作れることがわかる。

 

ここまで着たら今までめぐってきたサイトである程度の道がわかる。というわけであなたの学習指針は

 

HTML, CSS, Ruby, Ruby on Rails の文法を勉強する

Progate で Ruby on Rails を学んだらいいんだとわかる。

 

 

サラサラと書いてきたが、最初の分岐点は「SNS」 という単語を思いついたか否かだ。単語を思いつきさえすれば初心者の壁を超えるための学習指針は簡単に導きだすことができる。しかしこの単語を知るという作業が難しい。

例えばぼくはプログラミングについて興味があったから前から SNSという単語を知っていたからあっさり学習指針を思いついたが、たとえば

・自分で家を作りたい

・麻薬を手に入れたい

山口組に入りたい

(調べたらすぐ見つかったw

暴力団に加入するにはどうするのがベストでしょうか。西池袋か新橋... - Yahoo!知恵袋

ハッカーになりたい

・LINEにハッキングをしたい

 

という情報は全然検討が付かないためブレークスルーの役割をはたしてくれるであろう単語を見つけることに時間がかかるだろうと思われます。

 

これに関しては有効なしゅだんはなく、詳しい知人に聞いたり、質問サイトに投稿したり、時間をかけるしかないようです。。。

#1 落合流で論文を読む

最近落合陽一というすごい人をみつけまして、筑波大学助教授をやってるそうです。その人はどうやらメディアとアートを結び付けたいんだそう。空中の物を浮かせたり、シャボン玉をスクリーンにしていたり、ツイッターにはARで空中にパソコンのディスプレイらしきものを映し出し、ウェブサイトを見ている動画を投稿していました。

 

 

 

物体を浮かせる実験はあまり興味がないのですが、これで感触がつくれそうで楽しみです。ものを浮かせるということはそこに力が働いてることだから、そこに手を置くと感触がします。

5感のうち、パソコンで表現できるのは視覚と聴覚だけですよね。残る嗅覚と味覚と触覚はまだパソコンで表現できない。それが感触を音で再現しているのですから、もしかしたらパソコンで感触がつくれるかもしれません。

 

 

 

※キャプチャみりゃわかるがアダルト要素あり

たとえばこの動画をヘッドホンかイヤホンで聞いてください、耳がムズムズしますよね?音で感触がするいい例です。バイノーラルレコーディングといいます。海外では ASMR という名前で広まっています。どちらもアダルト要素にしか応用されていないのが、希望であり絶望ではありますが。

 

 

で、この人の slideshare をみつけてよんでいました。

 

 

どうも授業につかうpdf のようで読んでみると、25ページにおもしろそうなことがかいてました。どうやら彼は自分の授業を①仏②人間③鬼の3コースに分けていて、この分野に進みたい人は鬼コースを選び2週間で論文を50記事読んできてその後7週間であらたに自分が考えた装置を実装するそうです。

 ぜんぜん論文を読むのに慣れてないからいきなりこれは厳しいとおもい、1日1記事よんでいく習慣をつけようとおもいました。まあぽつぽつですが始めようと思いモチベーションを上げるためネットに上げていこうとおもいます。

 

undefined method `each' for nil:NilClass こんなエラーがでた。

f:id:mooooooooooriiiiii:20170203104506p:plain

 

別に each でなくとも、 'id' とか 'name' とかがある。

これはエラーに書いてあるように、@microposts の箇所でエラーがでてる。@user.id とか、 @book.title のようにしたときにエラーが出た人もいるだろう。

これはコントローラーで @microposts を定義してないからだ。もしくは間違って定義しているかのどちらか。だからエラーには for nil:NilClass と書かれている。@microposts が空なんだ。

 

ためしに、@microposts を使っている部分をすべてコメントアウトして、

<%= @microposts.nil? %>

という @microposts が空なら true で入ってたら false を返すような nil メソッドを後ろにくっつけてみると案の定

 

f:id:mooooooooooriiiiii:20170203105220p:plain

 

 

true とでた。そこで、コントローラーで定義しなおすと

 @microposts = Micropost.find_by(id: params[:id])

 

f:id:mooooooooooriiiiii:20170203105524p:plain

 

エラーが消えた。まだなにも投稿していないから、何も表示されないが、これでエラーがなくなる。

f.submit に path は書かない。

f:id:mooooooooooriiiiii:20170201143906p:plain

 

NoMethodError in Sessions#new

undefined method `stringify_keys' for "/login":String

また変なミスをした。f.submit に path を指定してしまった。 path を指定するのは link_to なのに。で、その後 path を消したら直りました。