・let/let!はインスタンス変数を定義する際、beforeより分かりやすく記述できる・beforeはインスタンス変数の定義以外(メソッドの実行など)でも利用することができる・letは変数が初めて使用された時に評価(遅延評価)され、let!とbeforeはブロック宣言時に評価される。【本題】let・let!・beforeの役割についてlet・let!・beforeは、いずれもRSpecにおいて、各exampleで共通の処理を定義することができます。これによりそれぞれのテストに同じ記述をする手間が省け、DRYな状態をキープできます。これらは意識していないと、どれも同じ動きをしている様に見えますが、実際には挙動や使用する場面が異なります。今回はそれをまとめます。「let・let!」はインスタンス変数の定義に用いる各exampleで共通利用するインスタンス変数を定義する際、beforeを利用すると、以下の様なコードになります。endこれをletで書き換えると以下の様になります。}letの方がやや見通しが良くなったと思います。この事からインスタンス変数の定義を共通化する際には、let・let!を使用するのが一般的の様です。「before」はメソッドを実行する際に用いるではbeforeはどの様な場面で用いるかというと、インスタンス変数の定義以外で利用します。以下の様にサインインの処理を記述すれば、各exampleが実行される前に共通して処理が走ります。}let・let!では、この様な使い方は出来ないので、beforeが活躍します。「let」と「let!」の実行順の違いなおletとlet!については、それぞれの実行順に注意する必要があります。letは変数が初めて使用された時に評価(遅延評価)されます。let!はブロック宣言時に評価される。以下のコードは実行順の関係で、正常に完了しません。postendPost.firstが呼び出された時点では、postが生成されていない(呼び出されていない為)ことが原因です。これを回避するにはlet!を用います。postendこれにより、Post.firstが呼び出された時点では、postが生成されるので、正常にテストが通ります。本日実装した機能のメソッドが100行以上に及ぶ処理になってしまい、かなり見通しが悪い。メソッドを分割して対応するが、そもそもの設計や仕様を見直す必要があるかもしれない。設計については、良いアイデアが現状思い付かないので、先輩の助力を仰ごうと思う。社内でデザインパターンの勉強会が行われたが、他の人達の設計に対する考え方に知る良い機会になり、非常に有意義だった。設計や原則全般に対する理解が乏しいため、消化しきれていない部分が多々あるが、関連書籍を参照して理解を深めていきたい。日)IBMのWatsonきっかけでエンジニアに憧れて28歳未経験でWebエンジニアへ転職。2018年12月から3年間で「10000時間」をプログラミングに捧げる計画を立て、学んだことをブログの投稿中。Activitiesryoutakuこのサイトについてプライバシーポリシ。