こんにちは、教育系エンジニアのひらまつ(@hiramatsuu)です。
書籍「ゼロからわかる Linuxコマンド200本ノック(技術評論社)」の著者。Udemy受講者8万人。
プログラミング教育をメインに活動するエンジニアとして、動画教材の作成・技術書の執筆・学習アプリの開発などを行なっています(詳しくはこちら)。
本記事では、pub.devで目当てのパッケージを見つけるための、検索テクニックについて解説します。
先日公開した、パッケージの選び方についての記事と併せて活用すれば、快適なパッケージ利用ができると思いますので、さっそく学んでいきましょう。
※pub.devの検索によらず、Google検索など、あらゆる検索の場面で必要な考え方については、私のUdemyのコース「「検索戦略」入門【欲しい情報を最短時間で入手しよう!Google・GitHub 検索などで使える4つの戦略プロセスとは】」などを参照してください。
検索アルゴリズムについて
検索が実行されると、次のような手順で検索結果が表示される。
- フィルターを適用する
- フィルターを通過したものの中で、検索クエリにマッチするものを見つける
- ソートする
アルゴリズムの順番とはズレるが、検索クエリ→フィルター→ソートの順で解説。
検索クエリ
一番重要なのはやはり、検索ボックスにどのようなクエリを書くか。
単純なキーワード検索のほかに、pub.devでは次のような検索を行うことが可能。
"exact phrase"
:引用符内の正確なフレーズ(exact phrase)を含むパッケージを検索。デフォルトでは、似たフレーズを含むパッケージも、検索結果に含まれるが、「” “」で囲うことで、フレーズと完全一致する結果だけが表示される。package:<prefix>
:指定したキーワードから始まるパッケージを検索。例えば、「package:firebase_」と検索すれば、「firebase_」から始まるパッケージだけが表示される。dependency:<package_name>
:指定したパッケージに、直接依存するパッケージを検索。例えば、「dependency:share_plus」とすれば、share_plusパッケージに直接依存するパッケージだけが表示される。transitive dependencyやdev dependencyは含まれない。dependency*:<package_name>
:指定したパッケージに、なんらかの方法で依存するパッケージを検索。例えば、「dependency*:share_plus」とすれば、share_plusに直接依存するだけでなく、推移的に依存するパッケージや、dev_dependenciesで依存するパッケージも含めて表示される。topic:<topic-name>
:指定したtopicを持つパッケージを検索。publisher:<publisher-name.com>
:指定した発行者が公開したパッケージを検索。sdk:<sdk>
:指定したSDKをサポートするパッケージを検索(flutterまたはdart)。runtime:<runtime>
:指定したランタイムをサポートするパッケージを検索(web、native-jit、native-aot)。
フィルター
検索クエリだけでなく、フィルターを使うことで、検索結果を絞り込むこともできる。
本記事執筆時点では、次の画像のようなフィルターがある。
対応プラットフォームやSDK、ライセンスなどで絞り込みができる。
意味がわかりづらいものだけ、少し解説しておくと、
- Include unlisted:非推奨になったパッケージなど、デフォルトでは表示されないパッケージも含めて表示するためのフィルター。唯一、チェックを入れると検索結果が増えるフィルター。
- WASM ready:Web Assembly(Wasm)に対応しているパッケージを表示するフィルター。
ソート(並び替え)
検索結果は、次の画像ようなルールで、ソートすることが可能。
デフォルトは、search relevanceだが、これは次のような観点の組み合わせで計算される。
- 検索クエリとの関連性。
- パッケージ名
- パッケージの説明
- README
- ドキュメントコメントと識別子
- パッケージの評価指標。
- Popularity
- Likes
- Pub Points
- より詳しくはこちらの記事を参照
パッケージのソースコードは、大量のテキストを含むため、一般的な検索ワードを入れると、多くのパッケージがヒットしてしまう。そのため、このような複数の指標を使って、よりユーザーの期待に近い結果が出るように工夫されている。
より詳しくは、pub.devのリポジトリも参照。
その他の情報
Flutter開発についての、他の記事はこちらを参照。