[JAVA] Réfléchir lors de l'introduction d'une nouvelle bibliothèque

Cet article est le 17e jour du Calendrier de l'Avent des nouveaux ingénieurs diplômés 2019 2019.

TL;DR

Préface

J'ai commencé à travailler en tant qu'ingénieur le 1er octobre 2018. Je suis une personne de 19 ans, je vais donc l'afficher sur ce calendrier de l'Avent.

Dans cet article, je résumerai les "idées lors de l'introduction d'une nouvelle bibliothèque" que j'ai acquises au cours du développement pendant plus d'un an.

Je viserai autant que possible le contenu général, mais le langage est Java / Kotlin (= système JVM), utilise le système ʻIntellij ʻIDE, et utilise une sorte de cadre (par exemple SpringBoot). J'écrirai sur le principe.

De plus, puisque cet article est une conclusion tirée de ma propre expérience, veuillez commenter si vous avez des opinions.

Pensez si vous avez besoin de regarder

Le premier est la décision de rechercher l'implémentation de quelqu'un d'autre ou de l'écrire à la main. Si je suis coincé dans les trois points suivants, j'essaie de trouver l'implémentation d'une autre personne.

--Easy et son implémentation peuvent apparaître en grand nombre dans le projet (= on peut s'attendre à ce que quelqu'un fasse ʻUtil`) --Une norme solide a été définie pour le processus que vous souhaitez effectuer (= facile à créer une bibliothèque) ――C'est pénible d'écrire par soi-même (= ~~ je ne veux pas travailler ~~)

Vérifiez si la bibliothèque doit être installée

Si je décide de rechercher l'implémentation de quelqu'un d'autre, j'essaie de voir si je dois installer la bibliothèque ensuite.

Vérifiez s'il est dans la fonction attachée à la langue

Vous devez d'abord rechercher les fonctionnalités qui accompagnent le langage (bibliothèque standard).

Les fonctions qui accompagnent le langage sont extrêmement stables et fiables, et il n'y a presque aucune situation dans laquelle elles ne peuvent pas être utilisées. De plus, en particulier dans «Java», diverses fonctions sont définies sous le paquet «java», il existe donc de nombreuses situations où il peut être utilisé.

Cependant, vu la situation, il sera nécessaire de prendre une décision appropriée telle que "Vous pouvez le faire sans installer la bibliothèque, mais vous osez l'installer" (par exemple "Java8-> Java11` a des paquets qui disparaissent, donc il y a des paquets qui disparaissent". Faciliter les mises à jour en utilisant une bibliothèque ").

Rechercher dans la bibliothèque installée

Si vous parvenez à la conclusion que cela ne fait pas partie des fonctionnalités fournies avec le langage, il est judicieux de rechercher la fonctionnalité dans la bibliothèque que vous avez installée. Les raisons sont les trois points suivants.

  1. Le projet doit être proche de la configuration minimale
  2. La bibliothèque elle-même et les dépendances qu'elle utilise sont considérées comme fiables (en particulier les bibliothèques dont dépend le framework).
  3. Même les bibliothèques utiles ne sortent pas toujours en recherchant

Quant à 1, j'ai vécu une situation où quelque chose change en fonction de la compatibilité entre les dépendances, donc pour éviter des problèmes aussi profonds, je n'introduis rien de nouveau autant que possible, et celui qui se rapproche de la configuration minimale est dans l'état L'idée est qu'il vaut mieux le finir.

Deuxièmement, parce que le framework a tellement de fonctionnalités qu'il peut être réutilisé dans certaines situations, ou que les bibliothèques dont dépend le framework peuvent en contenir des utiles. De plus, comme il est peu probable que le framework change et que les bibliothèques dont dépend le framework changent, il est considéré comme sûr d'utiliser les fonctions qu'il contient.

Concernant 3, il y avait des occasions où je regrettais les informations qui sortaient même après la recherche, comme être obsolète ou ne pas être la meilleure, alors il serait préférable de regarder d'abord à l'intérieur de mon projet. Parce que c'est facile. Dans un exemple extrême, il y avait une scène telle que "C'est une bibliothèque qui est adoptée par un framework super célèbre et qui est en fait utile, mais elle n'apparaît pas même si vous la recherchez. Seuls 4 articles sont publiés sur Qiita."

Comment trouver

Même si vous dites "cela peut être utilisable", il est inefficace de lire le texte intégral du code source ou de rechercher tous les paquets dépendants, il est donc recommandé d'utiliser la fonction de recherche de ʻIDE`. Je vais.

