紳士なブログ

紳士すぎてすみません

findメソッドに:joinsオプション指定したときの:readonlyオプションについて

findメソッドに:joins指定したときのreadonlyオプションについて
なんとなくは理解にとどまっていたので、今更ながら調べてみる。


activerecord-2.3.12/lib/active_record/base.rb
611 def find(*args)
612   options = args.extract_options!
613   validate_find_options(options)
614   set_readonly_option!(options)
615
616   case args.first
617     when :first then find_initial(options)
618     when :last  then find_last(options)
619     when :all   then find_every(options)
620     else             find_from_ids(args, options)
621   end
622 end
}}}
  • set_readonly_option!をActiveRecord::Base.findメソッド内で呼び出す
    • :joinsオプションを指定し、かつ、:selectオプションを指定していない際にoptions[:readonly] => trueになる
2448 def set_readonly_option!(options) #:nodoc:
2449   # Inherit :readonly from finder scope if set.  Otherwise,
2450   # if :joins is not blank then :readonly defaults to true.
2451   unless options.has_key?(:readonly)
2452     if scoped_readonly = scope(:find, :readonly)
2453       options[:readonly] = scoped_readonly
2454     elsif !options[:joins].blank? && !options[:select]
2455       options[:readonly] = true
2456     end
2457   end
2458 end
  • options[:readonly] => trueの場合、recordごとに@readonly => trueとなる
1576 def find_every(options)
1577   include_associations = merge_includes(scope(:find, :include), options[:include])
1578
1579   if include_associations.any? && references_eager_loaded_tables?(options)
1580    records = find_with_associations(options)
1581   else
1582     records = find_by_sql(construct_finder_sql(options))
1583     if include_associations.any?
1584       preload_associations(records, include_associations)
1585     end
1586   end
1587
1588   records.each { |record| record.readonly! } if options[:readonly]
1589
1590  records
1591 end
2893 def readonly!
2894   @readonly = true
2895 end
  • レコードをsaveする際、@readonly == trueだと例外が発生する
2576 def save
2577   create_or_update
2578 end
2925 def create_or_update
2926   raise ReadOnlyRecord if readonly?
2927   result = new_record? ? create : update
2928   result != false
2929 end
2893 def readonly?
2894   defined?(@readonly) && @readonly == true
2895 end

ちなみに、update_allではreadonlyであるかどうかを見ずに直接sqlを発行しているため、:joinsを指定してもレコードの更新を行うことができる

831 def update_all(updates, conditions = nil, options = {})
832   sql  = "UPDATE #{quoted_table_name} SET #{sanitize_sql_for_assignment(updates)} "
833
834   scope = scope(:find)
835
836   select_sql = ""
837   add_conditions!(select_sql, conditions, scope)
838
839   if options.has_key?(:limit) || (scope && scope[:limit])
840     # Only take order from scope if limit is also provided by scope, this
841     # is useful for updating a has_many association with a limit.
842     add_order!(select_sql, options[:order], scope)
843
844     add_limit!(select_sql, options, scope)
845     sql.concat(connection.limited_update_conditions(select_sql, quoted_table_name, connection.quote_column_name(primary_key)))
846   else
847     add_order!(select_sql, options[:order], nil)
848     sql.concat(select_sql)
849   end
850
851   connection.update(sql, "#{name} Update")
852 end

読書記録: 『心を整える』

心を整えようと思って読んでみたのでまとめ。
ところどころにあるサッカーの話も面白かった。ドイツいいなー

心を整える。 勝利をたぐり寄せるための56の習慣

