ぱーりー on rails

たまごにひびすらわれてない

伝説の新人を読んだ

新卒2年目になって
会社と仕事に慣れてきた頃。
社会の理不尽さを1年で体感してきて、
なんかモヤモヤしたものがでてきて
それを解決したくて
仕事の取り組み方を考えなおしたくなって、
読みました。


第6章 伝説の新人は解釈力が違う

運がいいと思う人は本当に運が良くなる

全ての失敗を学びに変えよ

他社の視点を大量にインプットせよ


困難な状況に陥った時
できない理由ではなくできる方法を探せ

うまくいかなかった場合→「どうしたらできるのだろう」
うまくいった場合→「どうしてできたんだろう」


最低でも自分よりも2つ上の役職の人が何をみているのかまで考える
習慣を身につけて、視野を広げていく

「虫の目・鳥の目・魚の目」

虫の目:近いところで、虫のような複眼を使い、様々な角度から注意深く見る目
鳥の目:虫には見ることのできない広い範囲を高いところから俯瞰する目
魚の目:魚が水の流れや潮の満ち干を敏感に感じるように、世の中の流れに敏感に感じる目

現場を知り、組織全体を知り、時代の流れを読む


→解釈力高めるだけでなく自分よりも、
高く色石やで物事を考えている上司や経営者の視野に近づくことになり、
会話やアウトプットをかえ、チャンスをさらに引き寄せることにつながっていく。



第7章 伝説の新人は、好かれ方が違う

いい仕事をする人は、いい人間関係を作り上げ、関わる人の力を
うまく引き出し、自分の経験や能力だけでは
達成できない仕事をやり遂げる


ビジジネストは人間と人間が行うものですから、
スキルと経験だけで人選され、チームが組まれる訳ではない。

好感度が高い人がチャンスをたくさん掴むのは必然なこと

好かれる人間になることは、人格を磨くこと
相手が喜ぶかどうかを基準に、全ての行動を見直せ

「〇〇の時に、○○してもらったら嬉しかった」
という経験を具体的に思い返し、
具体的な行動をリスト化し、日常の生活の中で意識して行動するようにする。


人生の秘訣は与えることである。
give & takeではなくただgiveすることに集中する

お返しをしてもらうかどうかの問題ではなく、
喜びを与えることが最大の喜びになる


まず自分から相手を好きになる

相手に好かれたいと思うなら、
まずじぶんから好きになることがスタート

自分の身の回りのもの
(あなたが着ている服、あなたが口にする食べ物、あなたを乗せる電車)
そのどれもが何処かの誰かが、
あったことのないあなたがよろこぶことをイメージして
作ってくれたり、届けてくれたり、売ったりしてくれている。


これに気づくとどれたけ幸せな社会に生きているかがわかる。
いつも感謝の気持ちで生活できるようになる

一日に5回ありがとうと言っているのであれば
20回に増やして見る。


社会に出るとメインの業務以外で明文化されていなけれども重要なことはたくさんある

上司のグラスが空いた時「次何飲みますか」と聞いて注文をとる


ビジネスは常にお客様のことをお客様以上に考え、
お客様が無意識に抱く期待値を超えることで成功のスパイラルに乗り始める。


第8章 伝説の新人は伝え方が違う

伝えたいことが伝わらなければ、成果は生まれない

「思っているからダメなんだ、伝わるかどうかを考えてごらん。」

伝えたいことは二つの壁を越えて初めて伝わる
一つ目:メッセージが伝わるためには、まずは相手に受け止めてもらわないといけない。
二つ目:受け手が発信者の耐えたいことを理解できるかどうか。

担当者を出世させてこそ一人前

お客様が上部層にうまく説明できるかどうかまでを考える。

お客様が社内で提案を通せるように伝えるにはどうだろうか考える。

自分の手が離れても伝えたいことが伝わっていく提案書(コード)をかく

目的は何で、
ターゲットは誰で、
課題は何で、
何をすることで、
どんな結果を求めるのか


言葉の中の「意味の含有率」を高めよ
(勉強会の発表とか)

伝える力が高い人は限られた時間の中で伝えるべきことを的確に伝えている


第9章 伝説の新人は、スキルの盗み方が違う

