カンファレンスに行っている中、黙々とデスクで仕事しています。開発におけるパッケージ管理についてです。製ツールの管理についても軽く触れます。統合により、これがデファクトスタンダートになっていく事が前提ですが、まだしばらくはサードパーティツールを利用していくことになる理由と個人的に気に入っている管理方法を書こうと思います。開発は他のプラットフォームの開発に比べて、エコシステムがあまり発達していない傾向にあると思います。年になっても、未だにベストプラクティスと呼べるような方法は見たことが無いですし、長年試行錯誤を重ねた今の方法でも十分に辛いです。この記事では、長期的にチームで運用していくことを想定して、開発速度や安定性のバランスを取り、個人的に最も良かった方法と其の理由をつらつらと書いていきます。ツールを管理していて、実際に弊社のいくつかのプロジェクトで採用している方法です。パッケージ管理に要求されることパッケージ管理と言っても、個々人で想像するものが異なると思いますので、個人的な要件を前述しておきます。定義に従って依存パッケージをインストールできる依存同士のバージョン衝突を解決することができる解決したバージョンで固定・共有し、再現性があるプロジェクトローカルにインストールし、ホスト環境を汚染しないframework(library)は事前ビルドできる併用するパッケージマネージャを最小限に抑える細かいことを書けば色々とありますが、大きくは上述を満たせて、且つ管理が楽な方法が個人的に思う「良い」パッケージ管理の要件です。それぞれのライブラリによって最も合うツールがあると思いますが、それら全てを併用してしまうのが最も安定しないので、意図的に避けてバランスを取るようにしています。開発におけるパッケージ管理において主軸になるべきファーストパーティツールです。なってようやくアプリ開発に利用できるようになりました。統合されることで実現されました。簡単な操作でライブラリを追加でき、アプリのビルド時に必要なライブラリが生成されていなければ同時にビルドしてくれるので、シンプルに利用できます。以下のファイルに記録されることです。ただでさえ複雑なプロジェクトファイルに依存まで書き込まれるのは少し厄介ですね。ビルドキャッシュのクリーンに伴って動かなくなったりします。してリンクされるので、リソースを含むライブラリには対応していません。開発できるようになるのはもう少し先。将来的に高度なビルドシステムを構築しようとするとすると少々障壁があるように思い、今の所採用は見送っています。ツールについては別です。ビルド・実行できます。指定すればファイルを分ける事もできます。どこかで見かけたのですが、ドキュメントはパっと探せませんでした。公式エコシステムで完結するのでおすすめです。ようなリソースを含むツールは利用できません。ツール側が対応していれば利用できるので、この点に関して有利です。全盛期の課題については、インターネット上に素晴らしい記事が複数ありますので、ここでは私が選ばなかった理由・難点についてのみ記載します。以前のプロジェクトでは下記のように、成果物をキャッシュしつつ利用して十分満足できていました。--cache-buildsしかし、利用期間が長くなって来て見えてくる難点として一つはバージョンアップによるデグレードが頻発する点です。自体がビルドできなくなることへの対応が辛かった記憶があります。系)などの理由で現在は利用していません。ついて言わずもがな、最も長い歴史と最も大きいコミュニティを持つパッケージマネージャです。華麗に解決してからはモダンな現場では下火になっています。ソフトウェアとしては大きなコミュニティによって活発に開発が進められているというのが最大の利点だと思います。言われることがありますが、最も多くの環境のプロダクションで実践試験済みであり、通常ではカバーしきれないほどのユースケースやバグに対応していますし、困った時は調べれば良い解決方法が見つかることが多いです。管理することができます。様々な形式のパッケージ管理を統合されているのは素晴らしいですね。インストールしています。対応して高速化されました。下のファイルに直接リンクの仕組みのためのスクリプトを勝手に挿入されるのもあまり快くはありませんが、他と比べて高度なリンクの仕組みを持つので目を瞑りましょう。スクリプトを介入できるので少々ハックなことをしなければならない場合に、特別な苦労をしなくて済みます。設定だけ変更しなければならないケースがあります。管理しつつ、事前ビルドすることができるという理想的な解決ができます。付けるだけで事前ビルドしてくれる夢のツールです。ツールもインストール可能という、かなり都合の良いパッケージマネージャになります。横断的な高速化が期待できます。導入するのをお勧めします。配布されているライブラリの導入に少し工夫するケースがありますが、総合的に見てかなり良いツールだと思います。利用したい場合はどうかというと、正直まだ時間を投資できていないのでなんとも言えません。利点の一つとして、インストール時にスクリプトが介入できるので、最も対応しやすいかと思っています。全て未確認ですが、いくつかプラグインもあるようです。辺りからは、あまり意識しなくても十分高速に起動しますので、一般的なアプリが利用するライブラリ程度の数のリンクではあまり差は出ないかもしれません。絶対ですが、これはライブラリ管理どうこうではなく異なると対応が必要になると思います。自体は最高のツールだと思いますが個人的には、お仕事でチーム開発をする場合はできるだけ避けるのが良いと思います。メンバー間での差異があり、失敗しやすく、ハマりやすいからです。取ってきた方がまだ良かったりします。デファクトスタンダードとして成長していくのが正しいと思いますが、実際の現場ではもう数年はサードパーティが生きていくのではないでしょうか。いうツールも少し気になっています。使うとことでライブラリ管理も解決できるかもしれません。安定した構成が作れるんじゃないかなーと夢想しています。最後にプロダクティビティとはちょっと外れた話題かもしれませんが、パッケージ管理に対する私見を書きました。それほど熱心に調べ切った内容ではなく、最近はアプリ開発から少し離れているので、誤った内容があるかもしれません。参考にする程度にしていただければと思います。チームや利用しているパッケージの種類によっても最適解は異なると思いますので、良ければ皆さんのチームでのやり方も是非教えて下さい。