心を整える。 勝利をたぐり寄せるための56の習慣


  • 一日の最後に必ず、心を鎮める時間を作る
    • 部屋の音を消して、天井を眺めながら、息を整えながら全身の力を抜いていく
    • 付き合い悪いと言われても譲らない


  • 睡眠はすごく大切
    • 体調を整えておくのもプロの仕事
    • 大一番で力を発揮するためには、平穏に夜を過ごし、睡眠をしっかり取る
    • 寝るまでの1時間の使い方に徹底的にこだわる
      • リラクゼーション音楽を流す


  • 試合への臨み方は人それぞれ
    • 試合直前に心のスイッチを入れる人と、数日前からスイッチを入れる人がいる
    • 試合前はなるべく同じパターンで過ごすといいのかもしれない


  • 整理整頓は心の掃除に通じる
    • ドイツには、「整理整頓は、人生の半分である」
    • 日頃から整理整頓を心がけていれば、それが生活や仕事に規律や秩序をもたらす
    • 自分の心の中が散らかっているときこそ、整理整頓をすることで心の中も掃除されて、気分が晴れやかになる
    • 気を遣いすぎると疲れるので、100点満点中80点くらいの清潔感を心がける


  • 人との接し方
    • 意識を変えることで、行動を変えることができる
    • 自信をつけることも大事な要因
    • まわりの目に対して鈍感になることも大きい。ストレスを減らすことができる


  • マイナス発言は自分を後退させる
    • サッカー(仕事にも当てはまる)というのは、様々な要素や人間が複雑に絡み合っているため、ミスを人のせいにしやすい
    • 愚痴は言わない方がよい
      • 愚痴は一時的な感情のはけ口となってストレス解消になるかもしれないが、あまりにも安易な解決策
      • また、自分の問題点と向き合うことから逃げるのと同じなので、なるべく愚痴を言わないようにするべき
      • 監督や上司にあまり評価されていないという現実を受け止め、まずそこを自分のスタートラインにするべき


  • ひとり温泉のススメ
    • 行き詰まっているとき、ひとりで温泉に行くのもいい
    • 孤独な時間だからこそ、できることがある
    • 自分にとって本当に大切なものは何なのか、そういう自分と向き合う時間を作るのに適切
    • トーマス・カーライルハチは暗闇でなければ蜜をつくらぬ。脳は沈黙でなければ、思想を生ぜぬ


  • 先輩に学ぶ
    • 田中達也は練習前に入念なストレッチをして、練習後も身体の手入れを怠らない。みんなで飲みに行っても絶対に来ない。
    • 鈴木啓太は人付き合いがスマートで、オンとオフの切り替えを上手く
    • プロはシーズン中はお酒を飲まない
    • キングカズはみんなでご飯を食べていても、自分が決めていた時刻になったら、「明日練習だから」と言って帰っていく
    • 2つの大事なこと
      • ひとつは孤独な時間を作り、ひとりでじっくりと考えを深めていくこと
      • もうひとつは、尊敬できる人や仲間に会い、話をすることで自分の立ち位置を客観的に見ること


  • 苦しいことには真っ向から立ち向かう
    • 精神的にも肉体的にも、ギリギリのところで踏みとどまることも
    • 「これだけ苦しい練習を乗り越えることができたら、自分には怖いものがなくなるはずだし、どのクラブの練習にもついていける。結果が出ると信じて、頑張り続けよう」と考える
    • 身近なところにいる「頑張っている人」を目にすることで自分を鼓舞する


  • 仲間の価値観に飛び込んでみる
    • チームメイトから食事に誘われたら、絶対に断らない
    • 小野伸二「ヨーロッパでは待っていたら誰も話しかけてくれない。ロッカールームではどんどん自分から話しかけていった方がいいよ」
    • ピッチから離れて一緒に時間を共有することで、チームメイトの新たな一面が見えてくる


  • 組織の穴を埋める
    • 自分の武器がわかりにくいとき、レベルの高いチームの中で生き残るためには、何か人と違うストロングポイントを示さねばならない
    • それが「組織にとって足りないものを補う」だった。考えてプレーすることでそれが可能になる
    • 自分の良さを表現したいという欲やエゴより、組織の成功を優先
    • 自分を殺すことと、自分を変えることは違う。組織に成功がもたらされたときには、必ずチームプレーをしている選手の評価も上がるはず


  • 監督の言葉にしない意図・行間を読む
    • ベンチにいるときは、監督がどんな指示を出しているかをすぐ横で見る絶好のチャンス


  • 競争を好む
    • 日本人選手がヨーロッパでやっていくためには、競争に前向きなメンタリティは絶対に必要
    • 競争は成長するための栄養のようなもの
    • 逃げずに向きあい続ければ、身体の隅々までその栄養が行き渡る


  • 運を味方につける
    • 運は誰にでもやってきていて、それを活かせるか、活かせないかはれにふさわしい準備をしていたかにかかっている
    • 運を活かせないのは、運を味方につける努力が足りなかっただけの話
    • アルゼンチン人「運を女性のように口説きなさい


  • 努力や我慢はひけらかさない
    • 努力や我慢は秘密にするべき
      • なぜなら、周囲からの尊敬や同情は自分の心の中に甘えを呼び込んでしまうから


  • 読書は自分の考えを進化させてくれる
    • ジャンルを限定してしまうと、自分の幅まで狭めてしまう気がするのでなるべく限定しない
    • 言葉のセンスを磨くことにも役立つかもしれない
    • 沢木耕太郎深夜特急』「人は一人じゃ生きていけない事を知っているからこそ、一人になって、相手の事を考えたりする時間が欲しいのかも。」


  • その他
    • 遅刻は絶対にしない
      • 時間に遅れるのはどこかに甘さがあり、本気で取り組んでいないという証拠。まわりに対する尊敬の念が薄いとも言える。
      • ドイツのことわざ「箱の中に腐ったりんごがひとつでもあると、全部が腐ってしまう」
    • ネットサーフィンやメールは没頭しすぎて生活のリズムに悪影響を与えてしまうことがある
      • 息抜きも、度が過ぎたら時間の浪費
    • 指揮官の立場を想像する
      • 人の上に立つ人間は孤独
    • ラストこそ勝負どころ
      • ラスト10メートルを「もうすぐゴール」と認識するのではなく、「マイゾーン」として、自分が最もカッコよくゴールするための美学を追求
    • 翌日に練習・試合があるときは前日に遊ばない
      • 応援してくれる家族やサポーターを裏切りたくない
    • 子供のときに基礎をきちんと教えてもらったおかげで、今の自分がある
    • どんな指導者にもそれぞれの良さがある。それを引き出せるかどうかは、教えられる側の心構えにもかかっている
    • 「直にして礼なければ即ち絞す」
      • 正義感が強すぎて、真面目すぎると、かって周囲を締め付けてしまう
    • 感謝は自分のためでもある
      • 自分が感謝の気持ちを忘れなければ、まわりがどんどん自分にポジティブなエネルギーをくれるはず
      • 周囲から助けてもらえる選手と助けてもらえない選手では、成長スピードにも差が出るのは当たり前
      • 関わる人たちだけでなく、その人たちの家族のことも思いやれる人間になりたい
    • 目を見て話せば伝わる
      • 気持ちを伝えるうえで一番大切なのは、目を合わせること

