プロジェクト

全般

プロフィール

バグ #1145

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

Izumi Tsutsui6ヶ月前に追加. 3ヶ月前に更新.

ステータス:
終了
優先度:
通常
担当者:
対象バージョン:
プラグイン名:
ブランチ:
topic/1145-update-environment-requirements
クラッシュする:
いいえ

説明

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

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

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

関係しているリビジョン

リビジョン a3af31aa (差分)
toshi_a 初音5ヶ月前に追加

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

リビジョン 1c240abe (差分)
toshi_a 初音3ヶ月前に追加

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

履歴

#1 toshi_a 初音6ヶ月前に更新

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

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

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

#2 Izumi Tsutsui6ヶ月前に更新

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

#3 toshi_a 初音5ヶ月前に更新

  • ステータス新規 から レビュー待ち に変更
  • 担当者Izumi Tsutsui にセット

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

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

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

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

#4 Izumi Tsutsui5ヶ月前に更新

  • 担当者Izumi Tsutsui から 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 toshi_a 初音5ヶ月前に更新

  • ステータスレビュー待ち から 実装待ち に変更

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

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

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

#6 Izumi Tsutsui5ヶ月前に更新

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

mikutter/Gemfile には

  gem 'json_pure', '~> 1.8'

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

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

#7 toshi_a 初音3ヶ月前に更新

  • ステータス実装待ち から レビュー待ち に変更
  • 担当者toshi_a 初音 から Izumi Tsutsui に変更
  • ブランチ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 Izumi Tsutsui3ヶ月前に更新

  • ステータスレビュー待ち から マージ待ち に変更

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

json_pure

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

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

#9 toshi_a 初音3ヶ月前に更新

  • ステータスマージ待ち から 終了 に変更

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

他の形式にエクスポート: Atom PDF