Project

General

Profile

バグ #1145

README の「必須アプリ−ケーション」の Ruby バージョン表記が古い

Added by Izumi Tsutsui almost 2 years ago. Updated over 1 year ago.

Status:
終了
Priority:
通常
Assignee:
Target version:
プラグイン名:
ブランチ:
topic/1145-update-environment-requirements
クラッシュする:
No

Description

mikutter 3.6.0 から Ruby 2.3 以降のみのサポートになりましたが
READMEの「必須アプリケーション」の記載は以下のように古いままになっています。

  • 必須アプリケーション:
    - ruby (2.1 - 2.3)

……という pkgsrc のバグ報告が来ました。 http://gnats.netbsd.org/52884

READMEをどこまでリアルタイムに追従させるのかという話はありますが、
3.6.0 時点での必須アプリについて Ruby と gem とに分けて書いてみました。
README.diff

他にも直そうとするとエンドレスですが、どんなもんでしょう。


Files

README.diff (1.04 KB) README.diff Izumi Tsutsui, 2018-01-02 12:13

Associated revisions

Revision a3af31aa (diff)
Added by toshi_a 初音 almost 2 years ago

bundlerを利用していることを念頭に、READMEに記載している要件を変更 refs #1145

Revision 1c240abe (diff)
Added by toshi_a 初音 over 1 year ago

READMEに、依存しているgemについての説明を追記 refs #1145

History

#1

Updated by toshi_a 初音 almost 2 years ago

これを書いた当時は、ここに書いているgemくらいにしか対応していませんでしたが、今ではBundlerを利用することを前提に多数のgemに依存しているので、表記するのは現実的ではないで、Gemfileだけでいいと思います。様々なパッケージリポジトリで扱ってもらっている今、Gemfile{,.lock}は、この情報が本当に必要な人間にとっては読めるものだと思います。

RubyのバージョンもGemfileに書いてもよさそうですが、GemfileにRubyのバージョンを書くことには、あまりメリットがなかったと思うので多少調べて対応しない方向で考えます。

どちらにしても、READMEにこれらの情報を書くのはもはや混乱しか生まないため、削除することを検討しています。

#2

Updated by Izumi Tsutsui almost 2 years ago

直接関係ありませんが
https://mikutter.hachune.net/faq
のFAQでの動作条件も Ruby 2.1.0 以降になっていますね……

#3

Updated by toshi_a 初音 almost 2 years ago

  • Status changed from 新規 to レビュー待ち
  • Assignee set to Izumi Tsutsui

#1145-1 で言っていたことを a3af31aa でやりました。

ruby-gtk2が必要などは、パッケージマネージャでそれを入れることを前提に考えて書いていました。gtk2 gemはlibgtk2パッケージの依存関係でついてくるはずだというふうに考えていたということです。bundlerを使っていればそちらでruby-gtk2はインストールされてしまうため、これは成り立ちません。

言葉足らずだったため補足すると、同じ情報があちこち(READMEとGemfile)に散らばっていると、読む方も更新する方も大変なので、bundlerまたはパッケージマネージャを使ってmikutterをインストールする現代において、READMEにこの情報を書いておくのは本件のような問題を起こすだけなのではないかと思いました。

パッケージメンテナ的にはどうなんでしょうか。お互いにとってこれが最善と思ってやっているので、都合が悪いということがあれば教えてほしいです。

#4

Updated by Izumi Tsutsui almost 2 years ago

  • Assignee changed from Izumi Tsutsui to toshi_a 初音

立場によって見方がいろいろあると思うので、参照用につらつら書いてみます。
(注意:経験値ベースのみの話なので、知っている人から見たら見当違いのことを書いているかもしれません)