読書記録: 『7つの習慣』

『7つの習慣』についてのまとめ。 土台となる前半についてまとめてみた。


7つの習慣

7つの習慣

  • 作者: スティーブン・R.コヴィー,Stephen R. Covey,ジェームス・J.スキナー,川西茂
  • 出版社/メーカー: キングベアー出版
  • 発売日: 2011/06
  • メディア: 単行本
  • 購入: 1人 クリック: 7回
  • この商品を含むブログ (5件) を見る


第一部パラダイムと原則について

  • 「7つの習慣」を本当の意味で理解するには、自分の持つパラダイムを理解し、それを転換させる方法を知る必要がある。
    • 行動や態度の源であるパラダイムを見つめることなく、表面的な行動や態度を変えようとしても、長期的にみてほとんど意味がない
    • 私たちは世界をあるがままに見ているのではなく、私たちのあるがままに世界を見ているだけ
    • トーマス・クーン『科学革命の構造』
      • 「科学分野における大きな突破はすべて過去の伝統、旧来の考え、従来のパラダイムからの離脱に始まる」
    • 客観的な現実そのものは、人間の成長や幸福を司る灯台の原則からなっている。いくら優れたパラダイムを持ったとしても、それは原則を超えるものではない。


  • インサイド・アウト
    • 私的成功は公的成功に先立つ
    • ほかの人との関係を改善しようとするのであれば、まず自分自身の基本的なパラダイム・人格・動機などを変えることから始めるべき


  • 人生の扉を開く7つの習慣
    • 人格は繰り返す行動の総計


  • 習慣の3つの要素
    • 習慣は、知識とスキルとやる気の3つから成り立っている
      • 知識: 「何をするか」または「なぜそれをするか」に答える
      • スキル: 「どうやってするか」に答える
      • やる気(動機): 「それをしたい」という気持ち
    • 習慣にするためにはこの3つの側面をすべて育成しなければならない
    • この成長と変化のプロセスは、上向きの螺旋状の循環
      • このプロセスこそが、我々の存在目的である幸福をつくり出す
      • 幸福とは、最終的に欲しい結果を手に入れるために、今すぐ欲しい結果を犠牲にすることによって得る果実にほかならない


  • 相互依存への道
    • 7つの習慣を身につけることにより、に依存から自立へ、自立から相互依存へと成長する
      • 第一、第二、第三の習慣は、自己克服と自制に関連した習慣=私的成功の習慣
      • 第一、第二、第三の習慣が完璧にできるまで、第四、第五、第六の習慣に取り組めないというわけではない


  • P/PCバランス
    • 7つの習慣は、効果性の習慣
    • 効果性は2つの側面のバランスにある=P/PCバランス
      • 目標達成のP(Performance)と目標達成能力またはそれを可能にする資源のPC(Performance Capability)
    • 短期と長期のバランスでもある