Par exemple, dans la série ʻIntellij ʻIDE, vous pouvez effectuer une recherche ambiguë à partir du projet entier en appuyant deux fois sur Shift. À ce stade, en cochant ʻinclure les éléments non-projet`, vous pouvez également effectuer une recherche à partir de packages dépendants.

L'image est le résultat d'une recherche ambiguë avec un mot approprié. Vous pouvez voir que le contenu de divers packages a été extrait.

スクリーンショット 2019-12-15 17.09.22.png

Si vous ne le trouvez pas, il est recommandé d'essayer une recherche en introduisant le vocabulaire sorti par google.

De quelle dépendance est appropriée pour installer la bibliothèque

Il y a aussi une scène où «quand je l'ai recherchée, il y avait des implémentations équivalentes dans plusieurs bibliothèques». Dans de tels cas, je choisis les priorités suivantes.

  1. Inclus dans le corps du cadre
  2. Liés aux dépendances du framework
  3. Moins susceptible de jeter la bibliothèque

Rechercher / sélectionner une bibliothèque

Si vous ne l'avez pas encore trouvé, envisagez d'installer une nouvelle bibliothèque.

Dans la plupart des cas, vous trouverez une bibliothèque que vous pouvez utiliser au moment de la recherche. Cependant, je pense que vous devriez décider soigneusement si vous souhaitez introduire la bibliothèque.

Après avoir confirmé sa publication sur Maven Central etc., je vérifie au moins les 3 points suivants [^ doc] avant d'installer la bibliothèque.

--Licence

[^ doc]: La richesse de la documentation peut être un facteur important, mais je l'ignore car il y a probablement d'autres documentations si vous pouvez la trouver en cherchant. De plus, dans mon cas, je peux généralement trouver «idée» et lire le code moi-même, donc je n'ai pas beaucoup de problèmes car je n'ai pas la documentation.

Licence

Tout d'abord, à propos de la licence de la bibliothèque.

Certaines licences nécessitent la publication du code source du logiciel à l'aide de cette bibliothèque. Que vous compreniez et acceptiez cette obligation, ce n'est pas une bonne idée qu'un logiciel commercial soit soudainement obligé de publier l'intégralité du code source.

Pour éviter ces risques inutiles, vous devez d'abord vérifier la licence.

Articles que j'ai utilisés comme référence

Situation d'utilisation

Vient ensuite le statut d'utilisation de la bibliothèque.

Quelle que soit l'utilité d'une bibliothèque, si elle n'est pas utilisée très souvent ou si elle a un bref historique, vous pouvez vous attendre à des bugs et à des changements drastiques soudains. Par conséquent, si vous voulez la stabilité, vous ne devez pas utiliser une bibliothèque dont l'état d'utilisation ne peut pas être confirmé.

Méthode de confirmation

A titre d'exemple, voici comment vérifier depuis la page de la bibliothèque Maven.

Vous pouvez vérifier l'historique de la bibliothèque à partir de Date, à quel point le projet est utilisé à partir de ʻUsages, et à partir de quel projet il est utilisé. L'image est le résultat d'une bibliothèque appelée ʻunbescape. Vous pouvez voir qu'il a une longue histoire et est utilisé par des frameworks bien connus comme Thymeleaf.

スクリーンショット 2019-12-16 17.00.31.png スクリーンショット 2019-12-16 17.03.53.png

Statut de maintenance

Certaines bibliothèques peuvent ne pas être actuellement maintenues. Si vous utilisez une telle bibliothèque, vous devez l'éviter car il y a un risque que le bogue ne soit pas corrigé ou que la vulnérabilité reste intacte.

De plus, il est prudent d'éviter les bibliothèques développées par des individus car il y a un risque que vous ne sachiez pas quand la mise à jour s'arrêtera et que la mise à jour apportera soudainement des changements drastiques.

Vulnérabilité

Les bibliothèques sont souvent vulnérables et certaines peuvent révéler un certain nombre de vulnérabilités graves en quelques mois (par exemple, Jackson). Si la bibliothèque que vous utilisez s'avère sérieusement vulnérable et qu'il devient difficile de la réparer, vous devrez faire beaucoup d'efforts pour la jeter quelque part.

Pour éviter cette situation, je pense que vous devriez choisir une bibliothèque avec un bon entretien.

(Bonus) Bibliothèque recommandée

Bien qu'elle soit limitée à JVM, si vous ne trouvez pas une bibliothèque qui puisse répondre aux critères jusqu'à présent, ou si vous en trouvez plusieurs et que vous vous perdez, nous vous recommandons la bibliothèque de types ʻapache. Il existe différentes bibliothèques telles que ʻapache commons, et tous les éléments introduits jusqu'à présent sont satisfaits.

Résumé

Dans cet article, nous avons résumé les idées pour introduire une nouvelle bibliothèque.

Je l'ai écrit dans le désordre, mais en résumé, cela signifie: "Cherchons à partir d'un endroit où il y a une faible probabilité que la situation" Je veux changer cela "se produise plus tard."

C'est peut-être exagéré, mais si vous introduisez quelque chose de nouveau, il est préférable de juger s'il survivra dans une période de 3 ans et 4 ans. Plus le remplacement est important et difficile, plus le risque doit être évalué avec soin.

J'ai l'impression d'avoir perdu mon emprise, mais j'espère que cet article vous a aidé.

Recommended Posts

Réfléchir lors de l'introduction d'une nouvelle bibliothèque
Présentation de la bibliothèque
[Android] Une histoire qui a trébuché lors de l'introduction de ZXing, une bibliothèque de fonctions de code QR
Erreurs lors de l'introduction de bcrypt
Ce à quoi j'étais accro lors de l'introduction de la bibliothèque JNI
[Rails] Lancer un nouveau projet
Une note lors de l'examen de Javalin
Erreur lors de l'introduction de l'authentification SNS
Éléments à prendre en compte lors du choix de l'architecture d'un nouveau système
Règles de dénomination lors de la création de nouveaux contrôleurs et modèles avec rails