Qbs 2.1 リリース

 本稿は「Qbs 2.1 released」の抄訳です。

Qbs build toolのバージョン2.1.0がリリースされた。

Qbsはコミュニティ主導の、言語に非依存ビルド自動化システムです。Qbsは高速で、QMLをベースとした学習しやすい言語を提供しています。

新機能

2.0リリースがJavaScriptバックエンドの切り替えが主な内容であったように、今回のリリースも実装の大幅な書き換えですが、ユーザーにより直接的な影響を与える内容となっています。

プロジェクト解決の新しい実装

新しいソフトウェア・プロジェクトが概念実証から実際の製品になる際には、より専門的なアプローチをとることが重要とされています。汚くてハチャメチャなプロトタイプを捨て去り、すべてをゼロから実装し、美的に美しいアルゴリズムと、目が眩むほどピカピカのコードだけを用いるのが望ましい習慣とされています。

現実の世界では、締め切りやリソースの制約、怠け者の開発者などの要素が存在します。そのため、最初の公式なqbsリリースでは、ソリューションコードを完全に書き直すという決断は行われなかったのは理解できることでしょう。

結果として、オリジナルのコードはそのまま残り、十分な検討を受けることなく、ますます多くの機能を背負わされることになりました。

「しかし、なぜユーザーとして私が気にしなければならないのでしょうか?」とお尋ねになるかもしれません。それは当然の疑問ですが、コードの複雑さとパフォーマンスの間には重要な関係があるのです。コードが単純でなければ、明確なバグが含まれる可能性が高まるだけでなく、非効率な動作も顕著になることが多いのです。なぜなら、その多くの気を取られる要素の中で、パフォーマンスの落とし穴を見つけることができないからです。

実際、このようなパフォーマンスの問題が、プロジェクトの解決コードをゼロから書き直すという決断につながりました。謎めいた再帰的なコードの奥深くに、非線形の動作が潜んでいることが明らかになったからです。念のために説明すると、「プロジェクトの解決」とは、qbsファイルのテキスト表現をビルドグラフに変換する段階であり、その後に実際のビルドが開始されることを意味します。

では、その結果はどうなったのでしょうか?開発者の観点からは、人々が理解できるコードが得られ、潜在的な貢献者を遠ざけることはなくなりました。また、ユーザーは、中程度から大規模なプロジェクトを解決する際にかなりの高速化を実感するはずです。例えば、Qt Creatorのqbsプロジェクトファイルの読み込みが約40%高速化されました。さらに、モジュール間や製品間の依存関係が深く複雑なプロジェクトでは、90%以上の高速化が見られました。これまでプロジェクトの解決が遅いと感じていた場合、このリリースによって問題が解消される可能性が高いです。

その他の変更点

このリリースにおける修正と機能の完全なリストについては、変更履歴をご覧ください。

今後について

新しい実装のもう1つの良い点は、以前はまったく不可能だった並列化が可能になったことです。この点については現在調査中であり、うまくいけばさらなる大幅なスピードアップが期待できます。(なお、ここでの話はプロジェクトの解決に関するものであり、実際のビルドはもちろん既に並列化されています)。

ぜひお試しください

Qbsはダウンロードページから入手できます。

不具合の報告については、バグトラッカーをご利用ください。

ライブな議論には、ディスコードサーバーに参加していただけます。質問や議論はメーリングリストもご利用いただけます。

ドキュメントwikiも参考になる情報があります。

Qbsはいくつかのパッケージリポジトリ(ChocolateyMacPortsHomebrew)からも入手可能で、リリースごとにQbs開発チームによって更新されます。また、多くのLinuxディストリビューションのネイティブパッケージ管理システムからもインストールできます。repology.orgにて完全な概要をご確認いただけます。

Qbs 2.1.0はQt Creator 11.0.0にも含まれています。

貢献してみませんか

もしQbsの満足度が高いユーザーであれば、ぜひ他の方々にもお知らせください。また、何か貢献したいとお考えかもしれません。Qbsをより良くするためには、あらゆる貢献が大歓迎です。バグの報告や直しも歓迎しますし、新機能も喜んで受け付けます。あなたのパッチは、私たちのCIボットによってLinux、MacOS、Windows上で自動的にサニティチェック、ビルド、検証されます。詳細な手順はQbs Wikiをご覧ください。

2.1リリースを可能にしてくれた皆様に感謝いたします。

  • Andrey Filipenkov
  • Christian Kandeler
  • Denis Shienkov
  • Ivan Komissarov
  • Marc Mutz
  • Raphael Cotty
  • Thiemo van Engelen

Blog Topics:

Comments