public static Object getProperty(Object source, String key) {
        try {
            String getterName = Character.toUpperCase(key.charAt(0)) + key.substring(1);
            Method getter = source.getClass().getMethod("get" + getterName, null);
            getter.setAccessible(true);
            return getter.invoke(source, null);
        } catch (NoSuchMethodException e) {
            throw new UtilException(
                    "ゲッターが見つかりませんでした: FQCN=" + source.getClass().getName() +
                    ", ゲッター=get" + key);
        } catch (InvocationTargetException e) {
            throw new UtilException(
                    "メソッドの実行に失敗しました: FQCN=" + source.getClass().getName() +
                    ", ゲッター=get" + key);
        } catch (IllegalAccessException e) {
            throw new UtilException(
                    "メソッドの実行に失敗しました: FQCN=" + source.getClass().getName() +
                    ", ゲッター=get" + key);
        }
    }