Small Changes

週刊ニュース Lv13(2023年2月11日~2023年2月17日)


Metadata


2月11日(土)

特になし

2月12日(日)

Gitコマンドの結果を視覚的に見れる「git-slim」

Chrome拡張機能 履歴全文検索「Falcon」

Go言語で対戦シューティングゲームを作る6

  • コードを移植してくるときに中途半端に関数に切り分けていたけど、期間が空くと思い出すのに時間がかかり辛くなってきた。

  • GoやJSの可読性の高い書き方をまだ理解できていないのでいろんな人のコードを参考にしながら一からキレイにしようと思った。

2月13日(月)

親知らずの炎症がつらい

  • 親知らず周りに口内炎ができていて長引いているなと思って調べるとただの口内炎じゃなかったみたいです

  • 唾を飲み込むだけでも痛いのでかなり辛いのですが、今はだいぶ収まってきました。

  • 親知らずは今まで悪さをしたことがなかったのですが、こういう炎症も起きたりするんですね。

  • 何度も再発するようなら親知らずの抜歯も検討しよう。

Go言語で対戦シューティングゲームを作る7

  • この日は実装よりも開発環境周りが気になってしまいそちらの成果の方が多かったです;;でも、改善するのはやっぱり楽しいです。

    • vimのfoldを使ったzc、zoで開閉するとコードの見通しがよくなる

    • lazygitのアップデートが来ていて作業コンテナのbuildし直し

    • フォントサイズを小さくすると見える範囲のコードが増えて移動が減っていい感じ

    • LspHoverのポップアップのスクロールがvimでもできるように設定した

2月14日(火)

Sidekiqのことを少しだけ理解できた

  • 開発環境でappコンテナとsidekiqコンテナは別々と構成のときに、perform_asyncしたときに一切appコンテナ側にログが残らないなと思っていたのですが、必要な引数をRedisに保存してsidekiqコンテナ側で実行しているんですね(ちゃんと調べていないので間違っているかも)

Go言語で対戦シューティングゲームを作る8

  • この日は他の人のコードを色々見ながら勉強しました

    • GoのRouterについて

      • A. router用の関数を用意して*gin.Engineのポインタを受け取り関数の中でルーティングを設定(参考)

      • B. router用の関数を用意して関数内でgin.Defaultしてルーティングを設定して、*gin.Engineのポインタを返す(参考)

      • 今回はプログラムの規模的にAは分けすぎて辛いので、Bくらいが丁度よさそうでした。

    • Go言語で別のファイルに関数を定義する方法

      • 他の人のコードを見ながら、どこからもimportしていないけど呼び出せる関数があるなとおもったら、同じpackage内の関数であれば別ファイルで定義した関数をimportせずに使うことができるみたいでした。

      • 個人的には明示的にimportするほうが好みなので別ファイルに別パッケージで切り出して明示的にimportする方法を使おうと思いました。

    • Goのmelodyについて

      • 専用の構造体を用意して、構造体にメソッドを生やすオブジェクト指向っぽい書き方(参考1, 参考2)

      • Goにはクラスはありませんが、どちらもオブジェクト指向っぽい書き方でわかりやすいです。個人的にはlockなどが使われている応用的な参考2の使い方を参考にしてやってみようかなと思いました。

2月15日(水)

before_destroyは最後にthorw :abortする必要がある

  • https://jabba.cloud/20171114211512

  • before_destroyで削除するときに特定の条件を満たしてなかったらエラーにしたいときに、最後にthorw :abortをつけないと後続の処理も行われ削除されてしまうようです。そのため、before_destroyで実行するメソッドの最後にthorw :abortを書く必要がありました。

2月16日(木)

研鑽Rubyが全17章読めるようになった!

  • https://www.lambdanote.com/blogs/news/ruby-3

  • 途中までしか読めなかった研鑽Rubyがついに全部読めるようになったみたいです!

  • 購入しただけで積んでいるのでいつか読む(きっと…)

mattnさん著のGo本が出るみたいです!速攻ポチりました!

関連で呼ばれるときには自動で関連モデルを設定したい & 明示的に呼ぶときは指定した値を設定したいを両立させる

  • 結論からいうと、transientを使うと両立させることができました。

  • FactoryBot.define do
      factory :training_program_environment_week do
        uuid { SecureRandom.uuid }
        start_at { '18:00' }
        end_at { '20:00' }
        training_program_environment
    
        transient do
          _week_id { Week.ids.sample }
        end
    
        before(:create) do |training_program_environment_week, evaluator|
          training_program_environment_week.week_id = evaluator._week_id
        end
    
        trait :with_week do
          before(:create) do |training_program_environment_week, evaluator|
            training_program_environment_week.week_id = evaluator._week_id
          end
        end
      end
    end

  • 下記のように何も指定しないときは、before(:create)でランダムな曜日が設定され、traitを指定して、_week_idを渡したときは曜日を設定できました。transientで指定するのは仮想的な属性らしいのでモデルに存在する属性名と被らないように_week_idとしました。

  • $ FactoryBot.create(:training_program_environment_week)
    #=> デフォルトでweekがランダムで設定される
    
    $ FactoryBot.create(:training_program_environment_week, :with_week)
    #=> デフォルトでweekがランダムで設定される(上記と同じ)
    
    $ FactoryBot.create(:training_program_environment_week, :with_week, _week_id: 5)
    #=> _week_idで指定した曜日で設定できる

2月17日(金)

コードレビューをもっと楽にしたい

  • https://tech.excite.co.jp/entry/2021/09/07/120000

  • 今はGitHub上で.でVisual Studio Codeを起動することができますが、そのVisual Studio Code上でレビューができるようでした。

  • また、ローカルでも同じことができその場合は拡張機能「GitHub Pull Requests and Issues」を導入すれば同じことができました。

  • ただ、間違った操作をしそう間が否めないのでやはりGitHub上で見るのが自分はよさそうです。

  • そのときに差分が多かったりすると、GitHubはファイル単位でのViewedしかないため、ファイルの差分が大きすぎるとどこまで見たかがわからなくなってしまいます。

  • そのときに便利なのがChrome拡張の「Super Simple Highlighter」です。見た箇所にハイライトをつけられます。おすすめはちょっとopacityを下げたgrayがおすすめです。間違って画面を再リロードしてもハイライト箇所は残ってくれるので誤操作でどこまで見たっけという不幸をなくすことができます。

  • さらに便利だと思ったのがChrome拡張の「どこでもメモ」です。PRにコメントするまではないけど自分用で一旦コメントを残したいときに重宝します。こちらも自分で消さない限りは画面を再リロードしてもメモは残るというのが良いです。

  • GitHubが行単位で見た箇所をハイライトできるといいのですが、その機能はないので一旦はChrome拡張を使うと良さそうでした。

References