Lesson4

プログラミングとか読書とか日常のログ

VSCodeでRuby LSPをインストールしたときのエラー

これは何

  • VSCode拡張機能Rubyが非推奨になったのでRuby LSPに移行してくださいというメッセージが出たので移行した。
  • インストールしたら以下のようなエラーが出たので調べた
Failed to activate asdf environment: Command failed: /opt/homebrew/bin/fish -ic 'asdf exec ruby -rjson -e "printf(%{RUBY_ENV_ACTIVATE%sRUBY_ENV_ACTIVATE}, JSON.dump(ENV.to_h))"' unknown command: ruby. Perhaps you have to reshim?

調べた内容

  • Rubyのバージョン管理はrbenvでやっているしなぜ asdf が出てくるんだ?と思いながらネットを調べてみても特に同じ現象は見当たらず。
  • Ruby LSPのUsageをみたところ以下の文言があった。
Ruby version managers
To boot the server properly, the Ruby LSP uses a version manager to activate the right environment variables that point Bundler to the Ruby and gem paths. This is especially necessary when switching between projects that use different Ruby versions - since those paths change and need to be reactivated.

By default, the Ruby LSP will attempt to automatically determine which version manager it should use, checking which ones are available (auto option). If that fails, then the version manager must be manually configured. You can do so by clicking Change version manager in the language status center or by changing your VS Code user settings.
  • バージョンマネージャの判別ができなかったので設定から手動で切り替えて再起動したところ、エラーは解消した。 VSCodeのRuby LSPのバージョンマネージャの設定をrbenvに変更

RubyXLで日付の操作を扱った際に秒未満でズレが発生していたさいの対応

仕事で以下のようなExcelシートを読み込み日付を出力したかった際に秒未満でズレが発生した際のメモ

何が起きたか

  • 以下のようなExcelシートをRubyXLで読み込みrails側で.in_time_zone をした際に意図した出力にならなかった(+9時間されているのはRubyXLで日付を読み込むとUTCで出力されるため一旦無視)

意図したもの
2021-02-28 22:29:51 +0900

出力されたもの
2021-02-28 22:29:50.999999782 +0900

原因

RubyXLのコードを追っていくと、時刻を記載したセルの書式設定が日付時刻の場合num_to_dateというメソッドを通っていることがわかった

github.com

この処理の最後に

base_date + (dateparts[0] + (dateparts[1] * 86400).round(6) / 86400)

とあるので数値を丸めた際にズレが発生していると思われる。

対応

対応案としては以下2点が考えられる

  • 書式設定が日付時刻の場合に発生するため、文字列として扱い出力後Time.parseなどで読み込む(ハックっぽいが運用で回避)
  • .in_time_zone.roundなどで変換後丸めてしまう(今回は秒未満の数値は不要だったため)

masterからmainに切り替え(Github)

仕事でdefault branchをmasterからmainに切り替えたときのメモ。 今の職場ではOSS開発と同様に本家リポジトリから自分のアカウントにforkをしてリポジトリを管理している。
なのでfork元の本家リポジトリ(upstream)、fork先のリポジトリ(origin)、ローカルの3つを対応する。以下の手順で行った。

ローカルのブランチ名を変更

git branch -m master main

fork元、fork先のリポジトリにpush

git push origin main
git push upstream main 

Github上でdefault branchを切り替える

Settings > Branches の Default branch > Switch to another branch からmain branch に切り替える(fork元、fork先ともに同じ作業をした)

このあと、適当にPullRequestを作ってマージして運用してみたが今のところ問題はなさそう。

Error: Cannot find module 'webpack-cli/bin/config-yargs' が出たときのメモ

webpack-cliをバージョンアップして webpack-dev-server を実行した際に以下のエラーが出たので対応をメモ。

$ webpack-dev-server --config webpack/webpack.config.js
internal/modules/cjs/loader.js:638
    throw err;
    ^

Error: Cannot find module 'webpack-cli/bin/config-yargs'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
    at Function.Module._load (internal/modules/cjs/loader.js:562:25)
    at Module.require (internal/modules/cjs/loader.js:692:17)
    at require (internal/modules/cjs/helpers.js:25:18)
    at Object.<anonymous> (/Users/tomoya.osada/develop/nikawa/node_modules/webpack-dev-server/bin/webpack-dev-server.js:65:1)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