第二部私的成功

第一の習慣:主体性を発揮する

  • 自己責任原則
    • 問題は自分の外にあると考えるならば、その考えこそが問題である


  • 反応性と主体性
    • 反応性のモデル
      • 決定論によると、人はある特定の刺激に対して特定の反応をするように条件づけられる
      • 反応的な人間は、自分の人生に対する責任を放棄する人間
      • 反応的な言葉が自己の行動を制約してしまう=心理学で言う「自己達成予言」
    • 主体性のモデル
      • 人間はほかの動物にはない自覚、想像力、良心、自由意志という独特の性質を持っている
      • そのため、刺激に対して、自分の反応を選択する自由を持っている
      • 主体的な人間は、率先力を発揮するだけでなく、自分の人生に対する責任をとる人間
      • 率先力を発揮する人とそうでない人とでは、5000%以上の効果性の差が生まれる


  • 人生における三つの中心的な価値
    • 「経験」: 自分に何が起こるか
    • 「創造」: 自分でつくり出すもの
    • 「態度」: 末期の病気といった大きな困難に直面したときの反応の仕方に代表されるもの
    • このうち、最も大切なのは「態度」
      • 行動や態度を見つめれば、その人の反応性・主体性を知ることができる
    • 困難な状況ではパラダイム転換が起こることが多い


  • 影響の輪と関心の輪
    • 主体性に対する自覚を高めるもう一つの方法
    • 関心の輪
      • 関心の輪を描くことで、自分が関心を持っている事柄と関心を持っていない事柄をふり分けることができる
      • 「持つ」ことに集中
      • 過去の失敗はすべて関心の輪に含まれる
        • 間違いに対してどう反応するかで、その次の瞬間の質が決まる。そのため、すぐに間違いを認め、修正することが大切。
    • 影響の輪
      • 自分の関心事の中で自分が直接コントロールできる、あるいは大きく影響できるものを示すことができる
      • 「なる」ことに集中
    • 自分が時間やエネルギーの大部分を、この二つの輪のどちらに集中させているかを考えることにより、主体性の度合いをよく知ることができる
    • 主体的な人は、努力と時間を影響の輪に集中させ、自らが影響できる事柄に働きかける
    • 影響の輪の最も中心にあるものは約束をし、それを守る力
      • 自分自身や人に対してする約束とそれに対する誠実さが、私たちの主体性の本質


  • 三種類の問題
    • 直接的にコントロールできる問題
      • 習慣を変え、第一、第二、第三の習慣を身につけ、私的成功を達成することによって解決
    • 間接的にコントロールできる問題
      • 影響を及ぼす方法を変えることによって解決
      • 第四、第五、第六の習慣の公的成功にかかわる
      • 相手の行動を正すために、今までの非効果的な方法に頼らずに新たな影響を及ぼす方法を学ぶことができる
    • 全くコントロールできない問題
      • 自分の態度を変える必要がある
      • 気に入らなくても変えられない状況に対して、笑顔をつくり、穏やかな気持でそれを受け入れる
      • こうした問題にコントロールされる必要はない
    • 「主よ、変えるべき変えられることを変える勇気を、変えられないことを受け入れる平和を、そしてその区別をつける知恵を与えたまえ」


  • 人格の強さをつくり上げるために
    • 約束をし、それを守ること
    • 目標を設定し、それを達成するために働くこと
    • これにより、自制心と自分の人生に対する責任を引き受ける勇気と力が湧いてくる