伝説の新人を目指すのであれば、
現場以外方どれだけ学ぶことができるかも重要になってくる

会社が教えてくれる機会を提供してくれるのであれば、
それは当然のこととは考えずに、感謝して本気で学ぶ


教わることには答えがあるけれど、盗むことには答えがない
盗むということは、こうやればいいんだよ、という答えを教えてもらうのではなく、
自分なりに答えを導き出すということ。


教わればできる仕事、つまりマニュアルに従えばできる仕事はグローバル、IT化の波の中で、
急速に安い労働力や機会にとって代わられ初めてしまいます。


教わることができないことというのは、
マニュアル化できないこと。


核心をつかめるまで粘り強く聞き出せ

仮に、本人がある秘密を持っていたとしても、
それを教えるにふさわしい人間かどうかは常にはんだんされてしまう。

重要なのは「コイツには本当のことを教えてやろう」と思ってもらえるかどうか


そのためには相手を十分研究し、他者が効くような質問ではなく、
一歩も二歩も踏み込んだ質問ができるようにならなればならない。

守破離の「守」に徹することで道は拓ける

「守」とは、師匠の教えを正確かつ忠実に守り、
物事の基本の作法・礼法・技法を身につける「学び」の段階をいう。

20代は「守」に徹する時、
師の教えはもちろん、師の行なっていること全てに取り組み、自分のものにしなければなりません。


新人時代は盗めることを全て盗む時。
新人時代を逃したら、同行なんて誰もしてくれなくなってしまう。

(打ち合わせに行って社長、PMの発言や考えを盗む)


盗む意識を持って生活すると、まちを歩いているだけでも勉強になるヒントは出てくる

盗む意識を持って何万時間も過ごす人と、
教えられる時だけ学ぶ人間の間にどうしようのもないほどのさがうまれてくるのは当然



第10章 伝説の新人は読書力が違う

時間がないから読書ができないのではなく、読書をしないから時間がない


蓄積したインプットはある時をきっかけにあふれ出します。
その影響力を大きくしたいならインプットできる量を大きくする必要がある。

自分の尊敬する人に、20代のうちに読んでおくべき本を聞いてみる。
教えてもらった本をしっかり読み込むと、尊敬する人がどうしてこの本を薦めてくれたのかがわかる

読み終わったら感謝の気持ちを込めてお礼を言う


こうした関係を少しずつ築いて行くと、やがて仕事で結果を
残しているひtが共通し読んでいる「定番」の本がわかるようになる


自分の専門領域や担当顧客に関する本を集中的によむ

テーマに絞って読み込むと、新人出会ってもその世界で一流の人と
同じレベルの知識を身につけることができる


テーマを絞った集中的なインプットがチャンスを拡大する

お客様の業界について徹底的に調べる、本を読む


読んだ本を自分のものにするためには、どんな形でもいいのでアウトプットをすることが重要

本棚に並べた背表紙からインスピレーションが生まれる
一冊の本を読み込むと言うことは、人生のある時間にそれだけ影響される時間を過ごしていることであり、
少なからず誰にでも自分に影響を与えられた本は思い入れのあるもの


背表紙のタイトルを見ながら、そこに書いてあったことをなんとなく思い起こすことを繰り返すだけで、
一冊一冊の本で体験したこと、学んだことが潜在意識に刷り込まれていく


本は借りるのではなく買うことが重要
月数千円の投資で自分を成長させ、将来の自分地震の市場価値が数十〜数百倍になる




以上。
ほぼ引用させていただいております。

実践して行く!
すごく読みやすかったし、
本読みながら自分の立場に置き換えて
すぐに実践できそうなことだらけで
すごく頭に入ってきやすかったし刺激になった。

ruby バージョンインストール方法

新たにrubyのバージョンをインストールする方法

今回の紹介する方法は、
私の新たにお手伝いする案件のバージョンが2.2.3でそれがなかったため
こんなやりかたでやりました。


2.2.3をインストールしたい場合

$ rbenv install 2.2.3

2.2.3を自分のパソコンにインストール。

rbenvっていうのは
rubyのバージョンをかんりするファイルっておもてたらいいとおもいます。

そして
そのプロジェクトのディレクトリに移動して、
.ruby-versionってファイルがああれば自然と2.2.3になる。

