CINXE.COM
mimemagicの最新動向 - HackMD
<!DOCTYPE html> <html lang="dev" data-themeable="true"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"> <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-status-bar-style" content="black"> <meta name="mobile-web-app-capable" content="yes"> <meta name="csrf-token" content="v42hXqoI-KDqNdF4yxd4tOjAOE6lkHbVUxQ8"> <meta name="description" content="# mimemagicの最新動向 https://hackmd.io/@mametter/mimemagic-info-ja この文書は[ruby-jp Slack](https://ruby-j"> <title>mimemagicの最新動向 - HackMD</title> <link rel="icon" type="image/png" href="https://hackmd.io/favicon.png"> <link rel="apple-touch-icon" href="https://hackmd.io/apple-touch-icon.png"> <!-- meta value for server side given sign in boolean --> <meta name="signin" content="false"> <script nonce="c7e6c3c9-4d33-48ea-811f-258ae263bb88"> window.domain = 'hackmd.io' window.urlpath = '' window.debug = false || window.localStorage.getItem('HMD_DEBUG_FLAG') === 'true' window.version = '1.3.0' window.brand = 'HackMD' window.NOTE_ID = 'yjvOXmPPRBeZ241pn-hZZw' window.GOOGLE_DRIVE_API_KEY = 'AIzaSyAHmcP5gL_64ZafuAYOvJruFAIaYgHQaY4' window.GOOGLE_DRIVE_CLIENT_ID = '65857506266-76uhhee8se8dgs1i0q8fhtj1prg0ar27.apps.googleusercontent.com' window.DROPBOX_APP_KEY = 'rdoizrlnkuha23r' window.PLANTUML_SERVER = 'https://ptuml.hackmd.io' window.ASSET_URL = 'https://assets.hackmd.io' window.USER_CAN_CREATE_TEAM = true window.USER_CAN_DELETE_ACCOUNT = true window.USER_DELETE_ACCOUNT_VIA_EMAIL = true window.PAYMENT_ENABLED = true window.PAYMENT_PROMOTION_BANNER_ENABLED = false window.GITHUB_SYNC_ENABLED = true window.GITLAB_SYNC_ENABLED = false window.GITLAB_SYNC_BASE_URL = '' window.VCS_SYNC_MODE = 'github' window.VCS_PROVIDER_NAME = 'GitHub' window.FREE_TEAM_NUM = 20 window.FREE_TEAM_MEMBER_NUM = 3 window.FREE_PUBLIC_TEAM_NUM = 10 window.NEO_OVERVIEW_UI = false window.FOLDER_ENABLE = false window.EE_SITE_ENABLE = false window.EE_SITE_NAME = 'false' window.EE_SITE_LINK = 'false' window.EESITE_INFO = false window.ENTERPRISE_DISCOVERY_ENABLE = false window.ENTERPRISE_DISCOVERY_TEAM = true window.ENTERPRISE_DISCOVERY_NOTE = true window.ENTERPRISE_DISCOVERY_VIEW_PERMISSION = 'guest' window.ALLOW_ANONYMOUS = true window.ALLOW_ANONYMOUS_EDIT = false window.ALLOW_DOWNLOAD_PDF = true window.PUBLIC_OVERVIEW = false window.INTERNAL_PUBLIC_OVERVIEW = false window.FULL_TEXT_SEARCH_ENABLE = false window.ALGOLIA_SEARCH_ENABLE = true window.MARKETING_EMAIL_ENABLE = true window.OFFLINE_ACCESS = true window.WALLET_CONNECT_PROJECT_ID = '91d6fa182b725b5895a17a170a5878c1' window.API_MANAGEMENT_UI_ENABLE = true window.FEEDBACK_UI_ENABLE = true window.PUBLISH_ENABLE = true window.SHOW_HOT_NOTES = false window.HOT_NOTES_TIME_TYPE = 'week' window.SHOW_OVERVIEW = false window.MENTIONS = {} window.MENTION_ANCHORS = [] window.COMMENT_ANCHORS = [] window.IS_OWNER = false window.IS_TEAM_ADMIN = false window.IS_INVITEE_ADMIN = false window.USER_PROFILE = '%7B%22name%22%3A%22Guest%20Ryan%22%7D' window.VERSION_TIME = '1617118808021' window.canEdit = false window.canWriteComment = true window.canHideComment = false window.TRASH_NOTE_DELETE_AFTER_FREE = 3 window.TRASH_NOTE_DELETE_AFTER_PAID = 30 window.ENABLED_PREVIEW_FEATURE = {} window.IS_OWNER_UPGRADED = false window.IMGUR_FALLBACK_CDN = 'https://imgur-backup.hackmd.io' window.CLOUD_META_UI = true window.CLOUD_META_API = true window.CLOUD_META_MIGRATION = false window.YAML_METADATA_ENABLED = false window.NOTE_CAPACITY_LIMIT = 50 window.DOCUMENT_MAX_LENGTH = 100000 window.SOCIAL_NETWORK_FEATURES_ENABLED = true window.PUBLISHMENT_MODERATION_ENABLED = true window.COMMENT_ENABLED = true window.SUGGEST_EDIT_ENABLED = true window.SUGGEST_EDIT_ENABLED = true window.REALTIME_CLIENT_WITH_CREDENTIALS = false window.COMMENT_ENABLED = true window.DEBUG_DISCONNECT_SOCKET_WHEN_OFFLINE = false window.USE_NEW_LOGO = true window.ITERABLE_ENABLED = true window.ITERABLE_API_KEY = "c2c36a44c2614fb19aa3b46d660bbce2" window.TEXT_SELECTION_CHANGED = false window.CAN_VIEW_HISTORY_AT_REVISION = false </script> <!-- Google Tag Manager --> <script nonce="c7e6c3c9-4d33-48ea-811f-258ae263bb88">(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-KLW9Z3');</script> <!-- End Google Tag Manager --> <meta property="fb:app_id" content="1436904003272070"> <meta name="twitter:image:src" content="https://hackmd.io/images/media/HackMD-og.jpg"> <meta name="twitter:image:alt" content="mimemagicの最新動向 - HackMD"> <meta name="twitter:site" content="@hackmdio" /> <meta name="twitter:card" content="summary" /> <meta name="twitter:title" content="mimemagicの最新動向 - HackMD" /> <meta name="twitter:description" content="# mimemagicの最新動向 https://hackmd.io/@mametter/mimemagic-info-ja この文書は[ruby-jp Slack](https://ruby-j" /> <meta property="og:image" content="https://hackmd.io/images/media/HackMD-og.jpg"> <meta property="og:image:alt" content="mimemagicの最新動向 - HackMD"> <meta property="og:site_name" content="HackMD" /> <meta property="og:type" content="article" /> <meta property="og:title" content="mimemagicの最新動向 - HackMD" /> <meta property="og:description" content="# mimemagicの最新動向 https://hackmd.io/@mametter/mimemagic-info-ja この文書は[ruby-jp Slack](https://ruby-j" /> <link rel="canonical" href="https://hackmd.io/@mametter/mimemagic-info-ja" /> <meta property="og:url" content="https://hackmd.io/@mametter/mimemagic-info-ja" /> <meta property="twitter:url" content="https://hackmd.io/@mametter/mimemagic-info-ja" /> <link href="https://assets.hackmd.io/build/font-vendor.ea8218d7d4f468b2c430.css" rel="stylesheet"><link href="https://assets.hackmd.io/build/common-vendor.0a08ae20e14fefe857eb.css" rel="stylesheet"><link href="https://assets.hackmd.io/build/pretty-vendor.db0e7b64c54d0a77290f.css" rel="stylesheet"><link href="https://assets.hackmd.io/build/pretty.14be6b6da1e509c2ae99.css" rel="stylesheet"> <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> <!--[if lt IE 9]> <script src="https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js" integrity="sha256-3Jy/GbSLrg0o9y5Z5n1uw0qxZECH7C6OQpVBgNFYa0g=" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.min.js" integrity="sha256-g6iAfvZp+nDQ2TdTR/VVKJf3bGro4ub5fvWSWVRi2NE=" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/es5-shim/4.5.9/es5-shim.min.js" integrity="sha256-8E4Is26QH0bD52WoQpcB+R/tcWQtpzlCojrybUd7Mxo=" crossorigin="anonymous"></script> <![endif]--> <script defer data-domain="hackmd.io" src="https://plausible.io/js/script.js"></script> <script nonce="c7e6c3c9-4d33-48ea-811f-258ae263bb88"> window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments); } const keyboardWhiteList = ['a', 'span', 'button'] function getTaggedEventAttributes (e) { const eventAttrs = { name: null, props: {} } if (!e || !e.classList) return eventAttrs const psEvent = /plausible-event-(.+)(=|--)(.+)/ for (const className of [...e.classList]) { const [, key, , val] = className.match(psEvent) || [] if (!key || !val) continue const value = val.replace(/\+/g, ' ') switch (key.toLowerCase()) { case 'name': eventAttrs.name = value break default: eventAttrs.props[key] = value break } } return eventAttrs } function isLocal () { return /^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(location.hostname) || location.protocol === 'file:' } function isAutomation () { return Boolean(window._phantom || window.__nightmare || window.navigator.webdriver || window.Cypress) } function shouldIgnore () { return isLocal() || isAutomation() || window.localStorage.getItem('plausible_ignore') === 'true' } function handler (e) { if (!window.plausible) return if (!e.target || !('className' in e.target)) return const ele = e.target const eventAttrs = getTaggedEventAttributes(ele) if (!eventAttrs.name) return if (ele?.href) eventAttrs.props.url = ele.href if (shouldIgnore()) { if (window.debug) logDebugEventMsg(eventAttrs) return } window.plausible(eventAttrs.name, { props: eventAttrs.props }) } function logDebugEventMsg (eventAttrs) { console.warn( `Ignoring Event: "${eventAttrs.name}"`, eventAttrs, ) } function keydownHandler (e) { if (e.key !== 'Enter') return if (e.target.nodeName.toLowerCase() === 'input') { switch (e.target.type.toLowerCase()) { case 'submit': case 'button': case 'reset': case 'checkbox': case 'radio': case 'file': case 'image': case 'color': break default: return } } else if (!keyboardWhiteList.includes(e.target.nodeName.toLowerCase())) { return } handler(e) } document.addEventListener('mousedown', handler) document.addEventListener('keydown', keydownHandler) </script> <script nonce="c7e6c3c9-4d33-48ea-811f-258ae263bb88"> window.publishProps = JSON.parse(`{"isOwnerAnonymous":false,"isOwnedByTeam":false,"ownerInfo":{"name":"Yusuke%20Endoh","path":"mametter","avatarUrl":"https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F21557%3Fs%3D96","description":null},"isPublished":true,"createTime":1616732102347,"updateTime":1617118808021,"vcsSyncMode":"github","vcsProviderName":"GitHub","canEdit":false,"hardBreaks":true,"onlyOwnerCanEdit":true,"isCommentEnabled":true,"likedCount":23,"isNotificationEnabled":true,"notificationType":"never","hasEmail":false,"canWriteComment":true,"viewCount":50675,"markdown":"%23%20mimemagic%E3%81%AE%E6%9C%80%E6%96%B0%E5%8B%95%E5%90%91%0A%0Ahttps%3A%2F%2Fhackmd.io%2F%40mametter%2Fmimemagic-info-ja%0A%0A%E3%81%93%E3%81%AE%E6%96%87%E6%9B%B8%E3%81%AF%5Bruby-jp%20Slack%5D(https%3A%2F%2Fruby-jp.github.io%2F)%E3%81%AE%60%23rails%60%E3%83%81%E3%83%A3%E3%83%B3%E3%83%8D%E3%83%AB%E3%81%AE%E8%AD%B0%E8%AB%96%E3%82%92%E6%9C%89%E5%BF%97%E3%82%92%E4%B8%AD%E5%BF%83%E3%81%AB%E3%81%BE%E3%81%A8%E3%82%81%E3%81%9F%E3%82%82%E3%81%AE%E3%81%A7%E3%81%99%E3%80%82%0A%0A%23%23%20%E8%B5%B7%E3%81%8D%E3%81%9F%E3%81%93%E3%81%A8%E3%81%AE%E6%A6%82%E8%A6%81%0A%0ARails%E3%81%AE%E4%B8%80%E9%83%A8%E3%81%A7%E3%81%82%E3%82%8Bactivestorage%E3%81%8C%E4%BE%9D%E5%AD%98%E3%81%97%E3%81%A6%E3%81%84%E3%82%8Bmimemagic%20gem%E3%81%8C%E3%80%81%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9%E9%96%A2%E9%80%A3%E3%81%AE%E5%95%8F%E9%A1%8C%E3%81%A7rubygems.org%E3%81%8B%E3%82%89%E5%8F%96%E3%82%8A%E4%B8%8B%E3%81%92%E3%82%89%E3%82%8C%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%E3%81%93%E3%82%8C%E3%81%AB%E3%82%88%E3%82%8A%E3%80%81mimemagic%20%3C%3D%200.3.5%E3%81%AB%E4%BE%9D%E5%AD%98%E3%81%97%E3%81%A6%E3%81%84%E3%82%8BRails%E3%82%A2%E3%83%97%E3%83%AA%E3%81%8Cbundle%20install%E3%81%AB%E5%A4%B1%E6%95%97%E3%81%99%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%0A%0Amimemagic%20%3C%3D%200.3.5%E3%81%AB%E4%BE%9D%E5%AD%98%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%AE%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%AE%E4%BE%8B%EF%BC%9A%0A%0A%3E%20Your%20bundle%20is%20locked%20to%20mimemagic%20(0.3.5)%2C%20but%20that%20version%20could%20not%20be%20found%0A%0Ashared-mime-info%E3%81%8C%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%E5%A0%B4%E5%90%88%E3%81%AE%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%AE%E4%BE%8B%3A%0A%0A%0A%3E%20Could%20not%20find%20MIME%20type%20database%20in%20the%20following%20locations%3A%0A%3E%20%5B%22%2Fusr%2Flocal%2Fshare%2Fmime%2Fpackages%2Ffreedesktop.org.xml%22%2C%20%22%2Fopt%2Fhomebrew%2Fshare%2Fmime%2Fpackages%2Ffreedesktop.org.xml%22%2C%0A%22%2Fusr%2Fshare%2Fmime%2Fpackages%2Ffreedesktop.org.xml%22%5D%0A%0A%23%23%20Rails%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%81%84%E3%81%84%EF%BC%9F%0A%0A%EF%BC%882021%2F03%2F27%E7%8F%BE%E5%9C%A8%EF%BC%89Rails%205.2.5%20%2F%206.0.3.6%20%2F%206.1.3.1%20%E3%81%AFmimemagic%E3%81%AB%E4%BE%9D%E5%AD%98%E3%81%97%E3%81%AA%E3%81%8F%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%E3%81%93%E3%82%8C%E3%82%89%E3%81%AB%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%82%A2%E3%83%83%E3%83%97%E3%81%97%E3%81%BE%E3%81%97%E3%82%87%E3%81%86%E3%80%82%0A%0Ahttps%3A%2F%2Fweblog.rubyonrails.org%2F2021%2F3%2F26%2Fmarcel-upgrade-releases%2F%0A%0A%23%23%23%20%E9%83%BD%E5%90%88%E3%81%AB%E3%82%88%E3%82%8ARails%E3%82%92%E3%82%A2%E3%83%83%E3%83%97%E3%83%87%E3%83%BC%E3%83%88%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%83%BB%E3%81%97%E3%81%9F%E3%81%8F%E3%81%AA%E3%81%84%E5%A0%B4%E5%90%88%0A%0A%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E9%85%8D%E5%B8%83%E3%81%99%E3%82%8B%E9%9A%9B%E3%81%AE%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9%E3%81%8CGPL%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%A6%E3%82%82%E6%A7%8B%E3%82%8F%E3%81%AA%E3%81%84%E3%80%81%E3%81%82%E3%82%8B%E3%81%84%E3%81%AF%E4%BB%96%E8%80%85%E3%81%AB%E9%85%8D%E5%B8%83%E3%81%97%E3%81%AA%E3%81%84%E3%81%AE%E3%81%A7GPL%E3%81%AE%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%8C%E3%81%82%E3%81%A3%E3%81%A6%E3%82%82%E5%95%8F%E9%A1%8C%E3%81%AA%E3%81%84%E3%81%AE%E3%81%A7%E3%81%82%E3%82%8C%E3%81%B0%E3%80%81mimemagic%E3%82%92%E3%82%A2%E3%83%83%E3%83%97%E3%83%87%E3%83%BC%E3%83%88%E3%81%97%E3%81%A6%E5%AF%BE%E5%BF%9C%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%82%82%E5%8F%AF%E8%83%BD%E3%81%A7%E3%81%99%E3%80%82%0A%E4%BA%92%E6%8F%9B%E6%80%A7%E3%82%92%E9%87%8D%E8%A6%96%E3%81%97%E3%81%A60.3%E7%B3%BB%E3%82%92%E4%BD%BF%E3%81%86%E5%A0%B4%E5%90%88%E3%81%AF%E4%BB%A5%E4%B8%8B%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A0.%20%60shared-mime-info%60%20%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%0A%20%20*%20macOS%3A%20%60brew%20install%20shared-mime-info%60%0A%20%20*%20Ubuntu%2C%20Debian%3A%20%60apt-get%20install%20shared-mime-info%60%20%0A%20%20%20%20*%20ruby%3Abuster%20%E3%82%84%20cimg%2Fruby%20%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%81%AB%E3%81%AF%E5%85%83%E3%80%85%E5%85%A5%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8C%E3%80%81rubylang%2Fruby%20%E3%81%AB%E3%81%AF%E3%81%AA%E3%81%84%0A%20%20*%20Alpine%20Linux%3A%20%60apk%20add%20shared-mime-info%60%0A%20%20%20%20*%20ruby%3Aalpine%20%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%81%AB%E3%81%AF%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%E3%81%A7%E3%81%AF%E5%85%A5%E3%81%A3%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%0A%20%20*%20Amazon%20Linux%202%2C%20Red%20Hat%20Enterprise%20Linux%208%3A%20(%E6%A8%99%E6%BA%96%E3%81%A7%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%B8%88%E3%81%BF%E3%81%AE%E3%81%9F%E3%82%81%E4%BD%9C%E6%A5%AD%E3%81%AF%E4%B8%8D%E8%A6%81)%20%0A%20%20*%20%E8%A9%B3%E3%81%97%E3%81%8F%E3%81%AF%5Bmimemagic%E3%81%AE%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%5D(https%3A%2F%2Fgithub.com%2Fmimemagicrb%2Fmimemagic)%E3%82%92%E5%8F%82%E7%85%A7%0A1.%20Gemfile%E3%81%AB%20%60gem%20%22mimemagic%22%2C%20%22~%3E%200.3.10%22%60%20%E3%81%A8%E3%81%84%E3%81%A3%E3%81%9F%E8%A8%98%E8%BF%B0%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B%0A2.%20%E3%82%BF%E3%83%BC%E3%83%9F%E3%83%8A%E3%83%AB%E3%81%A7%60bundle%20update%20mimemagic%60%20%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%0A%0A%23%23%23%20%E4%BB%96%E3%81%AE%E6%96%B9%E6%B3%95%0A%0Amimemagic%E3%81%AB%E4%BE%9D%E5%AD%98%E3%81%97%E3%81%A6%E3%81%84%E3%82%8Bactivestorage%E3%81%8C%E4%B8%8D%E8%A6%81%E3%81%AA%E3%82%89%E5%A4%96%E3%81%99%E6%89%8B%E3%82%82%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20*%20%EF%BC%88%E4%BD%95%E3%82%89%E3%81%8B%E3%81%AE%E7%90%86%E7%94%B1%E3%81%A7Rails%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%82%92%E4%B8%8A%E3%81%92%E3%82%89%E3%82%8C%E3%81%AA%E3%81%84%E5%A0%B4%E5%90%88%E3%81%AE%E3%81%BF%EF%BC%9F%EF%BC%89%0A%20%20%20*%20https%3A%2F%2Fgist.github.com%2Fmensfeld%2F3437de2fae7fc58faccbf28c2e825443%20%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8C%E3%81%B0activestorage%20gem%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%9B%E3%81%9A%E3%81%ABRails%E3%82%92%E4%BD%BF%E3%81%88%E3%82%8B%0A%20%20%20*%20activestrorage%E4%BB%A5%E5%A4%96%E3%81%AB%E3%80%81paperclip~~%E3%82%84carrierwave~~%E3%81%AA%E3%81%A9%E3%82%82mimemagic%E3%81%AB%E4%BE%9D%E5%AD%98%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%E3%81%9D%E3%81%AE%E3%81%9F%E3%82%81%E3%80%81%E3%81%9D%E3%82%8C%E3%82%89%E3%81%AEgem%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%AB%E3%81%AF%E5%8D%98%E3%81%ABactivestorage%E3%82%92%E5%A4%96%E3%81%97%E3%81%9F%E3%81%A0%E3%81%91%E3%81%A7%E3%81%AFmimemagic%E3%81%AE%E4%BE%9D%E5%AD%98%E3%81%8C%E5%A4%96%E3%82%8C%E3%81%AA%E3%81%84%E3%81%AE%E3%81%A7%E6%B3%A8%E6%84%8F%E3%81%8C%E5%BF%85%E8%A6%81%E3%81%A7%E3%81%99%E3%80%82%0A%0A%23%23%20mimemagic%200.3%E7%B3%BB%E3%81%A80.4%E7%B3%BB%E3%81%AE%E9%81%95%E3%81%84%0A%0A-%200.4%E7%B3%BB%E3%81%AFoverlay.rb%E3%81%8C%5B%E5%89%8A%E9%99%A4%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%5D(https%3A%2F%2Fgithub.com%2Fmimemagicrb%2Fmimemagic%2Fcommit%2F0c9132141901ceaa298a563cdcd72896067f1dd6)%0A%20%20%20%20-%20%60MimeMagic.add%60%E3%81%AE%E4%BD%BF%E7%94%A8%E4%BE%8B%E3%81%BF%E3%81%9F%E3%81%84%E3%81%AA%E3%82%82%E3%81%AE%0A%20%20%20%20-%20%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%E3%81%A7%E3%81%AF%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BE%E3%82%8C%E3%81%AA%E3%81%84(%60require%20%22mimemagic%2Foverlay%22%60)%E3%81%AE%E3%81%A7%E3%80%81%E3%81%93%E3%82%8C%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%84%E3%81%AA%E3%81%91%E3%82%8C%E3%81%B00.4%E7%B3%BB%E3%81%A7%E5%95%8F%E9%A1%8C%E3%81%AA%E3%81%84%E3%81%A8%E6%80%9D%E3%82%8F%E3%82%8C%E3%82%8B%0A-%20CarrierWave(2.2.0%E4%BB%A5%E4%B8%8B)%E3%81%A7%E3%81%AF%E4%BE%9D%E5%AD%98%E6%8C%87%E5%AE%9A%E3%81%8C%20%60%22mimemagic%22%2C%20%22%3E%3D%200.3.0%22%60%20%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%E3%81%93%E3%81%AEgem%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E7%8A%B6%E6%85%8B%E3%81%A7%20%60bundle%20update%20mimemagic%60%20%E3%81%99%E3%82%8B%E3%81%A80.4%E7%B3%BB%E3%81%AE%E6%9C%80%E6%96%B0%E7%89%88%E3%81%8C%E5%85%A5%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%8C%E3%81%82%E3%82%8B%E3%80%82**%E3%81%9F%E3%81%A0%E3%81%97CarrierWave%E3%81%AB%E3%81%AF%E7%8F%BE%E6%99%82%E7%82%B9%E3%81%A70.4%E7%B3%BB%E3%81%A7%E3%81%AF%E5%89%8A%E9%99%A4%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8Boverlay.rb%E3%81%AB%E4%BE%9D%E5%AD%98%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%82%B3%E3%83%BC%E3%83%89%E3%81%8C%E3%81%82%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%E5%BC%B7%E5%88%B6%E7%9A%84%E3%81%AB0.3%E7%B3%BB%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%99%E3%82%8B%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8B%E3%80%82**%0A%20%20-%20%E5%85%B7%E4%BD%93%E7%9A%84%E3%81%AB%E3%81%AF%E3%80%81Gemfile%E3%81%AB%20%60gem%20'mimemagic'%2C%20'~%3E%200.3.0'%60%20%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%97%E3%81%A6%E3%80%810.3.x%E7%B3%BB%E3%82%92%E8%A6%81%E6%B1%82%E3%81%99%E3%82%8B%E3%80%82Rails%E3%81%A8%E5%90%8C%E3%81%98%E3%81%8FCarrierWave%E3%81%AE%E6%AC%A1%E6%9C%9F%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%81%A7mimemagic%E3%81%B8%E3%81%AE%E4%BE%9D%E5%AD%98%E3%81%8C%E5%8F%96%E3%82%8A%E5%A4%96%E3%81%95%E3%82%8C%E3%81%9F%E3%82%89%E3%80%81%E3%81%93%E3%81%AE%E6%8C%87%E5%AE%9A%E3%82%82%E5%89%8A%E9%99%A4%E3%81%97%E3%81%A6mimemagic%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%AA%E3%81%84%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B%E3%81%A8%E8%89%AF%E3%81%84%E3%80%82%0A%0A%23%23%20mimemagic%E3%81%AB%E4%BE%9D%E5%AD%98%E3%81%97%E3%81%A6%E3%81%84%E3%82%8BRails%E4%BB%A5%E5%A4%96%E3%81%AEgem%0A*%20%5BCarrierWave%5D(https%3A%2F%2Fgithub.com%2Fcarrierwaveuploader%2Fcarrierwave)%0A%20%20*%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89%E7%94%A8%E3%81%AE%E3%83%A1%E3%82%B8%E3%83%A3%E3%83%BC%E3%81%AA%E8%80%81%E8%88%97gem%E3%80%82%E6%96%B9%E5%BC%8F%E3%81%AF%E9%81%95%E3%81%86%E3%81%8CActiveStorage%E3%81%AE%E3%82%88%E3%81%86%E3%81%AA%E5%AD%98%E5%9C%A8%E3%80%82%0A%20%20*%20~~%5B%E3%81%93%E3%81%A1%E3%82%89%E3%81%AEissue%5D(https%3A%2F%2Fgithub.com%2Fcarrierwaveuploader%2Fcarrierwave%2Fissues%2F2548)%E3%81%A7%E6%9C%89%E5%BF%97%E3%81%8C%E8%AD%B0%E8%AB%96%E3%80%81%E5%AF%BE%E5%BF%9C%E4%B8%AD%E3%80%82%20%E4%B8%80%E9%83%A8%E3%83%95%E3%82%A9%E3%83%BC%E3%82%AF%E5%85%88%E3%81%A7%E4%BF%AE%E6%AD%A3%E5%AF%BE%E5%BF%9C%E3%82%82%EF%BC%9F%E3%83%A1%E3%83%B3%E3%83%86%E3%83%8A%E3%81%AF%E9%9D%99%E8%A6%B3%E4%B8%AD%E3%81%8B%E3%80%82gem%E3%81%A8%E3%81%97%E3%81%A6%E3%81%AE%E5%85%AC%E5%BC%8F%E5%AF%BE%E5%BF%9C%E3%81%AF%E4%BB%8A%E3%81%AE%E3%81%A8%E3%81%93%E3%82%8D%E3%81%AA%E3%81%97%E3%80%82content%20type%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%ABmimemagic%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8C%E3%80%81%E4%BD%B5%E7%94%A8%E3%81%97%E3%81%A6%E3%81%84%E3%82%8Bminimime%E3%81%AB%E4%B8%80%E6%9C%AC%E5%8C%96%E3%81%AA%E3%81%A9%E3%81%AF%E5%8F%AF%E8%83%BD%E3%81%8B%E3%82%82%E3%80%82~~%0A%20%20*%20~~**%E4%B8%8A%E3%81%AE%E3%80%8Cmimemagic%E3%82%92%E6%9C%80%E6%96%B0%E7%89%88%E3%81%AB%E4%B8%8A%E3%81%92%E3%82%8B%E3%80%8D%E3%82%92%E8%A1%8C%E3%81%86%E3%81%A80.4.x%E7%B3%BB%E6%9C%80%E6%96%B0%E7%89%88%E3%81%8C%E5%85%A5%E3%81%A3%E3%81%A6%E3%81%97%E3%81%BE%E3%81%86%E3%81%9F%E3%82%81%E3%80%810.3.x%E7%B3%BB%E3%82%92%E5%BC%B7%E5%88%B6%E3%81%99%E3%82%8B%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8B%EF%BC%88%E4%B8%8A%E8%A8%98%E3%81%AEGemfile%E3%81%A7%E3%81%AE%E6%8C%87%E5%AE%9A%E3%82%92%E5%8F%82%E7%85%A7%EF%BC%89**~~%0A%20%20*%20~~Rails%E3%81%AB%E5%90%88%E3%82%8F%E3%81%9B%E3%81%A6mimemagic%E4%BE%9D%E5%AD%98%E3%82%92marcel%E3%81%AB%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%82%8B%E3%83%97%E3%83%AB%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%81%8C%E5%87%BA%E3%81%A6%E3%81%84%E3%82%8B%E3%80%82%E3%83%9E%E3%83%BC%E3%82%B8%E3%81%95%E3%82%8C%E3%82%8C%E3%81%B0Rails%E3%81%AE%E5%AF%BE%E5%BF%9C%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E4%BB%A5%E9%99%8D%E3%81%A7%E3%81%AF%E7%89%B9%E5%88%A5%E3%81%AA%E5%AF%BE%E5%BF%9C%E3%81%8C%E5%BF%85%E8%A6%81%E3%81%AA%E3%81%8F%E3%81%AA%E3%82%8A%E3%81%9D%E3%81%86%20%E3%83%9E%E3%83%BC%E3%82%B8%E3%81%95%E3%82%8C%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%E6%AC%A1%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E5%BE%85%E3%81%A1%E3%80%82~~%0A%20%20*%202.2.1%E3%81%8C%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E3%81%95%E3%82%8C%E3%80%81Rails%E5%90%8C%E6%A7%98%E3%81%ABmarcel%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%A7mimemagic%E3%81%AB%E4%BE%9D%E5%AD%98%E3%81%97%E3%81%AA%E3%81%8F%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%0A%20%20*%202.2.0%E4%BB%A5%E4%B8%8B%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%AFmimemagic%E3%81%AB%E4%BE%9D%E5%AD%98%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81mimemagic%200.3.x%E7%B3%BB%E3%82%92%E5%BC%B7%E5%88%B6%E3%81%99%E3%82%8B%E6%8E%AA%E7%BD%AE%E3%82%92%E3%81%A8%E3%81%A3%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%20%0A%0A*%20%5BCarrierwave%3A%3ABase64%5D(https%3A%2F%2Fgithub.com%2Fy9v%2Fcarrierwave-base64)%0A%20%20*%20CarrierWave%E3%81%A8%E4%B8%80%E7%B7%92%E3%81%AB%E4%BD%BF%E7%94%A8%E3%81%97%E3%80%81%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92Base64%E3%81%A7%E6%89%B1%E3%81%86%E3%81%9F%E3%82%81%E3%81%AEgem%E3%80%82%0A%20%20*%20%5B%E3%81%93%E3%81%A1%E3%82%89%E3%81%AEissue%5D(https%3A%2F%2Fgithub.com%2Fy9v%2Fcarrierwave-base64%2Fissues%2F84)%E3%81%8Cmimemagic%E9%96%A2%E9%80%A3%E3%80%82gem%E3%81%A8%E3%81%97%E3%81%A6%E3%81%AE%E5%85%AC%E5%BC%8F%E5%AF%BE%E5%BF%9C%E3%81%AF%E4%BB%8A%E3%81%AE%E3%81%A8%E3%81%93%E3%82%8D%E3%81%AA%E3%81%97%E3%80%82%20%E5%86%85%E9%83%A8%E7%9A%84%E3%81%AB%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA%E3%81%8B%E3%82%89%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%BF%E3%82%A4%E3%83%97%E3%82%92%E5%88%A4%E5%AE%9A%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%ABCarrierWave%E3%81%AE%E5%AE%9F%E8%A3%85%E3%81%AB%E8%BF%BD%E5%8A%A0%E3%81%97%E3%81%A6mimemagic%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%81%AE%E3%81%A7%E3%80%81%E4%BB%96%E3%81%AEgem%E3%81%AB%E5%A4%89%E6%9B%B4%E3%81%AA%E3%81%A9%E3%81%AF%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%95%E3%81%9D%E3%81%86%E3%80%82%0A%20%20*%20%E4%B8%8A%E3%81%AE%E3%80%8Cmimemagic%E3%82%92%E6%9C%80%E6%96%B0%E7%89%88%E3%81%AB%E4%B8%8A%E3%81%92%E3%82%8B%E3%80%8D%E3%82%92%E8%A1%8C%E3%81%86%E3%81%93%E3%81%A8%E3%81%A7%E7%8F%BE%E6%99%82%E7%82%B9%E3%81%A7%E3%81%AF%E8%A7%A3%E6%B6%88%E3%81%A7%E3%81%8D%E3%82%8B%EF%BC%88CarrierWave%E5%8D%98%E7%8B%AC%E4%BD%BF%E7%94%A8%E6%99%82%E3%81%AEmimemagic%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E5%95%8F%E9%A1%8C%E3%81%AF%E7%99%BA%E7%94%9F%E3%81%97%E3%81%AA%E3%81%84%EF%BC%89%0A%20%20*%20v2.9.0%E3%81%8C%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E3%81%95%E3%82%8C%E3%80%81CarrierWave%E3%81%A8%E5%90%8C%E3%81%98%E3%81%8Fmimemagic%E3%81%AE%E4%BB%A3%E3%82%8F%E3%82%8A%E3%81%ABmarcel%E3%82%92%E4%BD%BF%E3%81%86%E3%82%88%E3%81%86%E3%81%AB%E3%80%82%E3%81%AA%E3%81%8A%E3%80%81CarrierWave%E3%81%AE2.2.1%E3%82%82%E5%BF%85%E8%A6%81%E3%81%AB%E3%81%AA%E3%82%8B%E3%80%82%0A*%20%5BPaperclip%5D(https%3A%2F%2Fgithub.com%2Fthoughtbot%2Fpaperclip)%20%0A%20%20*%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89%E7%94%A8%E3%81%AE%E3%83%A1%E3%82%B8%E3%83%A3%E3%83%BC%E3%81%AA%E8%80%81%E8%88%97gem%E3%81%A7%E3%80%81CarrierWave%E3%81%A8%E4%BA%BA%E6%B0%97%E3%82%92%E4%BA%8C%E5%88%86%E3%81%97%E3%81%A6%E3%81%84%E3%81%9F%E3%80%82ActiveStorage%E3%81%AE%E7%99%BB%E5%A0%B4%E3%81%A7Deprecated%E3%81%A8%E3%81%AA%E3%82%8A%E3%80%81%E7%A7%BB%E8%A1%8C%E3%82%92%E6%8E%A8%E5%A5%A8%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%80%82%0A%20%20*%20%5B%E3%81%93%E3%81%A1%E3%82%89%E3%81%AEissue%5D(https%3A%2F%2Fgithub.com%2Fthoughtbot%2Fpaperclip%2Fissues%2F2678)%E3%81%A7%E8%AD%B0%E8%AB%96%E4%B8%AD%E3%80%82%0A%20%20*%20Deprecated%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%E6%9C%AC%E5%AE%B6%E3%81%AE%5B%E3%83%95%E3%82%A9%E3%83%BC%E3%82%AF%E5%85%88%5D(https%3A%2F%2Fgithub.com%2Fkreeti%2Fkt-paperclip)%E3%81%A7%E3%81%AF%E9%9D%9E%E5%85%AC%E5%BC%8F%E3%81%AB%E3%83%A1%E3%83%B3%E3%83%86%E3%83%8A%E3%83%B3%E3%82%B9%E7%B6%99%E7%B6%9A%E4%B8%AD%E3%81%A7%E3%80%81%5Bmimemagic%E3%82%92%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8BPR%5D(https%3A%2F%2Fgithub.com%2Fkreeti%2Fkt-paperclip%2Fpull%2F52)%E3%81%8C%E7%AB%8B%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%80%82%20%0A%20%20*%20%E3%83%95%E3%82%A9%E3%83%BC%E3%82%AF%E5%85%88%E3%81%A7%E3%81%AFCarrierWave%E3%81%A8%E5%90%8C%E3%81%98%E3%81%8F%E3%80%81mimemagic%E3%82%92marcel%E3%81%AB%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%82%8B%E3%83%97%E3%83%AB%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%81%8C%E5%87%BA%E3%81%A6%E3%81%84%E3%82%8B%E3%80%82%0A%20%20*%20%E6%9C%AC%E5%AE%B6%E3%81%AB%E3%82%82%E5%90%8C%E6%A7%98%E3%81%AE%E3%83%97%E3%83%AB%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%81%8C%E5%87%BA%E3%81%A6%E3%81%84%E3%81%9F%E3%81%8C%E3%80%81mimemagic%E3%81%8C%E3%81%99%E3%81%A7%E3%81%ABMIT%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9%E3%81%A7%E3%81%82%E3%82%8B%E3%81%93%E3%81%A8%E3%80%81%E6%9C%AC%E5%AE%B6%E8%87%AA%E4%BD%93%E3%81%8CDeprecated%E3%81%A7%E3%81%82%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8B%E3%82%89%E5%8D%B4%E4%B8%8B%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%80%82%E3%80%82%0A%0A%23%23%20%E3%81%8B%E3%82%93%E3%81%9F%E3%82%93%E3%81%AA%E7%B5%8C%E7%B7%AF%0A%0A1.%20mimemagic%200.3.5%E4%BB%A5%E5%89%8D%E3%81%8C%E3%80%81MIT%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9%E3%81%A7%E9%85%8D%E5%B8%83%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%9F%E3%81%8C%E3%80%81GPL%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%EF%BC%88freedesktop.org.xml%EF%BC%89%E3%81%AB%E4%BE%9D%E5%AD%98%E3%81%97%E3%81%A6%E3%81%84%E3%81%9F%0A2.%200.3.5%E3%81%BE%E3%81%A7%E3%81%AE%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AEgem%E3%81%8Crubygems.org%E3%81%8B%E3%82%89yank%EF%BC%88%E5%89%8A%E9%99%A4%EF%BC%89%E3%81%95%E3%82%8C%E3%80%810.3.6%E3%81%8CGPL%E3%81%A8%E3%81%97%E3%81%A6%E5%85%AC%E9%96%8B%E3%81%95%E3%82%8C%E3%81%9F%0A3.%200.3.6%E3%81%8C%E5%86%8D%E5%BA%A6yank%E3%81%95%E3%82%8C%E3%80%81%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%95%E3%82%8C%E3%81%9Ffreedesktop.org.xml%E3%82%92%E4%BD%BF%E3%81%86%E3%82%88%E3%81%86%E3%81%AB%E5%A4%89%E3%82%8F%E3%81%A3%E3%81%9F0.3.7%E3%81%8CMIT%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9%E3%81%A7%E5%86%8D%E5%BA%A6%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E3%81%95%E3%82%8C%E3%81%9F%0A%20%20%20*%20%E3%81%9D%E3%81%AE%E3%81%9F%E3%82%81%E3%80%81brew%20install%20shared-mime-info%E3%81%AA%E3%81%A9%E3%81%A7%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%ABfreedesktop.org.xml%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E5%BF%85%E8%A6%81%E3%81%8C%E7%94%9F%E3%81%98%E3%81%9F%0A4.%20Rails%E3%81%8Cmimemagic%E3%81%B8%E3%81%AE%E4%BE%9D%E5%AD%98%E3%82%92%E5%8F%96%E3%82%8A%E9%99%A4%E3%81%84%E3%81%9F%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%82%92%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E3%81%97%E3%81%9F%0A%20%20%20*%20freedesktop.org.xml%E3%81%AE%E4%BB%A3%E3%82%8F%E3%82%8A%E3%81%AB%E3%80%81%5BApache%20Tika%5D(https%3A%2F%2Ftika.apache.org%2F)%E3%81%AE%E6%83%85%E5%A0%B1%EF%BC%88Apache%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9%EF%BC%89%E3%82%92%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%E3%80%82%5BPR%5D(https%3A%2F%2Fgithub.com%2Frails%2Fmarcel%2Fpull%2F30)%0A%0A%23%23%20GPL2.0%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9%E3%82%92%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B%E3%81%A8%E3%80%81%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E8%A6%81%E6%B1%82%E3%81%95%E3%82%8C%E3%81%9F%E3%82%89%E9%96%8B%E7%A4%BA%E3%81%97%E3%81%AA%E3%81%84%E3%81%A8%E3%81%84%E3%81%91%E3%81%AA%E3%81%84%E3%81%AE%EF%BC%9F%0A%0Ahttps%3A%2F%2Fwww.gnu.org%2Flicenses%2Fold-licenses%2Fgpl-2.0-faq.ja.html%23GPLRequireSourcePostedPublic%20%E3%82%88%E3%82%8A%E5%BC%95%E7%94%A8%0A%0A%3E%20GPL%E3%81%A7%E3%81%AF%E3%80%81%E3%81%82%E3%81%AA%E3%81%9F%E3%81%8C%E6%94%B9%E5%A4%89%E3%81%97%E3%81%9F%E7%89%88%E3%82%92%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%AF%E8%A6%81%E6%B1%82%E3%81%97%E3%81%A6%E3%81%AF%E3%81%84%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%E6%94%B9%E5%A4%89%E3%82%92%E5%8A%A0%E3%81%88%E3%81%A6%E3%80%81%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E3%81%9B%E3%81%9A%E3%81%AB%E5%80%8B%E4%BA%BA%E7%9A%84%E3%81%AB%E4%BD%BF%E3%81%86%E3%81%AE%E3%81%AF%E3%81%82%E3%81%AA%E3%81%9F%E3%81%AE%E8%87%AA%E7%94%B1%E3%81%A7%E3%81%99%E3%80%82%E3%81%93%E3%82%8C%E3%81%AF%E7%B5%84%E7%B9%94(%E4%BC%81%E6%A5%AD%E3%82%92%E5%90%AB%E3%82%80)%E3%81%A7%E3%82%82%E5%90%8C%E6%A7%98%E3%81%A7%E3%80%81%E3%81%82%E3%82%8B%E7%B5%84%E7%B9%94%E3%81%AF%E3%80%81%E6%94%B9%E5%A4%89%E3%81%97%E3%81%9F%E7%89%88%E3%82%92%E7%94%A8%E6%84%8F%E3%81%97%E3%81%A6%E3%81%9D%E3%82%8C%E3%82%92%E7%B5%84%E7%B9%94%E5%A4%96%E3%81%AB%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%AA%E3%81%8F%E5%86%85%E9%83%A8%E7%9A%84%E3%81%AB%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%0A%3E%20%E3%81%97%E3%81%8B%E3%81%97%E3%80%81%E3%82%82%E3%81%97%E3%81%82%E3%81%AA%E3%81%9F%E3%81%8C%E6%94%B9%E5%A4%89%E3%81%95%E3%82%8C%E3%81%9F%E7%89%88%E3%82%92%E4%BD%95%E3%82%89%E3%81%8B%E3%81%AE%E5%BD%A2%E3%81%A7%E5%85%AC%E3%81%AB%E3%81%99%E3%82%8B%E3%81%AA%E3%82%89%E3%81%B0%E3%80%81GPL%E3%81%AF%E3%81%82%E3%81%AA%E3%81%9F%E3%81%8C%E6%94%B9%E5%A4%89%E3%81%97%E3%81%9F%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E3%83%A6%E3%83%BC%E3%82%B6%E3%81%8CGPL%E3%81%AE%E3%82%82%E3%81%A8%E3%81%A7%E5%85%A5%E6%89%8B%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E8%A6%81%E6%B1%82%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%3E%20%0A%3E%20%E3%81%99%E3%81%AA%E3%82%8F%E3%81%A1%E3%80%81GPL%E3%81%AF%E6%94%B9%E5%A4%89%E3%81%95%E3%82%8C%E3%81%9F%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E7%89%B9%E5%AE%9A%E3%81%AE%E3%82%84%E3%82%8A%E6%96%B9%E3%81%A7%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E3%81%99%E3%82%8B%E8%A8%B1%E5%8F%AF%E3%82%92%E4%B8%8E%E3%81%88%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%81%8C%E3%80%81%E5%88%A5%E3%81%AE%E5%BD%A2%E3%81%A7%E3%81%AE%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E3%81%AF%E8%A8%B1%E5%8F%AF%E3%81%97%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%E3%81%AE%E3%81%A7%E3%81%99%E3%80%82%E3%81%97%E3%81%8B%E3%81%97%E3%80%81%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E3%81%99%E3%82%8B%E3%81%8B%E3%81%A9%E3%81%86%E3%81%8B%E3%81%AF%E3%81%82%E3%81%AA%E3%81%9F%E6%AC%A1%E7%AC%AC%E3%81%A7%E3%81%99%E3%80%82%0A%0A%23%23%20(%E3%81%8A%E3%81%BE%E3%81%91)mimemagic%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E4%B8%80%E8%A6%A7%0A%0Ahttps%3A%2F%2Frubygems.org%2Fgems%2Fmimemagic%2Fversions%0A%0A-%20~0.3.5%5Byanked%5D%20MIT%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9%20%E4%BB%8A%E5%9B%9E%E3%81%AE%E4%BB%B6%E3%81%A7%E5%8F%96%E3%82%8A%E4%B8%8B%E3%81%92%E3%82%89%E3%82%8C%E3%81%9F%E3%80%82%0A-%200.3.6%5Byanked%5D%20%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9%E3%81%A0%E3%81%91GPLv2%E3%81%AB%E7%9B%B4%E3%81%97%E3%81%9F%E3%82%82%E3%81%AE%0A-%200.4.0%5Byanked%5D%0A-%200.3.7%20freedesktop.org.xml%E3%82%92%E5%90%8C%E6%A2%B1%E3%81%97%E3%81%AA%E3%81%84%E3%82%88%E3%81%86%E3%81%AB%E3%81%AA%E3%82%8A%E3%80%81%E4%BB%A3%E3%82%8F%E3%82%8A%E3%81%AB%E3%83%A6%E3%83%BC%E3%82%B6%E3%81%8C%E8%87%AA%E5%89%8D%E3%81%A7%E7%94%A8%E6%84%8F%E3%81%99%E3%82%8B%E5%BD%A2%E3%81%AB%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%A7MIT%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9%E3%81%AB%E6%88%BB%E3%81%A3%E3%81%9F%0A-%200.3.8%0A-%200.3.9%0A-%200.3.10%0A-%200.4.1%0A-%200.4.2%0A-%200.4.3%0A%0A%E5%8F%82%E8%80%83%0A-%20https%3A%2F%2Fgithub.com%2Fmimemagicrb%2Fmimemagic%2Fblob%2Fmaster%2FCHANGELOG.md%0A-%20https%3A%2F%2Fgithub.com%2Fmimemagicrb%2Fmimemagic%2Fcommits%2Fmaster%0A%0A%23%23%20(%E3%81%8A%E3%81%BE%E3%81%912)%20marcel%E3%81%AE%E6%8C%99%E5%8B%95%E5%A4%89%E6%9B%B4%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%0A%0Amarcel%E3%81%AEmime%20type%E5%88%A4%E5%AE%9A%E3%81%AE%E6%8C%99%E5%8B%95%E3%81%8C%E4%B8%80%E9%83%A8%E5%A4%89%E3%82%8F%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%AE%E3%81%A7%E6%B3%A8%E6%84%8F%0Ahttps%3A%2F%2Fsasa5740.hatenablog.com%2Fentry%2F2021%2F03%2F29%2F223635%0A%0Amarcel%E3%81%A7issue%E3%81%8C%E4%B8%8A%E3%81%8C%E3%81%A3%E3%81%A6%E3%81%8A%E3%82%8A%E3%80%81marcel%E3%81%AEmimemagic%E5%A4%96%E3%81%97%E3%81%AE%E5%AF%BE%E5%BF%9C%E3%82%92%E8%A1%8C%E3%81%A3%E3%81%9F%E3%83%A1%E3%83%B3%E3%83%86%E3%83%8A%E3%81%8C%E5%8F%8D%E5%BF%9C%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%81%AE%E3%81%A7%E3%81%9D%E3%81%AE%E3%81%86%E3%81%A1%E4%BF%AE%E6%AD%A3%E3%81%95%E3%82%8C%E3%82%8B%E3%81%8B%E3%82%82%E3%80%82%0Ahttps%3A%2F%2Fgithub.com%2Frails%2Fmarcel%2Fissues%2F35%0A%0A%0A%23%23%20(%E3%81%8A%E3%81%BE%E3%81%913)%20rails%205.2.5%20%E3%81%A8%206.1.x%20%E4%BB%A5%E5%A4%96%E3%81%AE%20rails%20%E3%82%92%E7%B5%84%E3%81%BF%E5%90%88%E3%82%8F%E3%81%9B%E3%81%A6%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E4%BA%BA%E5%90%91%E3%81%91%E3%81%AE%E6%B3%A8%E6%84%8F%E7%82%B9%0A%0A%3E%20mimemagic%20%E3%81%AB%E4%BE%9D%E5%AD%98%E3%81%97%E3%81%AA%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%9F%20rails%205.2.5%20%E3%81%AB%20CSRF%20%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%AE%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E3%81%8C%20Urlsafe%20Base64%20%E3%81%AB%E3%81%AA%E3%82%8B%E5%A4%89%E6%9B%B4%E3%81%8C(%E6%84%8F%E5%9B%B3%E3%81%9B%E3%81%9A%3F)%E5%85%A5%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%82%88%E3%81%86%E3%81%A7%205.2.5%20%E3%81%A7%E7%94%9F%E6%88%90%E3%81%95%E3%82%8C%E3%81%9F%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%8C%205.2.4.x%20%E4%BB%A5%E4%B8%8B%20or%206.0.x%20%E3%81%A7%E8%AA%AD%E3%82%81%E3%81%AA%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%97%E3%81%BE%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%82%88%E3%81%86%E3%81%AA%E3%81%AE%E3%81%A7%20rails%205.2.5%20%E3%81%A8%206.1.x%20%E4%BB%A5%E5%A4%96%E3%81%AE%20rails%20%E3%82%92%E7%B5%84%E3%81%BF%E5%90%88%E3%82%8F%E3%81%9B%E3%81%A6%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E4%BA%BA%E3%81%AF%E8%A6%81%E6%B3%A8%E6%84%8F%E3%81%A7%E3%81%99%E3%80%82%0A%0Ahttps%3A%2F%2Fgithub.com%2Frails%2Frails%2Fissues%2F41783","viewMode":"publish","isOwner":false,"isSignIn":false,"isLiked":false,"isBookmarked":false,"publishType":"view","commentCount":0,"isNotesRecommendationsEnabled":true,"recommendedNotes":[],"lastChangeUserInfo":{"name":"Masayoshi%20Takahashi","path":"takahashim","avatarUrl":"https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F10401%3Fs%3D96"}}`); (function () { const decodeStringProps = (props) => { for (const key in props) { if (typeof props[key] === 'string') { props[key] = decodeURIComponent(props[key]) } else if (typeof props[key] === 'object') { decodeStringProps(props[key]) } } } decodeStringProps(window.publishProps) })() </script> <meta id="style-tag-insertion" /> <script src="https://tally.so/widgets/embed.js"></script> </head> <body style="display:none;"> <div id="toasts-container" class="toasts-container z-[2000]"></div> <div id="publish-page"># mimemagicの最新動向 https://hackmd.io/@mametter/mimemagic-info-ja この文書は[ruby-jp Slack](https://ruby-jp.github.io/)の`#rails`チャンネルの議論を有志を中心にまとめたものです。 ## 起きたことの概要 Railsの一部であるactivestorageが依存しているmimemagic gemが、ライセンス関連の問題でrubygems.orgから取り下げられました。これにより、mimemagic <= 0.3.5に依存しているRailsアプリがbundle installに失敗するようになりました。 mimemagic <= 0.3.5に依存している場合のエラーの例: > Your bundle is locked to mimemagic (0.3.5), but that version could not be found shared-mime-infoがインストールされていない場合のエラーの例: > Could not find MIME type database in the following locations: > ["/usr/local/share/mime/packages/freedesktop.org.xml", "/opt/homebrew/share/mime/packages/freedesktop.org.xml", "/usr/share/mime/packages/freedesktop.org.xml"] ## Railsユーザーはどうすればいい? (2021/03/27現在)Rails 5.2.5 / 6.0.3.6 / 6.1.3.1 はmimemagicに依存しなくなりました。これらにバージョンアップしましょう。 https://weblog.rubyonrails.org/2021/3/26/marcel-upgrade-releases/ ### 都合によりRailsをアップデートできない・したくない場合 アプリケーションを配布する際のライセンスがGPLになっても構わない、あるいは他者に配布しないのでGPLのライブラリがあっても問題ないのであれば、mimemagicをアップデートして対応することも可能です。 互換性を重視して0.3系を使う場合は以下のようにします。 0. `shared-mime-info` をインストールする * macOS: `brew install shared-mime-info` * Ubuntu, Debian: `apt-get install shared-mime-info` * ruby:buster や cimg/ruby コンテナには元々入っているが、rubylang/ruby にはない * Alpine Linux: `apk add shared-mime-info` * ruby:alpine コンテナにはデフォルトでは入っていない * Amazon Linux 2, Red Hat Enterprise Linux 8: (標準でインストール済みのため作業は不要) * 詳しくは[mimemagicのドキュメント](https://github.com/mimemagicrb/mimemagic)を参照 1. Gemfileに `gem "mimemagic", "~> 0.3.10"` といった記述を追加する 2. ターミナルで`bundle update mimemagic` を実行する ### 他の方法 mimemagicに依存しているactivestorageが不要なら外す手もあります。 * (何らかの理由でRailsのバージョンを上げられない場合のみ?) * https://gist.github.com/mensfeld/3437de2fae7fc58faccbf28c2e825443 のようにすればactivestorage gemをインストールせずにRailsを使える * activestrorage以外に、paperclip~~やcarrierwave~~などもmimemagicに依存しています。そのため、それらのgemを使っている場合には単にactivestorageを外しただけではmimemagicの依存が外れないので注意が必要です。 ## mimemagic 0.3系と0.4系の違い - 0.4系はoverlay.rbが[削除されている](https://github.com/mimemagicrb/mimemagic/commit/0c9132141901ceaa298a563cdcd72896067f1dd6) - `MimeMagic.add`の使用例みたいなもの - デフォルトでは読み込まれない(`require "mimemagic/overlay"`)ので、これを使っていなければ0.4系で問題ないと思われる - CarrierWave(2.2.0以下)では依存指定が `"mimemagic", ">= 0.3.0"` になっているため、このgemを使用している状態で `bundle update mimemagic` すると0.4系の最新版が入る場合がある。**ただしCarrierWaveには現時点で0.4系では削除されているoverlay.rbに依存しているコードがあるため、強制的に0.3系を指定する必要がある。** - 具体的には、Gemfileに `gem 'mimemagic', '~> 0.3.0'` を追加して、0.3.x系を要求する。Railsと同じくCarrierWaveの次期バージョンでmimemagicへの依存が取り外されたら、この指定も削除してmimemagicをインストールしないようにすると良い。 ## mimemagicに依存しているRails以外のgem * [CarrierWave](https://github.com/carrierwaveuploader/carrierwave) * ファイルアップロード用のメジャーな老舗gem。方式は違うがActiveStorageのような存在。 * ~~[こちらのissue](https://github.com/carrierwaveuploader/carrierwave/issues/2548)で有志が議論、対応中。 一部フォーク先で修正対応も?メンテナは静観中か。gemとしての公式対応は今のところなし。content typeを取得するためにmimemagicを使っているが、併用しているminimimeに一本化などは可能かも。~~ * ~~**上の「mimemagicを最新版に上げる」を行うと0.4.x系最新版が入ってしまうため、0.3.x系を強制する必要がある(上記のGemfileでの指定を参照)**~~ * ~~Railsに合わせてmimemagic依存をmarcelに切り替えるプルリクエストが出ている。マージされればRailsの対応バージョン以降では特別な対応が必要なくなりそう マージされました。次バージョンリリース待ち。~~ * 2.2.1がリリースされ、Rails同様にmarcelを使用することでmimemagicに依存しなくなりました。 * 2.2.0以下を使用する場合はmimemagicに依存するため、mimemagic 0.3.x系を強制する措置をとってください。 * [Carrierwave::Base64](https://github.com/y9v/carrierwave-base64) * CarrierWaveと一緒に使用し、ファイルをBase64で扱うためのgem。 * [こちらのissue](https://github.com/y9v/carrierwave-base64/issues/84)がmimemagic関連。gemとしての公式対応は今のところなし。 内部的にファイルのバイナリからファイルタイプを判定するためにCarrierWaveの実装に追加してmimemagicを使用しているので、他のgemに変更などはできなさそう。 * 上の「mimemagicを最新版に上げる」を行うことで現時点では解消できる(CarrierWave単独使用時のmimemagicのバージョン問題は発生しない) * v2.9.0がリリースされ、CarrierWaveと同じくmimemagicの代わりにmarcelを使うように。なお、CarrierWaveの2.2.1も必要になる。 * [Paperclip](https://github.com/thoughtbot/paperclip) * ファイルアップロード用のメジャーな老舗gemで、CarrierWaveと人気を二分していた。ActiveStorageの登場でDeprecatedとなり、移行を推奨されている。 * [こちらのissue](https://github.com/thoughtbot/paperclip/issues/2678)で議論中。 * Deprecatedになった本家の[フォーク先](https://github.com/kreeti/kt-paperclip)では非公式にメンテナンス継続中で、[mimemagicを削除するPR](https://github.com/kreeti/kt-paperclip/pull/52)が立っている。 * フォーク先ではCarrierWaveと同じく、mimemagicをmarcelに切り替えるプルリクエストが出ている。 * 本家にも同様のプルリクエストが出ていたが、mimemagicがすでにMITライセンスであること、本家自体がDeprecatedであることから却下されている。。 ## かんたんな経緯 1. mimemagic 0.3.5以前が、MITライセンスで配布されていたが、GPLのファイル(freedesktop.org.xml)に依存していた 2. 0.3.5までのすべてのgemがrubygems.orgからyank(削除)され、0.3.6がGPLとして公開された 3. 0.3.6が再度yankされ、システムにインストールされたfreedesktop.org.xmlを使うように変わった0.3.7がMITライセンスで再度リリースされた * そのため、brew install shared-mime-infoなどでシステムにfreedesktop.org.xmlをインストールする必要が生じた 4. Railsがmimemagicへの依存を取り除いたバージョンをリリースした * freedesktop.org.xmlの代わりに、[Apache Tika](https://tika.apache.org/)の情報(Apacheライセンス)を利用するようになった。[PR](https://github.com/rails/marcel/pull/30) ## GPL2.0ライセンスを利用すると、ソースコードを要求されたら開示しないといけないの? https://www.gnu.org/licenses/old-licenses/gpl-2.0-faq.ja.html#GPLRequireSourcePostedPublic より引用 > GPLでは、あなたが改変した版をリリースすることは要求してはいません。改変を加えて、リリースせずに個人的に使うのはあなたの自由です。これは組織(企業を含む)でも同様で、ある組織は、改変した版を用意してそれを組織外にリリースすることなく内部的に利用することができます。 > しかし、もしあなたが改変された版を何らかの形で公にするならば、GPLはあなたが改変したソースコードをユーザがGPLのもとで入手できるようにすることを要求します。 > > すなわち、GPLは改変されたプログラムを特定のやり方でリリースする許可を与えていますが、別の形でのリリースは許可していないのです。しかし、リリースするかどうかはあなた次第です。 ## (おまけ)mimemagicバージョン一覧 https://rubygems.org/gems/mimemagic/versions - ~0.3.5[yanked] MITライセンス 今回の件で取り下げられた。 - 0.3.6[yanked] ライセンスだけGPLv2に直したもの - 0.4.0[yanked] - 0.3.7 freedesktop.org.xmlを同梱しないようになり、代わりにユーザが自前で用意する形にすることでMITライセンスに戻った - 0.3.8 - 0.3.9 - 0.3.10 - 0.4.1 - 0.4.2 - 0.4.3 参考 - https://github.com/mimemagicrb/mimemagic/blob/master/CHANGELOG.md - https://github.com/mimemagicrb/mimemagic/commits/master ## (おまけ2) marcelの挙動変更について marcelのmime type判定の挙動が一部変わっているので注意 https://sasa5740.hatenablog.com/entry/2021/03/29/223635 marcelでissueが上がっており、marcelのmimemagic外しの対応を行ったメンテナが反応しているのでそのうち修正されるかも。 https://github.com/rails/marcel/issues/35 ## (おまけ3) rails 5.2.5 と 6.1.x 以外の rails を組み合わせて使っている人向けの注意点 > mimemagic に依存しなくなった rails 5.2.5 に CSRF トークンのフォーマットが Urlsafe Base64 になる変更が(意図せず?)入っているようで 5.2.5 で生成されたセッションが 5.2.4.x 以下 or 6.0.x で読めなくなってしまっているようなので rails 5.2.5 と 6.1.x 以外の rails を組み合わせて使っている人は要注意です。 https://github.com/rails/rails/issues/41783</div> <!-- signin modal --> <div class="modal fade signin-modal" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <button type="button" class="close" data-dismiss="modal" aria-label="Close" style="margin-top: 10px; right: 20px; position: absolute;"><span aria-hidden="true">×</span></button> <h3>Sign in</h3> <form data-toggle="validator" role="form" class="form-horizontal" method="post" enctype="application/x-www-form-urlencoded" id="signin-form"> <div class="hmd-dn"><input type="hidden" name="_csrf" value="v42hXqoI-KDqNdF4yxd4tOjAOE6lkHbVUxQ8"></div> <div class="hmd-dn"><input type="hidden" name="create_team" value="false"></div> <div class="hmd-dn"><input type="hidden" name="create_paid_team" value="false"></div> <div class="form-group "> <label for="email" class="control-label">Email</label> <label for="inputEmail" class="control-label pull-right errors"> </label> <span class="help-block control-label with-errors pull-right" style="margin-top: 14px"></span> <div class="input-block"> <input type="email" class="form-control" name="email" placeholder="Your email" required autocomplete="email"> <span class="error-sign"></span> </div> </div> <div class="form-group "> <label for="password" class="control-label">Password</label> <label for="inputPassword" class="control-label pull-right errors"> </label> <span class="help-block control-label with-errors pull-right" style="margin-top: 14px"></span> <div class="input-block"> <input type="password" class="form-control" name="password" placeholder="Your password" required autocomplete="current-password" maxlength="128"> <span class="error-sign"></span> <span class="control-label pull-right !text-normal !leading-normal !font-normal !mt-1.5"><a href="https://hackmd.io/settings/forgotPassword" style="text-decoration: underline;">Forgot password</a></span> </div> </div> <div style="text-align: center; padding-top: 15px; margin-bottom: 0px;"> <div hidden id="hmd-captcha" data-provider="" data-captcha-data="" class="flex justify-center" ></div> <input type="submit" class="neo-btn neo-btn-primary !justify-center !py-3.5 !mx-auto" formaction="https://hackmd.io/login" value="Sign in"> </div> </form> <p class="separator">or</p> <p>By clicking below, you agree to our <a href="https://hackmd.io/s/terms" target="_blank">terms of service</a>.</p> <script id="gsi-client" src="https://accounts.google.com/gsi/client" async defer nonce="c7e6c3c9-4d33-48ea-811f-258ae263bb88"></script> <script nonce="c7e6c3c9-4d33-48ea-811f-258ae263bb88"> function handleCredentialResponse(response) { const form = document.getElementById('sign-in-with-google-form') form.children.credential.value = response.credential form.children.method.value = location.href.toLowerCase() === 'https://hackmd.io/settings#general' ? 'merge' : 'login' form.submit() } var GSI_READY = new Promise(function (resolve) { function initialize () { google.accounts.id.initialize({ client_id: '911617723593-drikdibvvn63slfd6kbqigo8ql1no55s.apps.googleusercontent.com', callback: handleCredentialResponse }) const loginPath = '/login' const joinPath = '/join' const renderButton = function () { google.accounts.id.renderButton( document.getElementById('sign-in-with-google-button'), { type: 'standard', width: 250 } ) } if (location.pathname.toLowerCase() === loginPath || location.pathname.toLowerCase() === joinPath) { renderButton() } else { $('.signin-modal').one('shown.bs.modal', function () { renderButton() }) } resolve() } window.addEventListener('load', function () { initialize() }) }) </script> <form class="hidden" id="sign-in-with-google-form" action="/auth/google" method="post"> <input type="hidden" name="credential"> <input type="hidden" name="method"> </form> <div class="social-buttons-container"> <div id="sign-in-with-google-button"></div> <a href="https://hackmd.io/auth/facebook" class="btn btn-lg btn-block btn-social btn-facebook"> <i class="fa fa-facebook"></i> Sign in via Facebook </a> <a href="https://hackmd.io/auth/twitter" class="btn btn-lg btn-block btn-social btn-twitter"> <i class="fa fa-twitter"></i> Sign in via Twitter </a> <a href="https://hackmd.io/auth/github" class="btn btn-lg btn-block btn-social btn-github"> <i class="fa fa-github"></i> Sign in via GitHub </a> <a href="https://hackmd.io/auth/dropbox" class="btn btn-lg btn-block btn-social btn-dropbox"> <i class="fa fa-dropbox"></i> Sign in via Dropbox </a> <a href="#" class="bg-white btn btn-block btn-social btn-web3 bg-gray-800 hocus:bg-[#2b2b2b] text-white hocus:text-white"> <img src="https://hackmd.io/images/wallet.svg" style="max-height: 20px; margin-top: 8px; margin-left: 6px; border: none;"> <span class="sign-in-wallet-text"> Sign in with Wallet </span> <div class="inline-flex items-center justify-between w-full hidden web3-wallet-info"> <span> Wallet ( <span class="web3-wallet-address"></span> ) </span> <i class="fa fa-arrow-right" aria-hidden="true"></i> </div> </a> <small class="web3-wallet-info hidden text-left hocus:text-white underline hocus:underline block pt-2 ui-disconnect-connected-wallets text-gray-600 cursor-pointer"> Connect another wallet </small> </div> <div > <p>New to HackMD? <a href="https://hackmd.io/join" class="plausible-event-name=LoginModalSignUp">Sign up</a></p> </div> </div> </div> </div> <script src="https://www.googletagmanager.com/gtag/js?id=G-NGVZMM6DR6"></script> <script nonce="c7e6c3c9-4d33-48ea-811f-258ae263bb88"> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); let userid = (document.cookie.match('(^|; )userid=([^;]*)')||0)[2]; gtag('config', 'G-NGVZMM6DR6', {'user_id': userid}); </script> <script src="https://browser.sentry-cdn.com/5.15.5/bundle.min.js" crossorigin="anonymous"></script> <script nonce="c7e6c3c9-4d33-48ea-811f-258ae263bb88">Sentry.init({ dsn: 'https://73410f1915d84abc8b2dd1f1aabd1c82@sentry.hackmd.dev/4', environment: 'production', integrations: function (intrus) { return intrus.filter(function (itr) { return itr.name !== 'TryCatch' }) } });</script> <!-- Google Tag Manager (noscript) --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-KLW9Z3" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <!-- End Google Tag Manager (noscript) --> <script src="https://hackmd.io/api/i18n.js"></script> <script src="https://assets.hackmd.io/build/font-vendor.eaa8dd82d4e056021b8c.js" defer="defer"></script><script src="https://assets.hackmd.io/build/common-vendor.04da453a2a68f624f4d4.js" defer="defer"></script><script src="https://assets.hackmd.io/build/pretty-vendor.94ca39727118897623cd.js" defer="defer"></script><script src="https://assets.hackmd.io/build/pretty-common.e537850a918313f6b528.js" defer="defer"></script><script src="https://assets.hackmd.io/build/pretty.70c94f344b87c9d26c0d.js" defer="defer"></script> </body> </html>