第二の習慣:目的を持って始める

  • 自己リーダーシップの原則
    • 第二の習慣は、人生の最後の姿を描き、それを念頭において今日という一日を始めること
    • このように自分の人生の目的を明確にすることにより、毎日の活動が人生全体の目的に対して、有意義な形で貢献できるものになる


  • すべてのものは二度つくられる
    • 目的を持って始めるという習慣は、「すべてのものは二度つくられる」という原則に基づいている
    • 万物にはまず知的な第一の創造があり、それから物的な第二の創造がある
    • この二つの創造という原則を理解し、知的創造を意識的に行うことにより、影響の輪の中で行動し、影響の輪を拡大させることができる


  • リーダーシップとマネジメント
    • リーダーシップは第一の創造、マネジメントは第二の創造
    • マネジメントは手段に集中しており、どうすれば目標を達成できるかという質問に答えようとするもの
    • リーダーシップは、望む結果を定義しており、何を達成したいのかという質問に答えようとするもの
    • ドラッカー「マネジメントは物事を正しく行うことであり、リーダーシップは正しい事をすることである」
    • 多くの人びとは、自分自身の価値観や人生の目的を明確にすることなく、能率的な自己管理や目標達成ばかり気にしている


  • 個人的なミッション・ステートメント
    • 目的を持って始める最も簡単で大きな効果をもたらす方法の一つは、ミッション・ステートメント(個人的な憲法、信条)を書くこと
    • 個人的なミッション・ステートメントを書くには、自分の影響の輪の中心から始める必要がある
    • 目的を持って始めることにより、自分の安定性・方向性・知恵・力を生み出すことができる
      • 安定性: 自己価値、アイデンティティ、精神的な基礎、自尊心
      • 方向性: 人生における方向の根源であり、生活の中の意志決定、判断、決断などの基準
      • 知恵: 生活におけるバランスの感覚。原則に対する理解の度合い。判断力、洞察力、理解などが含まれる。
      • 力: 行動する能力であり、目標を達成する力と効果性。選択や決断を実行に移すエネルギー
    • ビクター・フランクル
      • 「人生におけるミッションというものは、つくるものではなく発見するものである」
      • すべての人は、人生における独自の仕事あるいはミッションを持っている
      • 人は人生の意味は何であるかを問うべきではない。むしろ自分が人生に問われていると理解すべき。すべての人は人生に問われているのだ。


  • 原則中心の生活
    • 原則中心の場合、ころころと変わる人や物に頼るようなほかの中心とは違い、安定性は原則の不変性に基づくものとなる


  • 脳全体を活用する
    • 私たちは自覚によって自分の思考過程を見つめる
      • なぜなら、第二の習慣を可能にするのは、想像力と良心という性質であり、それは主に右脳にかかわるものだから
    • 右脳を活用する二つの方法
      • 視野を広げる
        • 思わぬ出来事や災害によって大きなショックを受け、左脳の思考過程が麻痺し、右脳で考え始めることがある
        • 心の枠をとりはらってみよう。細かく想像して、感情と心情を出しきってみよう
      • イメージ化と自己宣言
        • 自己リーダーシップは、日頃から自分の考え方と価値観を見つめ続けて、自分の実際の生活をその価値観と合致させていく継続的なプロセス
        • 日常生活において、右脳の能力を発揮し、自分の深い価値観と実際の行動を合致させるために自己宣言を書くことができる
          • 良い自己宣言は、「個人的」「積極的」「現在形」「イメージできるもの」「感情を表したもの」という要素が含まれている


