-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
自分用の gem template を作る #75
Comments
Follow f55c749 ref: kachick/times_kachick#75
For a preparation part of * kachick/times_kachick#23 * kachick/times_kachick#75
test-unit と rspec 混合の形で作った https://github.com/kachick/ruby-gem-template 以降はこいつを適宜 update する感じでやっていく。 |
ついこないだ rubocop に入ったみたいだけど、rubocop/rubocop#11469 で現在進行系で議論されてるので、デフォルトに残り続けるかはどうなんだろうか。 本家の discussion は止まっているし rubygems/rubygems#5065 |
何らかの結論があるわけではないのですが、かつて Asakusa.rb で情報収集した以下の議論メモは何らかの参考にする可能性があります。 まだデフォルト問題に対して個人の好みを超えた解決案を持っていないため、見守っているところでした。 |
おぉ、この件で調べてたときに確かあたったと思われるブログの著者から直接返信が 🙏 ありがとうございます。 個人的に add_development_dependency を使うメリットは rubygems.org で他の gem へのリンクが貼られるぐらいしか感じていなかったんですが、なるほど複数 Gemfile 時の共通化部分として利用ですか。 自分が複数 Gemfile 持つ時は Gemfile 内で依存gemのバージョンを分ける事が多かったので、その用途が使用できるシーンは無かったのかな・・・? 一時 add_development_dependency にバージョン抜きで記述して、 Gemfile 側に詳細なバージョン入れたりもしてたんですが、あまり意味ないですもんね・・・ |
* Update rubocop requirement from ~> 1.43.0 to ~> 1.44.1 Updates the requirements on [rubocop](https://github.com/rubocop/rubocop) to permit the latest version. - [Release notes](https://github.com/rubocop/rubocop/releases) - [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md) - [Commits](rubocop/rubocop@v1.43.0...v1.44.1) --- updated-dependencies: - dependency-name: rubocop dependency-type: direct:development ... Signed-off-by: dependabot[bot] <[email protected]> * Update gemspec in examples See below issues rubocop/rubocop#11469 https://github.com/rubygems/rubygems/discussions/5065 kachick/times_kachick#75 (comment) https://koic.hatenablog.com/entry/gemspec-vs-gemfile-for-development-dependency-gems Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Kenichi Kamiya <[email protected]>
Extracted from #72
bundle gem
の出力が個人的にはそのまま使えるものじゃない事がわかったので、自分用の template repository を作っておく (そういや昔こんなの作ったな、結局それの refine 的な感じだ。)bin/
以下が含まれてる事が多くて、まず「不要」だよねというのと、「executables」になってるとよろしくないという話 #80 はやべえなと思ったので、ちゃんと見直したい。なんでも ハイハイ とりあえず押してみたら、これだけ生成された。テストフレームワークは test-unit を選んだ。 CI まで選べるのびっくりした。
そして生成された
.rubocop.yml
を見てみたらとなっていて、「無いな」という気持ちになった。
え、なに、 double_quotes 推奨なの? ruby style guide とか rubocop 標準でも無い気がするんだけど、敢えて?わからん・・・
とりあえず Default disabled じゃなくて ダブルクォート強制してきて line length 制限がある時点で、自分だったら関わりたくなくなってしまう。まぁ 80 文字とかじゃなくて 120文字 だから、それほどおかしくもない・・・か?いやー、でもその辺は「適当にやるから lint とか要らんわ」と思ってしまうな。 JavaScript の prettier 程浸透してたらもはや何も考えない気がするけど
.gitignore は、とてもシンプル。 GitHub の .gitignore とかと比べて大分少ないが、 「gem」 なのに Gemfile.lock を ignore しないのはどういう理屈なんだ?
CODE_OF_CONDUCT.md は一応生成してみたが、とりあえず当面使う気ない #61 ので、細かく見ない
生成された test-unit のテンプレートは、 VERSION を const_defined? で見ているのがちょっと気になった。これは、なにか深い意味が有るのか・・・? 文字列じゃなくて提供することもあるとか? 自分は https://github.com/kachick/ruby-ulid/blob/5f3bc32328811a13bf0ce81e05b5336d318063f0/test/core/test_ulid_class.rb#L22-L28 こんな感じの test をしているんだが。
Rakefile は、まぁ特に新しい発見ないかな・・・と思ったら、1行目が気になった。
#!/usr/bin/env rake
みたいな shebang が無いのである。rubocoo-rake とやらで permisson 不足を怒られてなるほどハイハイと付けたりしてたのだが、たしかに というか、別に Rakefile を直接叩く事なんて無いか・・・ 自分の shebang は一体いつどこからどう来たのかしらないが、とりあえずこれは確かになくて良いのかなという気がした。
ライセンスに関しては、ファイル名に「.txt」がついてるのがちょっとした発見だった。
前から付けたほうが良いのでは?と思ってたが、大半のプロジェクトで拡張子付けてない気がするので自分も付けないようにしていた。
が、 https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/creating-a-repository-on-github/licensing-a-repository 見てみると「.txt」を第一に推奨している。「.md」は「無いな」と思っているけど、つけるか付けないかに関しては自分も「.txt」つけるようにしようかな
README.md には何も参考になるところなさそう。
Gemfile にバージョンまで書かれていて、 gemspec にはなにもない。 #72 に書いた。
これは、やっぱ Gemfile にまとめるのが良いんだろうなー。そうするかー。
しかし、この定義はどうなんだ? rake, test-unit, rubocop とどれも runtime dependency じゃないと思うんだけど グルーピングせずに書いてるのはそういうもんなんだっけ・・・?
肝心の Ruby コードはこんな感じになってて、あ、やっぱ
class Error < StandardError; end
を作るのは相変わらず常識的な感じで良いのかな?とちょっと思った。ただ頭で version を require していて、まぁ普通だと思うんだけど、これだと今の irb の show_source で version 定義しか出なくなっちゃうんだよな・・・まぁ、irb 側を直すべきで、コード側が気にする話じゃないというのはそれはそう。
.github 配下には、こんな action 定義が一つだけ。 matrix とか最初から定義しておいたほうが親切では?と思ったがまぁいいか。とりあえずこれから学ぶことはなさそう。
dependabot 定義も追加しておいたほうが今どき親切ではとは思った。(ならPR出せという話ではあるが・・・)
bin/setup はこうである。いろんなリポジトリでこれ見るんだけど、手作業で? bundle install させるのと比べてなにかメリットが有るのだろうか。 bundle install 以外になにか色々必要な時ように、ここへまとめておけと言うぐらいの話なのかなー
さて、肝心の gemspec だが・・・あまり特別な感じはない。 description には summary より長い事書くはずだと思うんだけど、 rubygems.org はあんまそれを想定してない気がしてもにょる。
required_ruby_version の指定に文字列じゃなくて Gem::Requirement を使ってるのかー。ふーむ・・・Ruby のバージョニングが辞書順比較出来なくなる日は来ないと認識してるんだけど、一応か?
metadata は最近知ったけど、 allowed_push_host は知らんかったな。https://qiita.com/tossh/items/08e7165e730dbc1a0e2e ははぁ、会社内 gem とかでは使うと堅いみたいな感じかな。
files の指定に git ls-files 使ってて、おいおい結局この辺のベストプラクティスはなんなんだ?と思った。
#73, kachick/ruby-ulid#154 この辺で詰まって https://www.codinginthecrease.com/news_article/show/350843-using-git-in-your-gemspec こことか見て、確かに rails とかもそうしてるみただしな・・・と、基本的に Dir の glob とか使ってロードするようにしたんだけど、どうも気持ち悪い。やっぱ git 管理分だけがパッケージングされるよという安心感は強いと思っているので、個人的には dependabot が死なないよう回避しつつ git ls-files でフィルタリングをするような感じにするのが現状ベストかなと思っている。 https://github.com/kachick/ruby-ulid/blob/73df9f784e5d6444a6daccef314683ee62390435/ruby-ulid.gemspec#L49-L54 を更に書き換える感じで。
で、 bindir ってのは知らなかったな。こいつがなくても PATH に executable 入っちゃうと思うんだが、入れるとなにかメリットが有るのだろうか?
そしてまぁ、その bindir も executables も
exe
前提である。#80 みたいな話はどこから来たのか・・・https://docs.ruby-lang.org/ja/latest/class/Gem=3a=3aSpecification.html ちょっとここ見てみたら大量のオプションがあった。多分過去の遺物みたいなのもいっぱいあるんだろうけど、目を通したほうが良いのだろうか・・・ => 見たよ。でもそんなに有益そうなのは無かった。
test_files が無いのは https://pocke.hatenablog.com/entry/2020/10/24/171955 見て知ってた。 rubygems/guides#90 でguideから消えたみたいだけど、後方互換性のためとはいえなんの warning も出さずに値を設定できてしまうフィールドがずっと残るのはどうなんだろうなぁ・・・
rubygems/bundler#3207 👀
さて、前回はtest-unitだったわけだけど、rspecも適当に使いたい時があるのでrspec選んで作ってみようと思ってもっかい
bundle gem another_gem_name
を叩いたら、インタラクティブなのが何もなく、前回と同じ設定で作られてしまった。bundle config
を叩くとわかるが、一度選んだものはグローバルに設定が保存されるらしい・・・これさぁ・・・要るかぁ?gemなんて毎回結構要件とか変わるもんじゃない?しかもbundle config unset
がパターンを受け取ってくれないっぽくて、手動で全部消す羽目になった・・・だ、だめだ。 bundler に対して苦手意識ばかり募ってゆく・・・まぁ、どうせ template 自作して bundle gem を頻繁に叩くことはなくなるようにしようとしてるわけだから深く考えないことにする。
今度は rspec 以外殆どパスしてこんな感じだ
全部の差分を見るつもりはないが、rspecに関わりそうなところを見に行く。
Rakefile
Gemfile
.rspec
ここまでは、まぁそんなもんか?と思った。 rspec の --color は適当だった気がするので、これは貰っておくか。
--format documentation を自分が積極的に使うことはない気がする。
.gitignore
え、
.rspec_status
なんて生成されることがあんの・・・?見たこと無いし、ぐぐってもあんま情報無いんだけど・・・https://github.com/search?q=org%3Arspec+.rspec_status&type=code
よくわからんけど、 outdatd な気がするな・・・
spec_helper.rb
disable_monkey_patching! は自分も付けるようにしてる。
そしてここで .rspec_status が出てきた。ファイル名自体は何でもよくて、 example_status_persistence_file_path の方が大事なのかな。
https://github.com/rspec/rspec-core/blob/ea8554afd1a2b63677c6593059fa8f2476181deb/spec/rspec/core/world_spec.rb#L233-L248 全くわからん。
https://qiita.com/igrep/items/cd1d2ba8ce5ccb6f5f44#33%E3%81%A7%E3%81%AE%E5%A4%89%E6%9B%B4-core-new---only-failures-option
おーなるほど?んー、大規模プロジェクトでは確かに便利な感じがあるな・・・覚えてはおこう。
syntax = :expect
は、多分そんな感じだろうと思ったけど、やっぱ expect に限定する感じか。 https://relishapp.com/rspec/rspec-expectations/docs/syntax-configurationdisable_monkey_patching! がカバーするのでは?と思ったけど、 should の記法増えたみたいな話聞いた気もするしそれを防ぐ感じなのかな?まぁ、自分も ruby/spec 以外で should 使った記憶がないので入れておくか。
VERSION の確認の仕方が、test-unitのときより雑である。もうこれは、適当にやってくれということなのだと理解した。
というところで、大体今の
bundle gem
からは学んだ気がする。正直言ってあんまメンテされてない感を受けるんだが・・・まぁいいか、知らないや。The text was updated successfully, but these errors were encountered: