ćŖććøć§ćÆćęåćå¦ćć§ćććØćåæ ćć©ććć§ćDI(Dependency Injectionļ¼ä¾åę§ć®ę³Øå „)ććØćććÆć¼ćć«åŗä¼ćć¾ććęåćÆåŖęć®ććć«é£ććčćććććććć¾ćććććć®ę¬č³ŖćÆćØć¦ćć·ć³ćć«ćććććÆć©ć¹ćåæ č¦ćØććéØåććå¤ććå·®ćęæććććå½¢ć§ęø”ćć¦ćććććØććčØčØęę³ć«éćć¾ććć
ćć®čćę¹ćčŗ«ć«ć¤ććØććć¼ćæćć¼ć¹ę„ē¶ćWeb APIć«åćęæććććę¬ēŖć³ć¼ććäøåå¤ććć«ćć¹ćēØć®ć¢ććÆć«å·®ćęæććććØćć£ćęä½ććé©ćć»ć©ć¹ć ć¼ćŗć«ć§ććććć«ćŖćć¾ćććčØčØć®ć»ć³ć¹ćććäŗŗććØč©ä¾”ćććå®åćØć³ćøćć¢ć«ćŖćććć®ćęåć«ćć¦ęéč¦ć®ē»ē«éććććDIć§ćšŖāØ
ććØćć°ćć¦ć¼ć¶ć¼ę
å ±ćē»é¢ć«č”Øē¤ŗććServicećÆć©ć¹ććććØćć¾ćććć®ćÆć©ć¹ć®äøć§DBUserRepository()ćē“ę„__init__ć§ēęććget_user_by_id()ćå¼ć³åŗćć¦ćć¼ćæćåå¾ćć¦ćććØććććServicećÆć©ć¹ćÆćDBUserRepositoryćÆć©ć¹ć«å¼·ćä¾åćć¦ćććē¶ę
ć§ćć
ćć®čØčØć®ä½ćććŗćććØćććØććć¼ćæć®åå¾å ććć¼ćæćć¼ć¹ććWeb APIć«å¤ććććŖć£ćē¬éćServicećÆć©ć¹ę¬ä½ć®ć³ć¼ććęøćęććåæ č¦ćåŗć¦ććē¹ć§ćććÆć©ć¹åćéććć”ć½ććåćéććå¼ę°ćéćā¦ćććå¤ę“ććććØćććØććµć¼ćć¹ćÆć©ć¹ć®äøčŗ«ćäøę°ć«ęøćē“ćć«ćŖćć¾ćććććÆć”ććć©ćå¤éØć©ć¤ćć©ćŖć使ćććć«ćć©ć¤ćć©ćŖć®äøčŗ«ćęÆåęøćęććŖććØåććŖćććØčØććććØćć®éåęć«ä¼¼ć¦ćć¾ćć便å©ćŖéØåćÆć使ćå“ć®ć³ć¼ććę±ććć«å·®ćęæććććć¹ćć§ćš§
Pythonć«ćÆå³åÆćŖćć¤ć³ćæć¼ćć§ć¤ć¹ćę§ęćÆććć¾ććććabcć¢ćøć„ć¼ć«ć®ABCMetaćØ@abstractmethodć使ćććØć§ćę½č±”åŗåŗćÆć©ć¹ćØćć¦åćå½¹å²ćęććć¾ćććć¦ć¼ć¶ć¼ćć¼ćæćåå¾ćććÆć©ć¹ćÆćåæ
ćget_user_by_id(user_id)ćØććć”ć½ćććęć¤ććØććØććć«ć¼ć«ćUserRepositoryćÆć©ć¹ć«å®ē¾©ćć¦ććć¾ćć
SQLitećććć¼ćæćåć£ć¦ććDBUserRepositoryćÆć©ć¹ćØćWeb APIććåć£ć¦ććAPIUserRepositoryćÆć©ć¹ććććććUserRepositoryćē¶ęæććå½¢ć§å®č£
ćććć§ćć¦ć¼ć¶ć¼ćć¼ćæćåå¾ććććØććå
±éć®č²¬åććē°ćŖćęꮵć§ęćć2ć¤ć®å®č£
ćå®ęćć¾ćć
ServicećÆć©ć¹ć®__init__ć§å
·ä½ćÆć©ć¹ćēęććć®ć§ćÆćŖććå¤ććUserRepositoryåć®ćŖććøć§ćÆććå¼ę°ćØćć¦åćåććć¤ć³ć¹ćæć³ć¹å¤ę°ć«ä»£å
„ćć¦ććć¾ćććććć¾ćć«ćä¾åę§ć®ę³Øå
„ćć®ć³ć¢ćServicećÆć©ć¹ćÆćć¦ć¼ć¶ć¼ćć¼ćæćåćććŖććčŖ°ć§ććććććØććę½č±”ēćŖē“ęććØć«ć ćä¾åćććć¼ćæåå¾ć®äøčŗ«ćÆäøåē„ćć¾ććć
å¼ć³åŗćå“ć§ććmainé¢ę°ć§ćÆćē®ēć«åæćć¦APIUserRepository(url)ćDBUserRepository(connection)ćēęćććććService(user_repository)ć«ęø”ćć¾ććå®č”ē°å¢ćåćęæććććć°ćmainé¢ę°ć®1č”ćå·®ćęæććć ććServicećÆć©ć¹ć®ć³ć¼ććÆ1ęåć触ćć¾ććšÆ
PythonćÆåēåä»ćčØčŖćŖć®ć§ćę½č±”åŗåŗćÆć©ć¹ćē¶ęæćåæćć¦ćć¦ćå®č”ęć¾ć§ćØć©ć¼ćåŗćŖćććØćććć¾ććććć§def __init__(self, user_repository: UserRepository)ć®ććć«åćć³ććä»ććmypyćVS Codeć®mypyę”å¼µę©č½ć§éēč§£ęććććć°ććåćéććććØććč¦åććØćć£ćæäøć§å³åŗ§ć«č”Øē¤ŗćććććć«ćŖćć¾ććå®č”åć«ćć¹ćę½°ććå®åæęćÆćäøåŗ¦å³ćććØęę¾ćć¾ććš”
DIćć³ć¼ćć«ēµćæč¾¼ććććć«ćŖććØćéēŗć®ććććå “é¢ć§ę©ęµćåćććć¾ćć
åē»ć®č§£čŖ¬ć§å Øä½åćÆć¤ććć¦ććå®åć§ä½æćććŖććčØčØåćčŗ«ć«ć¤ććć«ćÆä½ē³»ēćŖęøē±å¦ēæćå§åēć«å¹ćć¾ćććÆć©ć¹ć»ē¶ęæć»ę½č±”åŗåŗćÆć©ć¹ć®åŗē¤ćććSOLIDååććć¶ć¤ć³ććæć¼ć³ććć¹ćé§åéēŗć¾ć§äøę°é貫ć§å¦ć¹ćę¬ćęå ć«ē½®ćć¦ćććØćå幓å¾ć®čŖåćč¦éććć»ć©ęé·ćć¾ćć
ćÆć©ć¹ćē¶ęæćććŖć¢ć¼ćć£ćŗć ćę½č±”åŗåŗćÆć©ć¹ćØćć£ćåŗē¤ćććDIćå«ćčØčØććæć¼ć³ć¾ć§ćPythonć³ć¼ćć§äøåƧć«č§£čŖ¬ććäøåćåē»ć§ćÆé§ćč¶³ć ć£ćéØåć®ććŖćććććć®ćććč ć«č½ć”ćä»ęøćć¦ććć³ć¼ćć®čØčØćč¦ē“ććć£ććć«ćŖćć¾ćć
DIćÆåē¬ć®ććÆćććÆć§ćÆćŖććä¾åé¢äæé転ć®åå(DIP)ćØćććć大ććŖęę³ć®äøéØć§ććClean ArchitecturećčŖććØćććŖćę½č±”ć«ä¾åćććć®ććććŖćććøćć¹ććøććÆćÆå¤éØć®é½åć«ęÆćåćććć¹ćć§ćŖćć®ćććØććčØčØć®ę øåæćč ¹č½ć”ćć¾ććäøē“仄äøćē®ęććŖćåæ čŖć®äøåć
DIć®čå¾ć«ćÆćStrategyć»Factoryć»AdapterćŖć©å¤ćć®ćć¶ć¤ć³ććæć¼ć³ćØć®é¢é£ćććć¾ććGoFę¬ćÆå°ćé£č§£ć§ćććPythonåćć«ććæē ćć¦č§£čŖ¬ćććå „éęøćäøåććč¾¼ćć°ćć³ć¼ćć®å¼ćåŗććäøę°ć«å¢ćć¾ćććććććåć«č¦ćććæć¼ć³ć ććØę°ä»ććęč¦ććčØčØć®č³Ŗćåŗäøććć¦ććć¾ćć
DIć®ēä¾”ćÆććć¹ćć³ć¼ććęøćå§ćććØäøę°ć«å®ęć§ćć¾ććpytestć使ć£ććć¹ćć®ęøćę¹ćć¢ććÆć®å·®ćęæćę¹ććŖćć”ćÆćæćŖć³ć°ć®é²ćę¹ćå®č·µēć«å¦ć¹ćę¬ćäøåęć£ć¦ćććØććDIćå „ćć¦ććć¦ććć£ćććØęććē¬éćä½åŗ¦ć訪ćć¾ćć
ćÆć©ć¹å³ćč¦ćŖććć³ć¼ććęøććč¤ę°ć®ćć”ć¤ć«ćåęć«éćć¦åē §ćććććć„ć”ć³ććčŖćæćŖććå®č£ ćććDIć®ćććŖę½č±”ēćŖčØčØćę±ććØćć»ć©ćē»é¢ć®åŗććęčć®åŗćć«ē“ēµćć¾ćććµćć¢ććæć¼ćäøęčæ½å ććć ćć§ćé ć®ę“ēć¹ćć¼ććØå®č£ éåŗ¦ćä½ęć§å¤ććć¾ćć
使ćęØć¦ć®ć¹ćÆćŖććć§ććć°ćē”ēć«DIćå°å „ććåæ č¦ćÆććć¾ććććć ćććććÆå°ę„ććć¼ćæć®åå¾å ćå¤ćććććććć¹ććęøćććććØå°ćć§ćęć£ćććęåććDIåęć§ęøćć¦ććć»ććēµęēć«ę„½ć§ććę £ćć¦ććć°ćDIćå „ććććØć®ć³ć¹ććÆć»ć¼ć¼ćć«ćŖćć¾ćć
åēåä»ćć®Pythonć§ćÆććććÆćæć¤ćć³ć°ć ćć§ćDIćÆęē«ćć¾ćććć ć大č¦ęØ”åććå “åććč¤ę°äŗŗć§éēŗććå “åćÆćę½č±”åŗåŗćÆć©ć¹+åćć³ć+mypyć®ēµćæåććć使ćć»ććęå³ćę確ć«ćŖćććć¹ćé²ćć¾ćććåćć°ćććććäøę©é²ćć åč³Ŗćę±ćććŖććę½č±”ćę“»ēØććć®ćå§åēć«ććććć§ćć
ćÆć©ć¹ę°ćå¢ćć¦ćć¦ćmainé¢ę°ć§ēµćæē«ć¦ććŖććøć§ćÆćć®ę°ćčØå¤§ć«ćŖć£ć¦ćććę¤čØććä¾”å¤ćććć¾ććéć«ćÆć©ć¹ćę°åēØåŗ¦ć®ćć”ćÆćęęøćć®ēµćæē«ć¦ć§ååćęåććć³ć³ććć使ććØćéę³ć®ććć«åććć©äøčŗ«ćåćććŖććē¶ę ć«ćŖććć”ćŖć®ć§ćć¾ććÆęåDIć«ę £ćć¦ććå°å „ććć®ćēéć§ćć
VS CodećŖćę”å¼µę©č½ć1ć¤å
„ććć ćć§ä½æćć¾ććęåćÆč¦åć®éć«å§åćććććććć¾ććććčØå®ćć”ć¤ć«mypy.inić§ę®µéēć«å³ćććčŖæę“ć§ććć®ć§ćå¾ć
ć«å°å
„ćć¦ććć°åé”ććć¾ćććäøåŗ¦åć®ę©ęµćä½ęćććØćę»ććŖććŖćććć便å©ć§ćć
ć¾ććÆććÆć©ć¹ćØć¤ć³ć¹ćæć³ć¹ććē¶ęæććę½č±”åŗåŗćÆć©ć¹ćć®3ē¹ććęćåććć¦ęøććŖććēč§£ććć®ćććććć§ććPythonć®å ¬å¼ćć„ć¼ććŖć¢ć«+å „éęøćäøåććåććØćDIć®č§£čŖ¬ćć¹ććØé ć«å „ć£ć¦ććććć«ćŖćć¾ćć
ä¾åę§ć®ę³Øå „ćÆćč¦ćć¦ćć¾ćć°ććŖćć§ćććŖć«å½ććåć®ććØć«ååćä»ćć¦ććć®ļ¼ććØęćććććć·ć³ćć«ćŖčćę¹ć§ććććć©ćććć®čćę¹ćęčēć«ć³ć¼ććøč½ćØćč¾¼ćććć©ććć§ćå幓å¾ć»äøå¹“å¾ć®ć³ć¼ćć®äæå®ę§ćÆåēć«å¤ććć¾ćć
å
·ä½ćÆć©ć¹ćē“ę„__init__ć§ēęććć®ć§ćÆćŖććę½č±”ć«ä¾åććć¦å¤ććęø”ćććć£ćććć ćć®ć«ć¼ć«ć§ććć¹ććęøćććććŖććę©č½ć®å·®ćęæććē°”åć«ćŖććå¤ę“ć«å¼·ćć³ć¼ććć¼ć¹ćęć«å
„ćć¾ććä»ę„ć®ćŖćć”ćÆćæćŖć³ć°ć§ććę°ć«å
„ćć®ćććøć§ćÆćć1ć¤ć ćDIåćć¦ćæć¦ćć ććććčØčØć®äøēćåŗććęč¦ććććć²čŖåć®ęć§å³ćć£ć¦ćæć¾ćććš
ę½č±”åŗåŗćÆć©ć¹ćęøćć¦ćåćć³ććę·»ćć¦ćmypyć«č¦å®ć£ć¦ćććććć®å°ććŖē©ćæéćććäøå¹“å¾ć«ćÆćčØčØć®ć»ć³ć¹ćććäŗŗććØććććŖćć®ę°ććč©ęøććä½ć£ć¦ććć¾ćš
āļø åæććę„åøøć«ć9äŗŗć®ēć…
š ćÆćŖćØć¤ćć£ćć®åøøčćå”ć…
š ćć½ć³ć³ćéćć¦ćä»äŗćé²…
ā”ļø SNSćåćć¤ććļ¼č”ę…
š 2026幓7ę9ę„ćSno…
⨠é³ę„½ę„ēć®ć権åć®å°å³ćć«…