第三の習慣:重要事項を優先する

  • 自己管理の原則
    • 第三の習慣は、第二の創造、つまり物的創造を行うこと
    • 第一の創造を正しく行わなければ、マネジメントは全く役に立たないが、自己リーダーシップを発揮し、第一の創造を正しく行えば、マネジメントが極めて重要になる
      • 物的創造の質は、マネジメントの質によって決まる
      • 作業の細分化、分析、順序付け、時間配分、具体的な手法を決めるといったマネジメントの活動は、主に左脳にかかわる


  • 自由意志の力
    • 人間は、自覚、想像力、良心、そして自由意志という四つの独特な性質を持っている
    • 第三の習慣、つまり自己管理を可能にしてくれるのは、自由意志
      • 自由意志とは、意志決定をし、その決定に沿って行動する力
    • 自由意志の成長の度合いは、誠実さによってはかることができる
      • 誠実さとは、自分の約束や決意を守る力であり、言行を一致させる力
    • リーダーシップは重要事項とは何なのかを決めること、マネジメントは、それを優先して毎日、瞬間瞬間において実行すること
    • 「成功者たちの共通点は、成功していない人たちの嫌がることを実行に移す習慣を身につけているということ」
      • 彼らにしてみても、必ずしも好きでそれを行なっているわけではないが、自らの嫌だという感情をその目的意識の強さに服従させているのだ
    • 「感情を目的意識に服従させる」には、高い率先力、主体性が必要
      • 第二の習慣を身につけることによって得られる明確なミッション、方向性、価値観、「ノー」と言うことを可能にする大きな「イエス」も必要


  • 生き方を変える第二の領域
    • 時間の過ごし方は、四つの領域に大別することができる
    • 活動を定義する二つの軸は、緊急度と重要度
      • 緊急とは、「すぐに対応しなければならないように見えるもの」
      • 重要度は、結果に関連している概念。ミッション、価値観、優先順位の高い目標の達成に結びついているもの
    • ドラッカー「大きな成果を出す人は、問題に集中しているのではなく、機会に集中している」
    • パレートの法則「80%の結果は20%の活動から生み出される」


  • ノーと言える喜び
    • 毎日、何回も、「イエス」または「ノー」を言わなければならない
    • ためらうことなく「ノー」と言えるようになる秘訣は、自分の中でもっと強い、燃えるような「イエス」を持つこと
    • 効果的な時間管理の本質は、以下の3つ
      • 優先順位をつける
      • その優先順位を中心に計画する
      • 計画に基づき行動するように自分実身を律する


  • 新しい時間管理のツール
    • 第二領域時間管理のツールには、以下の6つの大切な特徴がある
      • 一貫性
      • バランス
      • 第二領域への集中
      • 人間重視
      • 柔軟性
      • 携帯性


  • 原則に忠実、スケジュールに柔軟
    • 計画というプログラムを実行することは、短期的な目標やスケジュールに対する決意ではなく、私たちの人生そのものに意味を与える正しい原則と深い価値観に対する決意である
    • 人に対しては効果性を考え、物に対しては能率を考えるべき


  • デレゲーションによりPとPCの双方を高める
    • 目標を達成する方法は二つだけ
      • 時間を投入して自分で実行する : 能率を考える
      • ほかの人に任せる=デレゲーション : 効果を考える
        • 使い走りのデレゲーション
          • 仕事の手段や手順を指定して管理をするため、結果の責任は委任者自身が負わなければならない
        • 完全なデレゲーション
          • 手段ではなく結果に焦点を合わせている
          • 手段を選択する自由を与え、結果に責任をもたせる
          • 当初は他の方法よりも時間がかかるが、のちに何倍もの利益を上げるための投資
          • 完全なデレゲーションを行うためには、次の五つの事柄を明確に打ち出す必要がある
            • 望む結果
            • ガイドライン
            • 使える資源
            • 責任に対する報告
            • 履行・不履行の結果
          • 信頼は人間にとって究極の動機づけであり、人の最善の姿を引き出すもの
          • デレゲーションが正しく行わなければ、双方が得をし、より多くの仕事がより少ない時間で達成できる

IntegrationTestにリファラをセットする方法

フレームワークはTest:Unit。
FunctionalTestは既知だったけどIntegrationTestは無知だった。

FunctionalTest
 @request.env['HTTP_REFERER'] = '/donuts/new'
 post :create, :donuts => { ... }
 assert_redirected_to 'donuts/new'


IntegrationTest
post :create, { :donuts => { ... } }, { 'HTTP_REFERER' => '/donuts/new' }
assert_redirected_to 'donuts/new'


参考

読書記録: 『先読み力で人を動かす』

今さらだけど読んでみて、学ぶことが多かったのでメモ。


「先読み力」で人を動かす ~リーダーのためのプロアクティブ・マネジメント~

