モデルスペックの目的

RSpecによるテストコードを整備しようとしている。もっとも基本的かつ重要といわれるモデルのスペックが満たすべきことについて、「RSpecによるRailsテスト入門」より引用。

  • 有効な属性が渡された場合、モデルのcreateメソッドが正常に完了すること
  • バリデーションを失敗させるデータであれば、正常に完了しないこと
  • クラスメソッドとインスタンスメソッドが期待通りに動作すること

「レコードの生成」「メソッドの振る舞い」の2つをテストしよう、ということか。

Bundlerとは何か

Bundlerちゃんと入門したことがなかったので、概要だけでも公式サイト読んでおく。

http://bundler.io/
 

Bundler provides a consistent environment for Ruby projects by tracking and installing the exact gems and versions that are needed.

Bundler is an exit from dependency hell, and ensures that the gems you need are present in development, staging, and production. Starting work on a project is as simple as bundle install.

Bundlerは、既存のGemと必要なバージョンを追跡し、インストールすることでRubyプロジェクトにおける一貫した環境を実現する。

Bundlerは依存地獄からの出口であり、必要なGemは開発、ステージング、プロダクション環境に存在することを保証する。使い始めるのはbundle installというコマンドを打つだけで良い。

人間の「重要でありたい」という渇望

「人を動かす」第2章によれば、人間の最も大きな社会的渇望は「重要でありたい」という思いであるらしい。

この渇望こそが、さして育ちがよくもない人間が一生懸命に学ぼうとしたり、逆に少年少女が非行に走る大きな要因だそうだ。

すでに大金持ちになった起業家たちが誰より一生懸命に働き続けるのも、旦那に相手にされなくて不倫に走る昼顔妻も、これが原因とすればなんとなく説明はつきそうだ。

そういえば「自分は透明だ」とかなんとか言ってた犯罪の人とかいたな。それも、要するにそういう気持ちが原因なのかもしれない。この間起きたパリでのテロ事件とか、9.11とかもこの気持ちが原因だったりするのだろうか。

この本においては「だから他者を重要な存在として扱うことが重要なんだ」という結論で終わりだが、どうなれば人は自分を重要だと思えるんだろう。

一つは仕事だろう。間違いなく。仕事で自分なりに高いパフォーマンスを発揮していれば、人は充実した生活を味わうことができると思う。これはとてもシンプルで、要するに自分さえ頑張ればいい。もちろん分野によっては素質とか、環境とか体の調子とか色々あるけど、本人が頑張れるのであれば問題は簡単なように思える。

逆に仕事以外だと何があるんだろう。家庭や友達といった濃密な人間関係はそれになるだろう。そこらへんの大学生とかそれだけで十分満たされてそうだ。でも他はよく分からないな。テロに走る人の気持ちとか。

ただ、歴史のこととかを見てると、いわゆる「正義感」とテロみたいな過激な行動は関係がありそうだ。どんなテロリストも自分が正義だと思ってやっていると考えると理屈としては筋が通る。

そうすると結論はシンプルでありきたりだけど、いわゆる「正義」以外のことから「自分の重要さ」を感じられるような世の中になればいいんだな。そしてそれは結局、他者に必要とされる仕事と、身近な人間関係だ。

Rubyの実装の種類について

Rubyにはプログラミング言語環境として幾つかの種類がある。

いわゆる「Ruby」と言われているものは基本的にMatzが開発したMRI(Matz Ruby Implementation)とかCRubyと呼ばれたりする。CRubyというのはC言語で開発されているためで、Javaで開発されているJRubyとの対比表現と言える。

JRubyは一部でCRubyと互換性があるが、JRubyにはJavaのライブラリを呼び出せるという利点がある。

他に、Mac上の技術要素としてObjective-Cランタイムなどを使って作られたMacRubyなどがある。

Rubyのオープンクラス

Rubyは自由度の高い動的な言語と言われ、その象徴的なものとしてオープンクラスというものがある。

オープンクラスによって、すでに定義されたクラスに対して再度メソッドを定義したり、追加したりすることができる。Rubyが標準で提供しているクラスに対してもオープンクラスによって定義を書き換えることができる。