なかったら、
そのプロジェクト配下で
$ rbenv local 2.2.3

ってしてそのプロジェクトで使えるようにする。

$ ruby -vで確認して
ちゃんと2.2.3ってなってれば

$ gem install bundle


これは新しくいれたバージョンでは他のバージョンのgemは入っていないからする。
.rbenvふぁいるをみてみたらなんとなくわかる。
そのふぁいるのなかにpluginがあってそこはグローバルにインストールされたやつで
bundle install —path== とかしたらプロジェクトに個別にはいってそっちをつかってくれる。
bundle install —path==これはたいがいREADMEにやれってかいてることがおおい。
たいがいってかほとんどかいてんのかな?知らない。

以上です!

時間の使い方

今日の振り返りで一番におもったこと。

技術力も大事だけど時間の使い方も本当に大事。

一日の業務時間の中で8割は実務2割は勉強
今だったらだいたい10:00から仕事を始めて13時までやって14時に出社して21時くらまで働くのが自分にあってるかなって気づいたから
朝の1,2時間を勉強の時間に使ってのこりを
実務の勉強時間にあててもいいかなって思った。

勉強をすることで実務の時間を減らせるように
勉強したらその部分が実装ででてきたときにすぐにできるかもしれない。
実務ででいてきてからじゃ効率わるいところもある。
もちろんほぼ実務で出てきて勉強するっていうのもいいことだけど。

時間を意識する
そうすることで自分がどのくらいの時間でどんなことができるのかがわかって、
いつか「これどのくらいでできるか?」ってきかれたときに答えれる。

タスクの理解
自分がタスクをきるがわになったときに、
どうかくか考えて整理しなおす練習にする。

習慣化する
遅くてもここ一年の間に自分のルーティーンを習慣化させたい。

土日はjsの勉強をしてみる
SBクリエイティブ:確かな力が身につくJavaScript「超」入門
前実務ででてきたときにさらっとしか勉強できなかった。
つぎのタスクをするのに必死になってしまた。

とりあえず時間の使い方。

あともっとぱっと説明できるようになりたい。
っておもいながら全然努力してない。

やっぱり時間の使い方がうまくないと身につけれるものもつけれないし本当に大事だなあ。とおもた。

最高に自由に働けてメンターを二人もつけてもらっているありがたい環境最大限にいかしたい。

そのためには
もっと時間を意識する。

オフィスの机の上に時計おこう。macの時計ちっこいし
かわいーいい感じのやつないかな〜
見た目からはいるやつの典型w

部屋の作業用の机に化粧品コーナーにおいてるやつもってこよ!

ターミナルからmysqlを確認する方法

$ mysql -u root


これでmysqlに入れます


mysql> SHOW DATABASES;

これで データベースの一覧が表示されます。



> USE 確認したいデータベース名;

>show columns from テーブル名;

そのテーブルのカラム名とか型がでてきます。



これでカラム名をいちいちsequel pro とかに移動して確認する手間が省けますね!

deviseでひっかかったところ。

  • クラス継承

deviseのcontrollerって
$rails g devise:controllers

とかで一瞬でできちゃいますよね。
ほんとすごい。

でも、

例えばregistrationscontrollerだったら

class RegistrationsController < Devise::RegistrationsController

Devise::でなんか継承してますよね?
controllerにdeviseフォルダないしこのDeviseなんなんだって
気にはしていましたがまあなんかできてんのか。
みたいなかんじでスルーしていました。

このクラスの正体は。。。
github.com
ここに書いてます。

deviseはgemの中でも特殊で
ここからクラスの継承をしているのです。


よくわからないメソッドもここにすべてがかいています!

resourceとか誰?みたいな
おまえいつ定義された?
してないしどこにもいないぞって。。。
でもdeviseはなんかかってにやってくれるからどっかにあるんだなと思っておこう。。。
みたいなモヤモヤしたかんじで実装をつづけていました。

ぜんぶあの親クラスの
devisecontrollerにいました。



ふたつめ

  • registrationのupdate

ユーザー情報の更新をするところで
ストロングパラメーターに
current_password
を追加するのを忘れていて一生エラーをしてました。


みっつめ

  • letter-opennerとletter-openner-web

ふたつともgemです。

letter-opnerとは!


新規登録のあとメールがおくられず