「先読み力」で人を動かす ~リーダーのためのプロアクティブ・マネジメント~


  • 「ツールと手法」だけではなく、「マインド」も必要
    • 「何を使って」「どうやるか」だけではなく、「なぜ」が重要


  • 問題解決とは、認知→タスク化→実行→後処理(→周囲からの信頼変化)
    • 先読みして認知、タスク化、実行をあらかじめしておけば後処理が不要になり、周囲からの信頼が変化する
    • このプロセスを実行して初めてプロアクティブ


  • 先読み力を身につけ、プロアクティブに実行することのメリット
    • 問題の発生そのものを防ぐことができ、問題解決する必要がなくなる
      • つまり、「先読み力」とは問題発生以前の解決スキル
    • 自分のために投資する時間を確保できる
    • 目標を短期間で達成できる
    • 早いスピードで成長できる
      • 仮説を立てて、実行し、検証することで、より早くP
      • プロアクティブに実行することで
        • 自分のために投資する時間を確保できる
        • 目標を短期間で達成できる
        • 早いスピードで成長できる
          • 仮説を立てて、実行し、検証することで、より早くPDCAを回すことができる


  • 「できる人の5段階」
    • レベル1: 報告のみを行い、対応を観察する
    • レベル2: アドバイスをもらい、解決する
    • レベル3: 解決の選択肢を提示する
    • レベル4: 解決の選択肢とベストの案を提示する
      • レベル1-4: リーダーの指示のもとで解決
    • レベル5: 選択肢を判断して実行し、結果を報告する
      • レベル5: 自ら判断して解決


  • 成長を加速する時間の投資法
    • 資格取得のための勉強
      • ゴールが明確
    • 社内外の勉強会、セミナーに参加
      • 普段使っていない脳が刺激される
    • 転職活動
      • それまでの仕事を振り返ることができる
      • 市場価値の確認
      • 仕事に対する価値観の確認


  • 先読み力を鍛えるタイムマネジメント
    • 準備
      • 毎週日曜日の夜に2-3時間かけて行う
    • タスクリスト
      • タスクリストには、先読みして出てきたタスクをどんどん記入する
      • タスクリストのクオリティは、タスクをヌケモレなく網羅できるかで決まる
      • 正確性が求められる仕事であれば、人・物・金、情報、時間という切り口で確認
      • 優先順位が高く、今日中にやらなくてはならないタスクに対して赤丸、今日手をつけたほうがよいものに対して青丸をつける
    • 予定
      • 例: MTG
        • 発言内容、資料を考えておく、そのために時間を確保する。議事録作成のための時間を確保する
      • 午前中は可能な限り、90分の枠で集中して行う仕事を入れる
        • 睡眠は90分周期でノンレム睡眠・レム睡眠を繰り返す
      • 午後一番は、考えたり集中したりする仕事はいれない
      • バッファはなるべく午後に、1日最低1時間、可能であれば2時間程度作る
      • メールを読む回数は一日3回
    • 実績
      • 実績は投入した時間に対する仕事の成果
      • 初めは30分、60分単位で記入
      • 一日2-3回に分けて記入
    • 分析
      • 予定せずに実行した仕事(リアクティブな仕事:赤色)
        • 時間内に終わらなかった仕事
          • なぜできなかったのか(Why)
          • どうすればできたか(How)
        • 想定外の仕事
          • 先読みして想定外の仕事を減らすことはプロアクティブ・タイムマネジメントで最も重要
      • リーダーであれば最低でも50%はプロアクティブにできるとよい
    • その他
      • 週間スケジュールに関してもどこかで管理できるとよさそう


  • 成果をあげるMTG
    • MTGの目的
      • 情報収集: 意思決定のための情報収集
      • 情報共有: 共通の目的・価値観の形成
      • 意思決定: 問題解決のミーティング
      • 説得: グループのメンバーを説得する
      • 調整: 現状のシステムを一部修正する?
      • ブレスト: 既存の概念に束縛されない情報収集
    • MTGは参加者が投資する貴重な時間に対してのリターンがあるべき
    • MTGのクオリティは事前準備によってほとんど決まる
      • 結論まで仮説を立て、自分の頭の中を整理する
      • MTG後の予定や行動を予測する
    • アジェンダを事前に共有しておき、相手の準備不足も事前に消しておく
    • 事前調整は大切
      • 人は相談されるのが好き
      • 相手は3タイプ
        • 最終権限をもった人
        • 最終権限をもった人のブレーン的存在の人
        • 最終権限はないが、議論を脱線しがちな人
    • MTGをリードする場合にやるべきこと
      • 目的やゴールを明確にし、それを意識し続けること
      • 目的・ゴール・アジェンダを目に見えるようにしておく
      • 何を、誰が、いつまでに、をすべての決定事項に対して明確にする
    • 議事録は準備した資料からコピーして活用


  • チーム関係者を巻き込み成功に導く
    • プロアクティブな報告: 全体の枠組みを相手の頭の中に作る
      • 完了の基準を伝える
      • 完了までの手順を伝える
      • 現時点の達成度を伝える
    • プロアクティブな説明: 説明相手は小学生
      • 素人をナビゲートするように、物事を決めて引っ張っていく
      • 素人には知識で絶対に負けないように勉強する
        • その道のプロとしてお金をもらっているので、お客様のどのような質問にも答えられるように勉強しておく
      • -> そのために、知識と解をゆるぎない絶対的なものにしておく必要がある
    • 期待値をコントロールして満足値を変える
    • 好意で仕事をするのであれば、正しく認識してもらい、お客様に感謝してもらうことは重要
      • 好意であることを伝えるかどうかで評価にも差が出る
    • 「まず、自分がお客様に認められろ。そして、お客様がお客様社内で認められるために行動しろ」

