{"id":42915,"date":"2025-07-29T07:57:25","date_gmt":"2025-07-28T22:57:25","guid":{"rendered":"https:\/\/techgym.jp\/?p=42915"},"modified":"2025-07-29T07:57:29","modified_gmt":"2025-07-28T22:57:29","slug":"package","status":"publish","type":"post","link":"https:\/\/techgym.jp\/column\/package\/","title":{"rendered":"\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u8a2d\u8a08\u5b8c\u5168\u30ac\u30a4\u30c9 &#8211; Java\u30fbPython\u30fbC#\u540d\u524d\u7a7a\u9593\u3068\u30e2\u30b8\u30e5\u30fc\u30eb\u7ba1\u7406"},"content":{"rendered":"\n<p>\u00a0<\/p>\n<h2>\u30d1\u30c3\u30b1\u30fc\u30b8\u3068\u306f\uff1f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u3067\u306e\u5f79\u5272\u3092\u7406\u89e3<\/h2>\n<p>**\u30d1\u30c3\u30b1\u30fc\u30b8\uff08Package\uff09**\u306f\u3001\u95a2\u9023\u3059\u308b\u30af\u30e9\u30b9\u3084\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u3092\u30b0\u30eb\u30fc\u30d7\u5316\u3057\u3066\u6574\u7406\u3059\u308b\u4ed5\u7d44\u307f\u3067\u3059\u3002\u540d\u524d\u7a7a\u9593\u3092\u63d0\u4f9b\u3057\u3001\u5927\u898f\u6a21\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306e\u30b3\u30fc\u30c9\u7ba1\u7406\u3068\u4fdd\u5b88\u6027\u3092\u5411\u4e0a\u3055\u305b\u308b\u91cd\u8981\u306a\u6982\u5ff5\u3067\u3059\u3002<\/p>\n<h3>\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u57fa\u672c\u6982\u5ff5<\/h3>\n<table>\n<thead>\n<tr>\n<th>\u76ee\u7684<\/th>\n<th>\u8aac\u660e<\/th>\n<th>\u4f8b<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u540d\u524d\u7a7a\u9593\u306e\u5206\u96e2<\/td>\n<td>\u540c\u540d\u30af\u30e9\u30b9\u306e\u885d\u7a81\u3092\u9632\u3050<\/td>\n<td><code>java.util.Date<\/code> vs <code>java.sql.Date<\/code><\/td>\n<\/tr>\n<tr>\n<td>\u30b3\u30fc\u30c9\u306e\u6574\u7406<\/td>\n<td>\u6a5f\u80fd\u5225\u306b\u30af\u30e9\u30b9\u3092\u30b0\u30eb\u30fc\u30d7\u5316<\/td>\n<td><code>com.company.model<\/code>, <code>com.company.service<\/code><\/td>\n<\/tr>\n<tr>\n<td>\u30a2\u30af\u30bb\u30b9\u5236\u5fa1<\/td>\n<td>\u30d1\u30c3\u30b1\u30fc\u30b8\u30ec\u30d9\u30eb\u3067\u306e\u53ef\u8996\u6027\u5236\u5fa1<\/td>\n<td><code>package-private<\/code> \u30e1\u30f3\u30d0\u30fc<\/td>\n<\/tr>\n<tr>\n<td>\u518d\u5229\u7528\u6027<\/td>\n<td>\u30e2\u30b8\u30e5\u30fc\u30eb\u5316\u306b\u3088\u308b\u518d\u5229\u7528\u4fc3\u9032<\/td>\n<td>\u30e9\u30a4\u30d6\u30e9\u30ea\u3068\u3057\u3066\u306e\u914d\u5e03<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>\u4e3b\u8981\u8a00\u8a9e\u3067\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u5b9f\u88c5<\/h2>\n<h3>Java \u3067\u306e\u30d1\u30c3\u30b1\u30fc\u30b8<\/h3>\n<pre><code class=\"language-java\">\/\/ com\/example\/model\/User.java\npackage com.example.model;\n\npublic class User {\n    private String name;\n    private String email;\n    \n    public User(String name, String email) {\n        this.name = name;\n        this.email = email;\n    }\n    \n    \/\/ \u30d1\u30c3\u30b1\u30fc\u30b8\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\uff08\u540c\u4e00\u30d1\u30c3\u30b1\u30fc\u30b8\u5185\u304b\u3089\u30a2\u30af\u30bb\u30b9\u53ef\u80fd\uff09\n    String getName() {\n        return name;\n    }\n    \n    public String getEmail() {\n        return email;\n    }\n}\n\n\/\/ com\/example\/service\/UserService.java\npackage com.example.service;\n\nimport com.example.model.User;\nimport java.util.List;\nimport java.util.ArrayList;\n\npublic class UserService {\n    private List&lt;User&gt; users = new ArrayList&lt;&gt;();\n    \n    public void addUser(String name, String email) {\n        users.add(new User(name, email));\n    }\n    \n    public List&lt;User&gt; getAllUsers() {\n        return new ArrayList&lt;&gt;(users);\n    }\n}\n\n\/\/ com\/example\/Main.java\npackage com.example;\n\nimport com.example.model.User;\nimport com.example.service.UserService;\n\npublic class Main {\n    public static void main(String[] args) {\n        UserService service = new UserService();\n        service.addUser(\"\u592a\u90ce\", \"taro@example.com\");\n        System.out.println(\"\u30e6\u30fc\u30b6\u30fc\u767b\u9332\u5b8c\u4e86\");\n    }\n}\n<\/code><\/pre>\n<h3>Python \u3067\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\uff08\u30e2\u30b8\u30e5\u30fc\u30eb\uff09<\/h3>\n<pre><code class=\"language-python\"># myapp\/model\/__init__.py\n\"\"\"\u30e2\u30c7\u30eb\u30d1\u30c3\u30b1\u30fc\u30b8\"\"\"\n\n# myapp\/model\/user.py\nclass User:\n    def __init__(self, name, email):\n        self.name = name\n        self.email = email\n    \n    def __str__(self):\n        return f\"User(name={self.name}, email={self.email})\"\n\n# myapp\/service\/__init__.py\n\"\"\"\u30b5\u30fc\u30d3\u30b9\u30d1\u30c3\u30b1\u30fc\u30b8\"\"\"\n\n# myapp\/service\/user_service.py\nfrom typing import List\nfrom ..model.user import User\n\nclass UserService:\n    def __init__(self):\n        self._users: List[User] = []\n    \n    def add_user(self, name: str, email: str) -&gt; User:\n        user = User(name, email)\n        self._users.append(user)\n        return user\n    \n    def get_all_users(self) -&gt; List[User]:\n        return self._users.copy()\n    \n    def find_by_email(self, email: str) -&gt; User:\n        for user in self._users:\n            if user.email == email:\n                return user\n        return None\n\n# myapp\/__init__.py\n\"\"\"\u30e1\u30a4\u30f3\u30d1\u30c3\u30b1\u30fc\u30b8\"\"\"\nfrom .model.user import User\nfrom .service.user_service import UserService\n\n__version__ = \"1.0.0\"\n__all__ = [\"User\", \"UserService\"]\n\n# main.py\nfrom myapp import User, UserService\n\ndef main():\n    service = UserService()\n    user = service.add_user(\"\u592a\u90ce\", \"taro@example.com\")\n    print(f\"\u767b\u9332\u5b8c\u4e86: {user}\")\n\nif __name__ == \"__main__\":\n    main()\n<\/code><\/pre>\n<h3>C# \u3067\u306e\u540d\u524d\u7a7a\u9593<\/h3>\n<pre><code class=\"language-csharp\">\/\/ Models\/User.cs\nnamespace MyApp.Models\n{\n    public class User\n    {\n        public string Name { get; set; }\n        public string Email { get; set; }\n        \n        public User(string name, string email)\n        {\n            Name = name;\n            Email = email;\n        }\n        \n        public override string ToString()\n        {\n            return $\"User(Name={Name}, Email={Email})\";\n        }\n    }\n}\n\n\/\/ Services\/UserService.cs\nusing System.Collections.Generic;\nusing MyApp.Models;\n\nnamespace MyApp.Services\n{\n    public class UserService\n    {\n        private List&lt;User&gt; _users = new List&lt;User&gt;();\n        \n        public User AddUser(string name, string email)\n        {\n            var user = new User(name, email);\n            _users.Add(user);\n            return user;\n        }\n        \n        public IEnumerable&lt;User&gt; GetAllUsers()\n        {\n            return _users.AsReadOnly();\n        }\n    }\n}\n\n\/\/ Program.cs\nusing MyApp.Models;\nusing MyApp.Services;\n\nnamespace MyApp\n{\n    class Program\n    {\n        static void Main(string[] args)\n        {\n            var service = new UserService();\n            var user = service.AddUser(\"\u592a\u90ce\", \"taro@example.com\");\n            Console.WriteLine($\"\u767b\u9332\u5b8c\u4e86: {user}\");\n        }\n    }\n}\n<\/code><\/pre>\n<h2>\u30d1\u30c3\u30b1\u30fc\u30b8\u8a2d\u8a08\u306e\u57fa\u672c\u539f\u5247<\/h2>\n<h3>1. \u5358\u4e00\u8cac\u4efb\u539f\u5247\uff08SRP\uff09\u3092\u30d1\u30c3\u30b1\u30fc\u30b8\u30ec\u30d9\u30eb\u3067\u9069\u7528<\/h3>\n<pre><code class=\"language-java\">\/\/ \u274c \u8cac\u4efb\u304c\u6df7\u5728\u3057\u305f\u30d1\u30c3\u30b1\u30fc\u30b8\n\/\/ com.example.utils \u30d1\u30c3\u30b1\u30fc\u30b8\u306b\u5168\u3066\u8a70\u3081\u8fbc\u3080\npackage com.example.utils;\nclass DatabaseUtil { }\nclass StringUtil { }\nclass ValidationUtil { }\nclass EmailSender { }  \/\/ \u901a\u4fe1\u6a5f\u80fd\u304c\u6df7\u5165\n\n\/\/ \u2705 \u8cac\u4efb\u5225\u306b\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u5206\u96e2\n\/\/ com.example.database\npackage com.example.database;\nclass DatabaseConnection { }\nclass QueryBuilder { }\n\n\/\/ com.example.validation\npackage com.example.validation;\nclass EmailValidator { }\nclass PasswordValidator { }\n\n\/\/ com.example.communication\npackage com.example.communication;\nclass EmailSender { }\nclass SMSSender { }\n\n\/\/ com.example.utils\npackage com.example.utils;\nclass StringHelper { }\nclass DateHelper { }\n<\/code><\/pre>\n<h3>2. \u4f9d\u5b58\u95a2\u4fc2\u306e\u65b9\u5411\u6027\u7ba1\u7406<\/h3>\n<pre><code class=\"language-python\"># Python - \u30ec\u30a4\u30e4\u30fc\u30c9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u4f8b\n\n# domain\/entities\/user.py (\u6700\u4e0b\u5c64 - \u4f9d\u5b58\u306a\u3057)\nclass User:\n    def __init__(self, user_id, name, email):\n        self.id = user_id\n        self.name = name\n        self.email = email\n\n# domain\/repositories\/user_repository.py (\u62bd\u8c61\u5316)\nfrom abc import ABC, abstractmethod\nfrom typing import List, Optional\nfrom ..entities.user import User\n\nclass UserRepository(ABC):\n    @abstractmethod\n    def save(self, user: User) -&gt; User:\n        pass\n    \n    @abstractmethod\n    def find_by_id(self, user_id: int) -&gt; Optional[User]:\n        pass\n    \n    @abstractmethod\n    def find_all(self) -&gt; List[User]:\n        pass\n\n# infrastructure\/repositories\/mysql_user_repository.py (\u5177\u8c61\u5b9f\u88c5)\nfrom typing import List, Optional\nfrom domain.entities.user import User\nfrom domain.repositories.user_repository import UserRepository\n\nclass MySQLUserRepository(UserRepository):\n    def __init__(self):\n        self._users = {}  # \u5b9f\u969b\u306fMySQL\u306b\u63a5\u7d9a\n        self._next_id = 1\n    \n    def save(self, user: User) -&gt; User:\n        if not user.id:\n            user.id = self._next_id\n            self._next_id += 1\n        self._users[user.id] = user\n        return user\n    \n    def find_by_id(self, user_id: int) -&gt; Optional[User]:\n        return self._users.get(user_id)\n    \n    def find_all(self) -&gt; List[User]:\n        return list(self._users.values())\n\n# application\/services\/user_service.py (\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5c64)\nfrom domain.entities.user import User\nfrom domain.repositories.user_repository import UserRepository\n\nclass UserService:\n    def __init__(self, repository: UserRepository):\n        self._repository = repository\n    \n    def create_user(self, name: str, email: str) -&gt; User:\n        user = User(None, name, email)\n        return self._repository.save(user)\n    \n    def get_user(self, user_id: int) -&gt; User:\n        user = self._repository.find_by_id(user_id)\n        if not user:\n            raise ValueError(f\"User with id {user_id} not found\")\n        return user\n<\/code><\/pre>\n<h2>\u30d1\u30c3\u30b1\u30fc\u30b8\u9593\u901a\u4fe1\u30d1\u30bf\u30fc\u30f3<\/h2>\n<h3>1. \u30d5\u30a1\u30b5\u30fc\u30c9\u30d1\u30bf\u30fc\u30f3\u306b\u3088\u308b\u30d1\u30c3\u30b1\u30fc\u30b8\u7d71\u5408<\/h3>\n<pre><code class=\"language-java\">\/\/ Java\n\/\/ com.example.payment.facade\npackage com.example.payment.facade;\n\nimport com.example.payment.creditcard.CreditCardProcessor;\nimport com.example.payment.paypal.PayPalProcessor;\nimport com.example.payment.bitcoin.BitcoinProcessor;\n\npublic class PaymentFacade {\n    private CreditCardProcessor creditCard = new CreditCardProcessor();\n    private PayPalProcessor paypal = new PayPalProcessor();\n    private BitcoinProcessor bitcoin = new BitcoinProcessor();\n    \n    public boolean processPayment(String method, double amount) {\n        switch (method.toLowerCase()) {\n            case \"creditcard\":\n                return creditCard.charge(amount);\n            case \"paypal\":\n                return paypal.sendPayment(amount);\n            case \"bitcoin\":\n                return bitcoin.transfer(amount);\n            default:\n                throw new IllegalArgumentException(\"Unknown payment method\");\n        }\n    }\n}\n\n\/\/ \u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30b3\u30fc\u30c9\nPaymentFacade payment = new PaymentFacade();\nboolean success = payment.processPayment(\"creditcard\", 1000.0);\n<\/code><\/pre>\n<h3>2. \u30a4\u30d9\u30f3\u30c8\u99c6\u52d5\u306b\u3088\u308b\u30d1\u30c3\u30b1\u30fc\u30b8\u9593\u9023\u643a<\/h3>\n<pre><code class=\"language-python\"># Python\n# events\/event_bus.py\nfrom typing import Dict, List, Callable\nfrom collections import defaultdict\n\nclass EventBus:\n    def __init__(self):\n        self._handlers: Dict[str, List[Callable]] = defaultdict(list)\n    \n    def subscribe(self, event_type: str, handler: Callable):\n        self._handlers[event_type].append(handler)\n    \n    def publish(self, event_type: str, data: dict):\n        for handler in self._handlers[event_type]:\n            handler(data)\n\n# user\/events.py\ndef user_created_handler(data):\n    print(f\"\u30e6\u30fc\u30b6\u30fc\u4f5c\u6210\u30a4\u30d9\u30f3\u30c8: {data['name']}\")\n\ndef send_welcome_email(data):\n    print(f\"\u30a6\u30a7\u30eb\u30ab\u30e0\u30e1\u30fc\u30eb\u9001\u4fe1: {data['email']}\")\n\n# user\/service.py\nclass UserService:\n    def __init__(self, event_bus):\n        self.event_bus = event_bus\n        self._users = []\n    \n    def create_user(self, name, email):\n        user = {\"name\": name, \"email\": email}\n        self._users.append(user)\n        \n        # \u30a4\u30d9\u30f3\u30c8\u767a\u884c\n        self.event_bus.publish(\"user_created\", user)\n        return user\n\n# main.py\nevent_bus = EventBus()\nevent_bus.subscribe(\"user_created\", user_created_handler)\nevent_bus.subscribe(\"user_created\", send_welcome_email)\n\nuser_service = UserService(event_bus)\nuser_service.create_user(\"\u592a\u90ce\", \"taro@example.com\")\n<\/code><\/pre>\n<h2>\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u69cb\u9020\u4f8b<\/h2>\n<h3>Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u69cb\u9020<\/h3>\n<pre><code># Java Spring Boot \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\nsrc\/main\/java\/\n\u251c\u2500\u2500 com\/company\/myapp\/\n\u2502   \u251c\u2500\u2500 MyAppApplication.java\n\u2502   \u251c\u2500\u2500 config\/\n\u2502   \u2502   \u251c\u2500\u2500 DatabaseConfig.java\n\u2502   \u2502   \u2514\u2500\u2500 SecurityConfig.java\n\u2502   \u251c\u2500\u2500 controller\/\n\u2502   \u2502   \u251c\u2500\u2500 UserController.java\n\u2502   \u2502   \u2514\u2500\u2500 ProductController.java\n\u2502   \u251c\u2500\u2500 service\/\n\u2502   \u2502   \u251c\u2500\u2500 UserService.java\n\u2502   \u2502   \u2514\u2500\u2500 ProductService.java\n\u2502   \u251c\u2500\u2500 repository\/\n\u2502   \u2502   \u251c\u2500\u2500 UserRepository.java\n\u2502   \u2502   \u2514\u2500\u2500 ProductRepository.java\n\u2502   \u251c\u2500\u2500 model\/\n\u2502   \u2502   \u251c\u2500\u2500 User.java\n\u2502   \u2502   \u2514\u2500\u2500 Product.java\n\u2502   \u251c\u2500\u2500 dto\/\n\u2502   \u2502   \u251c\u2500\u2500 UserDTO.java\n\u2502   \u2502   \u2514\u2500\u2500 ProductDTO.java\n\u2502   \u2514\u2500\u2500 exception\/\n\u2502       \u251c\u2500\u2500 UserNotFoundException.java\n\u2502       \u2514\u2500\u2500 ValidationException.java\n<\/code><\/pre>\n<pre><code class=\"language-python\"># Python Django\/Flask \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\nmyapp\/\n\u251c\u2500\u2500 __init__.py\n\u251c\u2500\u2500 settings.py\n\u251c\u2500\u2500 urls.py\n\u251c\u2500\u2500 wsgi.py\n\u251c\u2500\u2500 apps\/\n\u2502   \u251c\u2500\u2500 __init__.py\n\u2502   \u251c\u2500\u2500 users\/\n\u2502   \u2502   \u251c\u2500\u2500 __init__.py\n\u2502   \u2502   \u251c\u2500\u2500 models.py\n\u2502   \u2502   \u251c\u2500\u2500 views.py\n\u2502   \u2502   \u251c\u2500\u2500 serializers.py\n\u2502   \u2502   \u2514\u2500\u2500 urls.py\n\u2502   \u251c\u2500\u2500 products\/\n\u2502   \u2502   \u251c\u2500\u2500 __init__.py\n\u2502   \u2502   \u251c\u2500\u2500 models.py\n\u2502   \u2502   \u251c\u2500\u2500 views.py\n\u2502   \u2502   \u2514\u2500\u2500 urls.py\n\u2502   \u2514\u2500\u2500 common\/\n\u2502       \u251c\u2500\u2500 __init__.py\n\u2502       \u251c\u2500\u2500 exceptions.py\n\u2502       \u251c\u2500\u2500 validators.py\n\u2502       \u2514\u2500\u2500 utils.py\n\u251c\u2500\u2500 core\/\n\u2502   \u251c\u2500\u2500 __init__.py\n\u2502   \u251c\u2500\u2500 database.py\n\u2502   \u251c\u2500\u2500 authentication.py\n\u2502   \u2514\u2500\u2500 permissions.py\n\u2514\u2500\u2500 tests\/\n    \u251c\u2500\u2500 __init__.py\n    \u251c\u2500\u2500 test_users.py\n    \u2514\u2500\u2500 test_products.py\n<\/code><\/pre>\n<h3>\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3067\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u8a2d\u8a08<\/h3>\n<pre><code class=\"language-java\">\/\/ Java - \u30e6\u30fc\u30b6\u30fc\u30b5\u30fc\u30d3\u30b9\ncom.company.userservice\/\n\u251c\u2500\u2500 UserServiceApplication.java\n\u251c\u2500\u2500 api\/\n\u2502   \u2514\u2500\u2500 UserController.java\n\u251c\u2500\u2500 business\/\n\u2502   \u251c\u2500\u2500 UserService.java\n\u2502   \u2514\u2500\u2500 UserValidationService.java\n\u251c\u2500\u2500 domain\/\n\u2502   \u251c\u2500\u2500 User.java\n\u2502   \u2514\u2500\u2500 UserRepository.java\n\u251c\u2500\u2500 infrastructure\/\n\u2502   \u251c\u2500\u2500 JpaUserRepository.java\n\u2502   \u2514\u2500\u2500 DatabaseConfig.java\n\u2514\u2500\u2500 integration\/\n    \u251c\u2500\u2500 EmailServiceClient.java\n    \u2514\u2500\u2500 NotificationServiceClient.java\n\n\/\/ \u6ce8\u6587\u30b5\u30fc\u30d3\u30b9\ncom.company.orderservice\/\n\u251c\u2500\u2500 OrderServiceApplication.java\n\u251c\u2500\u2500 api\/\n\u2502   \u2514\u2500\u2500 OrderController.java\n\u251c\u2500\u2500 business\/\n\u2502   \u251c\u2500\u2500 OrderService.java\n\u2502   \u2514\u2500\u2500 PaymentService.java\n\u251c\u2500\u2500 domain\/\n\u2502   \u251c\u2500\u2500 Order.java\n\u2502   \u251c\u2500\u2500 OrderItem.java\n\u2502   \u2514\u2500\u2500 OrderRepository.java\n\u2514\u2500\u2500 integration\/\n    \u251c\u2500\u2500 UserServiceClient.java\n    \u2514\u2500\u2500 InventoryServiceClient.java\n<\/code><\/pre>\n<h2>\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u3068\u4f9d\u5b58\u95a2\u4fc2<\/h2>\n<h3>Maven \u3067\u306e\u4f9d\u5b58\u95a2\u4fc2\u7ba1\u7406\uff08Java\uff09<\/h3>\n<pre><code class=\"language-xml\">&lt;!-- pom.xml --&gt;\n&lt;project&gt;\n    &lt;groupId&gt;com.company&lt;\/groupId&gt;\n    &lt;artifactId&gt;myapp-core&lt;\/artifactId&gt;\n    &lt;version&gt;1.2.0&lt;\/version&gt;\n    \n    &lt;dependencies&gt;\n        &lt;!-- \u5185\u90e8\u30d1\u30c3\u30b1\u30fc\u30b8\u4f9d\u5b58 --&gt;\n        &lt;dependency&gt;\n            &lt;groupId&gt;com.company&lt;\/groupId&gt;\n            &lt;artifactId&gt;myapp-common&lt;\/artifactId&gt;\n            &lt;version&gt;1.1.0&lt;\/version&gt;\n        &lt;\/dependency&gt;\n        \n        &lt;!-- \u5916\u90e8\u30e9\u30a4\u30d6\u30e9\u30ea\u4f9d\u5b58 --&gt;\n        &lt;dependency&gt;\n            &lt;groupId&gt;org.springframework&lt;\/groupId&gt;\n            &lt;artifactId&gt;spring-core&lt;\/artifactId&gt;\n            &lt;version&gt;5.3.21&lt;\/version&gt;\n        &lt;\/dependency&gt;\n    &lt;\/dependencies&gt;\n&lt;\/project&gt;\n<\/code><\/pre>\n<h3>pip \u3067\u306e\u4f9d\u5b58\u95a2\u4fc2\u7ba1\u7406\uff08Python\uff09<\/h3>\n<pre><code class=\"language-python\"># setup.py\nfrom setuptools import setup, find_packages\n\nsetup(\n    name=\"myapp-core\",\n    version=\"1.2.0\",\n    packages=find_packages(),\n    install_requires=[\n        \"myapp-common&gt;=1.1.0\",\n        \"requests&gt;=2.28.0\",\n        \"sqlalchemy&gt;=1.4.0\"\n    ],\n    python_requires=\"&gt;=3.8\"\n)\n\n# requirements.txt\nmyapp-common==1.1.0\nrequests==2.28.1\nsqlalchemy==1.4.39\npytest==7.1.2  # \u958b\u767a\u7528\u4f9d\u5b58\u95a2\u4fc2\n<\/code><\/pre>\n<h2>\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30c6\u30b9\u30c8\u6226\u7565<\/h2>\n<h3>\u30d1\u30c3\u30b1\u30fc\u30b8\u5358\u4f4d\u3067\u306e\u30c6\u30b9\u30c8<\/h3>\n<pre><code class=\"language-python\"># Python\n# tests\/test_user_package.py\nimport unittest\nfrom myapp.model.user import User\nfrom myapp.service.user_service import UserService\n\nclass TestUserPackage(unittest.TestCase):\n    def setUp(self):\n        self.service = UserService()\n    \n    def test_user_creation_flow(self):\n        # \u30d1\u30c3\u30b1\u30fc\u30b8\u9593\u306e\u9023\u643a\u3092\u30c6\u30b9\u30c8\n        user = self.service.add_user(\"\u592a\u90ce\", \"taro@example.com\")\n        self.assertIsInstance(user, User)\n        self.assertEqual(user.name, \"\u592a\u90ce\")\n        \n        # \u30b5\u30fc\u30d3\u30b9\u5c64\u306e\u6a5f\u80fd\u30c6\u30b9\u30c8\n        found_user = self.service.find_by_email(\"taro@example.com\")\n        self.assertEqual(found_user, user)\n    \n    def test_package_isolation(self):\n        # \u30d1\u30c3\u30b1\u30fc\u30b8\u9593\u306e\u5206\u96e2\u3092\u30c6\u30b9\u30c8\n        service1 = UserService()\n        service2 = UserService()\n        \n        service1.add_user(\"\u592a\u90ce\", \"taro@example.com\")\n        users = service2.get_all_users()\n        self.assertEqual(len(users), 0)  # \u5206\u96e2\u3055\u308c\u3066\u3044\u308b\n<\/code><\/pre>\n<h3>\u7d71\u5408\u30c6\u30b9\u30c8<\/h3>\n<pre><code class=\"language-java\">\/\/ Java\n@SpringBootTest\npublic class PackageIntegrationTest {\n    \n    @Autowired\n    private UserService userService;\n    \n    @Autowired\n    private OrderService orderService;\n    \n    @Test\n    public void testCrossPackageIntegration() {\n        \/\/ \u30e6\u30fc\u30b6\u30fc\u30d1\u30c3\u30b1\u30fc\u30b8\u3067\u30e6\u30fc\u30b6\u30fc\u4f5c\u6210\n        User user = userService.createUser(\"\u592a\u90ce\", \"taro@example.com\");\n        \n        \/\/ \u6ce8\u6587\u30d1\u30c3\u30b1\u30fc\u30b8\u3067\u6ce8\u6587\u4f5c\u6210\uff08\u30d1\u30c3\u30b1\u30fc\u30b8\u9593\u9023\u643a\uff09\n        Order order = orderService.createOrder(user.getId(), \"\u5546\u54c1A\");\n        \n        assertThat(order.getUserId()).isEqualTo(user.getId());\n        assertThat(order.getStatus()).isEqualTo(\"PENDING\");\n    }\n}\n<\/code><\/pre>\n<h2>\u30d1\u30c3\u30b1\u30fc\u30b8\u8a2d\u8a08\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h2>\n<h3>1. \u5faa\u74b0\u4f9d\u5b58\u306e\u56de\u907f<\/h3>\n<pre><code class=\"language-python\"># \u274c \u5faa\u74b0\u4f9d\u5b58\u306e\u4f8b\n# package_a\/module.py\nfrom package_b.module import ClassB\n\nclass ClassA:\n    def __init__(self):\n        self.b = ClassB()\n\n# package_b\/module.py\nfrom package_a.module import ClassA  # \u5faa\u74b0\u4f9d\u5b58\uff01\n\nclass ClassB:\n    def __init__(self):\n        self.a = ClassA()\n\n# \u2705 \u5faa\u74b0\u4f9d\u5b58\u306e\u89e3\u6c7a\n# shared\/interfaces.py\nfrom abc import ABC, abstractmethod\n\nclass ServiceInterface(ABC):\n    @abstractmethod\n    def process(self):\n        pass\n\n# package_a\/module.py\nfrom shared.interfaces import ServiceInterface\n\nclass ClassA:\n    def __init__(self, service: ServiceInterface):\n        self.service = service\n\n# package_b\/module.py\nfrom shared.interfaces import ServiceInterface\n\nclass ClassB(ServiceInterface):\n    def process(self):\n        return \"\u51e6\u7406\u5b8c\u4e86\"\n<\/code><\/pre>\n<h3>2. \u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u51dd\u96c6\u5ea6\u5411\u4e0a<\/h3>\n<pre><code class=\"language-java\">\/\/ \u2705 \u9ad8\u51dd\u96c6\u5ea6\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u8a2d\u8a08\n\/\/ com.example.user \u30d1\u30c3\u30b1\u30fc\u30b8 - \u30e6\u30fc\u30b6\u30fc\u95a2\u9023\u6a5f\u80fd\u3092\u96c6\u7d04\npackage com.example.user;\n\npublic class User { }\npublic class UserValidator { }\npublic class UserRepository { }\npublic class UserService { }\npublic class UserController { }\n\n\/\/ com.example.order \u30d1\u30c3\u30b1\u30fc\u30b8 - \u6ce8\u6587\u95a2\u9023\u6a5f\u80fd\u3092\u96c6\u7d04\npackage com.example.order;\n\npublic class Order { }\npublic class OrderItem { }\npublic class OrderCalculator { }\npublic class OrderRepository { }\npublic class OrderService { }\n<\/code><\/pre>\n<h2>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u30e1\u30e2\u30ea\u8003\u616e<\/h2>\n<h3>\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u9045\u5ef6\u8aad\u307f\u8fbc\u307f<\/h3>\n<pre><code class=\"language-python\"># Python - \u9045\u5ef6\u30a4\u30f3\u30dd\u30fc\u30c8\u3067\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6539\u5584\nclass HeavyProcessor:\n    def __init__(self):\n        self._ml_model = None\n        self._image_processor = None\n    \n    @property\n    def ml_model(self):\n        if self._ml_model is None:\n            # \u91cd\u3044\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u5fc5\u8981\u6642\u306e\u307f\u30a4\u30f3\u30dd\u30fc\u30c8\n            import tensorflow as tf\n            self._ml_model = tf.keras.models.load_model('model.h5')\n        return self._ml_model\n    \n    @property\n    def image_processor(self):\n        if self._image_processor is None:\n            # \u91cd\u3044\u753b\u50cf\u51e6\u7406\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u5fc5\u8981\u6642\u306e\u307f\u30a4\u30f3\u30dd\u30fc\u30c8\n            import cv2\n            self._image_processor = cv2\n        return self._image_processor\n    \n    def process_data(self, data_type, data):\n        if data_type == \"ml\":\n            return self.ml_model.predict(data)\n        elif data_type == \"image\":\n            return self.image_processor.imread(data)\n<\/code><\/pre>\n<h2>\u307e\u3068\u3081\uff1a\u30d1\u30c3\u30b1\u30fc\u30b8\u8a2d\u8a08\u30de\u30b9\u30bf\u30fc\u306e\u30dd\u30a4\u30f3\u30c8<\/h2>\n<p><strong>\u30d1\u30c3\u30b1\u30fc\u30b8\u8a2d\u8a08\u306e\u5229\u70b9<\/strong><\/p>\n<ul>\n<li>\u30b3\u30fc\u30c9\u306e\u6574\u7406\u3068\u53ef\u8aad\u6027\u5411\u4e0a<\/li>\n<li>\u540d\u524d\u7a7a\u9593\u306e\u5206\u96e2<\/li>\n<li>\u518d\u5229\u7528\u6027\u3068\u30e2\u30b8\u30e5\u30fc\u30eb\u6027<\/li>\n<li>\u30c1\u30fc\u30e0\u958b\u767a\u3067\u306e\u8cac\u4efb\u5206\u754c<\/li>\n<\/ul>\n<p><strong>\u8a2d\u8a08\u539f\u5247<\/strong><\/p>\n<ul>\n<li>\u5358\u4e00\u8cac\u4efb\u539f\u5247\uff08SRP\uff09<\/li>\n<li>\u4f9d\u5b58\u95a2\u4fc2\u9006\u8ee2\u539f\u5247\uff08DIP\uff09<\/li>\n<li>\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u5206\u96e2\u539f\u5247\uff08ISP\uff09<\/li>\n<li>\u9ad8\u51dd\u96c6\u30fb\u758e\u7d50\u5408<\/li>\n<\/ul>\n<p><strong>\u5b9f\u8df5\u7684\u306a\u6d3b\u7528\u5834\u9762<\/strong><\/p>\n<ul>\n<li>\u30ec\u30a4\u30e4\u30fc\u30c9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3<\/li>\n<li>\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u8a2d\u8a08<\/li>\n<li>\u30e9\u30a4\u30d6\u30e9\u30ea\u30fb\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u958b\u767a<\/li>\n<li>\u5927\u898f\u6a21\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u69cb\u9020\u5316<\/li>\n<\/ul>\n<p><strong>\u907f\u3051\u308b\u3079\u304d\u843d\u3068\u3057\u7a74<\/strong><\/p>\n<ul>\n<li>\u5faa\u74b0\u4f9d\u5b58\u306e\u767a\u751f<\/li>\n<li>\u904e\u5ea6\u306b\u7d30\u5206\u5316\u3055\u308c\u305f\u30d1\u30c3\u30b1\u30fc\u30b8<\/li>\n<li>\u8cac\u4efb\u304c\u4e0d\u660e\u78ba\u306a\u30d1\u30c3\u30b1\u30fc\u30b8<\/li>\n<li>\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u306e\u8907\u96d1\u5316<\/li>\n<\/ul>\n<p>\u30d1\u30c3\u30b1\u30fc\u30b8\u8a2d\u8a08\u3092\u30de\u30b9\u30bf\u30fc\u3059\u308b\u3053\u3068\u3067\u3001\u4fdd\u5b88\u6027\u3068\u62e1\u5f35\u6027\u306b\u512a\u308c\u305f\u5927\u898f\u6a21\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u307e\u305a\u306f\u5c0f\u3055\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306e\u57fa\u672c\u7684\u306a\u30d1\u30c3\u30b1\u30fc\u30b8\u5206\u5272\u304b\u3089\u59cb\u3081\u3066\u3001\u5f90\u3005\u306b\u8907\u96d1\u306a\u69cb\u9020\u8a2d\u8a08\u3092\u8eab\u306b\u3064\u3051\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n<p>\u00a0<\/p>\n\n\n\n<p>\u25a0\u30d7\u30ed\u30f3\u30d7\u30c8\u3060\u3051\u3067\u30aa\u30ea\u30b8\u30ca\u30eb\u30a2\u30d7\u30ea\u3092\u958b\u767a\u30fb\u516c\u958b\u3057\u3066\u307f\u305f\uff01\uff01<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"FHJtGwzJYD\"><a href=\"https:\/\/techgym.jp\/column\/ori-app\/\">\u30d7\u30ed\u30f3\u30d7\u30c8\u3060\u3051\u3067\u30aa\u30ea\u30b8\u30ca\u30eb\u30a2\u30d7\u30ea\u3092\u958b\u767a\u30fb\u516c\u958b\u3057\u3066\u307f\u305f\uff01\uff01<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"&#8220;\u30d7\u30ed\u30f3\u30d7\u30c8\u3060\u3051\u3067\u30aa\u30ea\u30b8\u30ca\u30eb\u30a2\u30d7\u30ea\u3092\u958b\u767a\u30fb\u516c\u958b\u3057\u3066\u307f\u305f\uff01\uff01&#8221; &#8212; \u3010\u30c6\u30c3\u30af\u30b8\u30e0\u3011\u683c\u5b89\u30fb\u5bfe\u9762\u578b\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30b9\u30af\u30fc\u30eb\" src=\"https:\/\/techgym.jp\/column\/ori-app\/embed\/#?secret=bccvKVWB4S#?secret=FHJtGwzJYD\" data-secret=\"FHJtGwzJYD\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>\u25a0AI\u6642\u4ee3\u306e\u7b2c\u4e00\u6b69\uff01\u300cAI\u99c6\u52d5\u958b\u767a\u30b3\u30fc\u30b9\u300d\u306f\u3058\u3081\u307e\u3057\u305f\uff01<\/p>\n\n\n\n<p>\u30c6\u30c3\u30af\u30b8\u30e0\u6771\u4eac\u672c\u6821\u3067\u5148\u884c\u958b\u59cb\u3002<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"MpJL2gPiLp\"><a href=\"https:\/\/techgym.jp\/about\/ai-driven-development\/\">AI\u6642\u4ee3\u306e\u7b2c\u4e00\u6b69\uff01\u300cAI\u99c6\u52d5\u958b\u767a\u30b3\u30fc\u30b9\u300d\uff08\u521d\u5fc3\u8005\u5411\u3051\uff09<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"&#8220;AI\u6642\u4ee3\u306e\u7b2c\u4e00\u6b69\uff01\u300cAI\u99c6\u52d5\u958b\u767a\u30b3\u30fc\u30b9\u300d\uff08\u521d\u5fc3\u8005\u5411\u3051\uff09&#8221; &#8212; \u3010\u30c6\u30c3\u30af\u30b8\u30e0\u3011\u683c\u5b89\u30fb\u5bfe\u9762\u578b\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30b9\u30af\u30fc\u30eb\" src=\"https:\/\/techgym.jp\/about\/ai-driven-development\/embed\/#?secret=qv7G7lCizj#?secret=MpJL2gPiLp\" data-secret=\"MpJL2gPiLp\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>\u25a0\u30c6\u30c3\u30af\u30b8\u30e0\u6771\u4eac\u672c\u6821<\/p>\n\n\n\n<p>\u300c\u6b66\u7530\u587e\u300d\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u7248\u3068\u3044\u3048\u3070\u300c\u30c6\u30c3\u30af\u30b8\u30e0\u300d\u3002<br>\u8b1b\u7fa9\u52d5\u753b\u306a\u3057\u3001\u6559\u79d1\u66f8\u306a\u3057\u3002\u300c\u9032\u6357\u7ba1\u7406\u3068\u30b3\u30fc\u30c1\u30f3\u30b0\u300d\u3067\u52b9\u7387\u5b66\u7fd2\u3002<br>\u3088\u308a\u65e9\u304f\u3001\u3088\u308a\u5b89\u304f\u3001\u3057\u304b\u3082\u5bfe\u9762\u578b\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30b9\u30af\u30fc\u30eb\u3067\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"h83cLDSidL\"><a href=\"https:\/\/techgym.jp\/tokyo\/tokyo_honko\/\">\u30c6\u30c3\u30af\u30b8\u30e0\u6771\u4eac\u672c\u6821<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"&#8220;\u30c6\u30c3\u30af\u30b8\u30e0\u6771\u4eac\u672c\u6821&#8221; &#8212; \u3010\u30c6\u30c3\u30af\u30b8\u30e0\u3011\u683c\u5b89\u30fb\u5bfe\u9762\u578b\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30b9\u30af\u30fc\u30eb\" src=\"https:\/\/techgym.jp\/tokyo\/tokyo_honko\/embed\/#?secret=RGCOYMttrq#?secret=h83cLDSidL\" data-secret=\"h83cLDSidL\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>\uff1c\u77ed\u671f\u8b1b\u7fd2\uff1e5\u65e5\u30675\u4e07\u5186\u306e\u300cPython\u30df\u30cb\u30ad\u30e3\u30f3\u30d7\u300d\u958b\u50ac\u4e2d\u3002<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"ADIqmHJLQQ\"><a href=\"https:\/\/techgym.jp\/event\/nagatacho_camp\/\">\u72ec\u5b66\u3082\u30aa\u30f3\u30e9\u30a4\u30f3\u3082\u7121\u7406\u3060\u304b\u3089\u3001\u6709\u7d66\u3068\u3063\u3066\u300cPython\u30df\u30cb\u30ad\u30e3\u30f3\u30d7\u300d\u3078\u30105\u65e5\u9593\u30675\u4e07\u5186\u3011<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"&#8220;\u72ec\u5b66\u3082\u30aa\u30f3\u30e9\u30a4\u30f3\u3082\u7121\u7406\u3060\u304b\u3089\u3001\u6709\u7d66\u3068\u3063\u3066\u300cPython\u30df\u30cb\u30ad\u30e3\u30f3\u30d7\u300d\u3078\u30105\u65e5\u9593\u30675\u4e07\u5186\u3011&#8221; &#8212; \u3010\u30c6\u30c3\u30af\u30b8\u30e0\u3011\u683c\u5b89\u30fb\u5bfe\u9762\u578b\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30b9\u30af\u30fc\u30eb\" src=\"https:\/\/techgym.jp\/event\/nagatacho_camp\/embed\/#?secret=tL6cRa0zdV#?secret=ADIqmHJLQQ\" data-secret=\"ADIqmHJLQQ\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>\uff1c\u67081\u958b\u50ac\uff1e\u653e\u9001\u4f5c\u5bb6\u306b\u3088\u308b\u6620\u50cf\u30c7\u30a3\u30ec\u30af\u30bf\u30fc\u990a\u6210\u8b1b\u5ea7<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"BHxlYIS29J\"><a href=\"https:\/\/techgym.jp\/event\/video_director\/\">\u73fe\u5f79\u653e\u9001\u4f5c\u5bb6\u304c\u6559\u3048\u308b\u52d5\u753b\u8b1b\u5ea7\uff01\u300e\uff24\uff2f\uff27\uff21\u300f<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"&#8220;\u73fe\u5f79\u653e\u9001\u4f5c\u5bb6\u304c\u6559\u3048\u308b\u52d5\u753b\u8b1b\u5ea7\uff01\u300e\uff24\uff2f\uff27\uff21\u300f&#8221; &#8212; \u3010\u30c6\u30c3\u30af\u30b8\u30e0\u3011\u683c\u5b89\u30fb\u5bfe\u9762\u578b\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30b9\u30af\u30fc\u30eb\" src=\"https:\/\/techgym.jp\/event\/video_director\/embed\/#?secret=VFhi8Lr1xI#?secret=BHxlYIS29J\" data-secret=\"BHxlYIS29J\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>\uff1c\u30aa\u30f3\u30e9\u30a4\u30f3\u7121\u6599\uff1e\u30bc\u30ed\u304b\u3089\u59cb\u3081\u308bPython\u7206\u901f\u8b1b\u5ea7<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"gXLHzcZBTk\"><a href=\"https:\/\/techgym.jp\/tokyo_python\/\">\u30bc\u30ed\u304b\u3089\u59cb\u3081\u308bPython\u7206\u901f\u8b1b\u5ea7\uff08\u7406\u7cfb\u30fb\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u521d\u5fc3\u8005\u5411\u3051\uff09<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"&#8220;\u30bc\u30ed\u304b\u3089\u59cb\u3081\u308bPython\u7206\u901f\u8b1b\u5ea7\uff08\u7406\u7cfb\u30fb\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u521d\u5fc3\u8005\u5411\u3051\uff09&#8221; &#8212; \u3010\u30c6\u30c3\u30af\u30b8\u30e0\u3011\u683c\u5b89\u30fb\u5bfe\u9762\u578b\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30b9\u30af\u30fc\u30eb\" src=\"https:\/\/techgym.jp\/tokyo_python\/embed\/#?secret=zN0EzH0Jay#?secret=gXLHzcZBTk\" data-secret=\"gXLHzcZBTk\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>\u00a0 \u30d1\u30c3\u30b1\u30fc\u30b8\u3068\u306f\uff1f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u3067\u306e\u5f79\u5272\u3092\u7406\u89e3 **\u30d1\u30c3\u30b1\u30fc\u30b8\uff08Package\uff09**\u306f\u3001\u95a2\u9023\u3059\u308b\u30af\u30e9\u30b9\u3084\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u3092\u30b0\u30eb\u30fc\u30d7\u5316\u3057\u3066\u6574\u7406\u3059\u308b\u4ed5\u7d44\u307f\u3067\u3059\u3002\u540d\u524d\u7a7a\u9593\u3092\u63d0\u4f9b\u3057\u3001\u5927\u898f\u6a21\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306e\u30b3\u30fc\u30c9\u7ba1\u7406\u3068\u4fdd [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":42501,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[5],"tags":[],"class_list":["post-42915","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-column"],"views":38,"jetpack_featured_media_url":"\/wp-content\/uploads\/2025\/07\/f3403acf5c65aedec0dba821c4c26404.png","jetpack_sharing_enabled":true,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/techgym.jp\/wp-json\/wp\/v2\/posts\/42915","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/techgym.jp\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/techgym.jp\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/techgym.jp\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/techgym.jp\/wp-json\/wp\/v2\/comments?post=42915"}],"version-history":[{"count":0,"href":"https:\/\/techgym.jp\/wp-json\/wp\/v2\/posts\/42915\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/techgym.jp\/wp-json\/wp\/v2\/media\/42501"}],"wp:attachment":[{"href":"https:\/\/techgym.jp\/wp-json\/wp\/v2\/media?parent=42915"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/techgym.jp\/wp-json\/wp\/v2\/categories?post=42915"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/techgym.jp\/wp-json\/wp\/v2\/tags?post=42915"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}