つまり、Rubyではクラスを継承することなく上書きすることができる。これには弊害もあり、既存のメソッドを上書きすることでそれまでにない振る舞いが生じるため、それまでうまく動いていた他の箇所にまで影響が及ぶ可能性がある。

Pryについてまとめる #1

一般的なRubygemの一つであるPryについて少しまとめてみる。

Pryはirbの代替的な対話型Rubyインタプリタで、irbにはない色々な機能がある。

主な機能は

  • シンタックスハイライト
  • クラス・モジュール・メソッドを定義しているソースコードやドキュメントの参照
  • エディタを起動し、その場で定義を書き換える
  • シェルコマンド
  • Gist連携
  • スコープの移動
  • プログラム実行時に、任意の場所で停止してpry起動(デバッグ?)

など。知らないの結構あるな。

Pryを起動した上でhelpと打てばヘルプを確認できる。

短いけど今回はここまで。

考えるべきことを整理する

まず、考えることが大事とはよく言うが、何のために考えるのかを考えることはあまりない。

目的をざっくりと2つに分類すると「単純にホビーとして考える」「何かに働きかけ、貢献するために考える」ということになるだろう。「何を考えるべきか」を考える時、必然的に対象は後者になる。前者はただ考えたいように考えればいいからだ。さて、自分自身の価値を最大化し、社会に貢献するために考えるべきことは何か。

「社会にアウトプットする」ことを目的としたとき、考えるべきことはシンプルに3つに分類できる。

  1. 長期的に社会はどうなっていくのか(5年後、10年後、20年後、100年後、… etc.)
  2. 1. を踏まえ、中期的に自分は何を目指すのか(20年後、10年後、5年後など)
  3. 1.2.を踏まえ、短期的に自分は何をするのか(今年、今月、今週、今日)

単純に未来のアウトプットの最大化が目的であるならば、基本的に過去について考える必要は生じない。過去を変えることはできないからだ。より何かを向上するために過去を振り返ることが必要になったり、コミュニケーション的に誰かと一緒に感慨に耽ることはあっても、それ自体、論理的には「不必要」ということになる。(それでも振り返るけど。)

まぁ要するに考えることに困ったら、上記3つのフレームの中でどれかを考えてみればいいんでないかということだ。

1.についてはある程度フィールドを絞らないと考えようがない。20年後の自動車はどうなってるか、自動運転だみたいな。それに際して、当然現在の技術でどこまで可能なのかとか、過去歴史でこういう進化をしてきたから、これからこうなるかもしれないなど、いろいろ対比してみる必要があるだろう。

当然ながら、現在存在しないものについて予想することは難しい。例えば空飛ぶ乗り物が100年後存在したとして、その名称が何であるか我々にはわからない。100年後交通はどうなっているか、というよりざっくりとしたテーマを決める必要があるのかもしれない。1.にしても色々なレベルがあって、5年先でも長期的な未来とはいえると思うし、ある程度具体的に考えたほうが無理がないかもしれない。

そしてそれを踏まえた上で自分が何をするか考えるのが2。しかし、ここにしてもまだまだ具体的ではないし、自分の選択に委ねられる部分が大きい以上、1よりも妄想に近くなるのかもしれない。30歳でこうなってたい、40歳でこうなってたいとかもうそうでしょ。

もっとも緊急性が高いのが3だ。2.の妄想を何となくしておいた上で、1年後までに達成すること、今月やること、今週、今日何をするかというところまで具体的に落とし込んでいく。

当然時間は限られているので、何もかもできるわけではない。休日に本を読むにしても、どの本を読むかという意思決定がめっちゃ重要になる。しかし、実際に読んでみないとその本がいいかどうかという判断もできなかったりする。

と、以上いろいろごちゃごちゃ考えてみたけど、あんまり意味なかったなあと反省している。

AWSの主要サービスを一言で言うと

AWSの主要サービスをそれぞれ、簡潔に言い表すならどうなるんだろう。一応一覧のところには小さくサービスの概要が書いてある。

スクリーンショット 2015-11-12 21.48.56

主要なやつだけ見てみよう。

  • EC2: Virtual Servers in the Cloud
  • Elastic Beanstalk: Run and Manage Web Apps
  • S3: Scalable Storage in the Cloud
  • DynamoDB: Predicatble and Scalable NoSQL Data Store
  • SQS: Message Queue Service
  • SWF: Workflow Service for Coordinating Application Components
  • SNS: Push Notification Service