f:id:mainsytain:20160429183844p:plain

このようなページがひらかれます。

そしてこのConfirm my accountというところをおすことで

ログインすることができます。



続いて


letter-opener-web
とは!


こっちはメールが送信されて、
そのメールのURLを押して入ることで
新規登録が完了してログインができるという。



わたしはこの知識がなかったため
最初はletter-opener-webだけしかgemを入れていなくて
適当なメールアドレスで登録してたし
とどくはずがな!い!!

このことでコントローラーさわってみたりいろいろガチャガチャしてて
なんと無駄な時間をすごしたことか。。。



この二つのgemの使い分けとしては
一つ目のletter-openerのほうが離脱率が低くなるということとかがあるとか。

メールいちいちひらくのめんどくさいですよね。
メールこないしとかなったらイライラしますよね。


でも確認のメールがあったほうが良い場合もあります。
通知メールとかそこらへん。

だからふたつを使い分けてより良いサービスを!!!!

(まとめ方下手かよ


deviseと少し仲良くなれた気がしたGW1日めでした。

ransackで検索機能実装

まずransackというgemをgemfileに

gem 'ransack'

と追加して、$ bundle install
します。



検索機能のだいたいのイメージとしては
検索フォームがあって、
そこに検索ワードを入力したり、セレクトボタンで検索条件を選択して、
「検索ボタン」をおしたら「検索結果画面」が開かれて検索結果が表示されるというイメージですよね。
ということはまずはviewファイルから作って行きましょう。
まずは検索ワードなどを入力する検索フォームの実装をしていきます。

ここで利用するのが「部分テンプレート」です。

viewファイルのhtml.erbファイル名の先頭に「_」をつけることで部分テンプレートを作成することができます。
そのためコードを短くスッキリさせることができます。

今回の場合だと検索フォームだけの部分テンプレートをつくることで、
検索フォームがどんなコードであるかを一目で見ることができ、検索フォームを追加したい画面には
<%= render 'search_form', f: f %>
を追加するだけで検索フォームを呼び出せます。




検索機能をつけたいhtml.erbファイルに以下を追加。
私の場合はindex.html.erbでした。

<%= search_form_for(@q, url: users_search_path, html: { method: :get, class: 'form-inline', role: 'form' }) do |f| %>
  <%= render 'search_form', f: f %>
<% end %>

@qはあとから説明します。
url: admin_users_search_pathの部分で検索結果画面を呼び出します。
url: というオプションでフォームの送信先のパスを指定することができます。


  • その検索結果画面をsearch.heml.erbを作成します。
<h1 class='page-header'>ユーザー検索結果</h1>
<div class='row'>
  <div class='col-md-12'>
    <div class='panel panel-inverse' data-sortable-id='table-basic-2'>
      <div class='panel-body'>

        <table class='table table-hover'>
          <thead>
          <tr>
            <th>ユーザー名</th>
            <th>email</th>
            <th>県名</th>
            <th style='width: 200px;'></th>
          </tr>
          </thead>
          <tbody>
            <% @users.each do |user| %>
              <tr>
                <td><%= user.name %></td>
                <td><%= user.email %></td>
                <td><%= user.prefecture_name %></td>
                <td>
                    <%= link_to '詳細', admin_user_path(user), class: 'btn btn-default' %>
                    <%= link_to '編集', edit_admin_user_path(user), class: 'btn btn-primary' %>
                    <%= link_to '削除', admin_user_path(user), method: :delete,
                    data: { confirm: 'こちらのプロジェクトを削除しますか?' }, class: 'btn btn-danger' %>
                </td>
              </tr>
            <% end %>
          </tbody>
        </table>
      </div>
    </div>
  </div>
</div>

部分テンプレートとして_search.form.html.erbファイルの作成します。

<div class='panel panel-inverse'>
  <div class='panel-body'>
    <%= f.text_field :name_cont, placeholder: 'ユーザー名', class: 'form-control' %>
    <%= f.text_field :email_cont, placeholder: 'メールアドレス', class: 'form-control' %>
    <%= submit_tag '検索', class: 'btn btn-info w40 mr10' %>
    </div>
</div>

続いてルーティングの設定をします。

 get  'users/search'              =>   'users#search'

これで検索ボタンをおすと検索結果のページに移動することができます。


続いて検索機能をつけたいcontrollerを作成します。

  def index
    @users = User.all
    @q = User.search
  end

  def search
    @q = User.search(search_params)
    @users = @q
                .result
                .order(:created_at)
  end

private
  def search_params
    params.require(:q).permit(:name_cont, :email_cont)
  end


1行ずつプログラムを読んでいくと、
まずはindexアクションの部分。
@usersでUserモデルの情報をとってきて表示させることができます。(@users = User.all)
Userモデルからsearchしたものを@qという変数に代入します。(@q = User.search)

(※なんで@qなのかは調べてみたのですがわかりません。ransackでは@qと変数にするみたいです。。。)



次に、searchアクションの部分は一旦飛ばして
ストロングパラメーターの説明をします。
search_paramsを定義し、params.require(:q).permit(:name_cont, :email_cont)で

name_cont,(名前のlike検索)
email_cont(emailのlike検索)を通すことができます。

で、serchアクションでは
そのストロングパラメーター search_paramsを引数として@qで検索した結果を@usersに代入して
.resultで検索結果を表示し、.orderで作成時間ごと(:created_at)検索結果を
search.html.erbで@userをeachメソッドによりをけっかんを表示させています。




これで完成です。


また、検索フォームは f.collection_select などでセレクトボタンをつかってつくることもできます!

    <%= f.collection_select :user_id_eq, User.all, :id, :name, { include_blank: 'ユーザーを選択してください' }, { class: 'form-control search-form' } %>

こんなかんじでできます!

kaminariでページネーション

kaminariを使ったページネーションのやり方。

①gem 'kaminari'

をGemfileに追加する。

②$ bundle install

する。

③追加したいindex.html.erbなど部分に<%= page_entries_info @モデル名 %>

.

.<%= paginate @モデル名 %>

を追加する。

たとえば。

<%= page_entries_info @projects %>

<table class='table table-hover'>
<thead>
<tr>
<th>ID</th>
<th>発注者</th>
<th>カテゴリ</th>
<th>プロジェクト名</th>
<th>ステータス</th>
<th style='width: 200px;'></th>
</tr>
</thead>
<tbody>
<% @projects.each do |project| %>
<tr>
<td><%= project.id %></td>
<td><%= link_to project.user_name, admin_user_path(project.user_id), target: '_blank' %></td>
<td><%= project.category_name %></td>
<td><%= project.name %></td>
<td><%= project.status_i18n %></td>
<td>
<%= link_to '詳細', [:admin, project], class: 'btn btn-default' %>
<%= link_to '編集', edit_admin_project_path(project), class: 'btn btn-primary' %>
<%= link_to '削除', [:admin, project], method: :delete,
data: { confirm: 'こちらのプロジェクトを削除しますか?' }, class: 'btn btn-danger' %>
</td>
</tr>
<% end %>
</tbody>
</table>

<%= paginate @projects %>

このような感じです。

④コントローラー編集

def index

  @projects = Project.page(params[:page])

end

のようにする。

⑤$ rails g kaminari:config

とするとkaminari の設定ファイルを編集することができ、

デフォルトではコメントアウトされて作成されているので

自分のしたいように編集してください。

Kaminari.configure do |config|
config.default_per_page = 30
config.max_per_page = nil
# config.window = 4
# config.outer_window = 0
# config.left = 0
# config.right = 0
# config.page_method_name = :page
# config.param_name = :page
end

私はめんどいからこの二つだけw

⑥config/locales/ja.yml 編集

これはどっちでも良いと思います。

英語のままの「next」といかの表記でいい人はほっといて

日本に「次ページ」とかにしたい方は、

views:
pagination:
first: 先頭
last: 最終
previous: 前ページ
next: 次ページ
truncate: "..."

をついかすれば完成!!!♪

で、もしこの作業をgit をつかってしていて

ブランチを切り替えて違う作業をしてもどってきたら

no method error 'page'

みたいなのがでるかもしれないですが

その場合bundle install したら元に戻りました。

原因はわからないですが、gemをつかってるから

bundle installしたらいいのかなとおもってやってみたらなおりました

この本質的な理由もし教えてくださる方がいらっしゃったら

コメントいただけたらうれしいです。