timestampsの自動更新をやめてみる

Railsでのtimestampsの自動更新の正確な挙動を知りたくなったので確認してみた。


activerecord-2.3.12/lib/active_record/timestamp.rb

module ActiveRecord
  module Timestamp
    def self.included(base) #:nodoc:
      base.alias_method_chain :create, :timestamps
      base.alias_method_chain :update, :timestamps

      base.class_inheritable_accessor :record_timestamps, :instance_writer => false
      base.record_timestamps = true
    end

    private
      def create_with_timestamps
        if record_timestamps
          current_time = current_time_from_proper_timezone

          write_attribute('created_at', current_time) if respond_to?(:created_at) && created_at.nil?
          write_attribute('created_on', current_time) if respond_to?(:created_on) && created_on.nil?

          write_attribute('updated_at', current_time) if respond_to?(:updated_at) && updated_at.nil?
          write_attribute('updated_on', current_time) if respond_to?(:updated_on) && updated_on.nil?
        end

        create_without_timestamps
      end

      def update_with_timestamps(*args)
        if record_timestamps && (!partial_updates? || changed?)
          current_time = current_time_from_proper_timezone

          write_attribute('updated_at', current_time) if respond_to?(:updated_at)
          write_attribute('updated_on', current_time) if respond_to?(:updated_on)
        end

        update_without_timestamps(*args)
      end
  end
end


created_atとupdated_atだけかと思ってたらcreated_onとupdated_onも対応してるみたい。地味に。


ActiveRecord::Base.record_timestampsのtrue/falseで自動更新を管理している。例えば、


class Hoge < ActiveRecord::Base
end

Hoge.record_timestamps = false
Hoge.new.save
Hoge.record_timestamps = true


なんてすると、timestampsの自動更新なしにsaveすることができる。


あと余談ですが、create_with_timestamps, update_with_timestampsメソッドを定義してalias_method_chainを使ってるみたい。

ActionViewのselectメソッドのソースコード読んでみた

普段Ruby on Railsを利用しているのですが、

その中にあるActionViewについて実はあまりよくわかっていなかったので、

ソースコードを読んでみました。


Railsのバージョンは少し古くて2.3.12ですm(_ _)m


selectメソッドの引数は、method, choices, options, html_optionsの順番。

choicesはHashで渡してもto_aされる。

html_optionsはSymbolで渡してもstringify_keysされる。


actionpack-2.3.12/lib/action_view/helpers/form_options_helper.rb
module FormOptionsHelper
  include ERB::Util

  def select(object, method, choices, options = {}, html_options = {})
    InstanceTag.new(object, method, self, options.delete(:object)).to_select_tag(choices, options, html_options)
  end

  def options_for_select(container, selected = nil)
    return container if String === container

    container = container.to_a if Hash === container
    selected, disabled = extract_selected_and_disabled(selected)

    options_for_select = container.inject([]) do |options, element|
      text, value = option_text_and_value(element)
      selected_attribute = ' selected="selected"' if option_value_selected?(value, selected)
      disabled_attribute = ' disabled="disabled"' if disabled && option_value_selected?(value, disabled)
      options << %(<option value="#{html_escape(value.to_s)}"#{selected_attribute}#{disabled_attribute}>#{html_escape(text.to_s)}</option>)
    end

    options_for_select.join("\n").html_safe
  end

class InstanceTag #:nodoc:
  include FormOptionsHelper

  def to_select_tag(choices, options, html_options)
    html_options = html_options.stringify_keys
    add_default_name_and_id(html_options)
    value = value(object)
    selected_value = options.has_key?(:selected) ? options[:selected] : value
    disabled_value = options.has_key?(:disabled) ? options[:disabled] : nil
    content_tag("select", add_options(options_for_select(choices, :selected => selected_value, :disabled => disabled_value), options, selected_value), html_options)
  end

  private

  def add_options(option_tags, options, value = nil)
    if options[:include_blank]
      option_tags = "<option value=\"\">#{options[:include_blank] if options[:include_blank].kind_of?(String)}</option>\n" + option_tags
    end
    if value.blank? && options[:prompt]
      prompt = options[:prompt].kind_of?(String) ? options[:prompt] : I18n.translate('support.select.prompt', :default => 'Please select')
      option_tags = "<option value=\"\">#{prompt}</option>\n" + option_tags
    end
    option_tags.html_safe
  end
end