順に訳していくと、

  • EC2: クラウド上の仮想サーバー
  • Elastic Beanstalk: ウェブアプリの実行と管理
  • S3: クラウド上の拡大できるストレージ
  • DynamoDB: 予測・拡大可能なNoSQL データ貯蔵場所
  • SQS: メッセージキューサービス
  • SWF: 同等のアプリケーション部品のためのワークフローサービス
  • SNS: プッシュ通知サービス

SWFがわかりにくい。CoordinatingとWorkflowという単語が抽象的なこともあり意味がつかみにくい。

あとはそんなものかなぁ。

 

AWS Certified Developer (associate) にFailした

落ちたのは単純に対策を取らなかったから。ということで来年の頭くらいにもう一度受けるが、その対策としてどうすればいいかを考えてみる。

AWS Certified DeveloperにはBlueprintという資料があって、要はここからここまでが範囲ですよ、ということが書いてある。ダウンロードしないと見れないのでそこへのリンクを貼っておく。

https://aws.amazon.com/certification/certified-developer-associate/

ざくっといえば要するに、ここに指定してあるAWSのサービスについて学んでいけばいいんだろう。

  • Amazon S3
  • Amazon DynamoDB
  • Amazon SQS
  • Amazon SNS
  • Amazon SWS
  • AWS Elastic Beanstalk
  • AWS CloudFormation

冒頭に上記7つのサービスが書いてあったけど、どう考えてもEC2とかがないのはおかしいな。当然のこととされているんだろうか。

知識としては「AWSの知識」と「一般的な知識」が問われるそうだ。一般的な知識は対策の取りようがないし、現場で開発しているかどうかみたいな部分が問われている気がするのでスルーしよう。

ようは、上記サービスについて、AWS側が意図したベストプラクティスに従ってしっかりと活用できるかを問うてくるということなんだろう。

試験を一度受けた印象では、細かい設定によってどう挙動が変わってくるかを中心に問われる感じだった。

Content Limitというセクションもあるので、こちらも少し見てみよう。ドメインごとに分野を区切っているらしい。

  1. AWSの基礎
  2. 設計と開発
  3. デプロイとセキュリティ
  4. デバッグ

1では各サービスのシンプルなコンセプトと大まかな概念などを理解しているかが問われるらしい。2は具体的にAMIの設定と、AWS APIでのプログラミングと書いてある。3は少し大きめにとってあって、「クラウドセキュリティベストプラクティス」なんのこっちゃ。あとはIAMとかVPC周りのことが聞かれるんだな。CIAとAAAモデルってなんだろう。今度調べてみるか。4は「一般的な問題解決と質問」「デバッグのベストプラクティス」かなり抽象的だな。

結局のところ、範囲指定としてはこれだけざっくりとしか指定していないわけだから、あとは一つ一つのサービスのドキュメントを読んだり、ちょっと動かしてみたりすることで勉強を進めていくのが実務に役立てるという意味でも一番いいような印象だ。

生産的な日々を送るために必要なアクション5つ

バイラルっぽいタイトルをつけてしまったが、完全に自分のために整理しておきたかっただけだ。休みの日に何をするか迷わなくて済むように。

今の自分にとって本当に必要な努力って具体的には、そんなにパターンがあるわけじゃない気がしている。

  1. 文章を読むこと
  2. 考えたことを書くこと
  3. 事実を記録すること
  4. 将来を計画すること
  5. 人に会うこと

これらの行動はいわゆるMECEなものではない。例えば「考えたという事実を記録する」と考えられたりもするわけであるが、具体的な行動としてはこの5つを意識していれば十分だと思う。

ただ、2と3の違いに関して、前者は「自分の中にある考えを言葉にする」ことであるのに対し、後者は「歴然と起こったことをあるがままに記録する」という点で異なる。

例えば「先月はチェストプレスでこれだけの重量が挙げられた」という記録は3であるが、それに対して「こういうことをすればもっと成果を上げることもできたかもしれない」と考えたことを書けば2だし、それを踏まえて「今月はこういうトレーニングをする」という内容を書くのであれば4になる。