Redmine: View customize plugin の v3.0.0 をリリースしました

View customize plugin の v3.0.0 をリリースしました。

下記2つの対応を行っています。

  • Zeitwerk が有効になった場合に動作しない箇所の修正
  • ViewCustomize.contextにプロジェクトのIDを追加

Zeitwerk が有効になった場合に動作しない箇所の修正

Redmineのtrunkに最近入った下記対応でView customizeが動かなくなっていたので、動くように修正しました。
ファーエンドテクノロジーの前田さんからIssue、石川さんからPull Requestをいただきました。ありがとうございます。

Zeitwerk が有効になったことで、クラスのロードの仕組みが変わり、ロードに失敗していました。
なお、修正後のものは、Zeitwerk が有効になる前でも動きます。(元々の書き方があまり良くなく、Zeitwerkによってロードに失敗するようになった)

ViewCustomize.contextにプロジェクトのIDを追加

プロジェクトが1つしかない場合、プロジェクトのセレクトボックスがチケット編集画面で表示されないため、プロジェクトIDを簡単に取得する方法がありませんでした。
あまり使うことない(プロジェクトのidentifierは既に提供しており、たいていそちらで事足りる)のですが、プロジェクトIDの方がサンプルとして説明しやすいことがあったので、今回追加することにしました。

ViewCustomize.context.project.id で取得できます。

社内勉強会で「今からでも遅くないDBマイグレーション」というタイトルで発表しました

社内勉強会で「今からでも遅くないDBマイグレーション」というタイトルで、FlywayとSchemaSpyの紹介をしました。

FlywayはCLIツール&SQLで書くので、DBマイグレーションやっていなかったプロジェクトに途中から入れる時も敷居がとても低いと思います。 SchemaSpyはDB定義(特にリレーションシップ)を確認するのにとても便利なドキュメント生成ツールなのですが、これがなんでGitHubでスターが2K程度しかついていないのか理解できないくらいに便利です。

Online Bookmark Incremental Search の v2.0.3 をリリースしました

Online Bookmark Incremental Search の v2.0.3 をリリースしました。
大量のブックマークがあると、Chrome版でlocalStorage APIの制限(5,242,880バイト)に引っかかり、ブックマークが保存されないという問題に対応しています。

unlimitedStorage という権限を付けると、制限を回避できるので、それで対応しています。

問い合わせのあった方は、4万件のブックマークがあり、この制限に引っかかっていました。

Online Bookmark Incremental Search の v2.0.2 をリリースしました

Online Bookmark Incremental Search の v2.0.2 をリリースしました。
はてなブックマークで動作しなくなっていたのを修正しています。

Online Bookmark Incremental Search は、オンラインブックマーク(Google Bookmarks, Pinboard, はてなブックマーク)をインクリメンタルサーチする拡張機能です。
ChromeとFirefox版の2つをリリースしています。

Firefox側でのコメントで、はてなブックマークで動作しないってあったので、今回の問題に気が付きました。
はてなブックマークが常時https化されたタイミング(2019年5月28日)から動いていないと思うので、はてなブックマークで使っている人はいなさそうです。

Googleブックマークも今月末で終了なので、この拡張機能を使う人もほとんどいないのかもしれませんね、、

Rocket.Chatでファイルアップロードを頻繁に使うならば、アップロードしたファイルの保存先はデフォルト(GridFS)から変えた方が良い

Rocket.Chatでアップロードしたファイルの保存先は、最新(3.16.3)だと下記の5種類から選ぶ形になっています。

  • GridFS
  • FileSystem
  • Amazon S3
  • Google Cloud Storage
  • WebDAV

設定方法などは、下記にまとまっています。

デフォルトはGridFSです。GridFSでは、ファイルをチャンクに分割してMongoDBのドキュメントとして登録するので、新たな設定が不要(Rocket.ChatはMongoDBが必須)で手軽に使えるのですが、MongoDBに負荷を与えることにもなります。

そのため、Rocket.Chatでは、ファイルアップロードを頻繁に使うような場合にはGridFSの利用を推奨していません。

  • Recommendations for File Upload - Rocket.Chat Docs

    Though GridFS is used in rocket.chat for file storage because MongoDB offers this functionality with zero configuration but GridFS is not recommended for day to day file storage needs in a production environment because it puts an immense amount of load on the database.

Rocket.Chatがちょっと重たくなってきたとか、ファイルアップロードが遅かったり、エラーになったりするような場合には、GridFSを疑ってみると良いと思います。
デフォルトがGridFSなので、問題が起きて気が付く、、といった場合が多そうですね。Rocket.ChatのGitHubやForumでもGridFSに関する問題が何度かやりとりされているようでした。

GridFSからの変更ですが、FileSystemが一番手軽にできる変更だと思います。適当なフォルダ切って、Rocket.Chatからアクセスできるように権限を与え、Rocket.Chat上からフォルダを指定するだけです。再起動はいりません。
ただし、Rocket.Chatを複数台で運用している場合、すべてのRocket.Chatサーバから見て同じパスになるように設定(ネットワークフォルダ等)する必要があります。