結論

  • 「bundlerまたはパッケージマネージャを使ってmikutterをインストールする」という前提では、一般ユーザーに対しては
    Ruby のバージョンについて「ruby :: Gemfile に記載されているRubyのバージョンを参考にしてください」と言及する
    だけで良いと思います
  • パッケージシステムのメンテナ(もしくはバグレポを送るような人であるが ruby にあまり詳しくない人たち)に対しては
    「必要な gem については Gemfile および core/plugin/*/Gemfile を参照してください」
    という言及があると助けになる、という気はします

パッケージシステムでの gem 依存の記述

  • bundler では Gemfile の記載に従って必要な gem のバージョンが適切に入る(んですよね?)

パッケージシステムで gem 依存関係の問題が出る原因

  • パッケージシステム管理者すべてが gem に詳しいわけではないので、
    upstream 側の変更として Gemfile 等で依存関係記載が更新されたことに気づかず
    パッケージシステム側の記載をミスっていることがある
    • 必要な gem がたまたま他のパッケージの依存関係で入ってしまっていると動いてしまうので、
      Live Image のようなまっさらな環境でテストしないと検出されなかったりする

自分自身は pkgsrc 担当として Gemfile や Rakefile の依存関係記載に差分がないかをチェックするようにしましたが、
ruby-gnome2 を見ると upstream のソースツリーから依存関係記載が漏れていることもある
https://github.com/ruby-gnome2/ruby-gnome2/issues/1107
ので、「必要な gem についての依存関係についてはまず Gemfile を見よ」という情報があると助かるかも、
というくらいです。

その他のパッケージシステム側都合

  • 一般に、パッケージシステムにおいては同一のパッケージの複数バージョンの共存というのが面倒なので、
    パッケージシステム独自の細工が入っていることはよくあります。
    • Gemfile で非互換指定があっても動いていそうであればむりやり Gemfile の依存関係記載を上書きする
    • 複数バージョンを共存する場合にパッケージ名を別のものにする(suffixを付ける等)

このあたりの問題になってくると mikutter 本体の問題なのかパッケージシステム側の問題なのか、
(つまり、 mikutter 自体をどうやってインストールしたのか)という話になってきます。

ArchLinux の AUR だと mikutter.3.6.x.tar.gz の tarball の vendor 以下のファイルを使っているとすると、
これはまたそういう前提で検証が必要になると思います。

#5

Updated by toshi_a 初音 almost 2 years ago

  • Status changed from レビュー待ち to 実装待ち

そういうことであれば、 a3af31aa

必要な gem については Gemfile および core/plugin/*/Gemfile を参照してください

のような記述を加えれば大丈夫そうですね。

#6

Updated by Izumi Tsutsui almost 2 years ago

本題からは少し外れますが

mikutter/Gemfile には

  gem 'json_pure', '~> 1.8'

と書かれているのですが、 require 'json_pure' しているファイルは無いようです。
twitter プラグインの中で require 'json' しているものはありますが。

json_pure gem は必要・不要 いずれでしょうか。

#7

Updated by toshi_a 初音 over 1 year ago

  • Status changed from 実装待ち to レビュー待ち
  • Assignee changed from toshi_a 初音 to Izumi Tsutsui
  • ブランチ set to topic/1145-update-environment-requirements

pushしました。確認お願いします。

json_pure

json_pureは現在も利用しています。json_pureは標準のJSONライブラリを、Rubyだけで書かれた実装に置き換えるために利用しています。

Twitterプラグインでは、マルチスレッドのデータ競合問題を起こしにくいJSONのパースはメインスレッド以外で行って、UI処理がブロックされないようにしているので全てRubyで書かれていることに価値があります。

しかし今はRuby1.8とは状況が大幅に異なっているし、サーバAPIが返してくる程度のJSONの処理にそこまで時間がかかるのかといった疑問もあります(なので、YajlやOjといったより高速なJSONパーサの存在を知っていて利用していません)。
一方でjson_pureを外してどのような影響が出てくるか調査するコストを払うことに特にメリットは無さそうだと思っているので、何もしていません。

パッケージするgemが一つ減って負担が軽くなるということであれば、十分やる理由にはなるかなと思います。

#8

Updated by Izumi Tsutsui over 1 year ago

  • Status changed from レビュー待ち to マージ待ち

テキストファイルなので差分確認しました。問題ありません。

json_pure

pkgsrc だと json_pure の指定方法がいつの間にか変わっていて
気がつくと json_pure が入っていない状態で mikutter を動かしていたのですが、
その状態でも動作自体は問題ありませんでした。

json_pure を入れた場合に処理負荷というかフィーリングが変わるかどうかはしばらく試してみます。
(といってもこのチケットはクローズされてしまうので、違いがなさそうなら別チケット入れます)

#9

Updated by toshi_a 初音 over 1 year ago

  • Status changed from マージ待ち to 終了

mergeしました。
JSONについては、何かあればおねがいします。

Also available in: Atom PDF