やわらかテック

興味のあること。業務を通して得られた発見。個人的に試してみたことをアウトプットしています🍵

未経験エンジニアにインフラエンジニアを勧めているのマジか

yahoo知恵袋にて回答中

ちょっとした気分転換や「誰かの役に立てれば」という思いで、不定期でyahoo知恵袋にて質問へ回答をしています。自分が回答しているのは、回答がない・少ない質問が主です。こういった質問は内容が複雑であったり、文章量が多い、答えを提示しにくいものが多いため、自分の中で挑戦と思い回答しています。

chiebukuro.yahoo.co.jp

カテゴリは主に本業(エンジニア)に関係することです。最近は未経験でエンジニアになるとか、教育どうすればとか、その辺りの質問に回答することが多いです。

とある質問が多い

気づけば、一年近く回答をしてきましたが最近、とある質問が多いことに気づきました。その質問とは「未経験でエンジニアになりたいのですが、インフラエンジニアを勧められた」という種類のものです。

続きを読む

リモートワークの一番のデメリットは「見て盗む」がやりづらいこと

自分は、いわゆるビジネス書というのはあまり読みませんが、立ち寄った書店でいつもは通らない棚をふらふらしていたところ、僕が尊敬してやまない落合博満さんの書籍「決断=実行」を見かけたので即購入しました。

決断=実行

決断=実行

Amazon

2006年のセ・リーグ優勝決定戦は野球部のチームメイトと中継を見ていました。この時の満塁ホームランからの監督の涙は何回見ても懐かしい気持ちになりジーンときます。以降、当時の気持ちのまま落合監督と記載させて頂きます。

www.youtube.com

続きを読む

ActiveRecordにてSELECT * FROM table_nameを避ける方法について

ActiveRecordって本当に便利ですよね。SQLを隠蔽して、データベースへのCRUD操作をオブジェクトとメソッドで完結させることが出来ます。一例として、usersテーブルから権限(authority)がadminのレコード一覧を取得する操作は以下のようになります。 (※分かり易さのため、authorityはstring型にしてあります)

usersテーブル

カラム名 表記名
user_id int8(primary key) ユーザーID
name varchar 名前
gender int4 性別
authority string 権限
created_at timestamp 作成日時
updated_at timestamp 更新日時
User.where(authority: 'admin')

この操作によって発行されるSQLは以下です。SQLの確認にはto_sqlを使用しています。

SELECT users.* FROM users WHERE authority = 'admin'

ご覧の通り、SELECT句にはusers.*が宣言されているためusersテーブルの全てのカラムの情報を取得します。今回の例では、カラム数がせいぜい6つで大した問題ではありませんが、本番稼働しているサービスではカラム数が数十個になるのはよくあることで、カラムを全て明示的に指定する必要のないワイルドカードの*が使用されています。

続きを読む

ActiveSupportのtravel_toの仕組みについて

ActiveSupportには、時間を固定することが可能な便利なtravel_toという関数があります(よく単体テストでお世話になっています)。travel_toを呼び出した後にTime.nowで現在時刻を取得してみると、何とtravel_toで指定した日時が取得されるではありませんか。

pry> Time.now
=> 2022-10-21 19:33:30.314909 +0900
pry> travel_to Time.local(2022, 10, 8, 15, 0, 0)
=> nil
pry> Time.now
=> 2022-10-08 15:00:00 +0900

一体、どのようにして現在日時を固定させているのでしょうか。気になったので調べてみました。
結論としては、現在日時を取得するメソッドの振る舞いを書き換えて、指定した値を固定で返すようにしていました。

続きを読む

Rails外でActiveSupportのtravel_toが使えない時の解決方法

前提条件

  • Rails外でActiveSupportを使用している
  • テストフレームワークにRspecを使用している

エラーについて

Railsではなくsinatraを使ったAPIを書いていて、時間停止の便利関数travel_toを呼び出そうと思ったら以下のようなエラーが出てActiveSupportに定義されているtravel_to関数が使えませんでした。

Failure/Error: config.include ActiveSupport::Testing::TimeHelpers

NameError:
  uninitialized constant ActiveSupport::Testing

      config.include ActiveSupport::Testing::TimeHelpers
続きを読む