void OnEnable()
        {
            Input.imeCompositionMode = IMECompositionMode.On;
            rootVisualElement.styleSheets.Add(AssetDatabase.LoadAssetAtPath <StyleSheet>("Packages/mu.cluster.cluster-creator-kit/Editor/ClusterStyle.uss"));

            var tokenAuth     = new TokenAuthWidget();
            var tokenAuthView = tokenAuth.CreateView(); // .Bindで作り直すとなぜかYogaNodeがStackoverflowするので使い回す

            VisualElement venueUi = null;

            ReactiveBinder.Bind(tokenAuth.reactiveUserInfo, userInfo =>
            {
                if (venueUi != null)
                {
                    rootVisualElement.Remove(venueUi);
                    venueUi = null;
                }

                venueUi = CreateVenueUi(tokenAuth, tokenAuthView, userInfo);
                rootVisualElement.Add(venueUi);
                tokenAuthView.style.display = userInfo.HasValue ? DisplayStyle.None : DisplayStyle.Flex;
            });
        }
        VisualElement CreateVenueUi(TokenAuthWidget tokenAuth, VisualElement tokenAuthView, UserInfo?userInfo)
        {
            var container = new VisualElement()
            {
                style =
                {
                    flexDirection = FlexDirection.Row,
                    flexGrow      =                 1,
                }
            };
            var sidePane = new VisualElement()
            {
                style =
                {
                    borderColor      = new StyleColor(Color.gray),
                    borderRightWidth =                          1,
                    width            =                        250,
                }
            };

            sidePane.EnableInClassList("pane", true);
            var mainPane = new VisualElement()
            {
                style = { flexGrow = 1 }
            };

            mainPane.EnableInClassList("pane", true);
            container.Add(sidePane);
            container.Add(mainPane);

            // Side
            sidePane.Add(tokenAuthView);

            if (userInfo.HasValue)
            {
                var sideMenu = new SideMenuVenueList(userInfo.Value);
                sideMenu.AddView(sidePane);
                ReactiveBinder.Bind(sideMenu.reactiveForceLogout, forceLogout =>
                {
                    if (forceLogout)
                    {
                        tokenAuth.Logout();
                    }
                });

                // Main
                ReactiveBinder.Bind(sideMenu.reactiveCurrentVenue, currentVenue =>
                {
                    mainPane.Clear();
                    if (currentVenue != null)
                    {
                        var venueContent = new ScrollView(ScrollViewMode.Vertical)
                        {
                            style = { flexGrow = 1 }
                        };
                        new EditAndUploadVenueView(userInfo.Value, currentVenue, () =>
                        {
                            sideMenu.RefetchVenueWithoutChangingSelection();
                        }).AddView(venueContent);
                        mainPane.Add(venueContent);
                    }
                });
            }
            else
            {
                mainPane.Clear();
            }

            return(container);
        }