バージョン

    "webpack-cli": "^3.3.12",
    ↓にバージョンアップ
    "webpack-cli": "^4.3.1",

対応

開発用サーバーを立ち上げる際のコマンドを以下に変更した

webpack-cli serve --mode development --config webpack/webpack.config.js

バージョンアップした4系ではエラー内容に出ている webpack-cli/bin/config-yargs がなくなっていいて別のコマンドで起動するように変更されているようでした。

github.com

Clean Architecture(1章)の読書メモ

はじめに

設計について、アンチパターンなどはなんとなくふんわりやんわり感じ取れるが言語化が難しいと感じていたので理解と解像度を上げるために読んだメモ

感想

1章は優れた設計とは何か?、スピードを重視した崩壊したコードを書く自信過剰な開発者が突き進むとどのような結果を生むかが記載されている。
「開発者が後でコードをクリーンにすることはない」と言った内容の記載があったが、まさしく以前携わったスクラムチームでも同じような状況があった。
→そして一人のエンジニアが「後でやるは絶対やらないw」って言ってたのまぁそうだよねと感じたのを思い出した。
あとは短期的な目線でも崩壊したコード(テストがないとか)を書くとクリーンなコードを書くより遅いというのも同意。 リリース時にバグって痛い目を見る。(見た)

読書メモ

  • 優れたソフトウェアの設計の目的とは何か?
    • ソフトウェアアーキテクチャの目的は、求められるシステムを構築・保守するために必要な人材を最小限に抑えること
    • 労力の最小化と生産性の最大化を実現すること
  • あとで(コードを)クリーンにすることはない。
    • 市場からのプレッシャーは止まらないから
    • 次々と新規開発の要望があり、その結果コードをクリーンにすることまで手が回らない
    • そして崩壊
  • 短期的にも長期的にも崩壊したコードを書くほうがクリーンなコードを書くよりも常に遅い。
  • 速く進む唯一の方法はうまく進むことである。

rails new で `bundler: failed to load command: spring` というエラーが出たときの対処

先日rails newした際に bundler: failed to load command: spring というエラーがでた。 こちらを見てみると特定のbundlerのバージョン(2.1.4?)で発生するらしい。 github.com

コマンドを実行すると以下のようになっていた

gem list bundler

*** LOCAL GEMS ***

bundler (2.2.4 default: 2.1.4)

上記のissueのコメントにも書いてあるが、自分の環境でも以下のコマンドでRubyGemsをアップデート後にrails newをしてエラーが発生しないことを確認しました。よかった。

gem update --system

gem list bundler

*** LOCAL GEMS ***

bundler (2.2.4)

ちょこっとissueを追うとどうやら実行ファイルのフォルダ名を変更したことによるバグらしい。

github.com

当面の間続けていきたいこと

去年の夏ぐらいまでは全く有意義に使えなかったことを教訓にして、何をやって行きたいか考えてみることにした。

1つ目

1つ目はアウトプット。直接的に仕事に影響がある理由ではないが、自分の弱い部分でもあるしキャリアのためにも発信する機会を増やして行きたいと思ったため。

  • とはいえ、普段Evernoteとかには読書メモやハマったときのメモを書いているのでこちらにうつして行くように
  • 目的は忘れやすい自分の覚え書きと仕事に役立てること

2つ目

2つ目は個人的なプロダクト作り。久しく個人でやってないのでまたやっていきたいなと(ネタは何個かある)。 あとは最近の家庭的な事情で(どこかの会社に所属しての)副業ができなくなったので、お金がほしい

3つ目

3つ目は運動。リモートワーク続きで割と体に影響が出始めているのでちょっとなんとかしたい。 マッチョになりたいとかではなく、普通に健康でいられるレベルで良いので適度に自重トレとかリングフィットをしていく。

  • 主にスクワット

最後に

運動は別として、残りの2つはインプットとアウトプットのバランスを考えながらやっていきたい。 あとは地道にエンジニアとしての地力を上げつつ、別領域にも挑戦していきたい。