VSCodeで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.
- バージョンマネージャの判別ができなかったので設定から手動で切り替えて再起動したところ、エラーは解消した。
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
というメソッドを通っていることがわかった
この処理の最後に
base_date + (dateparts[0] + (dateparts[1] * 86400).round(6) / 86400)
とあるので数値を丸めた際にズレが発生していると思われる。
対応
対応案としては以下2点が考えられる
- 書式設定が
日付
や時刻
の場合に発生するため、文字列
として扱い出力後Time.parse
などで読み込む(ハックっぽいが運用で回避)文字列
として扱うと日付を丸める処理とは別の処理になるため- https://github.com/weshatheleopard/rubyXL/blob/master/lib/rubyXL/objects/sheet_data.rb#L107
.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
がなくなっていいて別のコマンドで起動するように変更されているようでした。
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を追うとどうやら実行ファイルのフォルダ名を変更したことによるバグらしい。
当面の間続けていきたいこと
去年の夏ぐらいまでは全く有意義に使えなかったことを教訓にして、何をやって行きたいか考えてみることにした。
1つ目
1つ目はアウトプット。直接的に仕事に影響がある理由ではないが、自分の弱い部分でもあるしキャリアのためにも発信する機会を増やして行きたいと思ったため。
- とはいえ、普段Evernoteとかには読書メモやハマったときのメモを書いているのでこちらにうつして行くように
- 目的は忘れやすい自分の覚え書きと仕事に役立てること
2つ目
2つ目は個人的なプロダクト作り。久しく個人でやってないのでまたやっていきたいなと(ネタは何個かある)。 あとは最近の家庭的な事情で(どこかの会社に所属しての)副業ができなくなったので、お金がほしい
3つ目
3つ目は運動。リモートワーク続きで割と体に影響が出始めているのでちょっとなんとかしたい。 マッチョになりたいとかではなく、普通に健康でいられるレベルで良いので適度に自重トレとかリングフィットをしていく。
- 主にスクワット
最後に
運動は別として、残りの2つはインプットとアウトプットのバランスを考えながらやっていきたい。 あとは地道にエンジニアとしての地力を上げつつ、別領域にも挑戦していきたい。