【ITニュース解説】I replaced 4 discontinued Flutter packages. Here's what I learned.
2026年10月22日に「Dev.to」が公開したITニュース「I replaced 4 discontinued Flutter packages. Here's what I learned.」について初心者にもわかりやすく解説しています。
ITニュース概要
Flutterの公式パッケージがサポート終了した後、著者は代替となる「Prism family」を開発した。この経験から、ユーザーの要望を汲み取り、保守性を重視した設計と徹底的なテストが重要だと学んだ。また、オープンソース開発では迅速なフィードバック対応が信頼につながると述べる。
ITニュース解説
ソフトウェア開発の世界では、様々な機能を持つ部品やツールを組み合わせてアプリケーションを作るのが一般的である。これらの部品やツールは「パッケージ」や「ライブラリ」と呼ばれ、開発の効率を大きく高める役割を果たす。Googleが開発したFlutterも、モバイルアプリやWebアプリなどを一つのコードで開発できる強力なフレームワークとして広く使われており、多くの開発者が活用している。Flutterプロジェクトでは、公式に提供されるパッケージだけでなく、世界中の開発者が作成したパッケージを利用することで、開発できる機能の幅が広がり、より迅速にアプリを完成させることが可能となる。
しかし、時には予期せぬ事態も発生する。最近、Flutterチームが公式に提供していた6つの重要なパッケージについて、そのサポートを終了するという発表があった。これは、これらのパッケージが今後、公式な更新やバグ修正、新機能の追加を受けられなくなることを意味する。これらのパッケージは合計で数百万回もダウンロードされており、多くの開発者が自身のプロジェクトで利用していたため、この発表は大きな影響を与えた。Flutterチームは具体的な代替策を示すことなく、「コミュニティでフォーク(既存のコードをコピーして、独自に開発を続けること)を立ち上げることを推奨する」とだけ伝え、多くの開発者は次にどうすれば良いか途方に暮れてしまったのである。
筆者は、まさにこの問題に直面した一人だった。自分が開発しているアプリで、提供終了となったflutter_markdownというパッケージを使ってマークダウン形式のテキストを表示する機能が必要だったのだ。自分の問題を解決するために、筆者は代替となるパッケージの開発を始めた。しかし、最初の代替パッケージを公開すると、他の提供終了パッケージについても多くの開発者が同様の「次に何を使えばいいのか?」という疑問を抱えていることに気づいた。このようにして、多くのユーザーが頼りにしていたパッケージが突如として消え、彼らが置き去りにされている状況が明らかになったのである。
この状況を受け、筆者は「Prismファミリー」と名付けた一連のパッケージ開発に乗り出した。これは、提供終了したパッケージの機能を引き継ぎ、さらに改善を加えた15個の純粋なFlutterパッケージ群である。ここで「純粋なFlutterパッケージ」とは、特定のオペレーティングシステム(OS)の機能に直接依存せず、iOS、Android、Web、デスクトップなど、すべてのプラットフォームで同じように動作することを意味する。このPrismファミリーの中から、筆者は特に提供終了した4つの主要パッケージ、すなわちflutter_markdown、palette_generator、flutter_adaptive_scaffold、flutter_imageの直接的な代替となるパッケージを開発し、公開した。これにより、多くの困っていた開発者に新たな選択肢を提供することができたのである。
この一連の経験から、筆者はソフトウェア開発、特にオープンソースプロジェクトにおける重要な教訓をいくつも得た。
一つ目の教訓は、「イシュースレッドは製品のロードマップである」ということだ。イシュースレッドとは、開発者がソフトウェアに関するバグ報告や新機能の要望を投稿する場所のことである。flutter_markdownが提供終了になった際、過去のイシュースレッドには何年も未解決のまま残されていた機能要望が山積していた。その中でも特に多くの開発者から求められていた「テキストの行数制限と、行を超える部分を途中で省略して表示する」という機能は、50件以上の賛同票を集めていたにもかかわらず、実装されることはなかった。筆者は代替パッケージの最初のリリースで、この最も要望の多かった機能を実装した。これは、特別な計画を立てなくても、ユーザーの声に真剣に耳を傾けるだけで、本当に必要とされている機能を見つけ出し、開発できることを示している。ユーザーが直面している課題や求めている改善点は、イシュースレッドという形で明確に示されているのである。
二つ目の教訓は、「機能性よりも保守性が重要である」という点だ。palette_generatorというパッケージが提供終了した際、Flutterチーム自身はmaterial_color_utilitiesという、より専門的で高性能なカラー処理ライブラリの使用を推奨していた。筆者は、提供終了したパッケージのコードを単にコピーするのではなく、このFlutterチームが推奨する新しいライブラリを基盤として、自身の代替パッケージを構築した。当時、他のコミュニティが作成したフォークの多くは元のコードをそのままコピーしていたが、より良い基盤の上に構築されたパッケージの方が、長期的に見て安定して動作し続けることが示唆された。これは、目先の機能を追加するよりも、将来の変更や改善に対応しやすい、しっかりとした設計(保守性)が、ソフトウェアの持続可能性にとって不可欠であることを意味している。
三つ目の教訓は、「提供終了パッケージの代替品をテストするのは難しいが、避けては通れない」ということだ。公式に提供されていた古いパッケージは、何年もの実運用を経て、多くのユーザーによって徹底的に検証されてきた。しかし、筆者が開発した代替パッケージはゼロからのスタートであるため、同様の信頼を築くには徹底的なテストが必要だった。例えば、画像処理を行うprism_imageパッケージのテストでは、ただプログラム上で模倣したデータを使うのではなく、実際にローカルでHTTPサーバーを起動し、ネットワークの失敗時におけるリトライ(再試行)動作を検証した。まだ一部、実際のデバイスでの検証が必要なテストも残っているが、その事実を隠さずに公開している。これは、テストが不十分な部分を正直に開示することで、開発者としての透明性と信頼性を高めようとする姿勢である。ソフトウェアが意図した通りに動作することを保証するためには、困難であっても多角的なテストを怠ってはいけないという教訓だ。
四つ目の教訓は、「オープンソースにおけるフィードバックループは、応答性が高ければ迅速である」という点だ。オープンソースプロジェクトでは、他の開発者からの提案や意見が、プロジェクトの改善に大きく貢献する。筆者が別のプロジェクトでプルリクエスト(コードの変更提案)を出した際、あるメンテナー(プロジェクトの管理者)から、筆者が考えもしなかったより良い実装方法を提案された。この提案を筆者がわずか一日で実装し直したところ、以前は「変更を要求」されていたレビューが、すぐに「承認可能」な状態に変わった。この経験は、他の開発者からのフィードバックに対して素早く、そして適切に対応することが、開発者としての信頼を最も手軽に、そして迅速に築く方法であることを示している。
筆者が開発したPrismファミリーは、提供終了したパッケージの代替という枠を超え、さらに進化を続けている。最近では、大規模言語モデル(LLM)のようなAIと連携するツールもこのファミリーに加えられた。これは、OpenAIやOllamaなど、様々なAIサービスと連携できる軽量なクライアントであり、prism_markdownと組み合わせることで、AIが生成したテキストをリアルタイムで表示するといったことも可能になっている。
もしあなたが、今回のパッケージ提供終了の影響を受けている開発者の一人であれば、Prismファミリーの各パッケージのREADME(説明書)に移行ガイドが用意されているので、ぜひ参照してほしい。また、もし何か問題点や改善点を見つけたら、イシューを登録することが、これらのパッケージをさらに良くしていくための最速の手段となる。これらの15個のパッケージはすべてMITライセンスという、非常に自由度の高いライセンスで提供されており、誰もが安心して利用できる。この一連の出来事は、ソフトウェア開発において、技術的な知識だけでなく、変化への適応力、コミュニティとの協力、そしてユーザーの声に耳を傾けることの重要性を教えてくれる。特に、システムエンジニアを目指す初心者にとっては、困難な状況に直面したときに、どのように問題を発見し、解決策を考案し、最終的にコミュニティ全体に貢献できるかという、貴重な実例となるだろう。